commit 2c85b7280bed5bc388e5a53206ae13fae7d94778 Author: lanaibnufauzi Date: Thu Jun 20 15:08:24 2024 +0700 p diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8f0de65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..478972c --- /dev/null +++ b/.env.example @@ -0,0 +1,58 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailpit +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7dbbf41 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto + +*.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..f0d10af --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +/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/README.md b/README.md new file mode 100644 index 0000000..3ed385a --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +

Laravel Logo

+ +

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

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Console/Commands/CheckPendingPeminjaman.php b/app/Console/Commands/CheckPendingPeminjaman.php new file mode 100644 index 0000000..d5809de --- /dev/null +++ b/app/Console/Commands/CheckPendingPeminjaman.php @@ -0,0 +1,32 @@ +where('confirmation_deadline', '<', Carbon::now()) + ->get(); + foreach ($pendingPeminjaman as $peminjaman) { + $peminjaman->status = 'Gagal'; + $peminjaman->save(); + } + + $this->info('Pending peminjaman checked successfully.'); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..3ec7631 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,33 @@ +command('check:pending-peminjaman')->everyMinute(); + } + + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__ . '/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..82a37e4 --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,50 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/AnggotaController.php b/app/Http/Controllers/AnggotaController.php new file mode 100644 index 0000000..a38f8ac --- /dev/null +++ b/app/Http/Controllers/AnggotaController.php @@ -0,0 +1,166 @@ +get(); + return view('admin.pages.pengguna',[ + 'anggota' => $anggota + ]); + + + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create(Request $request, $id = null) + { + $request->validate([ + 'nama' => 'required|string', + // 'status' => 'required', + 'email' => 'required', + 'alamat' => 'required', + 'telpon' => 'required', + // 'tempat_lahir' => 'required', + // 'tanggal_lahir' => 'required', + ], [ + 'nama.required' => 'Nama tidak boleh kosong', + 'nama.string' => 'Nama harus berupa huruf', + 'email.required' => 'Status tidak boleh kosong', + // 'status.required' => 'Status tidak boleh kosong', + 'alamat.required' => 'Alamat tidak boleh kosong', + 'telpon.required' => 'Nomor telepon tidak boleh kosong', + // 'tempat_lahir.required' => 'Tempat lahir tidak boleh kosong', + // 'tanggal_lahir.required' => 'Tanggal lahir tidak boleh kosong', + ]); + + if ($id) { + $anggota = Anggota::find($id); + if (!$anggota) { + return redirect('/anggota')->with('error', 'Buku tidak ditemukan'); + } + } else { + + $anggota = new Anggota(); + } + $anggota->nama = $request->nama; + $anggota->email = $request->status; + // $anggota->status = $request->status; + $anggota->alamat = $request->alamat; + $anggota->telpon = $request->telpon; + // $anggota->tempat_lahir = $request->tempat_lahir; + // $anggota->tanggal_lahir = $request->tanggal_lahir; + + $anggota->save(); + + + return redirect('/pengguna')->with('success', 'Pengguna berhasil ditambahkan'); + } + + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit(Request $request, $id) + { + $request->validate([ + 'nama' => 'required', + // 'status' => 'required', + 'email' => 'required', + 'alamat' => 'required', + 'telpon' => 'required', + // 'tempat_lahir' => 'required', + // 'tanggal_lahir' => 'required', + ],[ + 'nama.required' => 'Nama tidak boleh kosong', + // 'status.required' => 'Status tidak boleh kosong', + 'email.required' => 'Email tidak boleh kosong', + 'alamat.required' => 'Alamat tidak boleh kosong', + 'telpon.required' => 'Nomor telepon tidak boleh kosong', + // 'tempat_lahir.required' => 'Tempat lahir tidak boleh kosong', + // 'tanggal_lahir.required' => 'Tanggal lahir tidak boleh kosong', + ]); + + $anggota = Anggota::find($id); + $anggota->nama = $request->nama; + $anggota->email = $request->name; + // $anggota->status = $request->status; + $anggota->alamat = $request->alamat; + $anggota->telpon = $request->telpon; + // $anggota->tempat_lahir = $request->tempat_lahir; + // $anggota->tanggal_lahir = $request->tanggal_lahir; + + $anggota->save(); + + return redirect('/pengguna')->with('success', 'Pengguna berhasil diperbarui'); + } + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + { + Anggota::find($id)->delete(); + + return redirect('/pengguna')->with('success', 'Pengguna berhasil dihapus'); + } + } +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..3376670 --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,15 @@ +with('logout', 'Logout Berhasil'); + } +} diff --git a/app/Http/Controllers/BayarDendaController.php b/app/Http/Controllers/BayarDendaController.php new file mode 100644 index 0000000..3c15cf5 --- /dev/null +++ b/app/Http/Controllers/BayarDendaController.php @@ -0,0 +1,349 @@ +status_pembayaran == 'paid') { + + $tanggal_kembali_real = strtotime($pinjaman->tgl_kembali_real); + $tanggal_kembali = strtotime($pinjaman->tgl_kembali); + $tanggal_sekarang = strtotime(date('Y-m-d')); + $telat = ($tanggal_sekarang - $tanggal_kembali) / (60 * 60 * 24); + $telat_kembali = ($tanggal_kembali_real - $tanggal_kembali) / (60 * 60 * 24); + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + if ($telat_kembali < 0) { + $telat = 0; + } else { + $telat = $telat_kembali; + } + // jika telat sama dengan 0 dan kurang dari 0 dan statusnya pinjam maka akan di tampilkan 0 + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $telat = 0; + } else { + $telat; + } + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + $denda_telat = 0; + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $denda_telat = 0; + } else { + $jumlah_hari_telat = $telat; + $jumlah_buku_yang_di_pinjam = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->count(); + $denda = \App\Models\KategoriDenda::where('nama_kategori', 'Telat')->first()->harga_kategori; + + $denda_telat = $jumlah_hari_telat * $jumlah_buku_yang_di_pinjam * $denda; + } + + $buku_rusak = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Rusak')->count(); + $buku_hilang = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Hilang')->count(); + + $denda_rusak = \App\Models\KategoriDenda::where('nama_kategori', 'Rusak')->first()->harga_kategori; + $denda_hilang = \App\Models\KategoriDenda::where('nama_kategori', 'Hilang')->first()->harga_kategori; + + $total_denda_rusak = $buku_rusak * $denda_rusak; + $total_denda_hilang = $buku_hilang * $denda_hilang; + + if ($denda_telat == 0) { + $total_denda = $total_denda_rusak + $total_denda_hilang; + } else { + $total_denda = $denda_telat + $total_denda_rusak + $total_denda_hilang; + } + + return view('admin.pages.bayardenda', [ + 'total_denda' => $total_denda, + 'transaksi' => $pinjaman, + 'snapToken' => '' + ]); + } elseif ($pinjaman->bank != null && $pinjaman->no_va != null && $pinjaman->status_pembayaran == 'pending') { + + + $tanggal_kembali_real = strtotime($pinjaman->tgl_kembali_real); + $tanggal_kembali = strtotime($pinjaman->tgl_kembali); + $tanggal_sekarang = strtotime(date('Y-m-d')); + $telat = ($tanggal_sekarang - $tanggal_kembali) / (60 * 60 * 24); + $telat_kembali = ($tanggal_kembali_real - $tanggal_kembali) / (60 * 60 * 24); + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + if ($telat_kembali < 0) { + $telat = 0; + } else { + $telat = $telat_kembali; + } + // jika telat sama dengan 0 dan kurang dari 0 dan statusnya pinjam maka akan di tampilkan 0 + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $telat = 0; + } else { + $telat; + } + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + $denda_telat = 0; + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $denda_telat = 0; + } else { + $jumlah_hari_telat = $telat; + $jumlah_buku_yang_di_pinjam = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->count(); + $denda = \App\Models\KategoriDenda::where('nama_kategori', 'Telat')->first()->harga_kategori; + + $denda_telat = $jumlah_hari_telat * $jumlah_buku_yang_di_pinjam * $denda; + } + + $buku_rusak = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Rusak')->count(); + $buku_hilang = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Hilang')->count(); + + $denda_rusak = \App\Models\KategoriDenda::where('nama_kategori', 'Rusak')->first()->harga_kategori; + $denda_hilang = \App\Models\KategoriDenda::where('nama_kategori', 'Hilang')->first()->harga_kategori; + + $total_denda_rusak = $buku_rusak * $denda_rusak; + $total_denda_hilang = $buku_hilang * $denda_hilang; + + if ($denda_telat == 0) { + $total_denda = $total_denda_rusak + $total_denda_hilang; + } else { + $total_denda = $denda_telat + $total_denda_rusak + $total_denda_hilang; + } + + return view('admin.pages.bayardenda', [ + 'total_denda' => $total_denda, + 'transaksi' => $pinjaman, + 'snapToken' => '' + ]); + } elseif ($pinjaman->status_pembayaran == 'expired') { + $no_transaksi = $pinjaman->id . time(); + $pinjaman->no_transaksi = $no_transaksi; + $pinjaman->status_pembayaran = 'Belum Pilih Pembayaran'; + $pinjaman->save(); + + $user = Anggota::find($pinjaman->id_anggota); + $data_user = User::find($user->users_id); + + + $tanggal_kembali_real = strtotime($pinjaman->tgl_kembali_real); + $tanggal_kembali = strtotime($pinjaman->tgl_kembali); + $tanggal_sekarang = strtotime(date('Y-m-d')); + $telat = ($tanggal_sekarang - $tanggal_kembali) / (60 * 60 * 24); + $telat_kembali = ($tanggal_kembali_real - $tanggal_kembali) / (60 * 60 * 24); + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + if ($telat_kembali < 0) { + $telat = 0; + } else { + $telat = $telat_kembali; + } + // jika telat sama dengan 0 dan kurang dari 0 dan statusnya pinjam maka akan di tampilkan 0 + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $telat = 0; + } else { + $telat; + } + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + $denda_telat = 0; + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $denda_telat = 0; + } else { + $jumlah_hari_telat = $telat; + $jumlah_buku_yang_di_pinjam = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->count(); + $denda = \App\Models\KategoriDenda::where('nama_kategori', 'Telat')->first()->harga_kategori; + + $denda_telat = $jumlah_hari_telat * $jumlah_buku_yang_di_pinjam * $denda; + } + + $buku_rusak = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Rusak')->count(); + $buku_hilang = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Hilang')->count(); + + $denda_rusak = \App\Models\KategoriDenda::where('nama_kategori', 'Rusak')->first()->harga_kategori; + $denda_hilang = \App\Models\KategoriDenda::where('nama_kategori', 'Hilang')->first()->harga_kategori; + + $total_denda_rusak = $buku_rusak * $denda_rusak; + $total_denda_hilang = $buku_hilang * $denda_hilang; + + if ($denda_telat == 0) { + $total_denda = $total_denda_rusak + $total_denda_hilang; + } else { + $total_denda = $denda_telat + $total_denda_rusak + $total_denda_hilang; + } + + \Midtrans\Config::$serverKey = config('midtrans.server_key'); + // Set to Development/Sandbox Environment (default). Set to true for Production Environment (accept real transaction). + \Midtrans\Config::$isProduction = false; + + // \Midtrans\Config::$isProduction = true; + // Set sanitization on (default) + \Midtrans\Config::$isSanitized = true; + // Set 3DS transaction for credit card to true + \Midtrans\Config::$is3ds = true; + + $params = array( + 'transaction_details' => array( + 'order_id' => $no_transaksi, + 'gross_amount' => $total_denda, + ), + 'customer_details' => array( + 'first_name' => $data_user->name, + 'phone' => $data_user->no_handphone, + 'email' => $data_user->email, + ), + 'item_details' => array( + array( + 'id' => $no_transaksi, + 'price' => $total_denda, + 'quantity' => 1, + 'name' => 'Denda', + ), + ), + ); + + $snapToken = \Midtrans\Snap::getSnapToken($params); + + return view('admin.pages.bayardenda', [ + 'transaksi' => $pinjaman, + 'total_denda' => $total_denda, + 'snapToken' => $snapToken + ]); + } else { + + $no_transaksi = $no_transaksi = $pinjaman->id . time(); + $pinjaman->no_transaksi = $no_transaksi; + $pinjaman->status_pembayaran = 'Belum Pilih Pembayaran'; + $pinjaman->save(); + + $user = Anggota::find($pinjaman->id_anggota); + $data_user = User::find($user->users_id); + + $tanggal_kembali_real = strtotime($pinjaman->tgl_kembali_real); + $tanggal_kembali = strtotime($pinjaman->tgl_kembali); + $tanggal_sekarang = strtotime(date('Y-m-d')); + $telat = ($tanggal_sekarang - $tanggal_kembali) / (60 * 60 * 24); + $telat_kembali = ($tanggal_kembali_real - $tanggal_kembali) / (60 * 60 * 24); + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + if ($telat_kembali < 0) { + $telat = 0; + } else { + $telat = $telat_kembali; + } + // jika telat sama dengan 0 dan kurang dari 0 dan statusnya pinjam maka akan di tampilkan 0 + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $telat = 0; + } else { + $telat; + } + + if ($pinjaman->status == 'Kembali' || $pinjaman->status == 'Pending' || $pinjaman->status == 'Gagal') { + $denda_telat = 0; + } elseif ($telat < 0 && $pinjaman->status == 'Pinjam') { + $denda_telat = 0; + } else { + $jumlah_hari_telat = $telat; + $jumlah_buku_yang_di_pinjam = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->count(); + $denda = \App\Models\KategoriDenda::where('nama_kategori', 'Telat')->first()->harga_kategori; + + $denda_telat = $jumlah_hari_telat * $jumlah_buku_yang_di_pinjam * $denda; + } + + $buku_rusak = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Rusak')->count(); + $buku_hilang = \App\Models\DetailPinjaman::where('pinjaman_id', $pinjaman->id)->where('kondisi_buku', 'Hilang')->count(); + + $denda_rusak = \App\Models\KategoriDenda::where('nama_kategori', 'Rusak')->first()->harga_kategori; + $denda_hilang = \App\Models\KategoriDenda::where('nama_kategori', 'Hilang')->first()->harga_kategori; + + $total_denda_rusak = $buku_rusak * $denda_rusak; + $total_denda_hilang = $buku_hilang * $denda_hilang; + + if ($denda_telat == 0) { + $total_denda = $total_denda_rusak + $total_denda_hilang; + } else { + $total_denda = $denda_telat + $total_denda_rusak + $total_denda_hilang; + } + + if ($total_denda == 0) { + return redirect()->back()->with('tidakdenda', 'Tidak ada denda yang harus dibayar'); + } + + \Midtrans\Config::$serverKey = config('midtrans.server_key'); + // Set to Development/Sandbox Environment (default). Set to true for Production Environment (accept real transaction). + \Midtrans\Config::$isProduction = false; + + // \Midtrans\Config::$isProduction = true; + // Set sanitization on (default) + \Midtrans\Config::$isSanitized = true; + // Set 3DS transaction for credit card to true + \Midtrans\Config::$is3ds = true; + + $params = array( + 'transaction_details' => array( + 'order_id' => $no_transaksi, + 'gross_amount' => $total_denda, + ), + 'customer_details' => array( + 'first_name' => $data_user->name, + 'phone' => $data_user->no_handphone, + 'email' => $data_user->email, + ), + 'item_details' => array( + array( + 'id' => $no_transaksi, + 'price' => $total_denda, + 'quantity' => 1, + 'name' => 'Denda', + ), + ), + ); + + $snapToken = \Midtrans\Snap::getSnapToken($params); + + return view('admin.pages.bayardenda', [ + 'transaksi' => $pinjaman, + 'total_denda' => $total_denda, + 'snapToken' => $snapToken + ]); + } + } + + public function callback(Request $request) + { + $serverkey = 'SB-Mid-server-aNyMN6S4_am_yDaJ6fpdfrxc'; + $hashed = hash('sha512', $request->order_id . $request->status_code . $request->gross_amount . $serverkey); + + if ($hashed == $request->signature_key) { + if ($request->transaction_status == 'settlement') { + $order = Pinjaman::where('no_transaksi', $request->order_id)->first(); + $order->bank = $request->va_numbers[0]['bank']; + $order->no_va = $request->va_numbers[0]['va_number']; + $order->expired_date = $request->expiry_time; + $order->status_pembayaran = 'paid'; + $order->save(); + } elseif ($request->transaction_status == 'pending') { + + $order = Pinjaman::where('no_transaksi', $request->order_id)->first(); + $order->bank = $request->va_numbers[0]['bank']; + $order->no_va = $request->va_numbers[0]['va_number']; + $order->expired_date = $request->expiry_time; + $order->status_pembayaran = 'pending'; + $order->save(); + } else { + $order = Pinjaman::where('no_transaksi', $request->order_id)->first(); + $order->bank = $request->va_numbers[0]['bank']; + $order->no_va = $request->va_numbers[0]['va_number']; + $order->expired_date = $request->expiry_time; + $order->status_pembayaran = 'expire'; + $order->save(); + } + } + } +} diff --git a/app/Http/Controllers/BukuController.php b/app/Http/Controllers/BukuController.php new file mode 100644 index 0000000..f5904d0 --- /dev/null +++ b/app/Http/Controllers/BukuController.php @@ -0,0 +1,217 @@ +orderBy('id', 'desc')->get(); + return view('admin.pages.buku', [ + 'databuku' => $databuku, + 'kategori' => $kategori, + ]); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + // public function create(Request $request) + + public function create(Request $request) + { + // dd($request->all()); + + $request->validate([ + 'isbn' => 'required', + 'judul_buku' => 'required', + 'jumlah_halaman' => 'required', + 'stok' => 'required', + 'deskripsi' => 'required', + 'tema' => 'required', + 'penerbit' => 'required', + 'tgl_terbit' => 'required', + 'cover_buku' => 'image|mimes:jpeg,png,jpg,gif,svg', + ], [ + 'isbn.required' => 'ISBN tidak boleh kosong', + 'judul_buku.required' => 'Judul Buku tidak boleh kosong', + 'jumlah_halaman.required' => 'Jumlah Halaman tidak boleh kosong', + 'stok.required' => 'Stok tidak boleh kosong', + 'deskripsi.required' => 'Deskripsi tidak boleh kosong', + 'tema.required' => 'Tema tidak boleh kosong', + 'penerbit.required' => 'Penerbit tidak boleh kosong', + 'tgl_terbit.required' => 'Tanggal Terbit tidak boleh kosong', + 'cover_buku.image' => 'Cover Buku harus berupa gambar', + 'cover_buku.mimes' => 'Cover Buku harus berupa gambar', + ]); + + $buku = new Buku(); + $buku->isbn = $request->isbn; + $buku->judul_buku = $request->judul_buku; + $buku->jumlah_halaman = $request->jumlah_halaman; + $buku->stok = $request->stok; + $buku->deskripsi = $request->deskripsi; + $buku->tema = $request->tema; + $buku->penerbit = $request->penerbit; + $buku->tgl_terbit = $request->tgl_terbit; + $buku->kategori_id = $request->kategori_id; + + if ($request->hasFile('cover_buku')) { + $coverFile = $request->file('cover_buku'); + $coverFileName = time() . '_' . $coverFile->getClientOriginalName(); + $coverFile->move('public/cover', $coverFileName); + $buku->cover_buku = $coverFileName; + } + + $buku->save(); + return redirect('buku')->with('store', 'Buku berhasil ditambahkan'); + } + + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit(Request $request, $id) + { + + // dd($request->all()); + + $request->validate([ + 'isbn' => 'required', + 'judul_buku' => 'required', + 'jumlah_halaman' => 'required', + 'stok' => 'required', + 'deskripsi' => 'required', + 'tema' => 'required', + 'penerbit' => 'required', + 'tgl_terbit' => 'required', + 'cover_buku' => 'image|mimes:jpeg,png,jpg,gif,svg', + ], [ + 'isbn.required' => 'ISBN tidak boleh kosong', + 'judul_buku.required' => 'Judul Buku tidak boleh kosong', + 'jumlah_halaman.required' => 'Jumlah Halaman tidak boleh kosong', + 'stok.required' => 'Stok tidak boleh kosong', + 'deskripsi.required' => 'Deskripsi tidak boleh kosong', + 'tema.required' => 'Tema tidak boleh kosong', + 'penerbit.required' => 'Penerbit tidak boleh kosong', + 'tgl_terbit.required' => 'Tanggal Terbit tidak boleh kosong', + 'status.required' => 'Status tidak boleh kosong', + 'cover_buku.image' => 'Cover Buku harus berupa gambar', + 'cover_buku.mimes' => 'Cover Buku harus berupa gambar', + 'cover_buku.max' => 'Cover Buku maksimal 2MB', + + ]); + + + + $buku = Buku::find($id); + + if ($request->hasFile('cover_buku')) { + + if ($buku->cover_buku) { + unlink('public/cover/' . $buku->cover_buku); + } + + $coverFile = $request->file('cover_buku'); + $coverFileName = time() . '_' . $coverFile->getClientOriginalName(); + $coverFile->move('public/cover', $coverFileName); + } + + + $buku->isbn = $request->isbn; + $buku->judul_buku = $request->judul_buku; + $buku->jumlah_halaman = $request->jumlah_halaman; + $buku->stok = $request->stok; + $buku->deskripsi = $request->deskripsi; + $buku->tema = $request->tema; + $buku->penerbit = $request->penerbit; + $buku->tgl_terbit = $request->tgl_terbit; + $buku->kategori_id = $request->kategori_id; + if ($request->hasFile('cover_buku')) { + $buku->cover_buku = $coverFileName; + } + $buku->save(); + + return redirect('/buku')->with('update', 'Buku berhasil diperbarui'); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $buku = Buku::find($id); + + + // hapus cover + if ($buku->cover_buku) { + unlink('public/cover/' . $buku->cover_buku); + } + + $cek_buku_detail = DetailPinjaman::where('buku_id', $id)->count(); + if ($cek_buku_detail > 0) { + return redirect('/buku')->with('error', 'Buku tidak bisa dihapus karena sedang dipinjam'); + } + + if ($buku) { + $buku->delete(); + return redirect('/buku')->with('destroy', 'Buku berhasil dihapus'); + } else { + return redirect('/buku')->with('error', 'Buku tidak ditemukan'); + } + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +count(); + $total_peminjaman = Pinjaman::where('status', 'Pinjam')->count(); + + // Ambil data pinjaman per hari dari database + $chart_pinjaman_per_hari = DB::table('pinjaman') + ->selectRaw('DATE(created_at) as date, count(*) as total') + ->where('status', 'Pinjam') + ->groupByRaw('DATE(created_at)') + ->get(); + + // dd($chart_pinjaman_per_hari); + + // Inisialisasi array untuk menyimpan data pinjaman per hari + $daysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; + $pinjamanPerHari = array_fill_keys($daysOfWeek, 0); + + // Isi array dengan data dari database + foreach ($chart_pinjaman_per_hari as $data) { + $dayName = date('l', strtotime($data->date)); // Ambil nama hari dalam bahasa Inggris + $pinjamanPerHari[$dayName] = $data->total; + } + + // Urutkan array sesuai dengan urutan hari + $pinjamanPerHariOrdered = []; + foreach ($daysOfWeek as $day) { + $pinjamanPerHariOrdered[] = $pinjamanPerHari[$day]; + } + + // dd($pinjamanPerHariOrdered, $daysOfWeek); + + + return view('admin.pages.dashboard', [ + 'jumlah_kategori' => $jumlah_kategori, + 'jumlah_buku' => $jumlah_buku, + 'jumlah_user' => $jumlah_user, + 'total_peminjaman' => $total_peminjaman, + 'pinjamanPerHariOrdered' => $pinjamanPerHariOrdered, + 'daysOfWeek' => $daysOfWeek, + ]); + } +} diff --git a/app/Http/Controllers/KategoriController.php b/app/Http/Controllers/KategoriController.php new file mode 100644 index 0000000..61dbb7c --- /dev/null +++ b/app/Http/Controllers/KategoriController.php @@ -0,0 +1,117 @@ +validate([ + 'nama_kategori' => 'required', + ], [ + 'nama_kategori.required' => 'Nama tidak boleh kosong', + ]); + + $kategori = new Kategori(); + $kategori->nama_kategori = $request->nama_kategori; + $kategori->save(); + + + return redirect('/kategori')->with('store', 'Kategori berhasil ditambahkan'); + } + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit(Request $request, $id) +{ + $request->validate([ + 'nama_kategori' => 'required', + ], [ + 'nama_kategori.required' => 'Nama tidak boleh kosong', + ]); + + $kategori = Kategori::find($id); // Menemukan kategori berdasarkan ID yang diberikan + + if (!$kategori) { + return redirect('/kategori')->with('error', 'Kategori tidak ditemukan'); + } + + $kategori->nama_kategori = $request->nama_kategori; // Memperbarui nama kategori + + $kategori->save(); // Menyimpan perubahan + + return redirect('/kategori')->with('update', 'Kategori berhasil diperbarui'); +} + + + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + Kategori::find($id)->delete(); + + return redirect('/kategori')->with('destroy', 'Kategori berhasil dihapus'); + } +} diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php new file mode 100644 index 0000000..07f21bb --- /dev/null +++ b/app/Http/Controllers/LoginController.php @@ -0,0 +1,48 @@ +validate([ + 'email' => 'required|email', + 'password' => 'required' + ], [ + 'email.required' => 'Email tidak boleh kosong', + 'email.email' => 'Email tidak valid', + 'password.required' => 'Password tidak boleh kosong' + ]); + + $iv = '1234567890123456'; + $key = '1234567890123456'; + + $email_encypt = openssl_encrypt($request->email, 'AES-128-CBC', $key, 0, $iv); + + $credentials = [ + 'email' => $email_encypt, + 'password' => $request->password + ]; + + + if (Auth::attempt($credentials)) { + $request->session()->regenerate(); + return redirect()->intended('dashboard')->with('login', 'Login Berhasil'); + } + + + return redirect('login')->with('error', 'Login Gagal, Silahkan cek email dan password anda'); + } +} diff --git a/app/Http/Controllers/PeminjamanController.php b/app/Http/Controllers/PeminjamanController.php new file mode 100644 index 0000000..f47fc62 --- /dev/null +++ b/app/Http/Controllers/PeminjamanController.php @@ -0,0 +1,97 @@ +join('anggota', 'pinjaman.id_anggota', '=', 'anggota.id') + ->join('users', 'anggota.users_id', '=', 'users.id') + ->select('pinjaman.id as id', 'pinjaman.status as status', 'users.name as name', 'pinjaman.tgl_pinjam as tgl_pinjam', 'pinjaman.tgl_kembali as tgl_kembali', 'pinjaman.tgl_kembali_real as tgl_kembali_real') + ->orderBy('pinjaman.id', 'desc') + ->get(); + + $cek = Pinjaman::where('status', 'Pending') + ->where('confirmation_deadline', '<', Carbon::now()) + ->get(); + + foreach ($cek as $cek_status) { + $cek_status->status = 'Gagal'; + $cek_status->save(); + } + + return view('admin.pages.peminjaman', [ + 'pinjaman' => $pinjaman + ]); + } + + public function editstatus(Request $request, $id) + { + $pinjaman = Pinjaman::find($id); + $pinjaman->status = $request->status; + if ($request->status == 'Kembali') { + $pinjaman->tgl_kembali_real = Carbon::now(); + } + $pinjaman->save(); + + if ($request->status == 'Kembali') { + $detailbuku = DetailPinjaman::where('pinjaman_id', $id)->get(); + foreach ($detailbuku as $detail) { + $detail->buku->save(); + } + } elseif ($request->status == 'Pinjam') { + if (Carbon::now()->lt($pinjaman->confirmation_deadline)) { + $pinjaman->status = 'Pinjam'; + $pinjaman->save(); + } + } + + return redirect()->back()->with('ubahstatus', 'Status peminjaman berhasil diubah'); + } + + public function kembalikan_buku(Request $request) + { + $id_peminjaman = Crypt::decryptString($request->peminjaman_id); + $datapeminjaman = Pinjaman::find($id_peminjaman); + + if ($datapeminjaman->status == 'Pinjam') { + $datapeminjaman->status = 'Kembali'; + $datapeminjaman->tgl_kembali_real = Carbon::now(); + $datapeminjaman->save(); + return response()->json([ + 'success' => 'berhasil-kembali', + 'message' => 'Pengembalian Buku Berhasil' + ]); + } elseif ($datapeminjaman->status == 'Pending') { + $datapeminjaman->status = 'Pinjam'; + $datapeminjaman->save(); + return response()->json([ + 'success' => 'berhasil-pinjam', + 'message' => 'Peminjaman Buku Berhasil' + ]); + } else { + return response()->json([ + 'success' => 'gagal', + 'message' => 'tidak valid' + ]); + } + } + + public function kondisibuku(Request $request, $id) + { + $detailbuku = DetailPinjaman::where('id', $id)->first(); + $detailbuku->kondisi_buku = $request->kondisi_buku; + $detailbuku->save(); + + return redirect()->back()->with('kondisibuku', 'Kondisi buku berhasil diubah'); + } +} diff --git a/app/Http/Controllers/RegisterController.php b/app/Http/Controllers/RegisterController.php new file mode 100644 index 0000000..5bb2086 --- /dev/null +++ b/app/Http/Controllers/RegisterController.php @@ -0,0 +1,118 @@ +validate([ + 'name' => 'required', + 'email' => 'required|email|unique:users,email', + 'alamat' => 'required', + 'password' => 'required|min:6', + 'no_handpone' => 'required', + ], [ + 'name.required' => 'Nama tidak boleh kosong', + 'email.required' => 'Email tidak boleh kosong', + 'email.email' => 'Email tidak valid', + 'email.unique' => 'Email sudah terdaftar', + 'alamat.required' => 'Alamat tidak boleh kosong', + 'password.required' => 'Password tidak boleh kosong', + 'password.min' => 'Password minimal 6 karakter', + 'no_handpone.required' => 'No Handpone tidak boleh kosong', + + ]); + + $user = new User(); + $user->name = $request->name; + $user->email = $request->email; + $user->alamat = $request->alamat; + $user->password = Hash::make($request->password); + $user->no_handpone = $request->no_handpone; + $user->save(); + + $anggota = new Anggota(); + $anggota->users_id = $user->id; + $anggota->save(); + + return redirect('/login')->with('register', 'Register Berhasil, Silahkan Login'); + } + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php new file mode 100644 index 0000000..6254af6 --- /dev/null +++ b/app/Http/Controllers/ReportController.php @@ -0,0 +1,77 @@ +join('anggota', 'pinjaman.id_anggota', '=', 'anggota.id') + ->join('users', 'anggota.users_id', '=', 'users.id') + ->select('pinjaman.id as id', 'pinjaman.status as status', 'users.name as name', 'pinjaman.tgl_pinjam as tgl_pinjam', 'pinjaman.tgl_kembali as tgl_kembali') + ->get(); + + $cek = Pinjaman::where('status', 'Pending') + ->where('confirmation_deadline', '<', Carbon::now()) + ->get(); + + foreach ($cek as $cek_status) { + $cek_status->status = 'Gagal'; + $cek_status->save(); + } + + return view('admin.pages.report', [ + 'pinjaman' => $pinjaman + ]); + } + + public function report(Request $request) + { + $status = $request->status; + $date1 = $request->date1; + $date2 = $request->date2; + + if ($status == '0') { + $pinjaman = DB::table('pinjaman') + ->join('anggota', 'pinjaman.id_anggota', '=', 'anggota.id') + ->join('users', 'anggota.users_id', '=', 'users.id') + ->select('pinjaman.id as id', 'pinjaman.status as status', 'users.name as name', 'pinjaman.tgl_pinjam as tgl_pinjam', 'pinjaman.tgl_kembali as tgl_kembali') + ->whereBetween('tgl_pinjam', [$date1, $date2]) + ->get(); + } elseif ($date1 == null && $date2 == null) { + $pinjaman = DB::table('pinjaman') + ->join('anggota', 'pinjaman.id_anggota', '=', 'anggota.id') + ->join('users', 'anggota.users_id', '=', 'users.id') + ->select('pinjaman.id as id', 'pinjaman.status as status', 'users.name as name', 'pinjaman.tgl_pinjam as tgl_pinjam', 'pinjaman.tgl_kembali as tgl_kembali') + ->where('status', $status) + ->get(); + } else { + $pinjaman = DB::table('pinjaman') + ->join('anggota', 'pinjaman.id_anggota', '=', 'anggota.id') + ->join('users', 'anggota.users_id', '=', 'users.id') + ->select('pinjaman.id as id', 'pinjaman.status as status', 'users.name as name', 'pinjaman.tgl_pinjam as tgl_pinjam', 'pinjaman.tgl_kembali as tgl_kembali') + ->where('status', $status) + ->whereBetween('tgl_pinjam', [$date1, $date2]) + ->get(); + } + + $cek = Pinjaman::where('status', 'Pending') + ->where('confirmation_deadline', '<', Carbon::now()) + ->get(); + + foreach ($cek as $cek_status) { + $cek_status->status = 'Gagal'; + $cek_status->save(); + } + + return view('admin.pages.report', [ + 'pinjaman' => $pinjaman + ]); + } +} diff --git a/app/Http/Controllers/User/AccountController.php b/app/Http/Controllers/User/AccountController.php new file mode 100644 index 0000000..1910b3a --- /dev/null +++ b/app/Http/Controllers/User/AccountController.php @@ -0,0 +1,40 @@ +join('anggota', 'pinjaman.id_anggota', '=', 'anggota.id') + ->join('users', 'anggota.users_id', '=', 'users.id') + ->select('pinjaman.id as id', 'pinjaman.status as status', 'users.name as name', 'pinjaman.tgl_pinjam as tanggal_pinjam', 'pinjaman.tgl_kembali as tanggal_kembali', 'pinjaman.tgl_kembali_real as tgl_kembali_real') + ->where('users.id', Auth::user()->id) + ->orderBy('pinjaman.id', 'desc') + ->get(); + + $cek = Pinjaman::where('status', 'Pending') + ->where('confirmation_deadline', '<', Carbon::now()) + ->get(); + + foreach ($cek as $cek_status) { + $cek_status->status = 'Gagal'; + $cek_status->save(); + } + + return view('landing.pages.account3', [ + 'pinjaman' => $pinjaman, + 'kategori' => $kategori + ]); + } +} diff --git a/app/Http/Controllers/User/AuthController.php b/app/Http/Controllers/User/AuthController.php new file mode 100644 index 0000000..886e2df --- /dev/null +++ b/app/Http/Controllers/User/AuthController.php @@ -0,0 +1,330 @@ + $kategori + ] + ); + } + + public function indexRegister() + { + $kategori = Kategori::all(); + return view('landing.auth.register', [ + 'kategori' => $kategori + ]); + } + + public function postLogin(Request $request) + { + Session::flash('emailLogin', $request->email); + Session::flash('passwordLogin', $request->password); + + $request->validate([ + 'email' => 'required|email', + 'password' => 'required' + ], [ + 'email.required' => 'Email tidak boleh kosong', + 'email.email' => 'Email tidak valid', + 'password.required' => 'Password tidak boleh kosong' + ]); + + $iv = '1234567890123456'; + $key = '1234567890123456'; + + $email_encypt = openssl_encrypt($request->email, 'AES-128-CBC', $key, 0, $iv); + + $credentials = [ + 'email' => $email_encypt, + 'password' => $request->password + ]; + + if (auth()->attempt($credentials)) { + return redirect('/')->with('login', 'Selamat datang di dashboard'); + } else { + return redirect('/user/login')->with('logingagal', 'Email atau password salah'); + } + } + + public function postRegister(Request $request) + { + // Simpan data form di session untuk menampilkan kembali jika ada kesalahan + Session::flash('nisnRegister', $request->nisn); + Session::flash('nameRegister', $request->name); + Session::flash('emailRegister', $request->email); + Session::flash('no_handphoneRegister', $request->no_handphone); + Session::flash('alamatRegister', $request->alamat); + + $iv = '1234567890123456'; + $key = '1234567890123456'; + + $nisn_encrypt = openssl_encrypt($request->nisn, 'AES-128-CBC', $key, 0, $iv); + + + // Cek NISN sudah terdaftar atau belum + $nisn = User::where('nisn', $nisn_encrypt)->first(); + + + $email_encrypt = openssl_encrypt($request->email, 'AES-128-CBC', $key, 0, $iv); + + // Cek email sudah terdaftar atau belum + $email = User::where('email', $email_encrypt)->first(); + + + if ($nisn && $email) { + return redirect('/user/register')->with('nisnemail', 'NISN dan Email sudah terdaftar'); + } elseif ($nisn) { + return redirect('/user/register')->with('nisn', 'NISN sudah terdaftar'); + } elseif ($email) { + return redirect('/user/register')->with('email', 'Email sudah terdaftar'); + } + + + // Validasi form + $request->validate([ + 'nisn' => 'required|unique:users', + 'name' => 'required', + 'email' => 'required|email|unique:users', + 'no_handphone' => 'required', + 'alamat' => 'required', + 'password' => [ + 'required', + 'string', + 'min:8', + 'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#@$!%*?&])[A-Za-z\d#@$!%*?&]{8,}$/', + ], + 'repassword' => 'required|same:password' + ], [ + 'nisn.required' => 'NISN tidak boleh kosong', + 'nisn.unique' => 'NISN sudah terdaftar', + 'name.required' => 'Nama tidak boleh kosong', + 'email.required' => 'Email tidak boleh kosong', + 'email.email' => 'Email tidak valid', + 'email.unique' => 'Email sudah terdaftar', + 'no_handphone.required' => 'No handphone tidak boleh kosong', + 'alamat.required' => 'Alamat tidak boleh kosong', + 'password.required' => 'Password tidak boleh kosong', + 'password.min' => 'Password minimal 8 karakter', + 'password.regex' => 'Password harus mengandung huruf besar, huruf kecil, angka, dan simbol', + 'repassword.required' => 'Konfirmasi password tidak boleh kosong', + 'repassword.same' => 'Konfirmasi password tidak sama dengan password' + ]); + + // Email harus @gmail.com + $email = $request->email; + $email_explode = explode('@', $email); + if ($email_explode[1] != 'gmail.com') { + return redirect('/user/register')->with('harusgmail', 'Email harus menggunakan @gmail.com'); + } + + // Simpan user baru + $user = new User(); + $user->nisn = $request->nisn; + $user->name = $request->name; + $user->email = $request->email; + $user->no_handphone = $request->no_handphone; + $user->alamat = $request->alamat; + $user->password = bcrypt($request->password); + $user->id_role = '2'; + $user->save(); + + $new = new Anggota(); + $new->users_id = $user->id; + $new->save(); + + return redirect('/user/login')->with('register', 'Registrasi berhasil, silahkan login'); + } + + public function updateprofil(Request $request) + { + if ($request->password != null) { + $request->validate([ + 'nisn' => 'required|unique:users,nisn,' . auth()->user()->id, + 'name' => 'required', + 'email' => 'required|email|unique:users,email,' . auth()->user()->id, + 'no_handphone' => 'required', + 'alamat' => 'required', + 'password' => [ + 'required', + 'string', + 'min:8', + 'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#@$!%*?&])[A-Za-z\d#@$!%*?&]{8,}$/', + ], + 'repassword' => 'required|same:password' + ], [ + 'nisn.required' => 'NISN tidak boleh kosong', + 'nisn.unique' => 'NISN sudah terdaftar', + 'name.required' => 'Nama tidak boleh kosong', + 'email.required' => 'Email tidak boleh kosong', + 'email.email' => 'Email tidak valid', + 'email.unique' => 'Email sudah terdaftar', + 'no_handphone.required' => 'No handphone tidak boleh kosong', + 'alamat.required' => 'Alamat tidak boleh kosong', + 'password.required' => 'Password tidak boleh kosong', + 'password.min' => 'Password minimal 8 karakter', + 'password.regex' => 'Password harus mengandung huruf besar, huruf kecil, angka, dan simbol', + 'repassword.required' => 'Konfirmasi password tidak boleh kosong', + 'repassword.same' => 'Konfirmasi password tidak sama dengan password' + ]); + } else { + $request->validate([ + 'nisn' => 'required|unique:users,nisn,' . auth()->user()->id, + 'name' => 'required', + 'email' => 'required|email|unique:users,email,' . auth()->user()->id, + 'no_handphone' => 'required', + 'alamat' => 'required', + ], [ + 'nisn.required' => 'NISN tidak boleh kosong', + 'nisn.unique' => 'NISN sudah terdaftar', + 'name.required' => 'Nama tidak boleh kosong', + 'email.required' => 'Email tidak boleh kosong', + 'email.email' => 'Email tidak valid', + 'email.unique' => 'Email sudah terdaftar', + 'no_handphone.required' => 'No handphone tidak boleh kosong', + 'alamat.required' => 'Alamat tidak boleh kosong', + ]); + } + + $user = User::find(auth()->user()->id); + $user->nisn = $request->nisn; + $user->name = $request->name; + $user->email = $request->email; + $user->no_handphone = $request->no_handphone; + $user->alamat = $request->alamat; + if ($request->password != null) { + $user->password = bcrypt($request->password); + } + $user->save(); + return redirect('/user/account#account-detail')->with('updateprofil', 'Profil berhasil diupdate'); + return redirect('/')->with('linkkadaluarsa', 'Reset Password Gagal'); + } + + public function userLogout() + { + auth()->logout(); + return redirect('/')->with('logout', 'Anda telah logout'); + } + + public function linkresetpassword() + { + $kategori = kategori::all(); + return view('landing.auth.forgot-password', [ + 'kategori' => $kategori + + ]); + } + + public function changepassword($code) + { + $kategori = kategori::all(); + $user = User::where('code', $code)->where('status_code', 'aktif')->where('id_role', '2')->first(); + if ($user) { + return view('landing.auth.change-password', [ + 'user' => $user, + 'kategori' => $kategori + ]); + } else { + return redirect('/')->with('linkkadaluarsa', 'Reset Password Gagal'); + } + } + + public function changepasswordpost(Request $request) + { + $user = User::where('code', $request->code)->where('status_code', 'aktif')->where('id_role', '2')->first(); + $request->validate([ + 'password' => [ + 'required', + 'string', + 'min:8', + 'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#@$!%*?&])[A-Za-z\d#@$!%*?&]{8,}$/', + ], + 'repassword' => 'required|same:password' + ], [ + 'password.required' => 'Password tidak boleh kosong', + 'password.min' => 'Password minimal 8 karakter', + 'password.regex' => 'Password harus mengandung huruf besar, huruf kecil, angka, dan simbol', + 'repassword.required' => 'Konfirmasi password tidak boleh kosong', + 'repassword.same' => 'Konfirmasi password tidak sama dengan password' + ]); + + $user->password = bcrypt($request->password); + $user->code = null; + $user->status_code = "tidak_aktif"; + $user->save(); + + return redirect('/')->with('resetpasswordberhasil', 'Reset Password Berhasil'); + } + + public function sendlinkresetpassword(Request $request) + { + $request->validate([ + 'email' => ['required'], + ], [ + 'email.required' => 'Email tidak boleh kosong', + ]); + + $iv = '1234567890123456'; + $key = '1234567890123456'; + + $email_encypt = openssl_encrypt($request->email, 'AES-128-CBC', $key, 0, $iv); + $user = User::where('email', $email_encypt)->where('id_role', '2')->first(); + + if ($user) { + try { + $mail = new PHPMailer(true); + + //Server settings + $mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output + $mail->isSMTP(); //Send using SMTP + $mail->Host = 'monza.id.domainesia.com'; //Set the SMTP server to send through + $mail->SMTPAuth = true; //Enable SMTP authentication + $mail->Username = 'rentcar@kaliansenang.my.id'; //SMTP username + $mail->Password = 'Gituajamarah#23'; //SMTP password + $mail->SMTPSecure = 'ssl'; //Enable implicit TLS encryption + $mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` + + //Recipients + $mail->setFrom('rentcar@kaliansenang.my.id', 'Admin'); + $mail->addAddress($request->email); //Add a recipient + + $Code = substr((str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")), 0, 10); + + //Content + $mail->isHTML(true); //Set email format to HTML + $mail->Subject = 'Password Reset'; + $mail->Body = 'To reset your password, please click the link below:

Reset Password'; + $updatecode = User::where('email', '=', $email_encypt)->first(); + $updatecode->code = $Code; + $updatecode->status_code = 'aktif'; + $updatecode->save(); + + $mail->send(); + + return redirect('/user/reset-password')->with('linkresetpassword', 'Link reset password telah dikirim ke email'); + } catch (Exception $e) { + } + } else { + return redirect()->back()->with('emailtidakditemukan', 'Email tidak ditemukan'); + } + } +} diff --git a/app/Http/Controllers/User/CartController.php b/app/Http/Controllers/User/CartController.php new file mode 100644 index 0000000..67be1cc --- /dev/null +++ b/app/Http/Controllers/User/CartController.php @@ -0,0 +1,81 @@ +where('id_user', Auth::user()->id)->get(); + return view('landing.pages.cart', [ + 'cart' => $cart, + 'kategori' => $kategori + ]); + } + + public function cart($id) + { + $id_buku = $id; + $id_user = Auth::user()->id; + + $cek_buku = buku::where('id', $id_buku)->first(); + + $jumlah_buku_dipinjam = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $id_buku) + ->where('pinjaman.status', 'Pinjam') + ->count(); + + if ($cek_buku->stok <= $jumlah_buku_dipinjam) { + return redirect()->back()->with('stoktidakada', 'Stok buku tidak mencukupi'); + } + + $id_anggota = Anggota::where('users_id', $id_user)->first()->id; + + $cek_apakah_user_sudah_meminjam_buku = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $id_buku) + ->where('pinjaman.id_anggota', $id_anggota) + ->where('pinjaman.status', 'Pinjam') + ->count(); + + $cek_apakah_user_sudah_meminjam_buku_pending = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $id_buku) + ->where('pinjaman.id_anggota', $id_anggota) + ->where('pinjaman.status', 'Pending') + ->count(); + + if ($cek_apakah_user_sudah_meminjam_buku_pending > 0) { + return redirect()->back()->with('sudahmeminjampending', 'Anda sudah meminjam buku ini'); + } + + if ($cek_apakah_user_sudah_meminjam_buku > 0) { + return redirect()->back()->with('sudahmeminjam', 'Anda sudah meminjam buku ini'); + } + + $cek = Cart::where('id_user', $id_user)->where('id_buku', $id_buku)->first(); + + if ($cek) { + Cart::where('id_user', $id_user)->where('id_buku', $id_buku)->delete(); + return redirect()->back()->with('deletecart', 'Buku berhasil dihapus dari wishlist'); + } else { + $wishlist = new Cart(); + $wishlist->id_user = $id_user; + $wishlist->id_buku = $id_buku; + $wishlist->save(); + + return redirect('/user/cart')->with('storecart', 'Buku berhasil ditambahkan ke wishlist'); + } + } +} diff --git a/app/Http/Controllers/User/DetailProductController.php b/app/Http/Controllers/User/DetailProductController.php new file mode 100644 index 0000000..329ec73 --- /dev/null +++ b/app/Http/Controllers/User/DetailProductController.php @@ -0,0 +1,23 @@ +kategori_id)->where('id', '!=', $buku->id)->get(); + return view('landing.pages.detail-product', [ + 'buku' => $buku, + 'kategori' => $kategori, + 'relate_buku' => $relate_buku + ]); + } +} diff --git a/app/Http/Controllers/User/LandingController.php b/app/Http/Controllers/User/LandingController.php new file mode 100644 index 0000000..fb7c5f2 --- /dev/null +++ b/app/Http/Controllers/User/LandingController.php @@ -0,0 +1,56 @@ +id_kategori; + $nama_buku = $request->nama_buku; + + $query = Buku::query(); + + if ($id_kategori != null) { + $query->where('kategori_id', $id_kategori); + } + + // Paginate the results + $buku = $query->paginate(10); + + $decrypted_buku = []; + + foreach ($buku as $item) { + $item->judul_buku_decrypted = $item->judul_buku; // Dekripsi judul buku + $decrypted_buku[] = $item; + } + + if ($nama_buku != null) { + $decrypted_buku = array_filter($decrypted_buku, function ($item) use ($nama_buku) { + return stripos($item->judul_buku_decrypted, $nama_buku) !== false; + }); + } + + $jumlah_data = count($decrypted_buku); + + if ($request->ajax()) { + $view = view('landing.data.landing', [ + 'buku' => $decrypted_buku, + ])->render(); + return response()->json(['html' => $view]); + } + + return view('landing.pages.landing', [ + 'buku' => $decrypted_buku, + 'kategori' => $kategori, + 'jumlah_data' => $jumlah_data + ]); + } +} diff --git a/app/Http/Controllers/User/Peminjaman.php b/app/Http/Controllers/User/Peminjaman.php new file mode 100644 index 0000000..2518cfc --- /dev/null +++ b/app/Http/Controllers/User/Peminjaman.php @@ -0,0 +1,144 @@ +id)->first()->id; + $cek_jumlah_pinjam = Pinjaman::where('id_anggota', $id_anggota)->where('status', 'Pinjam')->count(); + if ($cek_jumlah_pinjam >= 1) { + return redirect()->back()->with('maxpinjam', 'Maksimal peminjaman hanya 1'); + } + + $cart = Cart::where('id_user', Auth::user()->id)->get(); + + // jika cart lebih dari 2 buku tidak bisa melakukan peminjaman + if (count($cart) > 2) { + return redirect()->back()->with('maxpinjambuku', 'Maksimal peminjaman hanya 2'); + } + + $id_anggota = Anggota::where('users_id', Auth::user()->id)->first()->id; + + $pinjaman = new Pinjaman(); + $pinjaman->id_anggota = $id_anggota; + $pinjaman->status = 'Pending'; + $pinjaman->confirmation_deadline = Carbon::now()->addMinutes(15); + $pinjaman->tgl_pinjam = date('Y-m-d'); + $pinjaman->tgl_kembali = date('Y-m-d', strtotime('+3 days')); + $pinjaman->save(); + + foreach ($cart as $item) { + + $cek_buku = Buku::where('id', $item->id_buku)->first(); + $jumlah_buku_dipinjam = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $item->id_buku) + ->where('pinjaman.status', 'Pinjam') + ->count(); + + $jumlah_buku_pending = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $item->id_buku) + ->where('pinjaman.status', 'Pending') + ->count(); + + $jumlah_buku_dipinjam = $jumlah_buku_dipinjam + $jumlah_buku_pending; + $sisa_buku = $cek_buku->jumlah_buku - $jumlah_buku_dipinjam; + + if ($sisa_buku < 0) { + return redirect()->back()->with('stoktidakada', 'Stok buku tidak mencukupi'); + } + + $detailPinjaman = new DetailPinjaman(); + $detailPinjaman->pinjaman_id = $pinjaman->id; + $detailPinjaman->buku_id = $item->id_buku; + $detailPinjaman->kondisi_buku = 'Baik'; + $detailPinjaman->save(); + } + + // delete cart + foreach ($cart as $item) { + $item->delete(); + } + + // update status dibuku + foreach ($cart as $item) { + $buku = Buku::find($item->id_buku); + // $buku->status = 'Di Pinjam'; + $buku->save(); + } + + return redirect('/user/account#orders')->with('pinjam', 'Berhasil melakukan peminjaman'); + } + + public function tambahbukuketikapending() + { + $cart = Cart::where('id_user', Auth::user()->id)->get(); + $id_anggota = Anggota::where('users_id', Auth::user()->id)->first()->id; + + $pinjaman = Pinjaman::where('id_anggota', $id_anggota)->where('status', 'Pending')->first(); + + // cek detail pinjaman apakah sudah ada 2 buku + $cek_detail_pinjaman = DetailPinjaman::where('pinjaman_id', $pinjaman->id)->count(); + if ($cek_detail_pinjaman >= 2) { + return redirect()->back()->with('maxpinjambuku', 'Maksimal peminjaman hanya 2'); + } + + foreach ($cart as $item) { + $cek_buku = Buku::where('id', $item->id_buku)->first(); + $jumlah_buku_dipinjam = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $item->id_buku) + ->where('pinjaman.status', 'Pinjam') + ->count(); + + $jumlah_buku_pending = DB::table('pinjaman') + ->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id') + ->where('detail_pinjaman.buku_id', $item->id_buku) + ->where('pinjaman.status', 'Pending') + ->count(); + + $jumlah_buku_dipinjam = $jumlah_buku_dipinjam + $jumlah_buku_pending; + $sisa_buku = $cek_buku->jumlah_buku - $jumlah_buku_dipinjam; + + if ($sisa_buku < 0) { + return redirect()->back()->with('stoktidakada', 'Stok buku tidak mencukupi'); + } + + $detailPinjaman = new DetailPinjaman(); + $detailPinjaman->pinjaman_id = $pinjaman->id; + $detailPinjaman->buku_id = $item->id_buku; + $detailPinjaman->kondisi_buku = 'Baik'; + $detailPinjaman->save(); + } + + // delete cart + foreach ($cart as $item) { + $item->delete(); + } + + return redirect('/user/account#orders')->with('tambahanbuku', 'Berhasil menambahkan buku ketika status peminjaman pending'); + } + + public function batal($id) + { + $pinjaman = Pinjaman::find($id); + $pinjaman->status = 'Gagal'; + $pinjaman->save(); + + return redirect('/')->with('batalpinjam', 'Berhasil membatalkan peminjaman'); + } +} diff --git a/app/Http/Controllers/User/WishlistController.php b/app/Http/Controllers/User/WishlistController.php new file mode 100644 index 0000000..ef0c216 --- /dev/null +++ b/app/Http/Controllers/User/WishlistController.php @@ -0,0 +1,55 @@ +where('id_user', Auth::user()->id)->get(); + return view('landing.pages.wishlist', [ + 'wishlist' => $wishlist, + 'kategori' => $kategori + ]); + } + + public function wishlist($id) + { + $id_buku = $id; + $id_user = Auth::user()->id; + + $cek_status = Buku::where('id', $id_buku)->first(); + + if ($cek_status->status == 'Di Pinjam') { + return redirect()->back()->with('gagalwish', 'Buku sedang dipinjam'); + } + + $cek = Wishlist::where('id_user', $id_user)->where('id_buku', $id_buku)->first(); + + if ($cek) { + Wishlist::where('id_user', $id_user)->where('id_buku', $id_buku)->delete(); + return redirect()->back()->with('deletewish', 'Buku berhasil dihapus dari wishlist'); + } else { + $wishlist = new Wishlist(); + $wishlist->id_user = $id_user; + $wishlist->id_buku = $id_buku; + $wishlist->save(); + + return redirect('/user/wishlist')->with('storewish', 'Buku berhasil ditambahkan ke wishlist'); + } + } + + public function delete($id) + { + Wishlist::where('id', $id)->delete(); + return redirect()->back()->with('deletewish', 'Buku berhasil dihapus dari wishlist'); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..482e66a --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,69 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'IsAdmin' => \App\Http\Middleware\IsAdmin::class, + 'IsUser' => \App\Http\Middleware\IsUser::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php new file mode 100644 index 0000000..f4ff471 --- /dev/null +++ b/app/Http/Middleware/IsAdmin.php @@ -0,0 +1,26 @@ +id_role == 1) { + return $next($request); + } else { + return redirect('login'); + } + } +} diff --git a/app/Http/Middleware/IsUser.php b/app/Http/Middleware/IsUser.php new file mode 100644 index 0000000..dbfa8fd --- /dev/null +++ b/app/Http/Middleware/IsUser.php @@ -0,0 +1,26 @@ +id_role == '2'){ + return $next($request); + } + + return redirect('/user/login'); + } +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..a2813a0 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..7186414 --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..093bf64 --- /dev/null +++ b/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Models/Anggota.php b/app/Models/Anggota.php new file mode 100644 index 0000000..c2bdff8 --- /dev/null +++ b/app/Models/Anggota.php @@ -0,0 +1,21 @@ +belongsTo(User::class, 'users_id'); + } +} diff --git a/app/Models/Buku.php b/app/Models/Buku.php new file mode 100644 index 0000000..12c5a40 --- /dev/null +++ b/app/Models/Buku.php @@ -0,0 +1,177 @@ +attributes['isbn'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getIsbnAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt judul_buku aes 128 + // public function setJudulBukuAttribute($value) + // { + // $iv = '1234567890123456'; + // $key = '1234567890123456'; + // $this->attributes['judul_buku'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + // } + + // public function getJudulBukuAttribute($value) + // { + // $iv = '1234567890123456'; + // $key = '1234567890123456'; + // return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + // } + + // encrypt deskripsi aes 128 + public function setDeskripsiAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['deskripsi'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getDeskripsiAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt tema aes 128 + public function setTemaAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['tema'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getTemaAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt penerbit aes 128 + public function setPenerbitAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['penerbit'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getPenerbitAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt tgl_terbit aes 128 + public function setTglTerbitAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['tgl_terbit'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getTglTerbitAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt cover_buku aes 128 + public function setCoverBukuAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['cover_buku'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getCoverBukuAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt jumlah_halaman aes 128 + public function setJumlahHalamanAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['jumlah_halaman'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getJumlahHalamanAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt stok aes 128 + public function setStokAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['stok'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getStokAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function kategori() + { + return $this->belongsTo(Kategori::class, 'kategori_id', 'id'); + } + + public function cart() + { + return $this->hasMany(Cart::class); + } + + public function wishlist() + { + return $this->hasMany(Wishlist::class); + } +} diff --git a/app/Models/Cart.php b/app/Models/Cart.php new file mode 100644 index 0000000..903a971 --- /dev/null +++ b/app/Models/Cart.php @@ -0,0 +1,29 @@ +belongsTo(Kategori::class, 'id_user', 'id'); + } + + public function buku() + { + return $this->belongsTo(buku::class, 'id_buku', 'id'); + } +} diff --git a/app/Models/DetailPinjaman.php b/app/Models/DetailPinjaman.php new file mode 100644 index 0000000..e3afc6b --- /dev/null +++ b/app/Models/DetailPinjaman.php @@ -0,0 +1,29 @@ +belongsTo(Pinjaman::class, 'pinjaman_id', 'id'); + } + + public function buku() + { + return $this->belongsTo(Buku::class, 'buku_id', 'id'); + } +} diff --git a/app/Models/Detail_buku.php b/app/Models/Detail_buku.php new file mode 100644 index 0000000..bbef064 --- /dev/null +++ b/app/Models/Detail_buku.php @@ -0,0 +1,23 @@ +belongsTo(Buku::class, 'buku_id', 'id'); + } +} + diff --git a/app/Models/Kategori.php b/app/Models/Kategori.php new file mode 100644 index 0000000..8f8ab98 --- /dev/null +++ b/app/Models/Kategori.php @@ -0,0 +1,22 @@ +hasMany(Buku::class, 'kategori_id', 'id'); + } +} diff --git a/app/Models/KategoriDenda.php b/app/Models/KategoriDenda.php new file mode 100644 index 0000000..3be83af --- /dev/null +++ b/app/Models/KategoriDenda.php @@ -0,0 +1,18 @@ +belongsTo(Anggota::class, 'id_anggota', 'id'); + } +} diff --git a/app/Models/Role.php b/app/Models/Role.php new file mode 100644 index 0000000..98ceb69 --- /dev/null +++ b/app/Models/Role.php @@ -0,0 +1,21 @@ +hasOne(User::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..7fc7ffe --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,148 @@ + + */ + protected $fillable = [ + + 'id_role', + 'nisn', + 'name', + 'email', + 'password', + 'no_handphone', + 'alamat', + ]; + + // encrypt aes 128 nisn + public function setNisnAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['nisn'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getNisnAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt aes 128 name + // public function setNameAttribute($value) + // { + // $iv = '1234567890123456'; + // $key = '1234567890123456'; + // $this->attributes['name'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + // } + + // public function getNameAttribute($value) + // { + // $iv = '1234567890123456'; + // $key = '1234567890123456'; + // return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + // } + + // encrypt aes 128 email + public function setEmailAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['email'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getEmailAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt aes 128 no_handphone + public function setNoHandphoneAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['no_handphone'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getNoHandphoneAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + // encrypt aes 128 alamat + public function setAlamatAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + $this->attributes['alamat'] = openssl_encrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + public function getAlamatAttribute($value) + { + $iv = '1234567890123456'; + $key = '1234567890123456'; + return openssl_decrypt($value, 'AES-128-CBC', $key, 0, $iv); + } + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; + + public function role() + { + return $this->belongsTo(Role::class, 'id_role', 'id'); + } + + public function cart() + { + return $this->hasMany(Cart::class); + } + + public function wishlist() + { + return $this->hasMany(Wishlist::class); + } + + public function anggota() + { + return $this->hasMany(Anggota::class); + } +} diff --git a/app/Models/Wishlist.php b/app/Models/Wishlist.php new file mode 100644 index 0000000..167ff5c --- /dev/null +++ b/app/Models/Wishlist.php @@ -0,0 +1,27 @@ +belongsTo(Kategori::class, 'id_user', 'id'); + } + + public function buku() + { + return $this->belongsTo(buku::class, 'id_buku', 'id'); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return bool + */ + public function shouldDiscoverEvents() + { + return false; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..ea87f2e --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,52 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..67a3329 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; 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/composer.json b/composer.json new file mode 100644 index 0000000..4960383 --- /dev/null +++ b/composer.json @@ -0,0 +1,68 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^8.0.2", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^9.19", + "laravel/sanctum": "^3.0", + "laravel/tinker": "^2.7", + "midtrans/midtrans-php": "^2.5", + "milon/barcode": "^11.0", + "phpmailer/phpmailer": "^6.9" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/pint": "^1.0", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^6.1", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ignition": "^1.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } + }, + "minimum-stability": "stable", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..1f7583d --- /dev/null +++ b/composer.lock @@ -0,0 +1,8415 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "ac98e9e95d89a9917e827a9cc2b1ac7c", + "packages": [ + { + "name": "brick/math", + "version": "0.11.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.11.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-01-15T23:15:59+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<3.7.0 || >=4.0.0" + }, + "require-dev": { + "doctrine/dbal": "^3.7.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/2.1.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": "2023-12-11T17:09:12+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/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+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": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^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/2.1.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:35:39+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": "3.2.6", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2|^2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.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/3.2.6" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-06-01T07:04:22+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": "v9.52.16", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "082345d76fc6a55b649572efe10b11b03e279d24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/082345d76fc6a55b649572efe10b11b03e279d24", + "reference": "082345d76fc6a55b649572efe10b11b03e279d24", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "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.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.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": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "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/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" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^2.13.3|^3.1.4", + "ext-gmp": "*", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "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.5.1", + "orchestra/testbench-core": "^7.24", + "pda/pheanstalk": "^4.0", + "phpstan/phpdoc-parser": "^1.15", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0", + "symfony/http-client": "^6.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 (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "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).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "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.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^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).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/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": "2023-10-03T13:02:30+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.21|^10.0", + "illuminate/contracts": "^9.21|^10.0", + "illuminate/database": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "php": "^8.0.2" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.28.2|^8.8.3", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2023-12-19T18:44:48+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.28.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "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-mongodb": "^1.3", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", + "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.28.0" + }, + "time": "2024-05-22T10:09:12+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.28.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "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.28.0" + }, + "time": "2024-05-06T20:05:52+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": "midtrans/midtrans-php", + "version": "2.5.2", + "source": { + "type": "git", + "url": "https://github.com/Midtrans/midtrans-php.git", + "reference": "a1ad0c824449ca8c68c4cf11b3417ad518311d2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Midtrans/midtrans-php/zipball/a1ad0c824449ca8c68c4cf11b3417ad518311d2b", + "reference": "a1ad0c824449ca8c68c4cf11b3417ad518311d2b", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "5.7.*", + "psy/psysh": "0.4.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Midtrans\\": "Midtrans/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andri Setiawan", + "email": "andri.setiawan@veritrans.co.id" + }, + { + "name": "Alvin Litani", + "email": "alvin.litani@veritrans.co.id" + }, + { + "name": "Ismail Faruqi", + "email": "ismail.faruqi@veritrans.co.id" + } + ], + "description": "PHP Wrapper for Midtrans Payment API.", + "homepage": "https://midtrans.com", + "support": { + "issues": "https://github.com/Midtrans/midtrans-php/issues", + "source": "https://github.com/Midtrans/midtrans-php/tree/2.5.2" + }, + "time": "2021-08-23T08:52:05+00:00" + }, + { + "name": "milon/barcode", + "version": "v11.0.0", + "source": { + "type": "git", + "url": "https://github.com/milon/barcode.git", + "reference": "1f4031adb52146bb7fbe88ef42214011376f9cbe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/milon/barcode/zipball/1f4031adb52146bb7fbe88ef42214011376f9cbe", + "reference": "1f4031adb52146bb7fbe88ef42214011376f9cbe", + "shasum": "" + }, + "require": { + "illuminate/support": "^7.0|^8.0|^9.0|^10.0 | ^11.0", + "php": "^7.3 | ^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Milon\\Barcode\\BarcodeServiceProvider" + ], + "aliases": { + "DNS1D": "Milon\\Barcode\\Facades\\DNS1DFacade", + "DNS2D": "Milon\\Barcode\\Facades\\DNS2DFacade" + } + } + }, + "autoload": { + "psr-0": { + "Milon\\Barcode": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Nuruzzaman Milon", + "email": "contact@milon.im" + } + ], + "description": "Barcode generator like Qr Code, PDF417, C39, C39+, C39E, C39E+, C93, S25, S25+, I25, I25+, C128, C128A, C128B, C128C, 2-Digits UPC-Based Extention, 5-Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI (Variation of Plessey code)", + "keywords": [ + "CODABAR", + "CODE 128", + "CODE 39", + "barcode", + "datamatrix", + "ean", + "laravel", + "pdf417", + "qr code", + "qrcode" + ], + "support": { + "issues": "https://github.com/milon/barcode/issues", + "source": "https://github.com/milon/barcode/tree/v11.0.0" + }, + "funding": [ + { + "url": "https://paypal.me/nuruzzamanmilon", + "type": "custom" + }, + { + "url": "https://github.com/milon", + "type": "github" + } + ], + "time": "2024-02-28T18:14:32+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.3", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", + "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "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": "2.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/2.9.3" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-04-12T20:52:51+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.72.5", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "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-06-03T19:18:41+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": "7.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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.2.5" + }, + "time": "2023-10-05T20:37:59+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": "v1.15.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "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/v1.15.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": "2023-02-08T01:06:31+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.9.1", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "039de174cd9c17a8389754d3b877a2ed22743e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18", + "reference": "039de174cd9c17a8389754d3b877a2ed22743e18", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.7.2", + "yoast/phpunit-polyfills": "^1.0.4" + }, + "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2023-11-25T22:23:28+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": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/polyfill-php81": "^1.23" + }, + "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/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-27T19:12:24+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/console", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "shasum": "" + }, + "require": { + "php": ">=8.0.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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-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.0.2" + }, + "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": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c7df52182f43a68522756ac31a532dd5b1e6db67", + "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-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.0.2" + }, + "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": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", + "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "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/v6.0.19" + }, + "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": "2023-01-20T17:44:14+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.0.20", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "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/v6.0.20" + }, + "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": "2023-01-30T15:41:07+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.0.20", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dc70833fd0ef5e861e17c7854c12d7d86679349", + "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "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/v6.0.20" + }, + "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": "2023-02-01T08:22:55+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "cd60799210c488f545ddde2444dc1aa548322872" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/cd60799210c488f545ddde2444dc1aa548322872", + "reference": "cd60799210c488f545ddde2444dc1aa548322872", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.0.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.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/v6.0.19" + }, + "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": "2023-01-11T11:50:03+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "d7052547a0070cbeadd474e172b527a00d657301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/d7052547a0070cbeadd474e172b527a00d657301", + "reference": "d7052547a0070cbeadd474e172b527a00d657301", + "shasum": "" + }, + "require": { + "php": ">=8.0.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": "<5.4", + "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6" + }, + "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/v6.0.19" + }, + "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": "2023-01-11T11:50:03+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-php81", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "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\\Php81\\": "" + }, + "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.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/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": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", + "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", + "shasum": "" + }, + "require": { + "php": ">=8.0.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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e56ca9b41c1ec447193474cd86ad7c0b547755ac", + "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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.0.2" + }, + "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": "2022-05-30T19:17:58+00:00" + }, + { + "name": "symfony/string", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", + "shasum": "" + }, + "require": { + "php": ">=8.0.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.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282", + "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "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.0.2" + }, + "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": "2022-06-27T17:10:44+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.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/v6.0.19" + }, + "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": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", + "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "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/v6.0.19" + }, + "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": "2023-01-20T17:44:14+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": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "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.5.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "e0a8cef58b74662f27355be9cdea0e726bbac362" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/e0a8cef58b74662f27355be9cdea0e726bbac362", + "reference": "e0a8cef58b74662f27355be9cdea0e726bbac362", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.14.4", + "illuminate/view": "^9.51.0", + "laravel-zero/framework": "^9.2.0", + "mockery/mockery": "^1.5.1", + "nunomaduro/larastan": "^2.4.0", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^1.22.4" + }, + "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": "2023-02-14T16:31:02+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.29.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "a8e4e749735ba2f091856eafeb3f99db8cd6b621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/a8e4e749735ba2f091856eafeb3f99db8cd6b621", + "reference": "a8e4e749735ba2f091856eafeb3f99db8cd6b621", + "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-05-16T21:39:11+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "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-05-16T03:13:13+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": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "f05978827b9343cba381ca05b8c7deee346b6015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", + "reference": "f05978827b9343cba381ca05b8c7deee346b6015", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" + }, + "require-dev": { + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "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": "2023-01-03T12:54:54+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": "9.2.31", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "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-master": "9.2-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/9.2.31" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:37:42+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-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", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.19", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "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": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-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/9.6.19" + }, + "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-05T04:35:58+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.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": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.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": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.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" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-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", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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 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", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+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.6.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "220a7c8745e9fa427d54099f47147c4b97fe6462" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/220a7c8745e9fa427d54099f47147c4b97fe6462", + "reference": "220a7c8745e9fa427d54099f47147c4b97fe6462", + "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.6.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-22T09:45:39+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.14.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "5e11c11f675bb5251f061491a493e04a1a571532" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/5e11c11f675bb5251f061491a493e04a1a571532", + "reference": "5e11c11f675bb5251f061491a493e04a1a571532", + "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-29T08:10:20+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "1.6.4", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", + "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^8.77|^9.27", + "monolog/monolog": "^2.3", + "php": "^8.0", + "spatie/flare-client-php": "^1.0.1", + "spatie/ignition": "^1.4.1", + "symfony/console": "^5.0|^6.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "filp/whoops": "^2.14", + "livewire/livewire": "^2.8|dev-develop", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.27" + }, + "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": "2023-01-03T19:28:04+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "deec3a812a0305a50db8ae689b183f43d915c884" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/deec3a812a0305a50db8ae689b183f43d915c884", + "reference": "deec3a812a0305a50db8ae689b183f43d915c884", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "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/v6.0.19" + }, + "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": "2023-01-11T11:50:03+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.0.2" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..a3c149c --- /dev/null +++ b/config/app.php @@ -0,0 +1,219 @@ + 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 + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + // ubah ke jakarta + 'timezone' => 'Asia/Jakarta', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => '1234567890123456', + 'cipher' => 'aes-128-cbc', + + /* + |-------------------------------------------------------------------------- + | 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' => 'file', + // 'store' => 'redis', + ], + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + Milon\Barcode\BarcodeServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + // 'ExampleClass' => App\Example\ExampleClass::class, + 'DNS1D' => Milon\Barcode\Facades\DNS1DFacade::class, + 'DNS2D' => Milon\Barcode\Facades\DNS2DFacade::class, + 'DNS1D' => 'Milon\Barcode\Facades\DNS1DFacade', + 'DNS2D' => 'Milon\Barcode\Facades\DNS2DFacade', + ])->toArray(), + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..d8c6cee --- /dev/null +++ b/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire 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. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..9e4d4aa --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,70 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..33bb295 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | 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: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + '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' => '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, or 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/cors.php b/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..137ad18 --- /dev/null +++ b/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + '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('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + '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 in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | 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 APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + '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..e9d9dbd --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | 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/hashing.php b/config/hashing.php new file mode 100644 index 0000000..bcd3be4 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..5aa1dbb --- /dev/null +++ b/config/logging.php @@ -0,0 +1,122 @@ + 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' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + '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'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + '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..534395a --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | 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 to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + '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', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails 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 e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/midtrans.php b/config/midtrans.php new file mode 100644 index 0000000..97bb631 --- /dev/null +++ b/config/midtrans.php @@ -0,0 +1,8 @@ + env('MIDTRANS_MERCHANT_ID',), + 'client_key' => env('MIDTRANS_CLIENT_KEY'), + 'server_key' => env('MIDTRANS_SERVER_KEY'), +]; + diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + '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' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..529cfdc --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,67 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..0ace530 --- /dev/null +++ b/config/services.php @@ -0,0 +1,34 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..8fed97c --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | 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 immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + '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 we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured 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 cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + '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 are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + '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. You are free to modify this option if needed. + | + */ + + '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" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; 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..41f8ae8 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,40 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return static + */ + public function unverified() + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..9ba60d1 --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,41 @@ +id(); + $table->longText('nisn')->unique()->nullable(); + $table->longText('name'); + $table->longText('email'); + $table->longText('no_handphone'); + $table->longText('alamat'); + $table->longText('password'); + $table->string('code')->nullable(); + $table->string('status_code')->nullable(); + $table->timestamp('email_verified_at')->nullable(); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +}; diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..e5f1397 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +}; diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..1719198 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +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. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..6c81fd2 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,37 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/database/migrations/2023_06_10_161818_create_buku_table.php b/database/migrations/2023_06_10_161818_create_buku_table.php new file mode 100644 index 0000000..25f76ae --- /dev/null +++ b/database/migrations/2023_06_10_161818_create_buku_table.php @@ -0,0 +1,40 @@ +id(); + $table->longText('isbn'); + $table->longText('judul_buku'); + $table->longText('deskripsi'); + $table->longText('tema'); + $table->longText('penerbit'); + $table->longText('tgl_terbit'); + $table->longText('cover_buku'); + $table->longText('jumlah_halaman'); + $table->longText('stok'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('buku'); + } +}; diff --git a/database/migrations/2023_06_10_161927_create_kategori_table.php b/database/migrations/2023_06_10_161927_create_kategori_table.php new file mode 100644 index 0000000..5364dbd --- /dev/null +++ b/database/migrations/2023_06_10_161927_create_kategori_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('nama_kategori'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('kategori'); + } +}; diff --git a/database/migrations/2023_06_10_210649_add_coluom_kategori_to_buku_table.php b/database/migrations/2023_06_10_210649_add_coluom_kategori_to_buku_table.php new file mode 100644 index 0000000..9beb487 --- /dev/null +++ b/database/migrations/2023_06_10_210649_add_coluom_kategori_to_buku_table.php @@ -0,0 +1,35 @@ +unsignedBigInteger('kategori_id'); + $table->foreign('kategori_id')->references('id')->on('kategori'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('buku', function (Blueprint $table) { + $table->dropForeign('buku_kategori_id_foreign'); + $table->dropColumn('kategori_id'); + + }); + } +}; diff --git a/database/migrations/2023_06_14_160153_create_role_table.php b/database/migrations/2023_06_14_160153_create_role_table.php new file mode 100644 index 0000000..9bfbfbe --- /dev/null +++ b/database/migrations/2023_06_14_160153_create_role_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('role'); + } +}; diff --git a/database/migrations/2023_06_14_172025_add_id_role_to_users_table.php b/database/migrations/2023_06_14_172025_add_id_role_to_users_table.php new file mode 100644 index 0000000..88542bf --- /dev/null +++ b/database/migrations/2023_06_14_172025_add_id_role_to_users_table.php @@ -0,0 +1,32 @@ +unsignedBigInteger('id_role')->after('id')->default(2); + $table->foreign('id_role')->references('id')->on('role')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropForeign(['id_role']); + $table->dropColumn('id_role'); + }); + } +}; diff --git a/database/migrations/2023_06_22_122335_create_pinjaman_table.php b/database/migrations/2023_06_22_122335_create_pinjaman_table.php new file mode 100644 index 0000000..3f3f385 --- /dev/null +++ b/database/migrations/2023_06_22_122335_create_pinjaman_table.php @@ -0,0 +1,41 @@ +id(); + $table->string('status')->nullable(); + $table->date('tgl_pinjam'); + $table->date('tgl_kembali'); + $table->date('tgl_kembali_real')->nullable(); + $table->dateTime('confirmation_deadline'); + $table->string('no_transaksi')->nullable(); + $table->string('status_pembayaran')->nullable(); + $table->string('bank')->nullable(); + $table->string('no_va')->nullable(); + $table->string('expired_date')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('pinjaman'); + } +}; diff --git a/database/migrations/2023_06_22_122742_create_denda_table.php b/database/migrations/2023_06_22_122742_create_denda_table.php new file mode 100644 index 0000000..670d7e5 --- /dev/null +++ b/database/migrations/2023_06_22_122742_create_denda_table.php @@ -0,0 +1,34 @@ +id(); + $table->unsignedBigInteger('pinjaman_id'); + $table->foreign('pinjaman_id')->references('id')->on('pinjaman'); + $table->integer('grand_total'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('denda'); + } +}; diff --git a/database/migrations/2023_06_22_123238_create_anggota_table.php b/database/migrations/2023_06_22_123238_create_anggota_table.php new file mode 100644 index 0000000..0522895 --- /dev/null +++ b/database/migrations/2023_06_22_123238_create_anggota_table.php @@ -0,0 +1,33 @@ + id(); + $table->unsignedBigInteger('users_id'); + $table->foreign('users_id')->references('id')->on('users'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('anggota'); + } + }; diff --git a/database/migrations/2023_06_22_133023_add_id_anggota_to_pinjaman_table.php b/database/migrations/2023_06_22_133023_add_id_anggota_to_pinjaman_table.php new file mode 100644 index 0000000..8986a51 --- /dev/null +++ b/database/migrations/2023_06_22_133023_add_id_anggota_to_pinjaman_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('id_anggota')->after('id')->default(2); + $table->foreign('id_anggota')->references('id')->on('anggota')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('pinjaman', function (Blueprint $table) { + $table->dropForeign(['id_anggota']); + $table->dropColumn('id_anggota'); + }); + } +}; diff --git a/database/migrations/2023_06_22_134752_create_detail_pinjaman.php b/database/migrations/2023_06_22_134752_create_detail_pinjaman.php new file mode 100644 index 0000000..942d861 --- /dev/null +++ b/database/migrations/2023_06_22_134752_create_detail_pinjaman.php @@ -0,0 +1,36 @@ +id(); + $table->unsignedBigInteger('pinjaman_id'); + $table->foreign('pinjaman_id')->references('id')->on('pinjaman'); + $table->unsignedBigInteger('buku_id'); + $table->foreign('buku_id')->references('id')->on('buku'); + $table->string('kondisi_buku')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('detail_pinjaman'); + } +}; diff --git a/database/migrations/2023_06_23_154838_create_kategori_denda.php b/database/migrations/2023_06_23_154838_create_kategori_denda.php new file mode 100644 index 0000000..f4792c0 --- /dev/null +++ b/database/migrations/2023_06_23_154838_create_kategori_denda.php @@ -0,0 +1,33 @@ +id(); + $table->string('nama_kategori'); + $table->integer('harga_kategori'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('kategori_denda'); + } +}; diff --git a/database/migrations/2023_06_23_154906_create_detail_denda.php b/database/migrations/2023_06_23_154906_create_detail_denda.php new file mode 100644 index 0000000..96a27dc --- /dev/null +++ b/database/migrations/2023_06_23_154906_create_detail_denda.php @@ -0,0 +1,35 @@ +unsignedBigInteger('denda_id'); + $table->foreign('denda_id')->references('id')->on('denda'); + $table->unsignedBigInteger('kategori_denda_id'); + $table->foreign('kategori_denda_id')->references('id')->on('kategori_denda'); + $table->integer('sub_total'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('detail_denda'); + } +}; diff --git a/database/migrations/2024_05_15_132353_create_wishlist_table.php b/database/migrations/2024_05_15_132353_create_wishlist_table.php new file mode 100644 index 0000000..383bd3a --- /dev/null +++ b/database/migrations/2024_05_15_132353_create_wishlist_table.php @@ -0,0 +1,31 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('wishlist'); + } +}; diff --git a/database/migrations/2024_05_15_132420_create_cart_table.php b/database/migrations/2024_05_15_132420_create_cart_table.php new file mode 100644 index 0000000..36c22b2 --- /dev/null +++ b/database/migrations/2024_05_15_132420_create_cart_table.php @@ -0,0 +1,31 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('cart'); + } +}; diff --git a/database/migrations/2024_05_15_132448_add_id_user_column_to_wishlist_table.php b/database/migrations/2024_05_15_132448_add_id_user_column_to_wishlist_table.php new file mode 100644 index 0000000..d67b293 --- /dev/null +++ b/database/migrations/2024_05_15_132448_add_id_user_column_to_wishlist_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('id_user')->after('id'); + $table->foreign('id_user')->references('id')->on('users')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('wishlist', function (Blueprint $table) { + $table->dropForeign(['id_user']); + $table->dropColumn('id_user'); + }); + } +}; diff --git a/database/migrations/2024_05_15_132504_add_id_buku_column_to_wishlist_table.php b/database/migrations/2024_05_15_132504_add_id_buku_column_to_wishlist_table.php new file mode 100644 index 0000000..aec567a --- /dev/null +++ b/database/migrations/2024_05_15_132504_add_id_buku_column_to_wishlist_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('id_buku')->after('id'); + $table->foreign('id_buku')->references('id')->on('buku')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('wishlist', function (Blueprint $table) { + $table->dropForeign(['id_buku']); + $table->dropColumn('id_buku'); + }); + } +}; diff --git a/database/migrations/2024_05_15_132525_add_id_user_column_to_cart_table.php b/database/migrations/2024_05_15_132525_add_id_user_column_to_cart_table.php new file mode 100644 index 0000000..09ab11c --- /dev/null +++ b/database/migrations/2024_05_15_132525_add_id_user_column_to_cart_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('id_user')->after('id'); + $table->foreign('id_user')->references('id')->on('users')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('cart', function (Blueprint $table) { + $table->dropForeign(['id_user']); + $table->dropColumn('id_user'); + }); + } +}; diff --git a/database/migrations/2024_05_15_132543_add_id_buku_column_to_cart_table.php b/database/migrations/2024_05_15_132543_add_id_buku_column_to_cart_table.php new file mode 100644 index 0000000..806369c --- /dev/null +++ b/database/migrations/2024_05_15_132543_add_id_buku_column_to_cart_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('id_buku')->after('id'); + $table->foreign('id_buku')->references('id')->on('buku')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('cart', function (Blueprint $table) { + $table->dropForeign(['id_buku']); + $table->dropColumn('id_buku'); + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..27ee8d8 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,252 @@ +create(); + + // \App\Models\User::factory()->create([ + // 'name' => 'Test User', + // 'email' => 'test@example.com', + // ]); + + Role::create([ + 'name' => 'admin', + ]); + + Role::create([ + 'name' => 'user', + ]); + + kategori::create([ + 'nama_kategori' => 'Fiksi', + ]); + + kategori::create([ + 'nama_kategori' => 'Non Fiksi', + ]); + + kategori::create([ + 'nama_kategori' => 'Sains Fiksi', + ]); + + kategori::create([ + 'nama_kategori' => 'Sejarah', + ]); + kategori::create([ + 'nama_kategori' => 'Puisi', + ]); + kategori::create([ + 'nama_kategori' => 'Pendidikan', + ]); + kategori::create([ + 'nama_kategori' => 'Misteri dan Detektif', + ]); + kategori::create([ + 'nama_kategori' => 'Bisnis dan Keuagan', + ]); + kategori::create([ + 'nama_kategori' => 'Fantasi', + ]); + + User::create([ + 'name' => 'lana', + 'email' => 'lana@admin.com', + 'password' => bcrypt('lana'), + 'no_handphone' => '085233918803', + 'alamat' => 'Jember', + 'id_role' => 1, + 'email_verified_at' => now() + ]); + + // Anggota::create([ + // 'users_id' => '1' + // ]); + + + + User::create([ + 'nisn' => '123', + 'name' => 'ibnu', + 'email' => 'ibnu@gmail.com', + 'password' => bcrypt('1'), + 'no_handphone' => '085233918803', + 'alamat' => 'Jember', + 'id_role' => 2, + 'email_verified_at' => now() + ]); + + Anggota::create([ + 'users_id' => '2' + ]); + + + // buku::create([ + // 'isbn' => '978-3-16-148410-0', + // 'judul_buku' => 'The Fault in Our Stars', + // 'deskripsi' => 'The Fault in Our Stars adalah novel remaja yang ditulis oleh John Green. Novel ini menceritakan kisah cinta dua remaja, Hazel Grace Lancaster dan Augustus Waters, yang sama-sama mengidap kanker.', + // 'tema' => 'Romance', + // 'penerbit' => 'Penguin Group', + // 'tgl_terbit' => '2012-01-10', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '313', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-1', + // 'judul_buku' => 'The Hunger Games', + // 'deskripsi' => 'The Hunger Games adalah novel fiksi ilmiah yang ditulis oleh Suzanne Collins. Novel ini menceritakan kisah Katniss Everdeen, seorang gadis muda yang terpilih untuk berpartisipasi dalam Hunger Games, sebuah pertandingan mematikan yang diadakan setiap tahun oleh Capitol.', + // 'tema' => 'Adventure', + // 'penerbit' => 'Scholastic Corporation', + // 'tgl_terbit' => '2008-09-14', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '374', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-2', + // 'judul_buku' => 'Harry Potter and the Philosopher\'s Stone', + // 'deskripsi' => 'Harry Potter and the Philosopher\'s Stone adalah novel fantasi yang ditulis oleh J.K. Rowling. Novel ini menceritakan kisah Harry Potter, seorang anak yatim piatu yang mengetahui bahwa ia adalah seorang penyihir dan diundang untuk belajar di Sekolah Sihir Hogwarts.', + // 'tema' => 'Fantasy', + // 'penerbit' => 'Bloomsbury Publishing', + // 'tgl_terbit' => '1997-06-26', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '223', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-3', + // 'judul_buku' => 'The Da Vinci Code', + // 'deskripsi' => 'The Da Vinci Code adalah novel misteri-detective yang ditulis oleh Dan Brown. Novel ini menceritakan kisah Robert Langdon, seorang profesor simbologi yang terlibat dalam penyelidikan pembunuhan seorang kurator di Louvre Museum, Paris.', + // 'tema' => 'Mystery', + // 'penerbit' => 'Doubleday', + // 'tgl_terbit' => '2003-03-18', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '454', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-4', + // 'judul_buku' => 'The Alchemist', + // 'deskripsi' => 'The Alchemist adalah novel fiksi filosofis yang ditulis oleh Paulo Coelho. Novel ini menceritakan kisah Santiago, seorang gembala Andalusia yang berusaha mencari harta karun di Piramida Mesir setelah bermimpi bertemu dengan seorang raja.', + // 'tema' => 'Adventure', + // 'penerbit' => 'HarperCollins', + // 'tgl_terbit' => '1988-01-01', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '177', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-5', + // 'judul_buku' => 'The Chronicles of Narnia: The Lion, the Witch and the Wardrobe', + // 'deskripsi' => 'The Chronicles of Narnia: The Lion, the Witch and the Wardrobe adalah novel fantasi yang ditulis oleh C.S. Lewis. Novel ini menceritakan kisah empat anak yang menemukan dunia ajaib Narnia melalui lemari pakaian di rumah profesor mereka.', + // 'tema' => 'Fantasy', + // 'penerbit' => 'Geoffrey Bles', + // 'tgl_terbit' => '1950-10-16', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '206', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-6', + // 'judul_buku' => 'The Lord of the Rings: The Fellowship of the Ring', + // 'deskripsi' => 'The Lord of the Rings: The Fellowship of the Ring adalah novel fantasi epik yang ditulis oleh J.R.R. Tolkien. Novel ini menceritakan kisah Frodo Baggins, seorang hobbit yang ditugaskan untuk menghancurkan Cincin Kekuasaan di Gunung Doom.', + // 'tema' => 'Fantasy', + // 'penerbit' => 'Allen & Unwin', + // 'tgl_terbit' => '1954-07-29', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '398', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-7', + // 'judul_buku' => 'To Kill a Mockingbird', + // 'deskripsi' => 'To Kill a Mockingbird adalah novel fiksi yang ditulis oleh Harper Lee. Novel ini menceritakan kisah Scout Finch, seorang gadis muda yang tumbuh dewasa di kota kecil Alabama dan menyaksikan ayahnya, Atticus Finch, berjuang melawan rasisme dan ketidakadilan.', + // 'tema' => 'Drama', + // 'penerbit' => 'J.B. Lippincott & Co.', + // 'tgl_terbit' => '1960-07-11', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '281', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-8', + // 'judul_buku' => 'The Great Gatsby', + // 'deskripsi' => 'The Great Gatsby adalah novel fiksi yang ditulis oleh F. Scott Fitzgerald. Novel ini menceritakan kisah Jay Gatsby, seorang miliuner misterius yang tinggal di Long Island dan mencintai Daisy Buchanan, seorang wanita cantik yang sudah menikah.', + // 'tema' => 'Romance', + // 'penerbit' => 'Charles Scribner\'s Sons', + // 'tgl_terbit' => '1925-04-10', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '180', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + // buku::create([ + // 'isbn' => '978-3-16-148410-9', + // 'judul_buku' => '1984', + // 'deskripsi' => '1984 adalah novel distopia yang ditulis oleh George Orwell. Novel ini menceritakan kisah Winston Smith, seorang pegawai pemerintah yang mencoba melawan rezim totaliter Partai Partai dan pemimpinnya, Big Brother.', + // 'tema' => 'Science Fiction', + // 'penerbit' => 'Secker & Warburg', + // 'tgl_terbit' => '1949-06-08', + // 'cover_buku' => '1717498198_sugeng.png', + // 'jumlah_halaman' => '328', + // 'stok' => '10', + // 'kategori_id' => '1' + // ]); + + + + KategoriDenda::create([ + 'nama_kategori' => 'Telat', + 'harga_kategori' => '1000', + ]); + + KategoriDenda::create([ + 'nama_kategori' => 'Rusak', + 'harga_kategori' => '5000', + ]); + + + KategoriDenda::create([ + 'nama_kategori' => 'Hilang', + 'harga_kategori' => '10000', + ]); + } +} diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..8a792b9 --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,186 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'ascii' => 'The :attribute must only contain single-byte alphanumeric characters and symbols.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute must have between :min and :max items.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'string' => 'The :attribute must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'decimal' => 'The :attribute must have :decimal decimal places.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute must have more than :value items.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'numeric' => 'The :attribute must be greater than :value.', + 'string' => 'The :attribute must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute must have :value items or more.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lowercase' => 'The :attribute must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute must have less than :value items.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'numeric' => 'The :attribute must be less than :value.', + 'string' => 'The :attribute must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute must not have more than :value items.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute must not have more than :max items.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute must not be greater than :max.', + 'string' => 'The :attribute must not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute must not have more than :max digits.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute must have at least :min items.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'numeric' => 'The :attribute must be at least :min.', + 'string' => 'The :attribute must be at least :min characters.', + ], + 'min_digits' => 'The :attribute must have at least :min digits.', + 'missing' => 'The :attribute field must be missing.', + 'missing_if' => 'The :attribute field must be missing when :other is :value.', + 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', + 'missing_with' => 'The :attribute field must be missing when :values is present.', + 'missing_with_all' => 'The :attribute field must be missing when :values are present.', + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => [ + 'letters' => 'The :attribute must contain at least one letter.', + 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute must contain at least one number.', + 'symbols' => 'The :attribute must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'array' => 'The :attribute must contain :size items.', + 'file' => 'The :attribute must be :size kilobytes.', + 'numeric' => 'The :attribute must be :size.', + 'string' => 'The :attribute must be :size characters.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'uppercase' => 'The :attribute must be uppercase.', + 'url' => 'The :attribute must be a valid URL.', + 'ulid' => 'The :attribute must be a valid ULID.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + // register + 'name' => [ + 'required' => 'Nama tidak boleh kosong', + ], + // login + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/package.json b/package.json new file mode 100644 index 0000000..0b32ba6 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.2", + "lodash": "^4.17.19", + "postcss": "^8.1.14", + "vite": "^4.0.0" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..2ac86a1 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + 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/admin/css/bootstrap.min.css b/public/admin/css/bootstrap.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/public/admin/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/public/admin/css/datatablesbutton.css b/public/admin/css/datatablesbutton.css new file mode 100644 index 0000000..f11328a --- /dev/null +++ b/public/admin/css/datatablesbutton.css @@ -0,0 +1,1173 @@ +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dataTables_wrapper { + position: relative; +} +div.dt-buttons { + position: initial; +} +div.dt-buttons .dt-button { + overflow: hidden; + text-overflow: ellipsis; +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} +div.dtb-popover-close { + position: absolute; + top: 10px; + right: 10px; + width: 22px; + height: 22px; + border: 1px solid #eaeaea; + background-color: #f9f9f9; + text-align: center; + border-radius: 3px; + cursor: pointer; + z-index: 2003; +} +button.dtb-hide-drop { + display: none !important; +} +*/ div.dt-button-collection-title { + text-align: center; + padding: 0.3em 0 0.5em; + margin-left: 0.5em; + margin-right: 0.5em; + font-size: 0.9em; +} +div.dt-button-collection-title:empty { + display: none; +} +span.dt-button-spacer { + display: inline-block; + margin: 0.5em; + white-space: nowrap; +} +span.dt-button-spacer.bar { + border-left: 1px solid rgba(0, 0, 0, 0.3); + vertical-align: middle; + padding-left: 0.5em; +} +span.dt-button-spacer.bar:empty { + height: 1em; + width: 1px; + padding-left: 0; +} +div.dt-button-collection span.dt-button-spacer { + width: 100%; + font-size: 0.9em; + text-align: center; + margin: 0.5em 0; +} +div.dt-button-collection span.dt-button-spacer:empty { + height: 0; + width: 100%; +} +div.dt-button-collection span.dt-button-spacer.bar { + border-left: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.3); + padding-left: 0; +} +/* button.dt-button, +div.dt-button, +a.dt-button, +input.dt-button { + position: relative; + display: inline-block; + box-sizing: border-box; + margin-left: 0.167em; + margin-right: 0.167em; + margin-bottom: 0.333em; + padding: 0.5em 1em; + border: 1px solid rgba(0, 0, 0, 0.3); + border-radius: 2px; + cursor: pointer; + font-size: 0.88em; + line-height: 1.6em; + color: black; + white-space: nowrap; + overflow: hidden; + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(230, 230, 230, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(230, 230, 230, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-decoration: none; + outline: none; + text-overflow: ellipsis; +} +button.dt-button:first-child, +div.dt-button:first-child, +a.dt-button:first-child, +input.dt-button:first-child { + margin-left: 0; +} +button.dt-button.disabled, +div.dt-button.disabled, +a.dt-button.disabled, +input.dt-button.disabled { + cursor: default; + opacity: 0.4; +} +button.dt-button.active:not(.disabled), +div.dt-button.active:not(.disabled), +a.dt-button.active:not(.disabled), +input.dt-button.active:not(.disabled) { + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(179, 179, 179, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(179, 179, 179, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); + box-shadow: inset 1px 1px 3px #999; +} +button.dt-button.active:not(.disabled):hover:not(.disabled), +div.dt-button.active:not(.disabled):hover:not(.disabled), +a.dt-button.active:not(.disabled):hover:not(.disabled), +input.dt-button.active:not(.disabled):hover:not(.disabled) { + box-shadow: inset 1px 1px 3px #999; + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(128, 128, 128, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(128, 128, 128, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); +} +button.dt-button:hover, +div.dt-button:hover, +a.dt-button:hover, +input.dt-button:hover { + text-decoration: none; +} +button.dt-button:hover:not(.disabled), +div.dt-button:hover:not(.disabled), +a.dt-button:hover:not(.disabled), +input.dt-button:hover:not(.disabled) { + border: 1px solid #666; + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(153, 153, 153, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(153, 153, 153, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); +} +button.dt-button:focus:not(.disabled), +div.dt-button:focus:not(.disabled), +a.dt-button:focus:not(.disabled), +input.dt-button:focus:not(.disabled) { + border: 1px solid #426c9e; + text-shadow: 0 1px 0 #c4def1; + outline: none; + background-color: rgb(121, 172, 233); + background: linear-gradient(to bottom, #d1e2f7 0%, rgb(121, 172, 233) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#d1e2f7", EndColorStr="rgb(121, 172, 233)"); +} +button.dt-button.active:focus:not(.disabled), +div.dt-button.active:focus:not(.disabled), +a.dt-button.active:focus:not(.disabled), +input.dt-button.active:focus:not(.disabled) { + background: linear-gradient( + to bottom, + #d1e2f7 0%, + rgb(121, 172, 233) 100% + ) !important; +} +button.dt-button span.dt-down-arrow, +div.dt-button span.dt-down-arrow, +a.dt-button span.dt-down-arrow, +input.dt-button span.dt-down-arrow { + position: relative; + top: -2px; + color: rgba(70, 70, 70, 0.75); + font-size: 8px; + padding-left: 10px; + line-height: 1em; +} +.dt-button embed { + outline: none; +} +div.dt-buttons { + float: left; +} +div.dt-buttons.buttons-right { + float: right; +} */ +div.dataTables_layout_cell div.dt-buttons { + float: none; +} +div.dataTables_layout_cell div.dt-buttons.buttons-right { + float: none; +} +div.dt-btn-split-wrapper { + display: inline-block; +} +div.dt-button-collection { + position: absolute; + top: 0; + left: 0; + width: 200px; + margin-top: 3px; + margin-bottom: 3px; + padding: 4px 4px 2px 4px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: white; + overflow: hidden; + z-index: 2002; + border-radius: 5px; + box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3); + box-sizing: border-box; +} +div.dt-button-collection button.dt-button, +div.dt-button-collection div.dt-button, +div.dt-button-collection a.dt-button { + position: relative; + left: 0; + right: 0; + width: 100%; + display: block; + float: none; + margin: 4px 0 2px 0; +} +div.dt-button-collection button.dt-button:active:not(.disabled), +div.dt-button-collection button.dt-button.active:not(.disabled), +div.dt-button-collection div.dt-button:active:not(.disabled), +div.dt-button-collection div.dt-button.active:not(.disabled), +div.dt-button-collection a.dt-button:active:not(.disabled), +div.dt-button-collection a.dt-button.active:not(.disabled) { + background-color: #dadada; + background: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada"); + box-shadow: inset 1px 1px 3px #666; +} +div.dt-button-collection button.dt-button:first-child, +div.dt-button-collection div.dt-button:first-child, +div.dt-button-collection a.dt-button:first-child { + margin-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +div.dt-button-collection button.dt-button:last-child, +div.dt-button-collection div.dt-button:last-child, +div.dt-button-collection a.dt-button:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +div.dt-button-collection div.dt-btn-split-wrapper { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: stretch; + margin: 4px 0 2px 0; +} +div.dt-button-collection div.dt-btn-split-wrapper button.dt-button { + margin: 0; + display: inline-block; + width: 0; + flex-grow: 1; + flex-shrink: 0; + flex-basis: 50px; + border-radius: 0; +} +div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop { + min-width: 20px; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 0; +} +div.dt-button-collection div.dt-btn-split-wrapper:first-child { + margin-top: 0; +} +div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-button { + border-top-left-radius: 3px; +} +div.dt-button-collection + div.dt-btn-split-wrapper:first-child + button.dt-btn-split-drop { + border-top-right-radius: 3px; +} +div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-button { + border-bottom-left-radius: 3px; +} +div.dt-button-collection + div.dt-btn-split-wrapper:last-child + button.dt-btn-split-drop { + border-bottom-right-radius: 3px; +} +div.dt-button-collection + div.dt-btn-split-wrapper:active:not(.disabled) + button.dt-button, +div.dt-button-collection + div.dt-btn-split-wrapper.active:not(.disabled) + button.dt-button { + background-color: #dadada; + background: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada"); + box-shadow: inset 0px 0px 4px #666; +} +div.dt-button-collection + div.dt-btn-split-wrapper:active:not(.disabled) + button.dt-btn-split-drop, +div.dt-button-collection + div.dt-btn-split-wrapper.active:not(.disabled) + button.dt-btn-split-drop { + box-shadow: none; +} +div.dt-button-collection.fixed .dt-button:first-child { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +div.dt-button-collection.fixed .dt-button:last-child { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +div.dt-button-collection.fixed { + position: fixed; + display: block; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 5px; + background-color: white; +} +div.dt-button-collection.fixed.two-column { + margin-left: -200px; +} +div.dt-button-collection.fixed.three-column { + margin-left: -225px; +} +div.dt-button-collection.fixed.four-column { + margin-left: -300px; +} +div.dt-button-collection.fixed.columns { + margin-left: -409px; +} +@media screen and (max-width: 1024px) { + div.dt-button-collection.fixed.columns { + margin-left: -308px; + } +} +@media screen and (max-width: 640px) { + div.dt-button-collection.fixed.columns { + margin-left: -203px; + } +} +@media screen and (max-width: 460px) { + div.dt-button-collection.fixed.columns { + margin-left: -100px; + } +} +div.dt-button-collection.fixed > :last-child { + max-height: 100vh; + overflow: auto; +} +div.dt-button-collection.two-column > :last-child, +div.dt-button-collection.three-column > :last-child, +div.dt-button-collection.four-column > :last-child { + display: block !important; + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +div.dt-button-collection.two-column > :last-child > *, +div.dt-button-collection.three-column > :last-child > *, +div.dt-button-collection.four-column > :last-child > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +div.dt-button-collection.two-column { + width: 400px; +} +div.dt-button-collection.two-column > :last-child { + padding-bottom: 1px; + column-count: 2; +} +div.dt-button-collection.three-column { + width: 450px; +} +div.dt-button-collection.three-column > :last-child { + padding-bottom: 1px; + column-count: 3; +} +div.dt-button-collection.four-column { + width: 600px; +} +div.dt-button-collection.four-column > :last-child { + padding-bottom: 1px; + column-count: 4; +} +div.dt-button-collection .dt-button { + border-radius: 0; +} +div.dt-button-collection.columns { + width: auto; +} +div.dt-button-collection.columns > :last-child { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + gap: 6px; + width: 818px; + padding-bottom: 1px; +} +div.dt-button-collection.columns > :last-child .dt-button { + min-width: 200px; + flex: 0 1; + margin: 0; +} +div.dt-button-collection.columns.dtb-b3 > :last-child, +div.dt-button-collection.columns.dtb-b2 > :last-child, +div.dt-button-collection.columns.dtb-b1 > :last-child { + justify-content: space-between; +} +div.dt-button-collection.columns.dtb-b3 .dt-button { + flex: 1 1 32%; +} +div.dt-button-collection.columns.dtb-b2 .dt-button { + flex: 1 1 48%; +} +div.dt-button-collection.columns.dtb-b1 .dt-button { + flex: 1 1 100%; +} +@media screen and (max-width: 1024px) { + div.dt-button-collection.columns > :last-child { + width: 612px; + } +} +@media screen and (max-width: 640px) { + div.dt-button-collection.columns > :last-child { + width: 406px; + } + div.dt-button-collection.columns.dtb-b3 .dt-button { + flex: 0 1 32%; + } +} +@media screen and (max-width: 460px) { + div.dt-button-collection.columns > :last-child { + width: 200px; + } +} +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); + background: radial-gradient( + ellipse farthest-corner at center, + rgba(0, 0, 0, 0.3) 0%, + rgba(0, 0, 0, 0.7) 100% + ); + z-index: 2001; +} +@media screen and (max-width: 640px) { + div.dt-buttons { + float: none !important; + text-align: center; + } +} +button.dt-button.processing, +div.dt-button.processing, +a.dt-button.processing { + color: rgba(0, 0, 0, 0.2); +} +button.dt-button.processing:after, +div.dt-button.processing:after, +a.dt-button.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: " "; + border: 2px solid rgb(40, 40, 40); + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} +button.dt-btn-split-drop { + margin-left: calc(-1px - 0.333em); + padding-bottom: calc(0.5em - 1px); + border-radius: 0px 1px 1px 0px; + color: rgba(70, 70, 70, 0.9); + border-left: none; +} +button.dt-btn-split-drop span.dt-btn-split-drop-arrow { + position: relative; + top: -1px; + left: -2px; + font-size: 8px; +} +button.dt-btn-split-drop:hover { + z-index: 2; +} +button.buttons-split { + border-right: 1px solid rgba(70, 70, 70, 0); + border-radius: 1px 0px 0px 1px; +} +button.dt-btn-split-drop-button { + background-color: rgb(255, 255, 255); +} +button.dt-btn-split-drop-button:hover { + background-color: rgb(255, 255, 255); +} + +/* @keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dataTables_wrapper { + position: relative; +} +div.dt-buttons { + position: initial; +} +div.dt-buttons .dt-button { + overflow: hidden; + text-overflow: ellipsis; +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} +div.dtb-popover-close { + position: absolute; + top: 10px; + right: 10px; + width: 22px; + height: 22px; + border: 1px solid #eaeaea; + background-color: #f9f9f9; + text-align: center; + border-radius: 3px; + cursor: pointer; + z-index: 2003; +} +button.dtb-hide-drop { + display: none !important; +} +div.dt-button-collection-title { + text-align: center; + padding: 0.3em 0 0.5em; + margin-left: 0.5em; + margin-right: 0.5em; + font-size: 0.9em; +} +div.dt-button-collection-title:empty { + display: none; +} +span.dt-button-spacer { + display: inline-block; + margin: 0.5em; + white-space: nowrap; +} +span.dt-button-spacer.bar { + border-left: 1px solid rgba(0, 0, 0, 0.3); + vertical-align: middle; + padding-left: 0.5em; +} +span.dt-button-spacer.bar:empty { + height: 1em; + width: 1px; + padding-left: 0; +} +div.dt-button-collection span.dt-button-spacer { + width: 100%; + font-size: 0.9em; + text-align: center; + margin: 0.5em 0; +} +div.dt-button-collection span.dt-button-spacer:empty { + height: 0; + width: 100%; +} +div.dt-button-collection span.dt-button-spacer.bar { + border-left: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.3); + padding-left: 0; +} +button.dt-button, +div.dt-button, +a.dt-button, +input.dt-button { + position: relative; + display: inline-block; + box-sizing: border-box; + margin-left: 0.167em; + margin-right: 0.167em; + margin-bottom: 0.333em; + padding: 0.5em 1em; + border: 1px solid rgba(0, 0, 0, 0.3); + border-radius: 2px; + cursor: pointer; + font-size: 0.88em; + line-height: 1.6em; + color: black; + white-space: nowrap; + overflow: hidden; + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(230, 230, 230, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(230, 230, 230, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-decoration: none; + outline: none; + text-overflow: ellipsis; +} +button.dt-button:first-child, +div.dt-button:first-child, +a.dt-button:first-child, +input.dt-button:first-child { + margin-left: 0; +} +button.dt-button.disabled, +div.dt-button.disabled, +a.dt-button.disabled, +input.dt-button.disabled { + cursor: default; + opacity: 0.4; +} +button.dt-button.active:not(.disabled), +div.dt-button.active:not(.disabled), +a.dt-button.active:not(.disabled), +input.dt-button.active:not(.disabled) { + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(179, 179, 179, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(179, 179, 179, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); + box-shadow: inset 1px 1px 3px #999; +} +button.dt-button.active:not(.disabled):hover:not(.disabled), +div.dt-button.active:not(.disabled):hover:not(.disabled), +a.dt-button.active:not(.disabled):hover:not(.disabled), +input.dt-button.active:not(.disabled):hover:not(.disabled) { + box-shadow: inset 1px 1px 3px #999; + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(128, 128, 128, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(128, 128, 128, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); +} +button.dt-button:hover, +div.dt-button:hover, +a.dt-button:hover, +input.dt-button:hover { + text-decoration: none; +} +button.dt-button:hover:not(.disabled), +div.dt-button:hover:not(.disabled), +a.dt-button:hover:not(.disabled), +input.dt-button:hover:not(.disabled) { + border: 1px solid #666; + background-color: rgba(0, 0, 0, 0.1); + background: linear-gradient( + to bottom, + rgba(153, 153, 153, 0.1) 0%, + rgba(0, 0, 0, 0.1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(153, 153, 153, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)"); +} +button.dt-button:focus:not(.disabled), +div.dt-button:focus:not(.disabled), +a.dt-button:focus:not(.disabled), +input.dt-button:focus:not(.disabled) { + border: 1px solid #426c9e; + text-shadow: 0 1px 0 #c4def1; + outline: none; + background-color: rgb(121, 172, 233); + background: linear-gradient(to bottom, #d1e2f7 0%, rgb(121, 172, 233) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#d1e2f7", EndColorStr="rgb(121, 172, 233)"); +} +button.dt-button.active:focus:not(.disabled), +div.dt-button.active:focus:not(.disabled), +a.dt-button.active:focus:not(.disabled), +input.dt-button.active:focus:not(.disabled) { + background: linear-gradient( + to bottom, + #d1e2f7 0%, + rgb(121, 172, 233) 100% + ) !important; +} +button.dt-button span.dt-down-arrow, +div.dt-button span.dt-down-arrow, +a.dt-button span.dt-down-arrow, +input.dt-button span.dt-down-arrow { + position: relative; + top: -2px; + color: rgba(70, 70, 70, 0.75); + font-size: 8px; + padding-left: 10px; + line-height: 1em; +} +.dt-button embed { + outline: none; +} +div.dt-buttons { + float: left; +} +div.dt-buttons.buttons-right { + float: right; +} +div.dataTables_layout_cell div.dt-buttons { + float: none; +} +div.dataTables_layout_cell div.dt-buttons.buttons-right { + float: none; +} +div.dt-btn-split-wrapper { + display: inline-block; +} +div.dt-button-collection { + position: absolute; + top: 0; + left: 0; + width: 200px; + margin-top: 3px; + margin-bottom: 3px; + padding: 4px 4px 2px 4px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: white; + overflow: hidden; + z-index: 2002; + border-radius: 5px; + box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3); + box-sizing: border-box; +} +div.dt-button-collection button.dt-button, +div.dt-button-collection div.dt-button, +div.dt-button-collection a.dt-button { + position: relative; + left: 0; + right: 0; + width: 100%; + display: block; + float: none; + margin: 4px 0 2px 0; +} +div.dt-button-collection button.dt-button:active:not(.disabled), +div.dt-button-collection button.dt-button.active:not(.disabled), +div.dt-button-collection div.dt-button:active:not(.disabled), +div.dt-button-collection div.dt-button.active:not(.disabled), +div.dt-button-collection a.dt-button:active:not(.disabled), +div.dt-button-collection a.dt-button.active:not(.disabled) { + background-color: #dadada; + background: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada"); + box-shadow: inset 1px 1px 3px #666; +} +div.dt-button-collection button.dt-button:first-child, +div.dt-button-collection div.dt-button:first-child, +div.dt-button-collection a.dt-button:first-child { + margin-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +div.dt-button-collection button.dt-button:last-child, +div.dt-button-collection div.dt-button:last-child, +div.dt-button-collection a.dt-button:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +div.dt-button-collection div.dt-btn-split-wrapper { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: stretch; + margin: 4px 0 2px 0; +} +div.dt-button-collection div.dt-btn-split-wrapper button.dt-button { + margin: 0; + display: inline-block; + width: 0; + flex-grow: 1; + flex-shrink: 0; + flex-basis: 50px; + border-radius: 0; +} +div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop { + min-width: 20px; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 0; +} +div.dt-button-collection div.dt-btn-split-wrapper:first-child { + margin-top: 0; +} +div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-button { + border-top-left-radius: 3px; +} +div.dt-button-collection + div.dt-btn-split-wrapper:first-child + button.dt-btn-split-drop { + border-top-right-radius: 3px; +} +div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-button { + border-bottom-left-radius: 3px; +} +div.dt-button-collection + div.dt-btn-split-wrapper:last-child + button.dt-btn-split-drop { + border-bottom-right-radius: 3px; +} +div.dt-button-collection + div.dt-btn-split-wrapper:active:not(.disabled) + button.dt-button, +div.dt-button-collection + div.dt-btn-split-wrapper.active:not(.disabled) + button.dt-button { + background-color: #dadada; + background: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada"); + box-shadow: inset 0px 0px 4px #666; +} +div.dt-button-collection + div.dt-btn-split-wrapper:active:not(.disabled) + button.dt-btn-split-drop, +div.dt-button-collection + div.dt-btn-split-wrapper.active:not(.disabled) + button.dt-btn-split-drop { + box-shadow: none; +} +div.dt-button-collection.fixed .dt-button:first-child { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +div.dt-button-collection.fixed .dt-button:last-child { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +div.dt-button-collection.fixed { + position: fixed; + display: block; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 5px; + background-color: white; +} +div.dt-button-collection.fixed.two-column { + margin-left: -200px; +} +div.dt-button-collection.fixed.three-column { + margin-left: -225px; +} +div.dt-button-collection.fixed.four-column { + margin-left: -300px; +} +div.dt-button-collection.fixed.columns { + margin-left: -409px; +} +@media screen and (max-width: 1024px) { + div.dt-button-collection.fixed.columns { + margin-left: -308px; + } +} +@media screen and (max-width: 640px) { + div.dt-button-collection.fixed.columns { + margin-left: -203px; + } +} +@media screen and (max-width: 460px) { + div.dt-button-collection.fixed.columns { + margin-left: -100px; + } +} +div.dt-button-collection.fixed > :last-child { + max-height: 100vh; + overflow: auto; +} +div.dt-button-collection.two-column > :last-child, +div.dt-button-collection.three-column > :last-child, +div.dt-button-collection.four-column > :last-child { + display: block !important; + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +div.dt-button-collection.two-column > :last-child > *, +div.dt-button-collection.three-column > :last-child > *, +div.dt-button-collection.four-column > :last-child > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +div.dt-button-collection.two-column { + width: 400px; +} +div.dt-button-collection.two-column > :last-child { + padding-bottom: 1px; + column-count: 2; +} +div.dt-button-collection.three-column { + width: 450px; +} +div.dt-button-collection.three-column > :last-child { + padding-bottom: 1px; + column-count: 3; +} +div.dt-button-collection.four-column { + width: 600px; +} +div.dt-button-collection.four-column > :last-child { + padding-bottom: 1px; + column-count: 4; +} +div.dt-button-collection .dt-button { + border-radius: 0; +} +div.dt-button-collection.columns { + width: auto; +} +div.dt-button-collection.columns > :last-child { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + gap: 6px; + width: 818px; + padding-bottom: 1px; +} +div.dt-button-collection.columns > :last-child .dt-button { + min-width: 200px; + flex: 0 1; + margin: 0; +} +div.dt-button-collection.columns.dtb-b3 > :last-child, +div.dt-button-collection.columns.dtb-b2 > :last-child, +div.dt-button-collection.columns.dtb-b1 > :last-child { + justify-content: space-between; +} +div.dt-button-collection.columns.dtb-b3 .dt-button { + flex: 1 1 32%; +} +div.dt-button-collection.columns.dtb-b2 .dt-button { + flex: 1 1 48%; +} +div.dt-button-collection.columns.dtb-b1 .dt-button { + flex: 1 1 100%; +} +@media screen and (max-width: 1024px) { + div.dt-button-collection.columns > :last-child { + width: 612px; + } +} +@media screen and (max-width: 640px) { + div.dt-button-collection.columns > :last-child { + width: 406px; + } + div.dt-button-collection.columns.dtb-b3 .dt-button { + flex: 0 1 32%; + } +} +@media screen and (max-width: 460px) { + div.dt-button-collection.columns > :last-child { + width: 200px; + } +} +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); + background: radial-gradient( + ellipse farthest-corner at center, + rgba(0, 0, 0, 0.3) 0%, + rgba(0, 0, 0, 0.7) 100% + ); + z-index: 2001; +} +@media screen and (max-width: 640px) { + div.dt-buttons { + float: none !important; + text-align: center; + } +} +button.dt-button.processing, +div.dt-button.processing, +a.dt-button.processing { + color: rgba(0, 0, 0, 0.2); +} +button.dt-button.processing:after, +div.dt-button.processing:after, +a.dt-button.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: " "; + border: 2px solid rgb(40, 40, 40); + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} +button.dt-btn-split-drop { + margin-left: calc(-1px - 0.333em); + padding-bottom: calc(0.5em - 1px); + border-radius: 0px 1px 1px 0px; + color: rgba(70, 70, 70, 0.9); + border-left: none; +} +button.dt-btn-split-drop span.dt-btn-split-drop-arrow { + position: relative; + top: -1px; + left: -2px; + font-size: 8px; +} +button.dt-btn-split-drop:hover { + z-index: 2; +} +button.buttons-split { + border-right: 1px solid rgba(70, 70, 70, 0); + border-radius: 1px 0px 0px 1px; +} +button.dt-btn-split-drop-button { + background-color: rgb(255, 255, 255); +} +button.dt-btn-split-drop-button:hover { + background-color: rgb(255, 255, 255); +} */ diff --git a/public/admin/css/font-awesome.min.css b/public/admin/css/font-awesome.min.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/public/admin/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/public/admin/css/maps/vertical-layout-light/style.css.map b/public/admin/css/maps/vertical-layout-light/style.css.map new file mode 100644 index 0000000..2c501d7 --- /dev/null +++ b/public/admin/css/maps/vertical-layout-light/style.css.map @@ -0,0 +1 @@ +{"version":3,"file":"../../vertical-layout-light/style.css","sources":["vertical-layout-light/style.scss","common/light/common.scss","../node_modules/bootstrap/scss/_functions.scss","../node_modules/bootstrap/scss/_variables.scss","common/light/_variables.scss","../node_modules/compass-mixins/lib/_compass.scss","../node_modules/compass-mixins/lib/compass/_functions.scss","../node_modules/compass-mixins/lib/compass/functions/_lists.scss","../node_modules/compass-mixins/lib/compass/functions/_cross_browser_support.scss","../node_modules/compass-mixins/lib/compass/functions/_gradient_support.scss","../node_modules/compass-mixins/lib/compass/functions/_constants.scss","../node_modules/compass-mixins/lib/compass/functions/_display.scss","../node_modules/compass-mixins/lib/compass/functions/_colors.scss","../node_modules/compass-mixins/lib/compass/_utilities.scss","../node_modules/compass-mixins/lib/compass/utilities/_color.scss","../node_modules/compass-mixins/lib/compass/utilities/color/_contrast.scss","../node_modules/compass-mixins/lib/compass/utilities/_general.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_reset.scss","../node_modules/compass-mixins/lib/compass/reset/_utilities.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_clearfix.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_hacks.scss","../node_modules/compass-mixins/lib/compass/_support.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_float.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_tag-cloud.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_min.scss","../node_modules/compass-mixins/lib/compass/utilities/_sprites.scss","../node_modules/compass-mixins/lib/compass/utilities/sprites/_base.scss","../node_modules/compass-mixins/lib/compass/utilities/sprites/_sprite-img.scss","../node_modules/compass-mixins/lib/compass/utilities/_tables.scss","../node_modules/compass-mixins/lib/compass/utilities/tables/_alternating-rows-and-columns.scss","../node_modules/compass-mixins/lib/compass/utilities/tables/_borders.scss","../node_modules/compass-mixins/lib/compass/utilities/tables/_scaffolding.scss","../node_modules/compass-mixins/lib/compass/typography/_links.scss","../node_modules/compass-mixins/lib/compass/typography/links/_hover-link.scss","../node_modules/compass-mixins/lib/compass/typography/links/_link-colors.scss","../node_modules/compass-mixins/lib/compass/typography/links/_unstyled-link.scss","../node_modules/compass-mixins/lib/compass/typography/_lists.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_horizontal-list.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_bullets.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_inline-list.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_inline-block-list.scss","../node_modules/compass-mixins/lib/compass/css3/_inline-block.scss","../node_modules/compass-mixins/lib/compass/css3/_shared.scss","../node_modules/compass-mixins/lib/compass/typography/_text.scss","../node_modules/compass-mixins/lib/compass/typography/text/_ellipsis.scss","../node_modules/compass-mixins/lib/compass/typography/text/_nowrap.scss","../node_modules/compass-mixins/lib/compass/typography/text/_replacement.scss","../node_modules/compass-mixins/lib/compass/typography/text/_force-wrap.scss","../node_modules/compass-mixins/lib/compass/_typography.scss","../node_modules/compass-mixins/lib/compass/typography/_vertical_rhythm.scss","../node_modules/compass-mixins/lib/compass/layout/_grid-background.scss","../node_modules/compass-mixins/lib/compass/css3/_images.scss","../node_modules/compass-mixins/lib/compass/css3/_background-size.scss","../node_modules/compass-mixins/lib/compass/_css3.scss","../node_modules/compass-mixins/lib/compass/css3/_border-radius.scss","../node_modules/compass-mixins/lib/compass/css3/_opacity.scss","../node_modules/compass-mixins/lib/compass/css3/_box-shadow.scss","../node_modules/compass-mixins/lib/compass/css3/_text-shadow.scss","../node_modules/compass-mixins/lib/compass/css3/_columns.scss","../node_modules/compass-mixins/lib/compass/css3/_box-sizing.scss","../node_modules/compass-mixins/lib/compass/css3/_box.scss","../node_modules/compass-mixins/lib/compass/css3/_background-clip.scss","../node_modules/compass-mixins/lib/compass/css3/_background-origin.scss","../node_modules/compass-mixins/lib/compass/css3/_font-face.scss","../node_modules/compass-mixins/lib/compass/css3/_transform.scss","../node_modules/compass-mixins/lib/compass/css3/_transition.scss","../node_modules/compass-mixins/lib/compass/css3/_appearance.scss","../node_modules/compass-mixins/lib/compass/css3/_regions.scss","../node_modules/compass-mixins/lib/compass/css3/_hyphenation.scss","../node_modules/compass-mixins/lib/compass/css3/_filter.scss","../node_modules/compass-mixins/lib/compass/css3/_pie.scss","../node_modules/compass-mixins/lib/compass/css3/_user-interface.scss","../node_modules/compass-mixins/lib/compass/css3/_flexbox.scss","../node_modules/compass-mixins/lib/_animate.scss","../node_modules/compass-mixins/lib/animation/_core.scss","../node_modules/compass-mixins/lib/animation/_shared.scss","../node_modules/compass-mixins/lib/animation/_animate.scss","../node_modules/compass-mixins/lib/animation/animate/_attention-seekers.scss","../node_modules/compass-mixins/lib/animation/animate/_bouncing.scss","../node_modules/compass-mixins/lib/animation/animate/bouncing/_bouncing-exits.scss","../node_modules/compass-mixins/lib/animation/animate/bouncing/_bouncing-entrances.scss","../node_modules/compass-mixins/lib/animation/animate/_fading.scss","../node_modules/compass-mixins/lib/animation/animate/fading/_fading-exits.scss","../node_modules/compass-mixins/lib/animation/animate/fading/_fading-entrances.scss","../node_modules/compass-mixins/lib/animation/animate/_flippers.scss","../node_modules/compass-mixins/lib/animation/animate/_lightspeed.scss","../node_modules/compass-mixins/lib/animation/animate/_rotating.scss","../node_modules/compass-mixins/lib/animation/animate/rotating/_rotating-exits.scss","../node_modules/compass-mixins/lib/animation/animate/rotating/_rotating-entrances.scss","../node_modules/compass-mixins/lib/animation/animate/_specials.scss","../node_modules/bootstrap/scss/bootstrap.scss","../node_modules/bootstrap/scss/_mixins.scss","../node_modules/bootstrap/scss/vendor/_rfs.scss","../node_modules/bootstrap/scss/mixins/_deprecate.scss","../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../node_modules/bootstrap/scss/mixins/_hover.scss","../node_modules/bootstrap/scss/mixins/_image.scss","../node_modules/bootstrap/scss/mixins/_badge.scss","../node_modules/bootstrap/scss/mixins/_resize.scss","../node_modules/bootstrap/scss/mixins/_screen-reader.scss","../node_modules/bootstrap/scss/mixins/_size.scss","../node_modules/bootstrap/scss/mixins/_reset-text.scss","../node_modules/bootstrap/scss/mixins/_text-emphasis.scss","../node_modules/bootstrap/scss/mixins/_text-hide.scss","../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../node_modules/bootstrap/scss/mixins/_visibility.scss","../node_modules/bootstrap/scss/mixins/_alert.scss","../node_modules/bootstrap/scss/mixins/_buttons.scss","../node_modules/bootstrap/scss/mixins/_caret.scss","../node_modules/bootstrap/scss/mixins/_pagination.scss","../node_modules/bootstrap/scss/mixins/_lists.scss","../node_modules/bootstrap/scss/mixins/_list-group.scss","../node_modules/bootstrap/scss/mixins/_nav-divider.scss","../node_modules/bootstrap/scss/mixins/_forms.scss","../node_modules/bootstrap/scss/mixins/_table-row.scss","../node_modules/bootstrap/scss/mixins/_background-variant.scss","../node_modules/bootstrap/scss/mixins/_border-radius.scss","../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../node_modules/bootstrap/scss/mixins/_gradients.scss","../node_modules/bootstrap/scss/mixins/_transition.scss","../node_modules/bootstrap/scss/mixins/_clearfix.scss","../node_modules/bootstrap/scss/mixins/_grid-framework.scss","../node_modules/bootstrap/scss/mixins/_grid.scss","../node_modules/bootstrap/scss/mixins/_float.scss","../node_modules/bootstrap/scss/_root.scss","../node_modules/bootstrap/scss/_reboot.scss","../node_modules/bootstrap/scss/_type.scss","../node_modules/bootstrap/scss/_images.scss","../node_modules/bootstrap/scss/_code.scss","../node_modules/bootstrap/scss/_grid.scss","../node_modules/bootstrap/scss/_tables.scss","../node_modules/bootstrap/scss/_forms.scss","../node_modules/bootstrap/scss/_buttons.scss","../node_modules/bootstrap/scss/_transitions.scss","../node_modules/bootstrap/scss/_dropdown.scss","../node_modules/bootstrap/scss/_button-group.scss","../node_modules/bootstrap/scss/_input-group.scss","../node_modules/bootstrap/scss/_custom-forms.scss","../node_modules/bootstrap/scss/_nav.scss","../node_modules/bootstrap/scss/_navbar.scss","../node_modules/bootstrap/scss/_card.scss","../node_modules/bootstrap/scss/_breadcrumb.scss","../node_modules/bootstrap/scss/_pagination.scss","../node_modules/bootstrap/scss/_badge.scss","../node_modules/bootstrap/scss/_jumbotron.scss","../node_modules/bootstrap/scss/_alert.scss","../node_modules/bootstrap/scss/_progress.scss","../node_modules/bootstrap/scss/_media.scss","../node_modules/bootstrap/scss/_list-group.scss","../node_modules/bootstrap/scss/_close.scss","../node_modules/bootstrap/scss/_toasts.scss","../node_modules/bootstrap/scss/_modal.scss","../node_modules/bootstrap/scss/_tooltip.scss","../node_modules/bootstrap/scss/_popover.scss","../node_modules/bootstrap/scss/_carousel.scss","../node_modules/bootstrap/scss/_spinners.scss","../node_modules/bootstrap/scss/_utilities.scss","../node_modules/bootstrap/scss/utilities/_align.scss","../node_modules/bootstrap/scss/utilities/_background.scss","../node_modules/bootstrap/scss/utilities/_borders.scss","../node_modules/bootstrap/scss/utilities/_clearfix.scss","../node_modules/bootstrap/scss/utilities/_display.scss","../node_modules/bootstrap/scss/utilities/_embed.scss","../node_modules/bootstrap/scss/utilities/_flex.scss","../node_modules/bootstrap/scss/utilities/_float.scss","../node_modules/bootstrap/scss/utilities/_interactions.scss","../node_modules/bootstrap/scss/utilities/_overflow.scss","../node_modules/bootstrap/scss/utilities/_position.scss","../node_modules/bootstrap/scss/utilities/_screenreaders.scss","../node_modules/bootstrap/scss/utilities/_shadows.scss","../node_modules/bootstrap/scss/utilities/_sizing.scss","../node_modules/bootstrap/scss/utilities/_spacing.scss","../node_modules/bootstrap/scss/utilities/_stretched-link.scss","../node_modules/bootstrap/scss/utilities/_text.scss","../node_modules/bootstrap/scss/utilities/_visibility.scss","../node_modules/bootstrap/scss/_print.scss","common/light/mixins/_misc.scss","common/light/mixins/_animation.scss","common/light/mixins/_badges.scss","common/light/mixins/_blockqoute.scss","common/light/mixins/_buttons.scss","common/light/mixins/_breadcrumbs.scss","common/light/mixins/_cards.scss","common/light/mixins/_no-ui-slider.scss","common/light/mixins/_pagination.scss","common/light/mixins/_popovers.scss","common/light/mixins/_tooltips.scss","common/light/_reset.scss","common/light/_fonts.scss","common/light/_functions.scss","common/light/_background.scss","common/light/_typography.scss","common/light/_misc.scss","common/light/_footer.scss","common/light/_utilities.scss","common/light/_demo.scss","common/light/_dashboard.scss","common/light/components/_accordions.scss","common/light/components/_badges.scss","common/light/components/_bootstrap-alerts.scss","common/light/components/_bootstrap-progress.scss","common/light/components/_buttons.scss","common/light/components/_breadcrumbs.scss","common/light/components/_cards.scss","common/light/components/_checkbox-radio.scss","common/light/components/_dropdown.scss","common/light/components/_forms.scss","common/light/components/_google-maps.scss","common/light/components/_icons.scss","common/light/components/loaders/_loaders.scss","common/light/components/loaders/_variables.scss","common/light/components/loaders/_colored-balls.scss","common/light/components/loaders/_glowing-ball.scss","common/light/components/loaders/_pixel-loader.scss","common/light/components/loaders/_square-box.scss","common/light/components/loaders/_circle-loader.scss","common/light/components/loaders/_jumping-dots-loader.scss","common/light/components/loaders/_bar-loader.scss","common/light/components/loaders/_square-path-loader.scss","common/light/components/loaders/_dot-opacity-loader.scss","common/light/components/loaders/_flip-square-loader.scss","common/light/components/loaders/_moving-square-loader.scss","common/light/components/_lists.scss","common/light/components/_modals.scss","common/light/components/_pagination.scss","common/light/components/_popover.scss","common/light/components/_portfolio.scss","common/light/components/_preview.scss","common/light/components/_tables.scss","common/light/components/_tabs.scss","common/light/components/_timeline.scss","common/light/components/_todo-list.scss","common/light/components/_tooltips.scss","common/light/components/_user-profile.scss","common/light/components/_pricing-table.scss","common/light/components/mail-components/_mail-sidebar.scss","common/light/components/mail-components/_mail-list-container.scss","common/light/components/mail-components/_messagecontent.scss","common/light/components/plugin-overrides/_ace.scss","common/light/components/plugin-overrides/_avgrund.scss","common/light/components/plugin-overrides/_chartist.scss","common/light/components/plugin-overrides/_codemirror.scss","common/light/components/plugin-overrides/_colcade.scss","common/light/components/plugin-overrides/_colorpicker.scss","common/light/components/plugin-overrides/_context-menu.scss","common/light/components/plugin-overrides/_data-tables.scss","common/light/components/plugin-overrides/_datepicker.scss","common/light/components/plugin-overrides/_dropify.scss","common/light/components/plugin-overrides/_dropzone.scss","common/light/components/plugin-overrides/_flot-chart.scss","common/light/components/plugin-overrides/_full-calendar.scss","common/light/components/plugin-overrides/_google-charts.scss","common/light/components/plugin-overrides/_icheck.scss","common/light/components/plugin-overrides/_jquery-file-upload.scss","common/light/components/plugin-overrides/_js-grid.scss","common/light/components/plugin-overrides/_jvectormap.scss","common/light/components/plugin-overrides/_light-gallery.scss","common/light/components/plugin-overrides/_listify.scss","common/light/components/plugin-overrides/_mapael.scss","common/light/components/plugin-overrides/_no-ui-slider.scss","common/light/components/plugin-overrides/_owl-carousel.scss","common/light/components/plugin-overrides/_progressbar-js.scss","common/light/components/plugin-overrides/_pws-tabs.scss","common/light/components/plugin-overrides/_quill.scss","common/light/components/plugin-overrides/_rating.scss","common/light/components/plugin-overrides/_select2.scss","common/light/components/plugin-overrides/_summernote.scss","common/light/components/plugin-overrides/_sweet-alert.scss","common/light/components/plugin-overrides/_switchery.scss","common/light/components/plugin-overrides/_tags.scss","common/light/components/plugin-overrides/_tinymce.scss","common/light/components/plugin-overrides/_toast.scss","common/light/components/plugin-overrides/_typeahead.scss","common/light/components/plugin-overrides/_wysieditor.scss","common/light/components/plugin-overrides/_x-editable.scss","common/light/components/plugin-overrides/_wizard.scss","common/light/landing-screens/_auth.scss","vertical-layout-light/_variables.scss","vertical-layout-light/_vertical-wrapper.scss","vertical-layout-light/_sidebar.scss","vertical-layout-light/_navbar.scss","vertical-layout-light/_layouts.scss","vertical-layout-light/_settings-panel.scss"],"sourcesContent":["@import \"../common/light/common\";\n@import \"variables\";\n@import \"vertical-wrapper\";\n@import \"sidebar\";\n@import \"navbar\";\n@import \"layouts\";\n@import \"settings-panel\"","/*------------------------------------------------------------------\n [Master Stylesheet]\n\n Project:\tSkyDash Admin\n Version:\t1.2.1\n-------------------------------------------------------------------*/\n\n\n\n/*-------------------------------------------------------------------\n ===== Table of Contents =====\n\n * Bootstrap functions\n * Template variables\n * SCSS Compass Functions\n * Boostrap Main SCSS\n * Template mixins\n + Animation Mixins\n + Badge Mixins\n + Button Mixins\n + Miscellaneous Mixins\n + BlockQuote Mixins\n + Cards Mixins\n + Color Functions Mixins\n + Tooltips\n + popovers\n * Core Styles\n + Reset Styles\n + Fonts\n + Functions\n + Backgrounds\n + Sidebar\n + Navbar\n + Typography\n + Miscellaneous\n + Footer\n + Layouts\n + Utilities\n + Demo styles\n * Components\n + Accordions\n + Badges\n + Bootstrap Alerts\n + Boostrap Progress\n + Buttons\n + Breadcrumbs\n + Cards\n + Checkboxes and Radios\n + Dropdowns\n + Forms\n + Google maps\n + Icons\n + Loaders\n + Lists\n + Modals\n + Pagination\n + Popover\n + Portfolio\n + Preview\n + Tables\n + Tabs\n + Timeline\n + Todo List\n + Tooltips\n + User Profile\n + Pricing table\n + Settings Panel\n * Email\n + Mail Sidebar\n + Mail List Container\n + Message Content\n * Plugin Overrides\n + Ace Editor\n + Avgrund Popup\n + Bootstrap Tour\n + Chartist\n + CodeMirror\n + Colcade\n + Colorpicker\n + Context Menu\n + Data Tables\n + Datepicker\n + Dropify\n + Dropzone\n + Flot chart\n + Full Calendar\n + Google Charts\n + Icheck\n + Jquery File Upload\n + Js-grid\n + Jvectormap\n + Light Gallery\n + Listify\n + No-ui-slider\n + Owl-carousel\n + Progressbar-js\n + Pws-tabs\n + Quill Editor\n + Rating\n + Select2\n + Summernote Editor\n + SweetAlert\n + Switchery\n + Tags\n + TinyMCE Editor\n + Toast\n + Typeahead\n + Wysi Editor\n + X-editable\n + Wizard\n * Landing screens\n + Auth\n * Horizontal Menu\n + Horizontal\n-------------------------------------------------------------------*/\n\n\n/*-------------------------------------------------------------------*/\n/* === Import Bootstrap functions and variables === */\n@import \"../../../node_modules/bootstrap/scss/functions\";\n@import \"../../../node_modules/bootstrap/scss/variables\";\n\n/*-------------------------------------------------------------------*/\n/* === Import template variables === */\n@import \"variables\";\n\n/*-------------------------------------------------------------------*/\n/* === SCSS Compass Functions === */\n@import \"../../../node_modules/compass-mixins/lib/compass\";\n@import \"../../../node_modules/compass-mixins/lib/animate\";\n\n/*-------------------------------------------------------------------*/\n/* === Boostrap Main SCSS === */\n@import \"../../../node_modules/bootstrap/scss/bootstrap\";\n\n/*-------------------------------------------------------------------*/\n/* === Template mixins === */\n@import \"mixins/misc\";\n@import \"mixins/animation\";\n@import \"mixins/badges\";\n@import \"mixins/blockqoute\";\n@import \"mixins/buttons\";\n@import \"mixins/breadcrumbs\";\n@import \"mixins/cards\";\n@import \"mixins/no-ui-slider\";\n@import \"mixins/pagination\";\n@import \"mixins/popovers\";\n@import \"mixins/tooltips\";\n\n/*-------------------------------------------------------------------*/\n/* === Core Styles === */\n@import \"reset\";\n@import \"fonts\";\n@import \"functions\";\n@import \"background\";\n@import \"typography\";\n@import \"misc\";\n@import \"footer\";\n@import \"utilities\";\n@import \"demo\";\n@import \"dashboard\";\n\n/*-------------------------------------------------------------------*/\n/* === Components === */\n@import \"components/accordions\";\n@import \"components/badges\";\n@import \"components/bootstrap-alerts\";\n@import \"components/bootstrap-progress\";\n@import \"components/buttons\";\n@import \"components/breadcrumbs\";\n@import \"components/cards\";\n@import \"components/checkbox-radio\";\n@import \"components/dropdown\";\n@import \"components/forms\";\n@import \"components/google-maps\";\n@import \"components/icons\";\n@import \"components/loaders/loaders\";\n@import \"components/lists\";\n@import \"components/modals\";\n@import \"components/pagination\";\n@import \"components/popover\";\n@import \"components/portfolio\";\n@import \"components/preview\";\n@import \"components/tables\";\n@import \"components/tabs\";\n@import \"components/timeline\";\n@import \"components/todo-list\";\n@import \"components/tooltips\";\n@import \"components/user-profile\";\n@import \"components/pricing-table\";\n\n/*-------------------------------------------------------------------*/\n/* === Email === */\n@import \"components/mail-components/mail-sidebar\";\n@import \"components/mail-components/mail-list-container\";\n@import \"components/mail-components/messagecontent\";\n\n/*-------------------------------------------------------------------*/\n/* === Plugin overrides === */\n@import \"components/plugin-overrides/ace\";\n@import \"components/plugin-overrides/avgrund\";\n@import \"components/plugin-overrides/chartist\";\n@import \"components/plugin-overrides/codemirror\";\n@import \"components/plugin-overrides/colcade\";\n@import \"components/plugin-overrides/colorpicker\";\n@import \"components/plugin-overrides/context-menu\";\n@import \"components/plugin-overrides/data-tables\";\n@import \"components/plugin-overrides/datepicker\";\n@import \"components/plugin-overrides/dropify\";\n@import \"components/plugin-overrides/dropzone\";\n@import \"components/plugin-overrides/flot-chart\";\n@import \"components/plugin-overrides/full-calendar\";\n@import \"components/plugin-overrides/google-charts\";\n@import \"components/plugin-overrides/icheck\";\n@import \"components/plugin-overrides/jquery-file-upload\";\n@import \"components/plugin-overrides/js-grid\";\n@import \"components/plugin-overrides/jvectormap\";\n@import \"components/plugin-overrides/light-gallery\";\n@import \"components/plugin-overrides/listify\";\n@import \"components/plugin-overrides/mapael\";\n@import \"components/plugin-overrides/no-ui-slider\";\n@import \"components/plugin-overrides/owl-carousel\";\n@import \"components/plugin-overrides/progressbar-js\";\n@import \"components/plugin-overrides/pws-tabs\";\n@import \"components/plugin-overrides/quill\";\n@import \"components/plugin-overrides/rating\";\n@import \"components/plugin-overrides/select2\";\n@import \"components/plugin-overrides/summernote\";\n@import \"components/plugin-overrides/sweet-alert\";\n@import \"components/plugin-overrides/switchery\";\n@import \"components/plugin-overrides/tags\";\n@import \"components/plugin-overrides/tinymce\";\n@import \"components/plugin-overrides/toast\";\n@import \"components/plugin-overrides/typeahead\";\n@import \"components/plugin-overrides/wysieditor\";\n@import \"components/plugin-overrides/x-editable\";\n@import \"components/plugin-overrides/wizard\";\n\n/*-------------------------------------------------------------------*/\n/* === Landing screens === */\n@import \"landing-screens/auth\";","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-nav-scroll-max-height: 75vh !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","\n////////// COLOR SYSTEM //////////\n\n$blue: #5E50F9;\n$indigo: #6610f2;\n$purple: #6a008a;\n$pink: #E91E63;\n$red: #f96868;\n$orange: #f2a654;\n$yellow: #f6e84e;\n$green: #46c35f;\n$teal: #58d8a3;\n$cyan: #57c7d4;\n$black: #000;\n$white: #ffffff;\n$white-smoke: #f2f7f8;\n$violet: #41478a;\n$darkslategray : #2e383e;\n$dodger-blue : #3498db;\n\n\n$colors: (\n blue: $blue,\n indigo: $indigo,\n purple: $purple,\n pink: $pink,\n red: $red,\n orange: $orange,\n yellow: $yellow,\n green: $green,\n teal: $teal,\n cyan: $cyan,\n white: $white,\n gray: #434a54,\n gray-light: #aab2bd,\n gray-lighter: #e8eff4,\n gray-lightest: #e6e9ed,\n gray-dark: #0f1531, \n black: #000000\n);\n\n\n$theme-colors: (\n primary: #4B49AC,\n secondary: #a3a4a5,\n success: #57B657,\n info: #248AFD,\n warning: #FFC100,\n danger: #FF4747,\n light: #f8f9fa,\n dark: #282f3a\n);\n\n$theme-gradient-colors: (\n primary: linear-gradient(230deg, #759bff, #843cf6),\n secondary: linear-gradient(to right, #e7ebf0, #868e96),\n success: linear-gradient(45deg, #7bffce, #30c93e),\n info: linear-gradient(to bottom, #0e4cfd, #6a8eff),\n warning: linear-gradient(135deg, #ffc480, #ff763b),\n danger: linear-gradient(316deg, #fc5286, #fbaaa2),\n light: linear-gradient(to right, #cfd9df 0%, #e2ebf0 100%),\n dark: linear-gradient(to right, #7d7979 0%, #000000 100%)\n);\n\n////////// COLOR SYSTEM //////////\n\n////////// COLOR VARIABLES //////////\n$content-bg: #F5F7FF;\n$border-color: #CED4DA;\n$border-radius: 8px;\n\n////////// COLOR VARIABLES //////////\n\n\n\n////////// SOCIAL COLORS //////////\n\n$social-colors: (\n twitter: #4747A1,\n facebook: #7DA0FA,\n google: #dc4a38,\n linkedin: #7978E9,\n pinterest: #cc2127,\n youtube: #e52d27,\n github: #333333,\n behance: #1769ff,\n dribbble: #ea4c89,\n reddit: #ff4500\n);\n\n////////// SOCIAL COLORS //////////\n\n////////// FONTS//\n\n$type1: 'Nunito', sans-serif;\n\n$default-font-size: .875rem; // 14px as base font size\n\n$text-muted: #737F8B;\n$body-color: #1F1F1F;\n$color-light-blue: #52C4FF;\n\n\n////////// FONT VARIABLES //////////\n\n///////// FOOTER ////////\n$footer-height: 75px;\n$footer-bg: $content-bg;\n$footer-color: color(dark);\n///////// FOOTER ////////\n\n///////// BUTTONS ////////\n\n$button-fixed-width: 150px;\n$btn-padding-y: .875rem;\n$btn-padding-x: 1.5rem;\n$btn-line-height: 1;\n\n$btn-padding-y-xs: .5rem;\n$btn-padding-x-xs: .75rem;\n\n$btn-padding-y-sm: .50rem;\n$btn-padding-x-sm: .81rem;\n\n$btn-padding-y-lg: 1rem;\n$btn-padding-x-lg: 3rem;\n\n$btn-font-size: .875rem;\n$btn-font-size-xs: .625rem;\n$btn-font-size-sm: 0.812rem;\n$btn-font-size-lg: .875rem;\n\n$btn-border-radius: .1875rem;\n$btn-border-radius-xs: .1875rem;\n$btn-border-radius-sm: .1875rem;\n$btn-border-radius-lg: .1875rem;\n\n///////// BUTTONS ////////\n\n\n\n////////// TOOLTIP VARIABLES //////////\n\n//default styles\n$tooltip-font-size: .75rem;\n$tooltip-padding-y: .4rem;\n$tooltip-padding-x: .75rem;\n$tooltip-border-radius: .375rem;\n\n////////// TOOLTIP VARIABLES //////////\n\n\n\n///////// FORMS /////////\n\n$input-bg: color(white);\n$input-border-radius: 2px;\n$input-placeholder-color: #c9c8c8;\n$input-font-size: .875rem;\n\n$input-padding-y: .875rem;\n$input-padding-x: 1.375rem;\n$input-line-height: 1;\n\n$input-padding-y-xs: .5rem;\n$input-padding-x-xs: .75rem;\n\n$input-padding-y-sm: .50rem;\n$input-padding-x-sm: .81rem;\n\n$input-padding-y-lg: .94rem;\n$input-padding-x-lg: 1.94rem;\n\n$input-height: 2.875rem;\n$input-height-sm: 2.575rem;\n$input-height-lg: 3.175rem;\n\n///////// FORMS /////////\n\n//////// DROPDOWNS ///////\n\n$dropdown-border-color: $border-color;\n$dropdown-divider-bg: $border-color;\n$dropdown-link-color: $body-color;\n$dropdown-header-color: $body-color;\n$dropdown-link-hover-bg: #eaeaf1;\n//////// DROPDOWNS ///////\n\n//////// TABLES ////////\n\n$table-accent-bg: $content-bg;\n$table-hover-bg: #eaeaf1;\n$table-cell-padding: 1.125rem 1.375rem;\n$table-border-color: $border-color;\n\n$table-inverse-bg: #2a2b32;\n$table-inverse-color: color(white);\n$expanded-table-cell-color:#0B0F32;\n$alpha-orange:#FE5C83;\n\n//////// TABLES ////////\n\n\n\n////////// MEASUREMENT AND PROPERTY VARIABLES //////////\n\n$border-property: 1px solid $border-color;\n$card-spacing-y: 2.5rem;\n$card-padding-y: 1.25rem;\n$card-padding-x: 1.25rem;\n$card-border-radius: 20px;\n$card-border-color: #e3e3e3;\n$card-box-shadow: none;\n$card-title-color: #010101;\n$card-description-color: #76838f;\n$grid-gutter-width: 30px;\n$action-transition-duration: 0.25s;\n$action-transition-timing-function: ease;\n$card-tale:#7DA0FA;\n$card-dark-blue:#4747A1;\n$card-light-blue:#7978E9;\n$card-light-danger:#F3797E;\n////////// OTHER VARIABLES //////////\n\n\n\n////////// BREAD CRUMBS VARIABLES //////////\n\n// default styles\n$breadcrumb-padding-y: 0.56rem;\n$breadcrumb-padding-x: 1.13rem;\n$breadcrumb-item-padding: .5rem;\n$breadcrumb-margin-bottom: 1rem;\n$breadcrumb-font-size: $default-font-size;\n$breadcrumb-bg: transparent;\n$breadcrumb-border-color: $border-color;\n$breadcrumb-divider-color: $gray-600;\n$breadcrumb-active-color: $gray-700;\n$breadcrumb-divider: \"/\";\n\n// custom styles\n$breadcrumb-custom-padding-y: 0;\n$breadcrumb-custom-padding-x: 0;\n$breadcrumb-custom-item-padding-y: 0.56rem;\n$breadcrumb-custom-item-padding-x: 12px;\n$breadcrumb-custom-item-color: $black;\n$breadcrumb-item-bg: #dbe3e6;\n\n////////// BREAD CRUMBS VARIABLES //////////\n\n\n\n////////// MODALS VARIABLES //////////\n\n$modal-inner-padding: 0.9375rem;\n$modal-dialog-margin: 10px;\n$modal-dialog-margin-y-sm-up: 30px;\n$modal-title-line-height: $line-height-base;\n$modal-content-bg: $white;\n$modal-content-box-shadow-xs: 0 3px 9px rgba($black,.5);\n$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black,.5);\n\n$modal-backdrop-bg: $black;\n$modal-backdrop-opacity: .5;\n\n$modal-header-border-color: $border-color;\n$modal-content-border-color: $border-color;\n$modal-footer-border-color: $border-color;\n\n$modal-header-border-width: $border-width;\n$modal-content-border-width: $border-width;\n$modal-footer-border-width: $border-width;\n\n$modal-header-padding-x: 26px;\n$modal-header-padding-y: 25px;\n\n$modal-body-padding-x: 26px;\n$modal-body-padding-y: 35px;\n\n$modal-footer-padding-x: 31px;\n$modal-footer-padding-y: 15px;\n\n$modal-lg: 90%;\n$modal-md: 500px;\n$modal-sm: 300px;\n$modal-transition: transform .4s ease;\n\n////////// MODALS VARIABLES //////////\n\n///////// TABS VARIABLES //////////\n$nav-tabs-border-color: #ebedf2;\n$nav-tabs-link-bg: #f6f8fa;\n$nav-tabs-link-color: #000000;\n$nav-tabs-link-hover-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-border-color;\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $white;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-link-active-bg;\n$nav-pills-custom-bg: #fcfcfd;\n//////// TABS VARIABLES /////////\n\n//////// CALENDAR //////////////\n$fullcalendar-color: #a8b2b9;\n//////// CALENDAR //////////////\n","@import \"compass/functions\";\n@import \"compass/utilities\";\n@import \"compass/typography\";\n@import \"compass/css3\";\n","@import \"functions/lists\";\n@import \"functions/cross_browser_support\";\n@import \"functions/gradient_support\";\n@import \"functions/constants\";\n@import \"functions/display\";\n@import \"functions/colors\";\n","//\n// A partial implementation of the Ruby list functions from Compass:\n// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/lists.rb\n//\n\n\n// compact is part of libsass\n\n@function -compass-nth($list, $place) {\n // Yep, Sass-lists are 1-indexed.\n @if $place == \"first\" {\n $place: 1;\n }\n @if $place == \"last\" {\n $place: length($list);\n }\n @return nth($list, $place);\n}\n\n// compass_list can't be implemented in sass script\n\n@function -compass-space-list($item1, $item2:null, $item3:null, $item4:null, $item5:null, $item6:null, $item7:null, $item8:null, $item9:null) {\n $items: ();\n // Support for polymorphism.\n @if type-of($item1) == 'list' {\n // Passing a single array of properties.\n $items: $item1;\n } @else {\n $items: $item1 $item2 $item3 $item4 $item5 $item6 $item7 $item8 $item9;\n }\n\n $full: first-value-of($items);\n\n @for $i from 2 through length($items) {\n $item: nth($items, $i);\n @if $item != null {\n $full: $full $item;\n }\n }\n\n @return $full;\n}\n\n@function -compass-list-size($list) {\n @return length($list);\n}\n\n@function -compass-slice($list, $start, $end: false) {\n @if $end == false {\n $end: length($list);\n }\n $full: nth($list, $start);\n @for $i from $start + 1 through $end {\n $full: $full, nth($list, $i);\n }\n @return $full;\n}\n\n@function reject($list, $reject1, $reject2:null, $reject3:null, $reject4:null, $reject5:null, $reject6:null, $reject7:null, $reject8:null, $reject9:null) {\n $rejects: $reject1, $reject2, $reject3, $reject4, $reject5, $reject6, $reject7, $reject8, $reject9;\n\n $full: false;\n @each $item in $list {\n @if index($rejects, $item) {}\n @else {\n @if $full {\n $full: $full, $item;\n }\n @else {\n $full: $item;\n }\n }\n }\n @return $full;\n}\n\n@function first-value-of($list) {\n @return nth($list, 1);\n}\n\n@function compact($vars...) {\n $separator: list-separator($vars);\n $list: ();\n @each $var in $vars {\n @if $var {\n $list: append($list, $var, $separator);\n }\n }\n @return $list;\n}\n","// \n// A partial implementation of the Ruby cross browser support functions from Compass:\n// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/cross_browser_support.rb\n// \n\n@function prefixed($prefix, $property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n $properties: $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9;\n $prefixed: false;\n @each $item in $properties {\n @if type-of($item) == 'string' {\n $prefixed: $prefixed or str-index($item, 'url') != 1 and str-index($item, 'rgb') != 1 and str-index($item, '#') != 1;\n } @elseif type-of($item) == 'color' {\n } @elseif $item != null {\n $prefixed: true;\n }\n }\n @return $prefixed;\n}\n\n@function prefix($prefix, $property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n $properties: \"\";\n\n // Support for polymorphism.\n @if type-of($property1) == 'list' {\n // Passing a single array of properties.\n $properties: $property1;\n } @else {\n // Passing multiple properties.\n $properties: $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9;\n }\n\n $props: false;\n @each $item in $properties {\n @if $item == null {}\n @else {\n @if prefixed($prefix, $item) {\n $item: #{$prefix}-#{$item};\n }\n @if $props {\n $props: $props, $item;\n }\n @else {\n $props: $item;\n }\n }\n }\n @return $props;\n}\n\n@function -svg($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-svg', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -owg($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-owg', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -webkit($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-webkit', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -moz($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-moz', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -o($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-o', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -pie($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-pie', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n","// \n// A partial implementation of the Ruby gradient support functions from Compass:\n// https://github.com/Compass/compass/blob/v0.12.2/lib/compass/sass_extensions/functions/gradient_support.rb\n// \n\n@function color-stops($item1, $item2:null, $item3:null, $item4:null, $item5:null, $item6:null, $item7:null, $item8:null, $item9:null) {\n $items: $item2, $item3, $item4, $item5, $item6, $item7, $item8, $item9;\n $full: $item1;\n @each $item in $items {\n @if $item != null {\n $full: $full, $item;\n } \n }\n @return $full;\n}","// \n// A partial implementation of the Ruby constants functions from Compass:\n// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/constants.rb\n// \n\n@function opposite-position($from) {\n @if ($from == top) {\n @return bottom;\n } @else if ($from == bottom) {\n @return top;\n } @else if ($from == left) {\n @return right;\n } @else if ($from == right) {\n @return left;\n } @else if ($from == center) {\n @return center;\n }\n}\n","// \n// A partial implementation of the Ruby display functions from Compass:\n// https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_extensions/functions/display.rb\n// \n\n@function elements-of-type($type){\n @if ($type == block){\n @return address, article, aside, blockquote, center, dir, div, dd, details, dl, dt, fieldset, figcaption, figure, form, footer, frameset, h1, h2, h3, h4, h5, h6, hr, header, hgroup, isindex, main, menu, nav, noframes, noscript, ol, p, pre, section, summary, ul;\n } @else if ($type == inline){\n @return a, abbr, acronym, audio, b, basefont, bdo, big, br, canvas, cite, code, command, datalist, dfn, em, embed, font, i, img, input, keygen, kbd, label, mark, meter, output, progress, q, rp, rt, ruby, s, samp, select, small, span, strike, strong, sub, sup, textarea, time, tt, u, var, video, wbr;\n } @else if ($type == inline-block){\n @return img;\n } @else if ($type == table){\n @return table;\n } @else if ($type == list-item){\n @return li;\n } @else if ($type == table-row-group){\n @return tbody;\n } @else if ($type == table-header-group){\n @return thead;\n } @else if ($type == table-footer-group){\n @return tfoot;\n } @else if ($type == table-row){\n @return tr;\n } @else if ($type == table-cell){\n @return th, td;\n } @else if ($type == html5-block){\n @return article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary;\n } @else if ($type == html5-inline){\n @return audio, canvas, command, datalist, embed, keygen, mark, meter, output, progress, rp, rt, ruby, time, video, wbr;\n } @else if ($type == html5){\n @return article, aside, audio, canvas, command, datalist, details, embed, figcaption, figure, footer, header, hgroup, keygen, main, mark, menu, meter, nav, output, progress, rp, rt, ruby, section, summary, time, video, wbr;\n } @else if ($type == text-input){\n @return input, textarea;\n }\n}\n","// \n// A partial implementation of the Ruby colors functions from Compass:\n// https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_extensions/functions/colors.rb\n//\n\n// a genericized version of lighten/darken so that negative values can be used.\n@function adjust-lightness($color, $amount) {\n @return adjust-color($color, $lightness: $amount);\n}\n\n// Scales a color's lightness by some percentage.\n// If the amount is negative, the color is scaled darker, if positive, it is scaled lighter.\n// This will never return a pure light or dark color unless the amount is 100%.\n@function scale-lightness($color, $amount) {\n @return scale-color($color, $lightness: $amount);\n}\n\n// a genericized version of saturate/desaturate so that negative values can be used.\n@function adjust-saturation($color, $amount) {\n @return adjust-color($color, $saturation: $amount);\n}\n\n// Scales a color's saturation by some percentage.\n// If the amount is negative, the color is desaturated, if positive, it is saturated.\n// This will never return a pure saturated or desaturated color unless the amount is 100%.\n@function scale-saturation($color, $amount) {\n @return scale-color($color, $saturation: $amount);\n}\n\n@function shade($color, $percentage) {\n @return mix(#000000, $color, $percentage);\n}\n\n@function tint($color, $percentage) {\n @return mix(#ffffff, $color, $percentage);\n}\n\n","@import \"utilities/color\";\n@import \"utilities/general\";\n@import \"utilities/sprites\";\n@import \"utilities/tables\";\n\n// deprecated\n@import \"typography/links\";\n@import \"typography/lists\";\n@import \"typography/text\";\n","@import \"color/contrast\";","$contrasted-dark-default: #000 !default;\n$contrasted-light-default: #fff !default;\n$contrasted-lightness-threshold: 30% !default;\n\n// Returns the `$light` color when the `$color` is dark\n// and the `$dark` color when the `$color` is light.\n// The `$threshold` is a percent between `0%` and `100%` and it determines\n// when the lightness of `$color` changes from \"dark\" to \"light\".\n@function contrast-color(\n $color,\n $dark: $contrasted-dark-default,\n $light: $contrasted-light-default,\n $threshold: $contrasted-lightness-threshold\n) {\n @return if(lightness($color) < $threshold, $light, $dark)\n}\n\n// Sets the specified background color and calculates a dark or light contrasted text color.\n// The arguments are passed through to the [contrast-color function](#function-contrast-color).\n@mixin contrasted(\n $background-color,\n $dark: $contrasted-dark-default,\n $light: $contrasted-light-default,\n $threshold: $contrasted-lightness-threshold\n) {\n background-color: $background-color;\n color: contrast-color($background-color, $dark, $light, $threshold);\n}","@import \"general/reset\";\n@import \"general/clearfix\";\n@import \"general/float\";\n@import \"general/tag-cloud\";\n@import \"general/hacks\";\n@import \"general/min\";\n","// This module has moved.\n@import \"../../reset/utilities\";\n","// Based on [Eric Meyer's reset 2.0](http://meyerweb.com/eric/tools/css/reset/index.html)\n// Global reset rules.\n// For more specific resets, use the reset mixins provided below\n@mixin global-reset {\n html, body, div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n @include reset-box-model;\n @include reset-font; }\n // Unlike Eric's original reset, we reset the html element to be compatible\n // with the vertical rhythm mixins.\n html {\n @include reset-body; }\n ol, ul {\n @include reset-list-style; }\n table {\n @include reset-table; }\n caption, th, td {\n @include reset-table-cell; }\n q, blockquote {\n @include reset-quotation; }\n a img {\n @include reset-image-anchor-border; }\n @include reset-html5; }\n\n// Reset all elements within some selector scope. To reset the selector itself,\n// mixin the appropriate reset mixin for that element type as well. This could be\n// useful if you want to style a part of your page in a dramatically different way.\n@mixin nested-reset {\n div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n @include reset-box-model;\n @include reset-font; }\n table {\n @include reset-table; }\n caption, th, td {\n @include reset-table-cell; }\n q, blockquote {\n @include reset-quotation; }\n a img {\n @include reset-image-anchor-border; } }\n\n// Reset the box model measurements.\n@mixin reset-box-model {\n margin: 0;\n padding: 0;\n border: 0; }\n\n// Reset the font and vertical alignment.\n@mixin reset-font {\n font: inherit;\n font-size: 100%;\n vertical-align: baseline; }\n\n// Resets the outline when focus.\n// For accessibility you need to apply some styling in its place.\n@mixin reset-focus {\n outline: 0; }\n\n// Reset a body element.\n@mixin reset-body {\n line-height: 1; }\n\n// Reset the list style of an element.\n@mixin reset-list-style {\n list-style: none; }\n\n// Reset a table\n@mixin reset-table {\n border-collapse: collapse;\n border-spacing: 0; }\n\n// Reset a table cell (`th`, `td`)\n@mixin reset-table-cell {\n text-align: left;\n font-weight: normal;\n vertical-align: middle; }\n\n// Reset a quotation (`q`, `blockquote`)\n@mixin reset-quotation {\n quotes: none;\n &:before, &:after {\n content: \"\"; \n content: none; } }\n\n// Resets the border.\n@mixin reset-image-anchor-border {\n border: none; }\n\n// Unrecognized elements are displayed inline.\n// This reset provides a basic reset for block html5 elements\n// so they are rendered correctly in browsers that don't recognize them\n// and reset in browsers that have default styles for them.\n@mixin reset-html5 {\n #{elements-of-type(html5-block)} {\n display: block; } }\n\n// Resets the display of inline and block elements to their default display\n// according to their tag type. Elements that have a default display that varies across\n// versions of html or browser are not handled here, but this covers the 90% use case.\n// Usage Example:\n//\n// // Turn off the display for both of these classes\n// .unregistered-only, .registered-only\n// display: none\n// // Now turn only one of them back on depending on some other context.\n// body.registered\n// +reset-display(\".registered-only\")\n// body.unregistered\n// +reset-display(\".unregistered-only\")\n@mixin reset-display($selector: \"\", $important: false) {\n #{append-selector(elements-of-type(\"inline\"), $selector)} {\n @if $important {\n display: inline !important; }\n @else {\n display: inline; } }\n #{append-selector(elements-of-type(\"block\"), $selector)} {\n @if $important {\n display: block !important; }\n @else {\n display: block; } } }\n","// @doc off\n// Extends the bottom of the element to enclose any floats it contains.\n// @doc on\n\n@import \"hacks\";\n\n// This basic method is preferred for the usual case, when positioned\n// content will not show outside the bounds of the container.\n//\n// Recommendations include using this in conjunction with a width.\n// Credit: [quirksmode.org](http://www.quirksmode.org/blog/archives/2005/03/clearing_floats.html)\n@mixin clearfix {\n overflow: hidden;\n @include has-layout;\n}\n\n// This older method from Position Is Everything called\n// [Easy Clearing](http://www.positioniseverything.net/easyclearing.html)\n// has the advantage of allowing positioned elements to hang\n// outside the bounds of the container at the expense of more tricky CSS.\n@mixin legacy-pie-clearfix {\n &:after {\n content : \"\\0020\";\n display : block;\n height : 0;\n clear : both;\n overflow : hidden;\n visibility : hidden;\n }\n @include has-layout;\n}\n\n// This is an updated version of the PIE clearfix method that reduces the amount of CSS output.\n// If you need to support Firefox before 3.5 you need to use `legacy-pie-clearfix` instead.\n//\n// Adapted from: [A new micro clearfix hack](http://nicolasgallagher.com/micro-clearfix-hack/)\n@mixin pie-clearfix {\n &:after {\n content: \"\";\n display: table;\n clear: both;\n }\n @include has-layout;\n}\n","@import \"../../support\";\n\n// The `zoom` approach generates less CSS but does not validate.\n// Set this to `block` to use the display-property to hack the\n// element to gain layout.\n$default-has-layout-approach: zoom !default;\n\n// This mixin causes an element matching the selector\n// to gain the \"hasLayout\" property in internet explorer.\n// More information on [hasLayout](http://reference.sitepoint.com/css/haslayout).\n@mixin has-layout($approach: $default-has-layout-approach) {\n @if $legacy-support-for-ie {\n @if $approach == zoom {\n @include has-layout-zoom;\n } @else if $approach == block {\n @include has-layout-block;\n } @else {\n @warn \"Unknown has-layout approach: #{$approach}\";\n @include has-layout-zoom;\n }\n }\n}\n\n@mixin has-layout-zoom {\n @if $legacy-support-for-ie6 or $legacy-support-for-ie7 {\n *zoom: 1;\n }\n}\n\n@mixin has-layout-block {\n @if $legacy-support-for-ie {\n // This makes ie6 get layout\n display: inline-block;\n // and this puts it back to block\n & { display: block; }\n }\n}\n\n// A hack to supply IE6 (and below) with a different property value.\n// [Read more](http://www.cssportal.com/css-hacks/#in_css-important).\n@mixin bang-hack($property, $value, $ie6-value) {\n @if $legacy-support-for-ie6 {\n #{$property}: #{$value} !important;\n #{$property}: #{$ie6-value};\n }\n}\n","// Usually compass hacks apply to both ie6 & 7 -- set this to false to disable support for both.\n$legacy-support-for-ie: true !default;\n\n// Setting this to false will result in smaller output, but no support for ie6 hacks\n$legacy-support-for-ie6: $legacy-support-for-ie !default;\n\n// Setting this to false will result in smaller output, but no support for ie7 hacks\n$legacy-support-for-ie7: $legacy-support-for-ie !default;\n\n// Setting this to false will result in smaller output, but no support for legacy ie8 hacks\n$legacy-support-for-ie8: $legacy-support-for-ie !default;\n\n// @private\n// The user can simply set $legacy-support-for-ie and 6, 7, and 8 will be set accordingly,\n// But in case the user set each of those explicitly, we need to sync the value of\n// this combined variable.\n$legacy-support-for-ie: $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8;\n\n// Whether to output legacy support for mozilla.\n// Usually this means hacks to support Firefox 3.6 or earlier.\n$legacy-support-for-mozilla: true;\n\n// Support for mozilla in experimental css3 properties (-moz).\n$experimental-support-for-mozilla : true !default;\n// Support for webkit in experimental css3 properties (-webkit).\n$experimental-support-for-webkit : true !default;\n// Support for webkit's original (non-standard) gradient syntax.\n$support-for-original-webkit-gradients : true !default;\n// Support for opera in experimental css3 properties (-o).\n$experimental-support-for-opera : true !default;\n// Support for microsoft in experimental css3 properties (-ms).\n$experimental-support-for-microsoft : true !default;\n// Support for khtml in experimental css3 properties (-khtml).\n$experimental-support-for-khtml : false !default;\n// Support for svg in experimental css3 properties.\n// Setting this to true might add significant size to your\n// generated stylesheets.\n$experimental-support-for-svg : false !default;\n// Support for CSS PIE in experimental css3 properties (-pie).\n$experimental-support-for-pie : false !default;\n","// Implementation of float:left with fix for the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float-left {\n @include float(left); }\n\n// Implementation of float:right with fix for the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float-right {\n @include float(right); }\n\n// Direction independent float mixin that fixes the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float($side: left) {\n display: inline;\n float: unquote($side); }\n\n// Resets floated elements back to their default of `float: none` and defaults\n// to `display: block` unless you pass `inline` as an argument\n//\n// Usage Example:\n//\n// body.homepage\n// #footer li\n// +float-left\n// body.signup\n// #footer li\n// +reset-float\n@mixin reset-float($display: block) {\n float: none;\n display: $display; }","// Emits styles for a tag cloud\n@mixin tag-cloud($base-size: 1em) {\n font-size: $base-size;\n line-height: 1.2 * $base-size;\n .xxs, .xs, .s, .l, .xl, .xxl {\n line-height: 1.2 * $base-size; }\n .xxs {\n font-size: $base-size / 2; }\n .xs {\n font-size: 2 * $base-size / 3; }\n .s {\n font-size: 3 * $base-size / 4; }\n .l {\n font-size: 4 * $base-size / 3; }\n .xl {\n font-size: 3 * $base-size / 2; }\n .xxl {\n font-size: 2 * $base-size; } }\n","@import \"hacks\";\n\n//**\n// Cross browser min-height mixin.\n@mixin min-height($value) {\n @include hacked-minimum(height, $value); }\n\n//**\n// Cross browser min-width mixin.\n@mixin min-width($value) {\n @include hacked-minimum(width, $value); }\n\n// @private This mixin is not meant to be used directly.\n@mixin hacked-minimum($property, $value) {\n min-#{$property}: $value;\n @include bang-hack($property, auto, $value); }\n","@import \"sprites/base\";\n@import \"sprites/sprite-img\";\n","// Determines those states for which you want to enable magic sprite selectors\n$sprite-selectors: hover, target, active !default;\n\n// Set the width and height of an element to the original\n// dimensions of an image before it was included in the sprite.\n@mixin sprite-dimensions($map, $sprite) {\n height: image-height(sprite-file($map, $sprite));\n width: image-width(sprite-file($map, $sprite));\n}\n\n// Set the background position of the given sprite `$map` to display the\n// sprite of the given `$sprite` name. You can move the image relative to its\n// natural position by passing `$offset-x` and `$offset-y`.\n@mixin sprite-background-position($map, $sprite, $offset-x: 0, $offset-y: 0) {\n background-position: sprite-position($map, $sprite, $offset-x, $offset-y); \n}\n\n\n// Determines if you want to include magic selectors in your sprites\n$disable-magic-sprite-selectors:false !default;\n\n// Include the position and (optionally) dimensions of this `$sprite`\n// in the given sprite `$map`. The sprite url should come from either a base\n// class or you can specify the `sprite-url` explicitly like this:\n//\n// background: $map no-repeat;\n@mixin sprite($map, $sprite, $dimensions: false, $offset-x: 0, $offset-y: 0) {\n @include sprite-background-position($map, $sprite, $offset-x, $offset-y);\n @if $dimensions {\n @include sprite-dimensions($map, $sprite);\n }\n @if not($disable-magic-sprite-selectors) {\n @include sprite-selectors($map, $sprite, $sprite, $offset-x, $offset-y);\n }\n}\n\n// Include the selectors for the `$sprite` given the `$map` and the \n// `$full-sprite-name`\n// @private\n@mixin sprite-selectors($map, $sprite-name, $full-sprite-name, $offset-x: 0, $offset-y: 0) {\n @each $selector in $sprite-selectors {\n @if sprite_has_selector($map, $sprite-name, $selector) {\n &:#{$selector}, &.#{$full-sprite-name}_#{$selector}, &.#{$full-sprite-name}-#{$selector} {\n @include sprite-background-position($map, \"#{$sprite-name}_#{$selector}\", $offset-x, $offset-y);\n }\n }\n }\n}\n\n// Generates a class for each space separated name in `$sprite-names`.\n// The class will be of the form .-.\n//\n// If a base class is provided, then each class will extend it.\n//\n// If `$dimensions` is `true`, the sprite dimensions will specified.\n@mixin sprites($map, $sprite-names, $base-class: false, $dimensions: false, $prefix: sprite-map-name($map), $offset-x: 0, $offset-y: 0) {\n @each $sprite-name in $sprite-names {\n @if sprite_does_not_have_parent($map, $sprite-name) {\n $full-sprite-name: \"#{$prefix}-#{$sprite-name}\";\n .#{$full-sprite-name} {\n @if $base-class { @extend #{$base-class}; }\n @include sprite($map, $sprite-name, $dimensions, $offset-x, $offset-y);\n }\n }\n }\n}","// @doc off\n// Example 1:\n//\n// a.twitter\n// +sprite-img(\"icons-32.png\", 1)\n// a.facebook\n// +sprite-img(\"icons-32png\", 2)\n//\n// Example 2:\n//\n// a\n// +sprite-background(\"icons-32.png\")\n// a.twitter\n// +sprite-column(1)\n// a.facebook\n// +sprite-row(2)\n// @doc on\n\n$sprite-default-size: 32px !default;\n\n$sprite-default-margin: 0px !default;\n\n$sprite-image-default-width: $sprite-default-size !default;\n\n$sprite-image-default-height: $sprite-default-size !default;\n\n// Sets all the rules for a sprite from a given sprite image to show just one of the sprites.\n// To reduce duplication use a sprite-bg mixin for common properties and a sprite-select mixin for positioning.\n@mixin sprite-img($img, $col, $row: 1, $width: $sprite-image-default-width, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n @include sprite-background($img, $width, $height);\n @include sprite-position($col, $row, $width, $height, $margin); \n}\n\n// Sets rules common for all sprites, assumes you want a square, but allows a rectangular region.\n@mixin sprite-background($img, $width: $sprite-default-size, $height: $width) {\n @include sprite-background-rectangle($img, $width, $height); \n}\n\n// Sets rules common for all sprites, assumes a rectangular region.\n@mixin sprite-background-rectangle($img, $width: $sprite-image-default-width, $height: $sprite-image-default-height) {\n background: image-url($img) no-repeat;\n width: $width;\n height: $height;\n overflow: hidden; \n}\n\n// Allows horizontal sprite positioning optimized for a single row of sprites.\n@mixin sprite-column($col, $width: $sprite-image-default-width, $margin: $sprite-default-margin) {\n @include sprite-position($col, 1, $width, 0px, $margin); \n}\n\n// Allows vertical sprite positioning optimized for a single column of sprites.\n@mixin sprite-row($row, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n @include sprite-position(1, $row, 0px, $height, $margin); \n}\n\n// Allows vertical and horizontal sprite positioning from a grid of equal dimensioned sprites.\n@mixin sprite-position($col, $row: 1, $width: $sprite-image-default-width, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n $x: ($col - 1) * -$width - ($col - 1) * $margin;\n $y: ($row - 1) * -$height - ($row - 1) * $margin;\n background-position: $x $y; \n}\n\n\n\n// Similar to 'sprite-replace-text-with-dimensions' but does not autmaticly set the demensions\n@mixin sprite-replace-text ($map, $sprite, $dimensions: false, $offset-x: 0, $offset-y: 0) { \n @include hide-text;\n @include sprite($map, $sprite, $dimensions, $offset-x, $offset-y);\n background-image: $map;\n background-repeat: no-repeat;\n}\n\n// Similar to 'replace-text-with-dimensions' but with sprites\n// To use, create your sprite and then pass it in the `$map` param\n// The name of the image in the sprite folder should be `$img-name`\n@mixin sprite-replace-text-with-dimensions ($map, $sprite, $offset-x: 0, $offset-y: 0){ \n @include sprite-replace-text ($map, $sprite, true, $offset-x, $offset-y);\n}","@import \"tables/alternating-rows-and-columns\";\n@import \"tables/borders\";\n@import \"tables/scaffolding\";\n","@mixin alternating-rows-and-columns($even-row-color, $odd-row-color, $dark-intersection, $header-color: white, $footer-color: white) {\n th {\n background-color: $header-color;\n &.even, &:nth-child(2n) {\n background-color: $header-color - $dark-intersection; } }\n tr {\n &.odd, &:nth-child(2n+1) {\n td {\n background-color: $odd-row-color;\n &.even, &:nth-child(2n) {\n background-color: $odd-row-color - $dark-intersection; } } }\n }\n tr.even {\n td {\n background-color: $even-row-color;\n &.even, &:nth-child(2n) {\n background-color: $even-row-color - $dark-intersection; } } }\n tfoot {\n th, td {\n background-color: $footer-color;\n &.even, &:nth-child(2n) {\n background-color: $footer-color - $dark-intersection; } } } }\n","@mixin outer-table-borders($width: 2px, $color: black) {\n border: $width solid $color;\n thead {\n th {\n border-bottom: $width solid $color; } }\n tfoot {\n th, td {\n border-top: $width solid $color; } }\n th {\n &:first-child {\n border-right: $width solid $color; } } }\n\n@mixin inner-table-borders($width: 2px, $color: black) {\n th, td {\n border: {\n right: $width solid $color;\n bottom: $width solid $color;\n left-width: 0px;\n top-width: 0px; };\n &:last-child,\n &.last {\n border-right-width: 0px; } }\n\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n\n tbody, tfoot {\n tr:last-child {\n th, td {\n border-bottom-width: 0px; } }\n tr.last {\n th, td {\n border-bottom-width: 0px; } } } }\n","@mixin table-scaffolding {\n th {\n text-align: center;\n font-weight: bold; }\n td,\n th {\n padding: 2px;\n &.numeric {\n text-align: right; } } }\n","@import \"links/hover-link\";\n@import \"links/link-colors\";\n@import \"links/unstyled-link\";\n","// a link that only has an underline when you hover over it\n@mixin hover-link {\n text-decoration: none;\n &:hover {\n text-decoration: underline; } }\n","// Set all the colors for a link with one mixin call.\n// Order of arguments is:\n//\n// 1. normal\n// 2. hover\n// 3. active\n// 4. visited\n// 5. focus\n//\n// Those states not specified will inherit.\n// Mixin to an anchor link like so:\n// a\n// +link-colors(#00c, #0cc, #c0c, #ccc, #cc0)\n\n@mixin link-colors($normal, $hover: false, $active: false, $visited: false, $focus: false) {\n color: $normal;\n @if $visited {\n &:visited {\n color: $visited; } }\n @if $focus {\n &:focus {\n color: $focus; } }\n @if $hover {\n &:hover {\n color: $hover; } }\n @if $active {\n &:active {\n color: $active; } } }\n","// A link that looks and acts like the text it is contained within\n@mixin unstyled-link {\n color: inherit;\n text-decoration: inherit;\n cursor: inherit;\n &:active, &:focus {\n outline: none; } }\n","@import \"lists/horizontal-list\";\n@import \"lists/inline-list\";\n@import \"lists/inline-block-list\";\n@import \"lists/bullets\";\n","// Horizontal list layout module.\n//\n// Easy mode using simple descendant li selectors:\n//\n// ul.nav\n// +horizontal-list\n//\n// Advanced mode:\n// If you need to target the list items using a different selector then use\n// +horizontal-list-container on your ul/ol and +horizontal-list-item on your li.\n// This may help when working on layouts involving nested lists. For example:\n//\n// ul.nav\n// +horizontal-list-container\n// > li\n// +horizontal-list-item\n\n@import \"bullets\";\n@import \"../../utilities/general/clearfix\";\n@import \"../../utilities/general/reset\";\n@import \"../../utilities/general/float\";\n\n// Can be mixed into any selector that target a ul or ol that is meant\n// to have a horizontal layout. Used to implement +horizontal-list.\n@mixin horizontal-list-container {\n @include reset-box-model;\n @include clearfix; }\n\n// Can be mixed into any li selector that is meant to participate in a horizontal layout.\n// Used to implement +horizontal-list.\n//\n// :last-child is not fully supported\n// see http://www.quirksmode.org/css/contents.html#t29 for the support matrix\n//\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n//\n// Setting `$padding` to `false` disables the padding between list elements\n@mixin horizontal-list-item($padding: 4px, $direction: left) {\n @include no-bullet;\n white-space: nowrap;\n @include float($direction);\n @if $padding {\n padding: {\n left: $padding;\n right: $padding;\n }\n &:first-child, &.first { padding-#{$direction}: 0; }\n &:last-child { padding-#{opposite-position($direction)}: 0; }\n &.last { padding-#{opposite-position($direction)}: 0; }\n }\n}\n\n// A list(ol,ul) that is layed out such that the elements are floated left and won't wrap.\n// This is not an inline list.\n//\n// Setting `$padding` to `false` disables the padding between list elements\n@mixin horizontal-list($padding: 4px, $direction: left) {\n @include horizontal-list-container;\n li {\n @include horizontal-list-item($padding, $direction); } }\n","// Turn off the bullet for an element of a list\n@mixin no-bullet {\n list-style-image : none;\n list-style-type : none;\n margin-left : 0;\n}\n\n// turns off the bullets for an entire list\n@mixin no-bullets {\n list-style: none;\n li { @include no-bullet; }\n}\n\n// Make a list(ul/ol) have an image bullet.\n//\n// The mixin should be used like this for an icon that is 5x7:\n//\n// ul.pretty\n// +pretty-bullets(\"my-icon.png\", 5px, 7px)\n//\n// Additionally, if the image dimensions are not provided,\n// The image dimensions will be extracted from the image itself.\n//\n// ul.pretty\n// +pretty-bullets(\"my-icon.png\")\n//\n@mixin pretty-bullets($bullet-icon, $width: image-width($bullet-icon), $height: image-height($bullet-icon), $line-height: 18px, $padding: 14px) {\n margin-left: 0;\n li {\n padding-left: $padding;\n background: image-url($bullet-icon) no-repeat ($padding - $width) / 2 ($line-height - $height) / 2;\n list-style-type: none;\n }\n}\n","// makes a list inline.\n\n@mixin inline-list {\n list-style-type: none;\n &, & li {\n margin: 0px;\n padding: 0px;\n display: inline;\n }\n}\n\n// makes an inline list delimited with the passed string.\n// Defaults to making a comma-separated list.\n//\n// Please make note of the browser support issues before using this mixin:\n//\n// use of `content` and `:after` is not fully supported in all browsers.\n// See quirksmode for the [support matrix](http://www.quirksmode.org/css/contents.html#t15)\n//\n// `:last-child` is not fully supported.\n// see quirksmode for the [support matrix](http://www.quirksmode.org/css/contents.html#t29).\n//\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n\n@mixin delimited-list($separator: \", \") {\n @include inline-list;\n li {\n &:after { content: $separator; }\n &:last-child {\n &:after { content: \"\"; }\n }\n &.last {\n &:after { content: \"\"; }\n }\n }\n}\n\n// See [delimited-list](#mixin-delimited-list)\n// @deprecated\n@mixin comma-delimited-list {\n @warn \"comma-delimited-list is deprecated. Please use delimited-list instead.\";\n @include delimited-list;\n}\n","// Inline-Block list layout module.\n//\n// Easy mode using simple descendant li selectors:\n//\n// ul.nav {\n// @import inline-block-list;\n// }\n//\n// Advanced mode:\n// If you need to target the list items using a different selector then use\n// `@include inline-block-list-container` on your ul/ol and\n// `@include inline-block-list-item` on your li. This may help when working\n// on layouts involving nested lists. For example:\n//\n// ul.nav {\n// @include inline-block-list-container;\n// > li {\n// @include inline-block-list-item;\n// }\n// }\n\n@import \"bullets\";\n@import \"horizontal-list\";\n@import \"../../utilities/general/float\";\n@import \"../../css3/inline-block\";\n\n// Can be mixed into any selector that target a ul or ol that is meant\n// to have an inline-block layout. Used to implement `inline-block-list`.\n@mixin inline-block-list-container {\n @include horizontal-list-container; }\n\n// Can be mixed into any li selector that is meant to participate in a horizontal layout.\n// Used to implement `inline-block-list`.\n@mixin inline-block-list-item($padding: false) {\n @include no-bullet;\n @include inline-block;\n white-space: nowrap;\n @if $padding {\n padding: {\n left: $padding;\n right: $padding;\n };\n }\n}\n\n// A list(ol,ul) that is layed out such that the elements are inline-block and won't wrap.\n@mixin inline-block-list($padding: false) {\n @include inline-block-list-container;\n li {\n @include inline-block-list-item($padding); } }\n","@import \"shared\";\n\n// Set `$inline-block-alignment` to `none` or `false` to disable the output\n// of a vertical-align property in the inline-block mixin.\n// Or set it to a legal value for `vertical-align` to change the default.\n$inline-block-alignment: middle !default;\n\n// Provides a cross-browser method to implement `display: inline-block;`\n@mixin inline-block($alignment: $inline-block-alignment) {\n @if $legacy-support-for-mozilla {\n display: -moz-inline-stack;\n }\n display: inline-block;\n @if $alignment and $alignment != none {\n vertical-align: $alignment;\n }\n @if $legacy-support-for-ie {\n *vertical-align: auto;\n zoom: 1;\n *display: inline;\n }\n}\n","@import \"../support\";\n\n// This mixin provides basic support for CSS3 properties and\n// their corresponding experimental CSS2 properties when\n// the implementations are identical except for the property\n// prefix.\n@mixin experimental($property, $value,\n $moz : $experimental-support-for-mozilla,\n $webkit : $experimental-support-for-webkit,\n $o : $experimental-support-for-opera,\n $ms : $experimental-support-for-microsoft,\n $khtml : $experimental-support-for-khtml,\n $official : true\n) {\n @if $webkit and $experimental-support-for-webkit { -webkit-#{$property} : $value; }\n @if $khtml and $experimental-support-for-khtml { -khtml-#{$property} : $value; }\n @if $moz and $experimental-support-for-mozilla { -moz-#{$property} : $value; }\n @if $ms and $experimental-support-for-microsoft { -ms-#{$property} : $value; }\n @if $o and $experimental-support-for-opera { -o-#{$property} : $value; }\n @if $official { #{$property} : $value; }\n}\n\n// Same as experimental(), but for cases when the property is the same and the value is vendorized\n@mixin experimental-value($property, $value,\n $moz : $experimental-support-for-mozilla,\n $webkit : $experimental-support-for-webkit,\n $o : $experimental-support-for-opera,\n $ms : $experimental-support-for-microsoft,\n $khtml : $experimental-support-for-khtml,\n $official : true\n) {\n @if $webkit and $experimental-support-for-webkit { #{$property} : -webkit-#{$value}; }\n @if $khtml and $experimental-support-for-khtml { #{$property} : -khtml-#{$value}; }\n @if $moz and $experimental-support-for-mozilla { #{$property} : -moz-#{$value}; }\n @if $ms and $experimental-support-for-microsoft { #{$property} : -ms-#{$value}; }\n @if $o and $experimental-support-for-opera { #{$property} : -o-#{$value}; }\n @if $official { #{$property} : #{$value}; }\n}\n","@import \"text/ellipsis\";\n@import \"text/nowrap\";\n@import \"text/replacement\";\n@import \"text/force-wrap\";\n","@import \"../../css3/shared\";\n\n// To get full firefox support, you must install the ellipsis pattern:\n//\n// compass install compass/ellipsis\n$use-mozilla-ellipsis-binding: false !default;\n\n// This technique, by [Justin Maxwell](http://code404.com/), was originally\n// published [here](http://mattsnider.com/css/css-string-truncation-with-ellipsis/).\n// Firefox implementation by [Rikkert Koppes](http://www.rikkertkoppes.com/thoughts/2008/6/).\n@mixin ellipsis($no-wrap: true) {\n @if $no-wrap { white-space: nowrap; }\n overflow: hidden;\n @include experimental(text-overflow, ellipsis,\n not(-moz),\n not(-webkit),\n -o,\n -ms,\n not(-khtml),\n official\n );\n @if $experimental-support-for-mozilla and $use-mozilla-ellipsis-binding {\n -moz-binding: stylesheet-url(unquote(\"xml/ellipsis.xml#ellipsis\"));\n }\n}\n","// When remembering whether or not there's a hyphen in white-space is too hard\n@mixin nowrap { white-space: nowrap; }\n","// Indicates the direction you prefer to move your text\n// when hiding it.\n//\n// `left` is more robust, especially in older browsers.\n// `right` seems have better runtime performance.\n$hide-text-direction: left !default;\n\n// Hides html text and replaces it with an image.\n// If you use this on an inline element, you will need to change the display to block or inline-block.\n// Also, if the size of the image differs significantly from the font size, you'll need to set the width and/or height.\n//\n// Parameters:\n//\n// * `img` -- the relative path from the project image directory to the image, or a url literal.\n// * `x` -- the x position of the background image.\n// * `y` -- the y position of the background image.\n@mixin replace-text($img, $x: 50%, $y: 50%) {\n @include hide-text;\n background: {\n @if is-url($img) {\n image: url($img);\n } @else {\n image: image-url($img);\n }\n repeat: no-repeat;\n position: $x $y;\n };\n}\n\n// Like the `replace-text` mixin, but also sets the width\n// and height of the element according the dimensions of the image.\n//\n// If you set `$inline` to true, then an inline image (data uri) will be used.\n@mixin replace-text-with-dimensions($img, $x: 50%, $y: 50%, $inline: false) {\n @include replace-text(if($inline, inline-image($img), $img), $x, $y);\n width: image-width($img);\n height: image-height($img);\n}\n\n// Hides text in an element so you can see the background.\n//\n// The direction indicates how the text should be moved out of view.\n//\n// See `$hide-text-direction` for more information and to set this globally\n// for your application.\n@mixin hide-text($direction: $hide-text-direction) {\n @if $direction == left {\n $approximate-em-value: 12px;\n $wider-than-any-screen: -9999;\n text-indent: $wider-than-any-screen * $approximate-em-value;\n overflow: hidden;\n text-align: left;\n } @else {\n // slightly wider than the box prevents issues with inline-block elements\n text-indent: 110%;\n white-space: nowrap;\n overflow: hidden;\n }\n}\n\n// Hides text in an element by squishing the text into oblivion.\n// Use this if you need to hide text contained in an inline element\n// but still have it read by a screen reader.\n@mixin squish-text {\n font: 0/0 serif;\n text-shadow: none;\n color: transparent;\n}\n","// Prevent long urls and text from breaking layouts\n// [originally from perishablepress.com](http://perishablepress.com/press/2010/06/01/wrapping-content/)\n@mixin force-wrap {\n white-space: pre; // CSS 2.0\n white-space: pre-wrap; // CSS 2.1\n white-space: pre-line; // CSS 3.0\n white-space: -pre-wrap; // Opera 4-6\n white-space: -o-pre-wrap; // Opera 7\n white-space: -moz-pre-wrap; // Mozilla\n white-space: -hp-pre-wrap; // HP Printers\n word-wrap: break-word; // IE 5+\n}\n","@import \"typography/links\";\n@import \"typography/lists\";\n@import \"typography/text\";\n@import \"typography/vertical_rhythm\";\n","@import \"../layout/grid-background\";\n\n// The base font size.\n$base-font-size: 16px !default;\n\n// The base line height determines the basic unit of vertical rhythm.\n$base-line-height: 24px !default;\n\n// Set the default border style for rhythm borders.\n$default-rhythm-border-style: solid !default;\n\n// The default font size in all browsers.\n$browser-default-font-size: 16px;\n\n// Set to false if you want to use absolute pixels in sizing your typography.\n$relative-font-sizing: true !default;\n\n// Allows the `adjust-font-size-to` mixin and the `lines-for-font-size` function\n// to round the line height to the nearest half line height instead of the\n// nearest integral line height to avoid large spacing between lines.\n$round-to-nearest-half-line: false !default;\n\n// Ensure there is at least this many pixels\n// of vertical padding above and below the text.\n$min-line-padding: 2px !default;\n\n// $base-font-size but in your output unit of choice.\n// Defaults to 1em when `$relative-font-sizing` is true.\n$font-unit: if($relative-font-sizing, 1em, $base-font-size) !default;\n\n// The basic unit of font rhythm.\n$base-rhythm-unit: $base-line-height / $base-font-size * $font-unit;\n\n// The leader is the amount of whitespace in a line.\n// It might be useful in your calculations.\n$base-leader: ($base-line-height - $base-font-size) * $font-unit / $base-font-size;\n\n// The half-leader is the amount of whitespace above and below a line.\n// It might be useful in your calculations.\n$base-half-leader: $base-leader / 2;\n\n// True if a number has a relative unit.\n@function relative-unit($number) {\n @return unit($number) == \"%\" or unit($number) == \"em\" or unit($number) == \"rem\"\n}\n\n// True if a number has an absolute unit.\n@function absolute-unit($number) {\n @return not(relative-unit($number) or unitless($number));\n}\n\n@if $relative-font-sizing and not(relative-unit($font-unit)) {\n @warn \"$relative-font-sizing is true but $font-unit is set to #{$font-unit} which is not a relative unit.\";\n}\n\n// Establishes a font baseline for the given font-size.\n@mixin establish-baseline($font-size: $base-font-size) {\n // IE 6 refuses to resize fonts set in pixels and it weirdly resizes fonts\n // whose root is set in ems. So we set the root font size in percentages of\n // the default font size.\n * html {\n font-size: 100% * ($font-size / $browser-default-font-size);\n }\n html {\n font-size: $font-size;\n @include adjust-leading-to(1, if($relative-font-sizing, $font-size, $base-font-size));\n }\n}\n\n// Resets the line-height to 1 vertical rhythm unit.\n// Does not work on elements whose font-size is different from $base-font-size.\n//\n// @deprecated This mixin will be removed in the next release.\n// Please use the `adjust-leading-to` mixin instead.\n@mixin reset-baseline {\n @include adjust-leading-to(1, if($relative-font-sizing, $base-font-size, $base-font-size));\n}\n\n// Show a background image that can be used to debug your alignments.\n// Include the $img argument if you would rather use your own image than the\n// Compass default gradient image.\n@mixin debug-vertical-alignment($img: false) {\n @if $img {\n background: image-url($img);\n } @else {\n @include baseline-grid-background($base-rhythm-unit);\n }\n}\n\n// Adjust a block to have a different font size and line height to maintain the\n// rhythm. $lines specifies how many multiples of the baseline rhythm each line\n// of this font should use up. It does not have to be an integer, but it\n// defaults to the smallest integer that is large enough to fit the font.\n// Use $from-size to adjust from a font-size other than the base font-size.\n@mixin adjust-font-size-to($to-size, $lines: lines-for-font-size($to-size), $from-size: $base-font-size) {\n @if not($relative-font-sizing) and $from-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to adjust-font-size-to\";\n }\n font-size: $font-unit * $to-size / $from-size;\n @include adjust-leading-to($lines, if($relative-font-sizing, $to-size, $base-font-size));\n}\n\n// Adjust a block to have different line height to maintain the rhythm.\n// $lines specifies how many multiples of the baseline rhythm each line of this\n// font should use up. It does not have to be an integer, but it defaults to the\n// smallest integer that is large enough to fit the font.\n@mixin adjust-leading-to($lines, $font-size: $base-font-size) {\n line-height: rhythm($lines, $font-size);\n}\n\n// Calculate rhythm units.\n@function rhythm(\n $lines: 1,\n $font-size: $base-font-size,\n $offset: 0\n) {\n @if not($relative-font-sizing) and $font-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to the rhythm function\";\n }\n $rhythm: $font-unit * ($lines * $base-line-height - $offset) / $font-size;\n // Round the pixels down to nearest integer.\n @if unit($rhythm) == px {\n $rhythm: floor($rhythm);\n }\n @return $rhythm;\n}\n\n// Calculate the minimum multiple of rhythm units needed to contain the font-size.\n@function lines-for-font-size($font-size) {\n $lines: if($round-to-nearest-half-line,\n ceil(2 * $font-size / $base-line-height) / 2,\n ceil($font-size / $base-line-height));\n @if $lines * $base-line-height - $font-size < $min-line-padding * 2 {\n $lines: $lines + if($round-to-nearest-half-line, 0.5, 1);\n }\n @return $lines;\n}\n\n// Apply leading whitespace. The $property can be margin or padding.\n@mixin leader($lines: 1, $font-size: $base-font-size, $property: margin) {\n #{$property}-top: rhythm($lines, $font-size);\n}\n\n// Apply leading whitespace as padding.\n@mixin padding-leader($lines: 1, $font-size: $base-font-size) {\n padding-top: rhythm($lines, $font-size);\n}\n\n// Apply leading whitespace as margin.\n@mixin margin-leader($lines: 1, $font-size: $base-font-size) {\n margin-top: rhythm($lines, $font-size);\n}\n\n// Apply trailing whitespace. The $property can be margin or padding.\n@mixin trailer($lines: 1, $font-size: $base-font-size, $property: margin) {\n #{$property}-bottom: rhythm($lines, $font-size);\n}\n\n// Apply trailing whitespace as padding.\n@mixin padding-trailer($lines: 1, $font-size: $base-font-size) {\n padding-bottom: rhythm($lines, $font-size);\n}\n\n// Apply trailing whitespace as margin.\n@mixin margin-trailer($lines: 1, $font-size: $base-font-size) {\n margin-bottom: rhythm($lines, $font-size);\n}\n\n// Shorthand mixin to apply whitespace for top and bottom margins and padding.\n@mixin rhythm($leader: 0, $padding-leader: 0, $padding-trailer: 0, $trailer: 0, $font-size: $base-font-size) {\n @include leader($leader, $font-size);\n @include padding-leader($padding-leader, $font-size);\n @include padding-trailer($padding-trailer, $font-size);\n @include trailer($trailer, $font-size);\n}\n\n// Apply a border and whitespace to any side without destroying the vertical\n// rhythm. The whitespace must be greater than the width of the border.\n@mixin apply-side-rhythm-border($side, $width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @if not($relative-font-sizing) and $font-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to apply-side-rhythm-border\";\n }\n border-#{$side}-style: $border-style;\n border-#{$side}-width: $font-unit * $width / $font-size;\n padding-#{$side}: rhythm($lines, $font-size, $offset: $width);\n}\n\n// Apply borders and whitespace equally to all sides.\n@mixin rhythm-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @if not($relative-font-sizing) and $font-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to rhythm-borders\";\n }\n border: {\n style: $border-style;\n width: $font-unit * $width / $font-size;\n };\n padding: rhythm($lines, $font-size, $offset: $width);\n}\n\n// Apply a leading border.\n@mixin leading-border($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include apply-side-rhythm-border(top, $width, $lines, $font-size, $border-style);\n}\n\n// Apply a trailing border.\n@mixin trailing-border($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include apply-side-rhythm-border(bottom, $width, $lines, $font-size, $border-style);\n}\n\n// Apply both leading and trailing borders.\n@mixin horizontal-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include leading-border($width, $lines, $font-size, $border-style);\n @include trailing-border($width, $lines, $font-size, $border-style);\n}\n\n// Alias for `horizontal-borders` mixin.\n@mixin h-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include horizontal-borders($width, $lines, $font-size, $border-style);\n}\n","@import \"../css3/images\";\n@import \"../css3/background-size\";\n\n// Set the color of your columns\n$grid-background-column-color : rgba(100, 100, 225, 0.25) !default;\n// Set the color of your gutters\n$grid-background-gutter-color : rgba(0, 0, 0, 0) !default;\n\n// Set the total number of columns in your grid\n$grid-background-total-columns : 24 !default;\n// Set the width of your columns\n$grid-background-column-width : 30px !default;\n// Set the width of your gutters\n$grid-background-gutter-width : 10px !default;\n// Set the offset, if your columns are padded in from the container edge\n$grid-background-offset : 0px !default;\n\n// Set the color of your baseline\n$grid-background-baseline-color : rgba(0, 0, 0, 0.5) !default;\n// Set the height of your baseline grid\n$grid-background-baseline-height : 1.5em !default;\n\n// toggle your columns grids on and off\n$show-column-grid-backgrounds : true !default;\n// toggle your vertical grids on and off\n$show-baseline-grid-backgrounds : true !default;\n// toggle all your grids on and off\n$show-grid-backgrounds : true !default;\n\n// optionally force your grid-image to remain fluid\n// no matter what units you used to declared your grid.\n$grid-background-force-fluid : false !default;\n\n\n// Create the gradient needed for baseline grids\n@function get-baseline-gradient(\n $color : $grid-background-baseline-color\n) {\n $gradient: linear-gradient(bottom, $color 5%, rgba($color,0) 5%);\n @return $gradient;\n}\n\n// Create the color-stops needed for horizontal grids\n@function build-grid-background(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color\n) {\n $grid: compact();\n $grid: append($grid, $gutter-color $offset, comma);\n @for $i from 0 to $total {\n\n // $a represents the start of this column, initially equal to the offset\n $a: $offset;\n @if $i > 0 { $a: $a + (($column + $gutter) * $i); }\n\n // $g represents the start of this gutter, equal to $a plus one column-width\n $g: $a + $column;\n\n // $z represents the end of a gutter, equal to $g plus one gutter-width\n $z: $g + $gutter;\n\n @if (unit($a) == \"%\") and ($i == ($total - 1)) {\n $z: 100%;\n }\n\n // and we add this column/gutter pair to our grid\n $grid: join($grid, ($column-color $a, $column-color $g, $gutter-color $g, $gutter-color $z));\n }\n\n @return $grid;\n}\n\n// Return the gradient needed for horizontal grids\n@function get-column-gradient(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color,\n $force-fluid : $grid-background-force-fluid\n) {\n $grid: unquote(\"\");\n\n // don't force fluid grids when they are already fluid.\n @if unit($column) == \"%\" { $force-fluid: false; }\n\n @if $force-fluid {\n $grid: get-column-fluid-grid($total,$column,$gutter,$offset,$column-color,$gutter-color);\n } @else {\n $grid: build-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color);\n }\n\n // return the horizontal grid as a gradient\n $gradient: linear-gradient(left, $grid);\n @return $gradient;\n}\n\n// Convert a grid from fixed units into percentages.\n@function get-column-fluid-grid(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color\n) {\n $context: ($column * $total) + ($gutter * ($total - 1) + ($offset * 2));\n $offset: $offset / $context * 100%;\n $column: $column / $context * 100%;\n $gutter: $gutter / $context * 100%;\n\n // return the horizontal grid as a set of color-stops\n $grid: build-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color);\n @return $grid;\n}\n\n\n// Add just the baseline grid to an element's background\n@mixin baseline-grid-background(\n $baseline : $grid-background-baseline-height,\n $color : $grid-background-baseline-color\n) {\n @if $show-grid-backgrounds and $show-baseline-grid-backgrounds {\n @include background-image(get-baseline-gradient($color));\n @include background-size(100% $baseline);\n background-position: left top;\n }\n}\n\n// Add just the horizontal grid to an element's background\n@mixin column-grid-background(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color,\n $force-fluid : $grid-background-force-fluid\n) {\n @if $show-grid-backgrounds and $show-column-grid-backgrounds {\n @include background-image(\n get-column-gradient($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid)\n );\n background-position: left top;\n }\n}\n\n// Add both horizontal and baseline grids to an element's background\n@mixin grid-background(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $baseline : $grid-background-baseline-height,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color,\n $baseline-color : $grid-background-baseline-color,\n $force-fluid : $grid-background-force-fluid\n) {\n @if $show-grid-backgrounds {\n @if $show-baseline-grid-backgrounds and $show-column-grid-backgrounds {\n @include background-image(\n get-baseline-gradient($baseline-color),\n get-column-gradient($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid)\n );\n @include background-size(100% $baseline, auto);\n background-position: left top;\n } @else {\n @include baseline-grid-background($baseline, $baseline-color);\n @include column-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid);\n }\n }\n}\n","@import \"shared\";\n@import \"../utilities/general/hacks\";\n@import \"../functions\";\n\n// Background property support for vendor prefixing within values.\n@mixin background(\n $background-1,\n $background-2: false,\n $background-3: false,\n $background-4: false,\n $background-5: false,\n $background-6: false,\n $background-7: false,\n $background-8: false,\n $background-9: false,\n $background-10: false\n) {\n $backgrounds: compact($background-1, $background-2, $background-3, $background-4, $background-5,\n $background-6, $background-7, $background-8, $background-9, $background-10);\n $mult-bgs: -compass-list-size($backgrounds) > 1;\n $add-pie-bg: prefixed(-pie, $backgrounds) or $mult-bgs;\n @if $experimental-support-for-svg and prefixed(-svg, $backgrounds) { background: -svg($backgrounds); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $backgrounds) { background: -owg($backgrounds); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $backgrounds) { background: -webkit($backgrounds); }\n @if $experimental-support-for-mozilla and prefixed(-moz, $backgrounds) { background: -moz($backgrounds); }\n @if $experimental-support-for-opera and prefixed(-o, $backgrounds) { background: -o($backgrounds); }\n @if $experimental-support-for-pie and $add-pie-bg { -pie-background: -pie($backgrounds); }\n background: $backgrounds ;\n}\n\n@mixin background-with-css2-fallback(\n $background-1,\n $background-2: false,\n $background-3: false,\n $background-4: false,\n $background-5: false,\n $background-6: false,\n $background-7: false,\n $background-8: false,\n $background-9: false,\n $background-10: false\n) {\n $backgrounds: compact($background-1, $background-2, $background-3, $background-4, $background-5,\n $background-6, $background-7, $background-8, $background-9, $background-10);\n $mult-bgs: -compass-list-size($backgrounds) > 1;\n $simple-background: if($mult-bgs or prefixed(-css2, $backgrounds), -css2(-compass-nth($backgrounds, last)), false);\n @if not(blank($simple-background)) { background: $simple-background; }\n @include background($background-1, $background-2, $background-3, $background-4, $background-5,\n $background-6, $background-7, $background-8, $background-9, $background-10);\n}\n\n\n// Background image property support for vendor prefixing within values.\n@mixin background-image(\n $image-1,\n $image-2: false,\n $image-3: false,\n $image-4: false,\n $image-5: false,\n $image-6: false,\n $image-7: false,\n $image-8: false,\n $image-9: false,\n $image-10: false\n) {\n $images: compact($image-1, $image-2, $image-3, $image-4, $image-5, $image-6, $image-7, $image-8, $image-9, $image-10);\n $add-pie-bg: prefixed(-pie, $images) or -compass-list-size($images) > 1;\n\n @if $experimental-support-for-svg and prefixed(-svg, $images) { background-image: -svg($images); background-size: 100%; }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $images) { background-image: -owg($images); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $images) { background-image: -webkit($images); }\n @if $experimental-support-for-mozilla and prefixed(-moz, $images) { background-image: -moz($images); }\n @if $experimental-support-for-opera and prefixed(-o, $images) { background-image: -o($images); }\n @if $experimental-support-for-pie and $add-pie-bg { @warn \"PIE does not support background-image. Use @include background(#{$images}) instead.\" }\n background-image: $images ;\n}\n\n// Emit a IE-Specific filters that renders a simple linear gradient.\n// For use in IE 6 - 8. Best practice would have you apply this via a\n// conditional IE stylesheet, but if you must, you should place this before\n// any background-image properties that you have specified.\n//\n// For the `$orientation` parameter, you can pass `vertical` or `horizontal`.\n@mixin filter-gradient($start-color, $end-color, $orientation: vertical) {\n @include has-layout;\n $gradient-type: if($orientation == vertical, 0, 1);\n @if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {\n filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}');\n }\n}\n\n\n// Border image property support for vendor prefixing properties and values.\n@mixin border-image($value) {\n @if $experimental-support-for-mozilla { -moz-border-image: -moz(reject(-compass-list($value), fill)); }\n @if $support-for-original-webkit-gradients { -webkit-border-image: -owg(reject(-compass-list($value), fill)); }\n @if $experimental-support-for-webkit { -webkit-border-image: -webkit(reject(-compass-list($value), fill)); }\n @if $experimental-support-for-opera { -o-border-image: -o(reject(-compass-list($value), fill)); }\n @if $experimental-support-for-svg { border-image: -svg(reject(-compass-list($value), fill)); }\n border-image: $value;\n}\n\n// List style image property support for vendor prefixing within values.\n@mixin list-style-image($image) {\n @if $experimental-support-for-mozilla and prefixed(-moz, $image) { list-style-image: -moz($image); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $image) { list-style-image: -owg($image); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $image) { list-style-image: -webkit($image); }\n @if $experimental-support-for-opera and prefixed(-o, $image) { list-style-image: -o($image); }\n @if $experimental-support-for-svg and prefixed(-svg, $image) { list-style-image: -svg($image); }\n list-style-image: $image ;\n}\n\n// List style property support for vendor prefixing within values.\n@mixin list-style($value) {\n $value: -compass-list($value);\n @if $experimental-support-for-mozilla and prefixed(-moz, $value) { list-style-image: -moz($value); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $value) { list-style-image: -owg($value); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $value) { list-style-image: -webkit($value); }\n @if $experimental-support-for-opera and prefixed(-o, $value) { list-style-image: -o($value); }\n @if $experimental-support-for-svg and prefixed(-svg, $value) { list-style-image: -svg($value); }\n list-style-image: $value ;\n}\n\n// content property support for vendor prefixing within values.\n@mixin content($value) {\n $value: -compass-list($value);\n @if $experimental-support-for-mozilla and prefixed(-moz, $value) { content: -moz($value); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $value) { content: -owg($value); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $value) { content: -webkit($value); }\n @if $experimental-support-for-opera and prefixed(-o, $value) { content: -o($value); }\n @if $experimental-support-for-svg and prefixed(-svg, $value) { content: -svg($value); }\n content: $value ;\n}\n","@import \"shared\";\n\n// override to change the default\n$default-background-size: 100% auto !default;\n\n// Set the size of background images using px, width and height, or percentages.\n// Currently supported in: Opera, Gecko, Webkit.\n//\n// * percentages are relative to the background-origin (default = padding-box)\n// * mixin defaults to: `$default-background-size`\n@mixin background-size(\n $size-1: $default-background-size,\n $size-2: false,\n $size-3: false,\n $size-4: false,\n $size-5: false,\n $size-6: false,\n $size-7: false,\n $size-8: false,\n $size-9: false,\n $size-10: false\n) {\n $size-1: if(type-of($size-1) == string, unquote($size-1), $size-1);\n $sizes: compact($size-1, $size-2, $size-3, $size-4, $size-5, $size-6, $size-7, $size-8, $size-9, $size-10);\n @include experimental(background-size, $sizes, -moz, -webkit, -o, not(-ms), not(-khtml));\n}\n","@import \"css3/border-radius\";\n@import \"css3/inline-block\";\n@import \"css3/opacity\";\n@import \"css3/box-shadow\";\n@import \"css3/text-shadow\";\n@import \"css3/columns\";\n@import \"css3/box-sizing\";\n@import \"css3/box\";\n@import \"css3/images\";\n@import \"css3/background-clip\";\n@import \"css3/background-origin\";\n@import \"css3/background-size\";\n@import \"css3/font-face\";\n@import \"css3/transform\";\n@import \"css3/transition\";\n@import \"css3/appearance\";\n@import \"css3/regions\";\n@import \"css3/hyphenation\";\n@import \"css3/filter\";\n@import \"css3/pie\";\n@import \"css3/user-interface\";\n@import \"css3/flexbox\";","@import \"shared\";\n\n$default-border-radius: 5px !default;\n\n// Round all corners by a specific amount, defaults to value of `$default-border-radius`.\n//\n// When two values are passed, the first is the horizontal radius\n// and the second is the vertical radius.\n//\n// Note: webkit does not support shorthand syntax for several corners at once.\n// So in the case where you pass several values only the first will be passed to webkit.\n//\n// Examples:\n//\n// .simple { @include border-radius(4px, 4px); }\n// .compound { @include border-radius(2px 5px, 3px 6px); }\n// .crazy { @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px)}\n//\n// Which generates:\n//\n// .simple {\n// -webkit-border-radius: 4px 4px;\n// -moz-border-radius: 4px / 4px;\n// -khtml-border-radius: 4px / 4px;\n// border-radius: 4px / 4px; }\n// \n// .compound {\n// -webkit-border-radius: 2px 3px;\n// -moz-border-radius: 2px 5px / 3px 6px;\n// -khtml-border-radius: 2px 5px / 3px 6px;\n// border-radius: 2px 5px / 3px 6px; }\n// \n// .crazy {\n// -webkit-border-radius: 1px 2px;\n// -moz-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n// -khtml-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n// border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; }\n\n@mixin border-radius($radius: $default-border-radius, $vertical-radius: false) {\n\n @if $vertical-radius {\n // Webkit doesn't understand the official shorthand syntax for specifying\n // a vertical radius unless so in case there's several we only take the first.\n @include experimental(border-radius, first-value-of($radius) first-value-of($vertical-radius),\n not(-moz),\n -webkit,\n not(-o),\n not(-ms),\n not(-khtml),\n not(official)\n );\n @include experimental(\"border-radius\", $radius unquote(\"/\") $vertical-radius,\n -moz,\n not(-webkit),\n not(-o),\n not(-ms),\n -khtml,\n official\n );\n }\n @else {\n @include experimental(border-radius, $radius);\n }\n}\n\n// Round radius at position by amount.\n//\n// * legal values for `$vert`: `top`, `bottom`\n// * legal values for `$horz`: `left`, `right`\n\n@mixin border-corner-radius($vert, $horz, $radius: $default-border-radius) {\n // Support for mozilla's syntax for specifying a corner\n @include experimental(\"border-radius-#{$vert}#{$horz}\", $radius,\n -moz,\n not(-webkit),\n not(-o),\n not(-ms),\n not(-khtml),\n not(official)\n );\n @include experimental(\"border-#{$vert}-#{$horz}-radius\", $radius,\n not(-moz),\n -webkit,\n not(-o),\n not(-ms),\n -khtml,\n official\n );\n \n}\n\n// Round top-left corner only\n\n@mixin border-top-left-radius($radius: $default-border-radius) {\n @include border-corner-radius(top, left, $radius); }\n\n// Round top-right corner only\n\n@mixin border-top-right-radius($radius: $default-border-radius) {\n @include border-corner-radius(top, right, $radius); }\n\n// Round bottom-left corner only\n\n@mixin border-bottom-left-radius($radius: $default-border-radius) {\n @include border-corner-radius(bottom, left, $radius); }\n\n// Round bottom-right corner only\n\n@mixin border-bottom-right-radius($radius: $default-border-radius) {\n @include border-corner-radius(bottom, right, $radius); }\n\n// Round both top corners by amount\n@mixin border-top-radius($radius: $default-border-radius) {\n @include border-top-left-radius($radius);\n @include border-top-right-radius($radius); }\n\n// Round both right corners by amount\n@mixin border-right-radius($radius: $default-border-radius) {\n @include border-top-right-radius($radius);\n @include border-bottom-right-radius($radius); }\n\n// Round both bottom corners by amount\n@mixin border-bottom-radius($radius: $default-border-radius) {\n @include border-bottom-left-radius($radius);\n @include border-bottom-right-radius($radius); }\n\n// Round both left corners by amount\n@mixin border-left-radius($radius: $default-border-radius) {\n @include border-top-left-radius($radius);\n @include border-bottom-left-radius($radius); }\n","@import \"shared\";\n\n// Provides cross-browser CSS opacity. Takes a number between 0 and 1 as the argument, e.g. 0.5 for 50% opacity.\n//\n// @param $opacity\n// A number between 0 and 1, where 0 is transparent and 1 is opaque.\n\n@mixin opacity($opacity) {\n @if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {\n filter: unquote(\"progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})\");\n }\n opacity: $opacity;\n}\n\n// Make an element completely transparent.\n@mixin transparent { @include opacity(0); }\n\n// Make an element completely opaque.\n@mixin opaque { @include opacity(1); }\n","// @doc off\n// These defaults make the arguments optional for this mixin\n// If you like, set different defaults before importing.\n// @doc on\n\n@import \"shared\";\n\n\n// The default color for box shadows\n$default-box-shadow-color: #333333 !default;\n\n// The default horizontal offset. Positive is to the right.\n$default-box-shadow-h-offset: 0px !default;\n\n// The default vertical offset. Positive is down.\n$default-box-shadow-v-offset: 0px !default;\n\n// The default blur length.\n$default-box-shadow-blur: 5px !default;\n\n// The default spread length.\n$default-box-shadow-spread : false !default;\n\n// The default shadow inset: inset or false (for standard shadow).\n$default-box-shadow-inset : false !default;\n\n// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows when one or more box\n// shadows are needed.\n// Each shadow argument should adhere to the standard css3 syntax for the\n// box-shadow property.\n@mixin box-shadow(\n $shadow-1 : default,\n $shadow-2 : false,\n $shadow-3 : false,\n $shadow-4 : false,\n $shadow-5 : false,\n $shadow-6 : false,\n $shadow-7 : false,\n $shadow-8 : false,\n $shadow-9 : false,\n $shadow-10: false\n) {\n @if $shadow-1 == default {\n $shadow-1 : -compass-space-list(compact(if($default-box-shadow-inset, inset, false), $default-box-shadow-h-offset, $default-box-shadow-v-offset, $default-box-shadow-blur, $default-box-shadow-spread, $default-box-shadow-color));\n }\n $shadow : compact($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10);\n @include experimental(box-shadow, $shadow,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n\n// Provides a single cross-browser CSS box shadow for Webkit, Gecko, and CSS3.\n// Includes default arguments for horizontal offset, vertical offset, blur length, spread length, color and inset.\n@mixin single-box-shadow(\n $hoff : $default-box-shadow-h-offset,\n $voff : $default-box-shadow-v-offset,\n $blur : $default-box-shadow-blur,\n $spread : $default-box-shadow-spread,\n $color : $default-box-shadow-color,\n $inset : $default-box-shadow-inset\n) {\n @if not ($inset == true or $inset == false or $inset == inset) {\n @warn \"$inset expected to be true or the inset keyword. Got #{$inset} instead. Using: inset\";\n }\n\n @if $color == none {\n @include box-shadow(none);\n } @else {\n $full : $hoff $voff;\n @if $blur { $full: $full $blur; }\n @if $spread { $full: $full $spread; }\n @if $color { $full: $full $color; }\n @if $inset { $full: inset $full; }\n @include box-shadow($full);\n }\n}\n","@import \"shared\";\n\n// These defaults make the arguments optional for this mixin\n// If you like, set different defaults in your project\n\n$default-text-shadow-color: #aaa !default;\n$default-text-shadow-h-offset: 0px !default;\n$default-text-shadow-v-offset: 0px !default;\n$default-text-shadow-blur: 1px !default;\n$default-text-shadow-spread: false !default;\n\n// Provides cross-browser text shadows when one or more shadows are needed.\n// Each shadow argument should adhere to the standard css3 syntax for the\n// text-shadow property.\n//\n// Note: if any shadow has a spread parameter, this will cause the mixin\n// to emit the shadow declaration twice, first without the spread,\n// then with the spread included. This allows you to progressively\n// enhance the browsers that do support the spread parameter.\n@mixin text-shadow(\n $shadow-1 : default,\n $shadow-2 : false,\n $shadow-3 : false,\n $shadow-4 : false,\n $shadow-5 : false,\n $shadow-6 : false,\n $shadow-7 : false,\n $shadow-8 : false,\n $shadow-9 : false,\n $shadow-10: false\n) {\n @if $shadow-1 == default {\n $shadow-1: compact($default-text-shadow-h-offset $default-text-shadow-v-offset $default-text-shadow-blur $default-text-shadow-spread $default-text-shadow-color);\n }\n $shadows-without-spread: join((),(),comma);\n $shadows: join((),(),comma);\n $has-spread: false;\n @each $shadow in compact($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5,\n $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10) {\n @if length($shadow) > 4 {\n $has-spread: true;\n $shadows-without-spread: append($shadows-without-spread, nth($shadow,1) nth($shadow,2) nth($shadow,3) nth($shadow,5));\n $shadows: append($shadows, $shadow);\n } else {\n $shadows-without-spread: append($shadows-without-spread, $shadow);\n $shadows: append($shadows, $shadow);\n }\n }\n @if $has-spread {\n text-shadow: $shadows-without-spread;\n }\n text-shadow: $shadows;\n}\n\n// Provides a single cross-browser CSS text shadow.\n//\n// Provides sensible defaults for the color, horizontal offset, vertical offset, blur, and spread\n// according to the configuration defaults above.\n@mixin single-text-shadow(\n $hoff: false,\n $voff: false,\n $blur: false,\n $spread: false,\n $color: false\n) {\n // A lot of people think the color comes first. It doesn't.\n @if type-of($hoff) == color {\n $temp-color: $hoff;\n $hoff: $voff;\n $voff: $blur;\n $blur: $spread;\n $spread: $color;\n $color: $temp-color;\n }\n // Can't rely on default assignment with multiple supported argument orders.\n $hoff: if($hoff, $hoff, $default-text-shadow-h-offset);\n $voff: if($voff, $voff, $default-text-shadow-v-offset);\n $blur: if($blur, $blur, $default-text-shadow-blur );\n $spread: if($spread, $spread, $default-text-shadow-spread );\n $color: if($color, $color, $default-text-shadow-color );\n // We don't need experimental support for this property.\n @if $color == none or $hoff == none {\n @include text-shadow(none);\n } @else {\n @include text-shadow(compact($hoff $voff $blur $spread $color));\n }\n}\n","@import \"shared\";\n\n// Specify the shorthand `columns` property.\n//\n// Example:\n//\n// @include columns(20em 2)\n@mixin columns($width-and-count) {\n @include experimental(columns, $width-and-count,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the number of columns\n@mixin column-count($count) {\n @include experimental(column-count, $count,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the gap between columns e.g. `20px`\n@mixin column-gap($width) {\n @include experimental(column-gap, $width,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the width of columns e.g. `100px`\n@mixin column-width($width) {\n @include experimental(column-width, $width,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the width of the rule between columns e.g. `1px`\n@mixin column-rule-width($width) {\n @include experimental(column-rule-width, $width,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the style of the rule between columns e.g. `dotted`.\n// This works like border-style.\n@mixin column-rule-style($style) {\n @include experimental(column-rule-style, unquote($style),\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the color of the rule between columns e.g. `blue`.\n// This works like border-color.\n@mixin column-rule-color($color) {\n @include experimental(column-rule-color, $color,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Mixin encompassing all column rule properties\n// For example:\n//\n// @include column-rule(1px, solid, #c00)\n//\n// Or the values can be space separated:\n//\n// @include column-rule(1px solid #c00)\n@mixin column-rule($width, $style: false, $color: false) {\n $full : -compass-space-list(compact($width, $style, $color));\n @include experimental(column-rule, $full,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Mixin for setting column-break-before\n//\n// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//\n// Example: \n// h2.before {@include column-break-before(always);}\n//\n// Which generates: \n//\n// h2.before { \n// -webkit-column-break-before: always;\n// column-break-before: always;}\n@mixin column-break-before($value: auto){\n @include experimental(column-break-before, $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}\n\n// Mixin for setting column-break-after\n//\n// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//\n// Example: \n// h2.after {@include column-break-after(always); }\n//\n// Which generates: \n//\n// h2.after {\n// -webkit-column-break-after: always;\n// column-break-after: always; }\n@mixin column-break-after($value: auto){\n @include experimental(column-break-after, $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}\n\n// Mixin for setting column-break-inside\n//\n// * legal values are auto, avoid, avoid-page, avoid-column\n//\n// Example: \n// h2.inside {@include column-break-inside();}\n// Which generates: \n// \n// h2.inside {\n// -webkit-column-break-inside: auto;\n// column-break-inside: auto;}\n@mixin column-break-inside($value: auto){\n @include experimental(column-break-inside, $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}\n\n// All-purpose mixin for setting column breaks.\n//\n// * legal values for $type : before, after, inside \n// * legal values for '$value' are dependent on $type\n// * when $type = before, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n// * when $type = after, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n// * when $type = inside, legal values are auto, avoid, avoid-page, avoid-column\n// \n// Examples: \n// h2.before {@include column-break(before, always);}\n// h2.after {@include column-break(after, always); }\n// h2.inside {@include column-break(inside); }\n//\n// Which generates: \n// h2.before { \n// -webkit-column-break-before: always;\n// column-break-before: always;}\n// \n// h2.after {\n// -webkit-column-break-after: always;\n// column-break-after: always; }\n//\n// h2.inside {\n// -webkit-column-break-inside: auto;\n// column-break-inside: auto;}\n \n@mixin column-break($type: before, $value: auto){\n @include experimental(\"column-break-#{$type}\", $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}","@import \"shared\";\n\n// Change the box model for Mozilla, Webkit, IE8 and the future\n//\n// @param $bs\n// [ content-box | border-box ]\n\n@mixin box-sizing($bs) {\n $bs: unquote($bs);\n @include experimental(box-sizing, $bs,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n","@import \"shared\";\n\n// display:box; must be used for any of the other flexbox mixins to work properly\n@mixin display-box {\n @include experimental-value(display, box,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default box orientation, assuming that the user wants something less block-like\n$default-box-orient: horizontal !default;\n\n// Box orientation [ horizontal | vertical | inline-axis | block-axis | inherit ]\n@mixin box-orient(\n $orientation: $default-box-orient\n) {\n $orientation : unquote($orientation);\n @include experimental(box-orient, $orientation,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default box-align\n$default-box-align: stretch !default;\n\n// Box align [ start | end | center | baseline | stretch ]\n@mixin box-align(\n $alignment: $default-box-align\n) {\n $alignment : unquote($alignment);\n @include experimental(box-align, $alignment,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default box flex\n$default-box-flex: 0 !default;\n\n// mixin which takes an int argument for box flex. Apply this to the children inside the box.\n//\n// For example: \"div.display-box > div.child-box\" would get the box flex mixin.\n@mixin box-flex(\n $flex: $default-box-flex\n) {\n @include experimental(box-flex, $flex,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default flex group\n$default-box-flex-group: 1 !default;\n\n// mixin which takes an int argument for flexible grouping\n@mixin box-flex-group(\n $group: $default-box-flex-group\n) {\n @include experimental(box-flex-group, $group,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// default for ordinal group\n$default-box-ordinal-group: 1 !default;\n\n// mixin which takes an int argument for ordinal grouping and rearranging the order\n@mixin box-ordinal-group(\n $group: $default-ordinal-flex-group\n) {\n @include experimental(box-ordinal-group, $group,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Box direction default value\n$default-box-direction: normal !default;\n\n// mixin for box-direction [ normal | reverse | inherit ]\n@mixin box-direction(\n $direction: $default-box-direction\n) {\n $direction: unquote($direction);\n @include experimental(box-direction, $direction,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// default for box lines\n$default-box-lines: single !default;\n\n// mixin for box lines [ single | multiple ]\n@mixin box-lines(\n $lines: $default-box-lines\n) {\n $lines: unquote($lines);\n @include experimental(box-lines, $lines,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// default for box pack\n$default-box-pack: start !default;\n\n// mixin for box pack [ start | end | center | justify ]\n@mixin box-pack(\n $pack: $default-box-pack\n) {\n $pack: unquote($pack);\n @include experimental(box-pack, $pack,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}","@import \"shared\";\n\n// The default value is `padding-box` -- the box model used by modern browsers.\n//\n// If you wish to do so, you can override the default constant with `border-box`\n//\n// To override to the default border-box model, use this code:\n// $default-background-clip: border-box\n\n$default-background-clip: padding-box !default;\n\n// Clip the background (image and color) at the edge of the padding or border.\n//\n// Legal Values:\n//\n// * padding-box\n// * border-box\n// * text\n\n@mixin background-clip($clip: $default-background-clip) {\n // webkit and mozilla use the deprecated short [border | padding]\n $clip: unquote($clip);\n $deprecated: $clip;\n @if $clip == padding-box { $deprecated: padding; }\n @if $clip == border-box { $deprecated: border; }\n // Support for webkit and mozilla's use of the deprecated short form\n @include experimental(background-clip, $deprecated,\n -moz,\n -webkit,\n not(-o),\n not(-ms),\n not(-khtml),\n not official\n );\n @include experimental(background-clip, $clip,\n not(-moz),\n not(-webkit),\n not(-o),\n not(-ms),\n -khtml,\n official\n );\n}\n","// Override `$default-background-origin` to change the default.\n\n@import \"shared\";\n\n$default-background-origin: content-box !default;\n\n// Position the background off the edge of the padding, border or content\n//\n// * Possible values:\n// * `padding-box`\n// * `border-box`\n// * `content-box`\n// * browser defaults to `padding-box`\n// * mixin defaults to `content-box`\n\n\n@mixin background-origin($origin: $default-background-origin) {\n $origin: unquote($origin);\n // webkit and mozilla use the deprecated short [border | padding | content]\n $deprecated: $origin;\n @if $origin == padding-box { $deprecated: padding; }\n @if $origin == border-box { $deprecated: border; }\n @if $origin == content-box { $deprecated: content; }\n\n // Support for webkit and mozilla's use of the deprecated short form\n @include experimental(background-origin, $deprecated,\n -moz,\n -webkit,\n not(-o),\n not(-ms),\n not(-khtml),\n not official\n );\n @include experimental(background-origin, $origin,\n not(-moz),\n not(-webkit),\n -o,\n -ms,\n -khtml,\n official\n );\n}\n","@import \"shared\";\n\n// Cross-browser support for @font-face. Supports IE, Gecko, Webkit, Opera.\n//\n// * $name is required, arbitrary, and what you will use in font stacks.\n// * $font-files is required using font-files('relative/location', 'format').\n// for best results use this order: woff, opentype/truetype, svg\n// * $eot is required by IE, and is a relative location of the eot file.\n// * $weight shows if the font is bold, defaults to normal\n// * $style defaults to normal, might be also italic\n// * For android 2.2 Compatiblity, please ensure that your web page has\n// a meta viewport tag.\n// * To support iOS < 4.2, an SVG file must be provided\n//\n// If you need to generate other formats check out the Font Squirrel\n// [font generator](http://www.fontsquirrel.com/fontface/generator)\n//\n\n// In order to refer to a specific style of the font in your stylesheets as \n// e.g. \"font-style: italic;\", you may add a couple of @font-face includes\n// containing the respective font files for each style and specying\n// respective the $style parameter.\n\n// Order of the includes matters, and it is: normal, bold, italic, bold+italic.\n\n@mixin font-face(\n $name, \n $font-files, \n $eot: false,\n $weight: false,\n $style: false\n) {\n $iefont: unquote(\"#{$eot}?#iefix\");\n @font-face {\n font-family: quote($name);\n @if $eot {\n src: font-url($eot);\n $font-files: font-url($iefont) unquote(\"format('eot')\"), $font-files; \n }\n src: $font-files;\n @if $weight {\n font-weight: $weight;\n }\n @if $style {\n font-style: $style;\n }\n }\n}\n","@import \"shared\";\n\n// @doc off\n// Note ----------------------------------------------------------------------\n// Safari, Chrome, and Firefox all support 3D transforms. However,\n// only in the most recent builds. You should also provide fallback 2d support for\n// Opera and IE. IE10 is slated to have 3d enabled, but is currently unreleased.\n// To make that easy, all 2D transforms include an browser-targeting toggle ($only3d)\n// to switch between the two support lists. The toggle defaults to 'false' (2D),\n// and also accepts 'true' (3D). Currently the lists are as follows:\n// 2D: Mozilla, Webkit, Opera, Official\n// 3D: Webkit, Firefox.\n\n// Available Transforms ------------------------------------------------------\n// - Scale (2d and 3d)\n// - Rotate (2d and 3d)\n// - Translate (2d and 3d)\n// - Skew (2d only)\n\n// Transform Parameters ------------------------------------------------------\n// - Transform Origin (2d and 3d)\n// - Perspective (3d)\n// - Perspective Origin (3d)\n// - Transform Style (3d)\n// - Backface Visibility (3d)\n\n// Mixins --------------------------------------------------------------------\n// transform-origin\n// - shortcuts: transform-origin2d, transform-origin3d\n// - helpers: apply-origin\n// transform\n// - shortcuts: transform2d, transform3d\n// - helpers: simple-transform, create-transform\n// perspective\n// - helpers: perspective-origin\n// transform-style\n// backface-visibility\n// scale\n// - shortcuts: scaleX, scaleY, scaleZ, scale3d\n// rotate\n// - shortcuts: rotateX, rotateY, rotate3d\n// translate\n// - shortcuts: translateX, translateY, translateZ, translate3d\n// skew\n// - shortcuts: skewX, skewY\n\n// Defaults ------------------------------------------------------------------\n// @doc on\n\n// The default x-origin for transforms\n$default-origin-x : 50% !default;\n// The default y-origin for transforms\n$default-origin-y : 50% !default;\n// The default z-origin for transforms\n$default-origin-z : 50% !default;\n\n\n// The default x-multiplier for scaling\n$default-scale-x : 1.25 !default;\n// The default y-multiplier for scaling\n$default-scale-y : $default-scale-x !default;\n// The default z-multiplier for scaling\n$default-scale-z : $default-scale-x !default;\n\n\n// The default angle for rotations\n$default-rotate : 45deg !default;\n\n\n// The default x-vector for the axis of 3d rotations\n$default-vector-x : 1 !default;\n// The default y-vector for the axis of 3d rotations\n$default-vector-y : 1 !default;\n// The default z-vector for the axis of 3d rotations\n$default-vector-z : 1 !default;\n\n\n// The default x-length for translations\n$default-translate-x : 1em !default;\n// The default y-length for translations\n$default-translate-y : $default-translate-x !default;\n// The default z-length for translations\n$default-translate-z : $default-translate-x !default;\n\n\n// The default x-angle for skewing\n$default-skew-x : 5deg !default;\n// The default y-angle for skewing\n$default-skew-y : 5deg !default;\n\n\n// **Transform-origin**\n// Transform-origin sent as a complete string\n//\n// @include apply-origin( origin [, 3D-only ] )\n//\n// where 'origin' is a space separated list containing 1-3 (x/y/z) coordinates\n// in percentages, absolute (px, cm, in, em etc..) or relative\n// (left, top, right, bottom, center) units\n//\n// @param only3d Set this to true to only apply this\n// mixin where browsers have 3D support.\n@mixin apply-origin($origin, $only3d) {\n $only3d: $only3d or -compass-list-size(-compass-list($origin)) > 2;\n @if $only3d {\n @include experimental(transform-origin, $origin,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n } @else {\n @include experimental(transform-origin, $origin,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n }\n}\n\n// Transform-origin sent as individual arguments:\n//\n// @include transform-origin( [ origin-x, origin-y, origin-z, 3D-only ] )\n//\n// where the 3 'origin-' arguments represent x/y/z coordinates.\n//\n// **NOTE:** setting z coordinates triggers 3D support list, leave false for 2D support\n@mixin transform-origin(\n $origin-x: $default-origin-x,\n $origin-y: $default-origin-y,\n $origin-z: false,\n $only3d: if($origin-z, true, false)\n) {\n $origin: unquote('');\n @if $origin-x or $origin-y or $origin-z {\n @if $origin-x { $origin: $origin-x; } @else { $origin: 50%; }\n @if $origin-y { $origin: $origin $origin-y; } @else { @if $origin-z { $origin: $origin 50%; }}\n @if $origin-z { $origin: $origin $origin-z; }\n @include apply-origin($origin, $only3d);\n }\n}\n\n\n// Transform sent as a complete string:\n//\n// @include transform( transforms [, 3D-only ] )\n//\n// where 'transforms' is a space separated list of all the transforms to be applied.\n@mixin transform(\n $transform,\n $only3d: false\n) {\n @if $only3d {\n @include experimental(transform, $transform,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n } @else {\n @include experimental(transform, $transform,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n }\n}\n\n// Shortcut to target all browsers with 2D transform support\n@mixin transform2d($trans) {\n @include transform($trans, false);\n}\n\n// Shortcut to target only browsers with 3D transform support\n@mixin transform3d($trans) {\n @include transform($trans, true);\n}\n\n// @doc off\n// 3D Parameters -------------------------------------------------------------\n// @doc on\n\n// Set the perspective of 3D transforms on the children of an element:\n//\n// @include perspective( perspective )\n//\n// where 'perspective' is a unitless number representing the depth of the\n// z-axis. The higher the perspective, the more exaggerated the foreshortening.\n// values from 500 to 1000 are more-or-less \"normal\" - a good starting-point.\n@mixin perspective($p) {\n @include experimental(perspective, $p,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Set the origin position for the perspective\n//\n// @include perspective-origin(origin-x [origin-y])\n//\n// where the two arguments represent x/y coordinates\n@mixin perspective-origin($origin: 50%) {\n @include experimental(perspective-origin, $origin,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Determine whether a 3D objects children also live in the given 3D space\n//\n// @include transform-style( [ style ] )\n//\n// where `style` can be either `flat` or `preserve-3d`.\n// Browsers default to `flat`, mixin defaults to `preserve-3d`.\n@mixin transform-style($style: preserve-3d) {\n @include experimental(transform-style, $style,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Determine the visibility of an element when it's back is turned\n//\n// @include backface-visibility( [ visibility ] )\n//\n// where `visibility` can be either `visible` or `hidden`.\n// Browsers default to visible, mixin defaults to hidden\n@mixin backface-visibility($visibility: hidden) {\n @include experimental(backface-visibility, $visibility,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// @doc off\n// Transform Partials --------------------------------------------------------\n// These work well on their own, but they don't add to each other, they override.\n// Use along with transform parameter mixins to adjust origin, perspective and style\n// ---------------------------------------------------------------------------\n\n\n// Scale ---------------------------------------------------------------------\n// @doc on\n\n// Scale an object along the x and y axis:\n//\n// @include scale( [ scale-x, scale-y, perspective, 3D-only ] )\n//\n// where the 'scale-' arguments are unitless multipliers of the x and y dimensions\n// and perspective, which works the same as the stand-alone perspective property/mixin\n// but applies to the individual element (multiplied with any parent perspective)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale(\n $scale-x: $default-scale-x,\n $scale-y: $scale-x,\n $perspective: false,\n $only3d: false\n) {\n $trans: scale($scale-x, $scale-y);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Scale an object along the x axis\n// @include scaleX( [ scale-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleX(\n $scale: $default-scale-x,\n $perspective: false,\n $only3d: false\n) {\n $trans: scaleX($scale);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Scale an object along the y axis\n// @include scaleY( [ scale-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleY(\n $scale: $default-scale-y,\n $perspective: false,\n $only3d: false\n) {\n $trans: scaleY($scale);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Scale an object along the z axis\n// @include scaleZ( [ scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleZ(\n $scale: $default-scale-z,\n $perspective: false\n) {\n $trans: scaleZ($scale);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Scale and object along all three axis\n// @include scale3d( [ scale-x, scale-y, scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale3d(\n $scale-x: $default-scale-x,\n $scale-y: $default-scale-y,\n $scale-z: $default-scale-z,\n $perspective: false\n) {\n $trans: scale3d($scale-x, $scale-y, $scale-z);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// @doc off\n// Rotate --------------------------------------------------------------------\n// @doc on\n\n// Rotate an object around the z axis (2D)\n// @include rotate( [ rotation, perspective, 3D-only ] )\n// where 'rotation' is an angle set in degrees (deg) or radian (rad) units\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate(\n $rotate: $default-rotate,\n $perspective: false,\n $only3d: false\n) {\n $trans: rotate($rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// A longcut for 'rotate' in case you forget that 'z' is implied\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateZ(\n $rotate: $default-rotate,\n $perspective: false,\n $only3d: false\n) {\n @include rotate($rotate, $perspective, $only3d);\n}\n\n// Rotate an object around the x axis (3D)\n// @include rotateX( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateX(\n $rotate: $default-rotate,\n $perspective: false\n) {\n $trans: rotateX($rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Rotate an object around the y axis (3D)\n// @include rotate( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateY(\n $rotate: $default-rotate,\n $perspective: false\n) {\n $trans: rotateY($rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Rotate an object around an arbitrary axis (3D)\n// @include rotate( [ vector-x, vector-y, vector-z, rotation, perspective ] )\n// where the 'vector-' arguments accept unitless numbers.\n// These numbers are not important on their own, but in relation to one another\n// creating an axis from your transform-origin, along the axis of Xx = Yy = Zz.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate3d(\n $vector-x: $default-vector-x,\n $vector-y: $default-vector-y,\n $vector-z: $default-vector-z,\n $rotate: $default-rotate,\n $perspective: false\n) {\n $trans: rotate3d($vector-x, $vector-y, $vector-z, $rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// @doc off\n// Translate -----------------------------------------------------------------\n// @doc on\n\n// Move an object along the x or y axis (2D)\n// @include translate( [ translate-x, translate-y, perspective, 3D-only ] )\n// where the 'translate-' arguments accept any distance in percentages or absolute (px, cm, in, em etc..) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate(\n $translate-x: $default-translate-x,\n $translate-y: $default-translate-y,\n $perspective: false,\n $only3d: false\n) {\n $trans: translate($translate-x, $translate-y);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Move an object along the x axis (2D)\n// @include translate( [ translate-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateX(\n $trans-x: $default-translate-x,\n $perspective: false,\n $only3d: false\n) {\n $trans: translateX($trans-x);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Move an object along the y axis (2D)\n// @include translate( [ translate-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateY(\n $trans-y: $default-translate-y,\n $perspective: false,\n $only3d: false\n) {\n $trans: translateY($trans-y);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Move an object along the z axis (3D)\n// @include translate( [ translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateZ(\n $trans-z: $default-translate-z,\n $perspective: false\n) {\n $trans: translateZ($trans-z);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Move an object along the x, y and z axis (3D)\n// @include translate( [ translate-x, translate-y, translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate3d(\n $translate-x: $default-translate-x,\n $translate-y: $default-translate-y,\n $translate-z: $default-translate-z,\n $perspective: false\n) {\n $trans: translate3d($translate-x, $translate-y, $translate-z);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// @doc off\n// Skew ----------------------------------------------------------------------\n// @doc on\n\n// Skew an element:\n//\n// @include skew( [ skew-x, skew-y, 3D-only ] )\n//\n// where the 'skew-' arguments accept css angles in degrees (deg) or radian (rad) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skew(\n $skew-x: $default-skew-x,\n $skew-y: $default-skew-y,\n $only3d: false\n) {\n $trans: skew($skew-x, $skew-y);\n @include transform($trans, $only3d);\n}\n\n// Skew an element along the x axiz\n//\n// @include skew( [ skew-x, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewX(\n $skew-x: $default-skew-x,\n $only3d: false\n) {\n $trans: skewX($skew-x);\n @include transform($trans, $only3d);\n}\n\n// Skew an element along the y axis\n//\n// @include skew( [ skew-y, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewY(\n $skew-y: $default-skew-y,\n $only3d: false\n) {\n $trans: skewY($skew-y);\n @include transform($trans, $only3d);\n}\n\n\n// Full transform mixins\n// For settings any combination of transforms as arguments\n// These are complex and not highly recommended for daily use. They are mainly\n// here for backward-compatibility purposes.\n//\n// * they include origin adjustments\n// * scale takes a multiplier (unitless), rotate and skew take degrees (deg)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin create-transform(\n $perspective: false,\n $scale-x: false,\n $scale-y: false,\n $scale-z: false,\n $rotate-x: false,\n $rotate-y: false,\n $rotate-z: false,\n $rotate3d: false,\n $trans-x: false,\n $trans-y: false,\n $trans-z: false,\n $skew-x: false,\n $skew-y: false,\n $origin-x: false,\n $origin-y: false,\n $origin-z: false,\n $only3d: false\n) {\n $trans: unquote(\"\");\n\n // perspective\n @if $perspective { $trans: perspective($perspective) ; }\n\n // scale\n @if $scale-x and $scale-y {\n @if $scale-z { $trans: $trans scale3d($scale-x, $scale-y, $scale-z); }\n @else { $trans: $trans scale($scale-x, $scale-y); }\n } @else {\n @if $scale-x { $trans: $trans scaleX($scale-x); }\n @if $scale-y { $trans: $trans scaleY($scale-y); }\n @if $scale-z { $trans: $trans scaleZ($scale-z); }\n }\n\n // rotate\n @if $rotate-x { $trans: $trans rotateX($rotate-x); }\n @if $rotate-y { $trans: $trans rotateY($rotate-y); }\n @if $rotate-z { $trans: $trans rotateZ($rotate-z); }\n @if $rotate3d { $trans: $trans rotate3d($rotate3d); }\n\n // translate\n @if $trans-x and $trans-y {\n @if $trans-z { $trans: $trans translate3d($trans-x, $trans-y, $trans-z); }\n @else { $trans: $trans translate($trans-x, $trans-y); }\n } @else {\n @if $trans-x { $trans: $trans translateX($trans-x); }\n @if $trans-y { $trans: $trans translateY($trans-y); }\n @if $trans-z { $trans: $trans translateZ($trans-z); }\n }\n\n // skew\n @if $skew-x and $skew-y { $trans: $trans skew($skew-x, $skew-y); }\n @else {\n @if $skew-x { $trans: $trans skewX($skew-x); }\n @if $skew-y { $trans: $trans skewY($skew-y); }\n }\n\n // apply it!\n @include transform($trans, $only3d);\n @include transform-origin($origin-x, $origin-y, $origin-z, $only3d);\n}\n\n\n// A simplified set of options\n// backwards-compatible with the previous version of the 'transform' mixin\n@mixin simple-transform(\n $scale: false,\n $rotate: false,\n $trans-x: false,\n $trans-y: false,\n $skew-x: false,\n $skew-y: false,\n $origin-x: false,\n $origin-y: false\n) {\n @include create-transform(\n false,\n $scale, $scale, false,\n false, false, $rotate, false,\n $trans-x, $trans-y, false,\n $skew-x, $skew-y,\n $origin-x, $origin-y, false,\n false\n );\n}\n","@import \"shared\";\n\n// CSS Transitions\n// Currently only works in Webkit.\n//\n// * expected in CSS3, FireFox 3.6/7 and Opera Presto 2.3\n// * We'll be prepared.\n//\n// Including this submodule sets following defaults for the mixins:\n//\n// $default-transition-property : all\n// $default-transition-duration : 1s\n// $default-transition-function : false\n// $default-transition-delay : false\n//\n// Override them if you like. Timing-function and delay are set to false for browser defaults (ease, 0s).\n\n$default-transition-property: all !default;\n\n$default-transition-duration: 1s !default;\n\n$default-transition-function: false !default;\n\n$default-transition-delay: false !default;\n\n$transitionable-prefixed-values: transform, transform-origin !default;\n\n// One or more properties to transition\n//\n// * for multiple, use a comma-delimited list\n// * also accepts \"all\" or \"none\"\n\n@mixin transition-property($property-1: $default-transition-property,\n $property-2 : false,\n $property-3 : false,\n $property-4 : false,\n $property-5 : false,\n $property-6 : false,\n $property-7 : false,\n $property-8 : false,\n $property-9 : false,\n $property-10: false\n) {\n @if type-of($property-1) == string { $property-1: unquote($property-1); }\n $properties: compact($property-1, $property-2, $property-3, $property-4, $property-5, $property-6, $property-7, $property-8, $property-9, $property-10);\n @if $experimental-support-for-webkit { -webkit-transition-property : prefixed-for-transition(-webkit, $properties); }\n @if $experimental-support-for-mozilla { -moz-transition-property : prefixed-for-transition(-moz, $properties); }\n @if $experimental-support-for-opera { -o-transition-property : prefixed-for-transition(-o, $properties); }\n transition-property : $properties;\n}\n\n// One or more durations in seconds\n//\n// * for multiple, use a comma-delimited list\n// * these durations will affect the properties in the same list position\n\n@mixin transition-duration($duration-1: $default-transition-duration,\n $duration-2 : false,\n $duration-3 : false,\n $duration-4 : false,\n $duration-5 : false,\n $duration-6 : false,\n $duration-7 : false,\n $duration-8 : false,\n $duration-9 : false,\n $duration-10: false\n) {\n @if type-of($duration-1) == string { $duration-1: unquote($duration-1); }\n $durations: compact($duration-1, $duration-2, $duration-3, $duration-4, $duration-5, $duration-6, $duration-7, $duration-8, $duration-9, $duration-10);\n @include experimental(transition-duration, $durations,\n -moz, -webkit, -o, not(-ms), not(-khtml), official\n );\n}\n\n// One or more timing functions\n//\n// * [ ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2)]\n// * For multiple, use a comma-delimited list\n// * These functions will effect the properties in the same list position\n\n@mixin transition-timing-function($function-1: $default-transition-function,\n $function-2 : false,\n $function-3 : false,\n $function-4 : false,\n $function-5 : false,\n $function-6 : false,\n $function-7 : false,\n $function-8 : false,\n $function-9 : false,\n $function-10: false\n) {\n $function-1: unquote($function-1);\n $functions: compact($function-1, $function-2, $function-3, $function-4, $function-5, $function-6, $function-7, $function-8, $function-9, $function-10);\n @include experimental(transition-timing-function, $functions,\n -moz, -webkit, -o, not(-ms), not(-khtml), official\n );\n}\n\n// One or more transition-delays in seconds\n//\n// * for multiple, use a comma-delimited list\n// * these delays will effect the properties in the same list position\n\n@mixin transition-delay($delay-1: $default-transition-delay,\n $delay-2 : false,\n $delay-3 : false,\n $delay-4 : false,\n $delay-5 : false,\n $delay-6 : false,\n $delay-7 : false,\n $delay-8 : false,\n $delay-9 : false,\n $delay-10: false\n) {\n @if type-of($delay-1) == string { $delay-1: unquote($delay-1); }\n $delays: compact($delay-1, $delay-2, $delay-3, $delay-4, $delay-5, $delay-6, $delay-7, $delay-8, $delay-9, $delay-10);\n @include experimental(transition-delay, $delays,\n -moz, -webkit, -o, not(-ms), not(-khtml), official\n );\n}\n\n// Transition all-in-one shorthand\n\n@mixin single-transition(\n $property: $default-transition-property,\n $duration: $default-transition-duration,\n $function: $default-transition-function,\n $delay: $default-transition-delay\n) {\n @include transition(compact($property $duration $function $delay));\n}\n\n@mixin transition(\n $transition-1 : default,\n $transition-2 : false,\n $transition-3 : false,\n $transition-4 : false,\n $transition-5 : false,\n $transition-6 : false,\n $transition-7 : false,\n $transition-8 : false,\n $transition-9 : false,\n $transition-10: false\n) {\n @if $transition-1 == default {\n $transition-1 : compact($default-transition-property $default-transition-duration $default-transition-function $default-transition-delay);\n }\n $transitions: false;\n @if type-of($transition-1) == list and type-of(nth($transition-1,1)) == list {\n $transitions: join($transition-1, compact($transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10), comma);\n } @else {\n $transitions : compact($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10);\n }\n $delays: comma-list();\n $has-delays: false;\n $webkit-value: comma-list();\n $moz-value: comma-list();\n $o-value: comma-list();\n\n // This block can be made considerably simpler at the point in time that\n // we no longer need to deal with the differences in how delays are treated.\n @each $transition in $transitions {\n // Extract the values from the list\n // (this would be cleaner if nth took a 3rd argument to provide a default value).\n $property: nth($transition, 1);\n $duration: false;\n $timing-function: false;\n $delay: false;\n @if length($transition) > 1 { $duration: nth($transition, 2); }\n @if length($transition) > 2 { $timing-function: nth($transition, 3); }\n @if length($transition) > 3 { $delay: nth($transition, 4); $has-delays: true; }\n\n // If a delay is provided without a timing function\n @if is-time($timing-function) and not($delay) { $delay: $timing-function; $timing-function: false; $has-delays: true; }\n\n // Keep a list of delays in case one is specified\n $delays: append($delays, if($delay, $delay, 0s));\n\n $webkit-value: append($webkit-value, compact((prefixed-for-transition(-webkit, $property) $duration $timing-function)...));\n $moz-value: append( $moz-value, compact((prefixed-for-transition( -moz, $property) $duration $timing-function $delay)...));\n $o-value: append( $o-value, compact((prefixed-for-transition( -o, $property) $duration $timing-function $delay)...));\n }\n\n @if $experimental-support-for-webkit { -webkit-transition : $webkit-value;\n // old webkit doesn't support the delay parameter in the shorthand so we progressively enhance it.\n @if $has-delays { -webkit-transition-delay : $delays; } }\n @if $experimental-support-for-mozilla { -moz-transition : $moz-value; }\n @if $experimental-support-for-opera { -o-transition : $o-value; }\n transition : $transitions;\n}\n\n// coerce a list to be comma delimited or make a new, empty comma delimited list.\n@function comma-list($list: ()) {\n @return join((), $list, comma);\n}\n\n// Returns `$property` with the given prefix if it is found in `$transitionable-prefixed-values`.\n@function prefixed-for-transition($prefix, $property) {\n @if type-of($property) == list {\n $new-list: comma-list();\n @each $v in $property {\n $new-list: append($new-list, prefixed-for-transition($prefix, $v));\n }\n @return $new-list;\n } @else {\n @if index($transitionable-prefixed-values, $property) {\n @return #{$prefix}-#{$property};\n } @else {\n @return $property;\n }\n }\n}\n\n// Checks if the value given is a unit of time.\n@function is-time($value) {\n @if type-of($value) == number {\n @return not(not(index(s ms, unit($value))));\n } @else {\n @return false;\n }\n}\n","@import \"shared\";\n\n// Change the appearance for Mozilla, Webkit and possibly the future.\n// The appearance property is currently not present in any newer CSS specification.\n//\n// There is no official list of accepted values, but you might check these source:\n// Mozilla : https://developer.mozilla.org/en/CSS/-moz-appearance\n// Webkit : http://code.google.com/p/webkit-mirror/source/browse/Source/WebCore/css/CSSValueKeywords.in?spec=svnf1aea559dcd025a8946aa7da6e4e8306f5c1b604&r=63c7d1af44430b314233fea342c3ddb2a052e365\n// (search for 'appearance' within the page)\n\n@mixin appearance($ap) {\n $ap: unquote($ap);\n @include experimental(appearance, $ap,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n","@import \"shared\";\n\n// Webkit, IE10 and future support for [CSS Regions](http://dev.w3.org/csswg/css3-regions/)\n//\n// $target is a value you use to link two regions of your css. Give the source of your content the flow-into property, and give your target container the flow-from property.\n//\n// For a visual explanation, see the diagrams at Chris Coyier's\n// [CSS-Tricks](http://css-tricks.com/content-folding/)\n\n@mixin flow-into($target) {\n $target: unquote($target);\n @include experimental(flow-into, $target,\n not(-moz), -webkit, not(-o), -ms, not(-khtml), not official\n );\n}\n\n@mixin flow-from($target) {\n $target: unquote($target);\n @include experimental(flow-from, $target,\n not(-moz), -webkit, not(-o), -ms, not(-khtml), not official\n );\n}","@import \"shared\";\n\n// Mixins to support specific CSS Text Level 3 elements\n//\n//\n//\n// Mixin for word-break properties\n// http://www.w3.org/css3-text/#word-break\n// * legal values for $type : normal, keep-all, break-all\n//\n// Example:\n// p.wordBreak {@include word-break(break-all);}\n//\n// Which generates:\n// p.wordBreak {\n// -ms-word-break: break-all;\n// word-break: break-all;\n// word-break: break-word;}\n//\n@mixin word-break($value: normal){\n @if $value == break-all {\n //Most browsers handle the break-all case the same...\n @include experimental(word-break, $value,\n not(-moz), not(-webkit), not(-o), -ms, not(-khtml), official\n );\n //Webkit handles break-all differently... as break-word\n @include experimental(word-break, break-word,\n not(-moz), not(-webkit), not(-o), not(-ms), not(-khtml), official\n );\n }\n @else {\n @include experimental(word-break, $value,\n not(-moz), not(-webkit), not(-o), -ms, not(-khtml), official\n );\n }\n}\n\n// Mixin for the hyphens property\n//\n// W3C specification: http://www.w3.org/TR/css3-text/#hyphens\n// * legal values for $type : auto, manual, none\n//\n// Example:\n// p {\n// @include hyphens(auto);}\n// Which generates:\n// p {\n// -moz-hyphens: auto;\n// -webkit-hyphens: auto;\n// hyphens: auto;}\n//\n@mixin hyphens($value: auto){\n @include experimental(hyphens, $value,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n\n// Mixin for x-browser hyphenation based on @auchenberg's post:\n// Removes the need for the HTML tag\n// http://blog.kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/\n//\n// Example:\n// div {@include hyphenation;}\n//\n// Which generates:\n// div {\n// -ms-word-break: break-all;\n// word-break: break-all;\n// word-break: break-word;\n// -moz-hyphens: auto;\n// -webkit-hyphens: auto;\n// hyphens: auto;}\n//\n@mixin hyphenation{\n @include word-break(break-all);\n @include hyphens;\n}\n","@import \"shared\";\n\n// Provides cross-browser support for the upcoming (?) css3 filter property.\n//\n// Each filter argument should adhere to the standard css3 syntax for the\n// filter property.\n@mixin filter (\n $filter-1,\n $filter-2 : false,\n $filter-3 : false,\n $filter-4 : false,\n $filter-5 : false,\n $filter-6 : false,\n $filter-7 : false,\n $filter-8 : false,\n $filter-9 : false,\n $filter-10: false\n) {\n $filter : compact($filter-1, $filter-2, $filter-3, $filter-4, $filter-5, $filter-6, $filter-7, $filter-8, $filter-9, $filter-10);\n @include experimental(filter, $filter,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n","$experimental-support-for-pie: true !default;\n\n// It is recommended that you use Sass's @extend directive to apply the behavior\n// to your PIE elements. To assist you, Compass provides this variable.\n// When set, it will cause the `@include pie` mixin to extend this class.\n// The class name you provide should **not** include the `.`.\n$pie-base-class: false !default;\n\n// The default approach to using PIE.\n// Can be one of:\n//\n// * relative (default)\n// * z-index\n// * none\n$pie-default-approach: relative !default;\n\n// The location of your PIE behavior file\n// This should be root-relative to your web server\n// relative assets don't work. It is recommended that\n// you set this yourself.\n$pie-behavior: stylesheet-url(\"PIE.htc\") !default;\n\n// When using the z-index approach, the\n// first ancestor of the PIE element at\n// or before the container's opaque background\n// should have a z-index set as well to ensure\n// propert z-index stacking.\n//\n// The `$position` argument must be some non-static\n// value (absolute, relative, etc.)\n@mixin pie-container($z-index: 0, $position: relative) {\n z-index: $z-index;\n position: $position;\n}\n\n// PIE elements must have this behavior attached to them.\n// IE is broken -- it doesn't think of behavior urls as\n// relative to the stylesheet. It considers them relative\n// to the webpage. As a result, you cannot reliably use\n// compass's relative_assets with PIE.\n//\n// * `$approach` - one of: relative, z-index, or none\n// * `$z-index` - when using the z-index approach, this\n// is the z-index that is applied.\n@mixin pie-element(\n $approach: $pie-default-approach,\n $z-index: 0\n) {\n behavior: $pie-behavior;\n @if $approach == relative {\n position: relative;\n }\n @else if $approach == z-index {\n z-index: $z-index;\n }\n}\n\n// a smart mixin that knows to extend or include pie-element according\n// to your stylesheet's configuration variables.\n@mixin pie($base-class: $pie-base-class) {\n @if $base-class {\n @extend .#{$base-class};\n }\n @else {\n @include pie-element;\n }\n}\n\n// Watch `$n` levels of ancestors for changes to their class attribute\n// So that cascading styles will work correctly on the PIE element.\n@mixin pie-watch-ancestors($n) {\n -pie-watch-ancestors: $n;\n}\n","// User Interface ------------------------------------------------------------\n// This file can be expanded to handle all the user interface properties as\n// they become available in browsers:\n// http://www.w3.org/TR/2000/WD-css3-userint-20000216\n@import \"shared\";\n\n\n// This property controls the selection model and granularity of an element.\n//\n// @param $select\n// [ none | text | toggle | element | elements | all | inherit ]\n@mixin user-select($select) {\n $select: unquote($select);\n @include experimental(user-select, $select,\n -moz, -webkit, not(-o), -ms, -khtml, official\n );\n}\n\n// Style the html5 input placeholder in browsers that support it.\n//\n// The styles for the input placeholder are passed as mixin content\n// and the selector comes from the mixin's context.\n//\n// For example:\n//\n// #{elements-of-type(text-input)} {\n// @include input-placeholder {\n// color: #bfbfbf;\n// font-style: italic;\n// }\n// }\n//\n// if you want to apply the placeholder styles to all elements supporting\n// the `input-placeholder` pseudo class (beware of performance impacts):\n//\n// * {\n// @include input-placeholder {\n// color: #bfbfbf;\n// font-style: italic;\n// }\n// }\n@mixin input-placeholder {\n &:-ms-input-placeholder { @content; }\n &:-moz-placeholder { @content; }\n &::-moz-placeholder { @content; }\n &::-webkit-input-placeholder { @content; }\n}\n","@import \"../support\";\n@import \"shared\";\n\n// This is the underlying implementation for all the other mixins in this module.\n// It is the only way to access prefix support for older versions of the spec.\n// Deviates from canonical Compass implementation by dropping support for\n// older versions of the Flexbox spec.\n//\n// `$properties`: map of property-value pairs that should be prefixed\n@mixin flexbox($properties) {\n @each $prop, $value in $properties {\n @if $prop == display {\n @include experimental-value(display, $value, not(-moz), -webkit,\n not(-o), not(-ms), not(-khtml), official);\n } @else {\n @include experimental($prop, $value, not(-moz), -webkit, not(-o),\n not(-ms), not(-khtml), official);\n }\n }\n}\n\n// Values for $display are: flex (default), inline-flex\n@mixin display-flex($display: flex) {\n @include flexbox((display: $display));\n}\n\n// Values: row | row-reverse | column | column-reverse\n@mixin flex-direction($direction) {\n @include flexbox((flex-direction: $direction));\n}\n\n// Values: nowrap | wrap | wrap-reverse\n@mixin flex-wrap($wrap) {\n @include flexbox((flex-wrap: $wrap));\n}\n\n// Shorthand for flex-direction and flex-wrap.\n@mixin flex-flow($flow) {\n @include flexbox((flex-flow: $flow));\n}\n\n// Accepts an integer\n@mixin order($order) {\n @include flexbox((order: $order));\n}\n\n// Shorthand for flex-grow, flex-shrink and optionally flex-basis.\n// Space separated, in that order.\n@mixin flex($flex) {\n @include flexbox((flex: $flex));\n}\n\n// Accepts a number.\n@mixin flex-grow($flex-grow) {\n @include flexbox((flex-grow: $flex-grow));\n}\n\n// Accepts a number.\n@mixin flex-shrink($flex-shrink) {\n @include flexbox((flex-shrink: $flex-shrink));\n}\n\n// Accepts any legal value for the width property.\n@mixin flex-basis($flex-basis) {\n @include flexbox((flex-basis: $flex-basis));\n}\n\n// Legal values: flex-start | flex-end | center | space-between | space-around\n@mixin justify-content($justify-content) {\n @include flexbox((justify-content: $justify-content));\n}\n\n// Legal values: flex-start | flex-end | center | baseline | stretch\n@mixin align-items($align-items) {\n @include flexbox((align-items: $align-items));\n}\n\n// Legal values: auto | flex-start | flex-end | center | baseline | stretch\n@mixin align-self($align-self) {\n @include flexbox((align-self: $align-self));\n}\n\n// Legal values: flex-start | flex-end | center | space-between | space-around | stretch\n@mixin align-content($align-content) {\n @include flexbox((align-content: $align-content));\n}\n","@import \"compass\";\n@import \"animation/core\";\n@import \"animation/animate\";\n","@import \"shared\";\n\n// CSS Animations.\n\n// Apply an animation property and value with the correct browser support\n@mixin animation-support($property, $value) {\n @include experimental($property, $value, -moz, -webkit, -o, -ms, not -khtml, official); }\n\n// Name of any animation as a string.\n$default-animation-name : false !default;\n\n// Duration of the entire animation in seconds.\n$default-animation-duration : false !default;\n\n// Delay for start of animation in seconds.\n$default-animation-delay : false !default;\n\n// The timing function(s) to be used between keyframes. [ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier($number, $number, $number, $number)]\n$default-animation-timing-function : false !default;\n\n// The number of times an animation cycle is played. [infinite | $number]\n$default-animation-iteration-count : false !default;\n\n// Whether or not the animation should play in reverse on alternate cycles. [normal | alternate]\n$default-animation-direction : false !default;\n\n// What values are applied by the animation outside the time it is executing. [none | forwards | backwards | both]\n$default-animation-fill-mode : false !default;\n\n// Whether the animation is running or paused. [running | paused]\n$default-animation-play-state : false !default;\n\n// Create a named animation sequence that can be applied to elements later.\n//\n// $name - The name of your animation.\n// @content - The keyframes of the animation.\n@mixin keyframes(\n $name,\n $moz: $experimental-support-for-mozilla,\n $webkit: $experimental-support-for-webkit,\n $o: $experimental-support-for-opera,\n $ms: $experimental-support-for-microsoft,\n $khtml: $experimental-support-for-khtml,\n $official: true\n) {\n @if $moz {\n @include with-only-support-for($moz: true) {\n @-moz-keyframes #{$name} { @content; }\n }\n }\n @if $webkit {\n @include with-only-support-for($webkit: true) {\n @-webkit-keyframes #{$name} { @content; }\n }\n }\n @if $o {\n @include with-only-support-for($o: true) {\n @-o-keyframes #{$name} { @content; }\n }\n }\n @if $ms {\n @include with-only-support-for($ms: true) {\n @-ms-keyframes #{$name} { @content; }\n }\n }\n @if $khtml {\n @include with-only-support-for($khtml: true) {\n @-khtml-keyframes #{$name} { @content; }\n }\n }\n @if $official {\n @include with-only-support-for {\n @keyframes #{$name} { @content; }\n }\n }\n}\n\n// Apply 1-10 animation names.\n@mixin animation-name($name-1: $default-animation-name, $name-2: false, $name-3: false, $name-4: false, $name-5: false, $name-6: false, $name-7: false, $name-8: false, $name-9: false, $name-10: false) {\n $name: compact($name-1, $name-2, $name-3, $name-4, $name-5, $name-6, $name-7, $name-8, $name-9, $name-10);\n @include animation-support(animation-name, $name); }\n\n// Apply 1-10 animation durations.\n@mixin animation-duration($duration-1: $default-animation-duration, $duration-2: false, $duration-3: false, $duration-4: false, $duration-5: false, $duration-6: false, $duration-7: false, $duration-8: false, $duration-9: false, $duration-10: false) {\n $duration: compact($duration-1, $duration-2, $duration-3, $duration-4, $duration-5, $duration-6, $duration-7, $duration-8, $duration-9, $duration-10);\n @include animation-support(animation-duration, $duration); }\n\n// Apply 1-10 animation delays.\n@mixin animation-delay($delay-1: $default-animation-delay, $delay-2: false, $delay-3: false, $delay-4: false, $delay-5: false, $delay-6: false, $delay-7: false, $delay-8: false, $delay-9: false, $delay-10: false) {\n $delay: compact($delay-1, $delay-2, $delay-3, $delay-4, $delay-5, $delay-6, $delay-7, $delay-8, $delay-9, $delay-10);\n @include animation-support(animation-delay, $delay); }\n\n// Apply 1-10 animation timing functions.\n@mixin animation-timing-function($function-1: $default-animation-timing-function, $function-2: false, $function-3: false, $function-4: false, $function-5: false, $function-6: false, $function-7: false, $function-8: false, $function-9: false, $function-10: false) {\n $function: compact($function-1, $function-2, $function-3, $function-4, $function-5, $function-6, $function-7, $function-8, $function-9, $function-10);\n @include animation-support(animation-timing-function, $function); }\n\n// Apply 1-10 animation iteration counts.\n@mixin animation-iteration-count($count-1: $default-animation-iteration-count, $count-2: false, $count-3: false, $count-4: false, $count-5: false, $count-6: false, $count-7: false, $count-8: false, $count-9: false, $count-10: false) {\n $count: compact($count-1, $count-2, $count-3, $count-4, $count-5, $count-6, $count-7, $count-8, $count-9, $count-10);\n @include animation-support(animation-iteration-count, $count); }\n\n// Apply 1-10 animation directions.\n@mixin animation-direction($direction-1: $default-animation-direction, $direction-2: false, $direction-3: false, $direction-4: false, $direction-5: false, $direction-6: false, $direction-7: false, $direction-8: false, $direction-9: false, $direction-10: false) {\n $direction: compact($direction-1, $direction-2, $direction-3, $direction-4, $direction-5, $direction-6, $direction-7, $direction-8, $direction-9, $direction-10);\n @include animation-support(animation-direction, $direction); }\n\n// Apply 1-10 animation fill modes.\n@mixin animation-fill-mode($mode-1: $default-animation-fill-mode, $mode-2: false, $mode-3: false, $mode-4: false, $mode-5: false, $mode-6: false, $mode-7: false, $mode-8: false, $mode-9: false, $mode-10: false) {\n $mode: compact($mode-1, $mode-2, $mode-3, $mode-4, $mode-5, $mode-6, $mode-7, $mode-8, $mode-9, $mode-10);\n @include animation-support(animation-fill-mode, $mode); }\n\n// Apply 1-10 animation play states.\n@mixin animation-play-state($state-1: $default-animation-play-state, $state-2: false, $state-3: false, $state-4: false, $state-5: false, $state-6: false, $state-7: false, $state-8: false, $state-9: false, $state-10: false) {\n $state: compact($state-1, $state-2, $state-3, $state-4, $state-5, $state-6, $state-7, $state-8, $state-9, $state-10);\n @include animation-support(animation-play-state, $state); }\n\n// Shortcut to apply a named animation to an element, with all the settings.\n//\n// $animation-1 : Name and settings for the first animation. [ | default]\n// ...\n// $animation-10 : Name and settings for the tenth animation. \n@mixin animation($animation-1: default, $animation-2: false, $animation-3: false, $animation-4: false, $animation-5: false, $animation-6: false, $animation-7: false, $animation-8: false, $animation-9: false, $animation-10: false) {\n @if $animation-1 == default {\n $animation-1: -compass-space-list(compact($default-animation-name, $default-animation-duration, $default-animation-timing-function, $default-animation-delay, $default-animation-iteration-count, $default-animation-direction, $default-animation-fill-mode, $default-animation-play-state)); }\n $animation: compact($animation-1, $animation-2, $animation-3, $animation-4, $animation-5, $animation-6, $animation-7, $animation-8, $animation-9, $animation-10);\n @include animation-support(animation, $animation); }\n","@mixin set-experimental-support($moz: false, $webkit: false, $ms: false, $o: false, $khtml: false) {\n $experimental-support-for-mozilla: $moz;\n $experimental-support-for-webkit: $webkit;\n $experimental-support-for-microsoft: $ms;\n $experimental-support-for-opera: $o;\n $experimental-support-for-khtml: $khtml;\n}\n\n@mixin with-only-support-for($moz: false, $webkit: false, $ms: false, $o: false, $khtml: false) {\n // Capture the current state\n $original-moz: $experimental-support-for-mozilla;\n $original-webkit: $experimental-support-for-webkit;\n $original-o: $experimental-support-for-opera;\n $original-ms: $experimental-support-for-microsoft;\n $original-khtml: $experimental-support-for-khtml;\n\n @include set-experimental-support($moz, $webkit, $ms, $o, $khtml);\n\n @content;\n\n @include set-experimental-support($original-moz, $original-webkit, $original-ms, $original-o, $original-khtml);\n}","// ---------------------------------------------------------------------------\n// Animations from Animate.css\n// Author : Dan Eden\n// URL : http://daneden.me/animate/\n//\n// Attention seekers\n// - flash bounce shake tada swing wobble pulse\n// Fading entrances\n// - fadeIn fadeInUp fadeInDown fadeInLeft fadeInRight fadeInUpBig fadeInDownBig fadeInLeftBig fadeInRightBig\n// Fading exits\n// - fadeOut fadeOutUp fadeOutDown fadeOutLeft fadeOutRight fadeOutUpBig fadeOutDownBig fadeOutLeftBig fadeOutRightBig\n// Bouncing entrances\n// - bounceIn bounceInDown bounceInUp bounceInLeft bounceInRight\n// Bouncing exits\n// - bounceOut bounceOutDown bounceOutUp bounceOutLeft bounceOutRight\n// Rotating entrances\n// - rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft rotateInUpRight\n// Rotating exits\n// - rotateOut rotateOutDownLeft rotateOutDownRight rotateOutUpLeft rotateOutUpRight\n// Lightspeed\n// - lightSpeedIn lightSpeedOut\n// Specials\n// - hinge rollIn rollOut\n// ---------------------------------------------------------------------------\n@import \"animate/attention-seekers\";\n@import \"animate/bouncing\";\n@import \"animate/fading\";\n@import \"animate/flippers\";\n@import \"animate/lightspeed\";\n@import \"animate/rotating\";\n@import \"animate/specials\";\n","// ---------------------------------------------------------------------------\n@include keyframes(flash) {\n 0% {\n opacity: 1; }\n 25% {\n opacity: 0; }\n 50% {\n opacity: 1; }\n 75% {\n opacity: 0; }\n 100% {\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounce) {\n 0% {\n @include translateY(0); }\n 20% {\n @include translateY(0); }\n 40% {\n @include translateY(-30px); }\n 50% {\n @include translateY(0); }\n 60% {\n @include translateY(-15px); }\n 80% {\n @include translateY(0); }\n 100% {\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(shake) {\n 0% {\n @include translateX(0); }\n 10% {\n @include translateX(-10px); }\n 20% {\n @include translateX(10px); }\n 30% {\n @include translateX(-10px); }\n 40% {\n @include translateX(10px); }\n 50% {\n @include translateX(-10px); }\n 60% {\n @include translateX(10px); }\n 70% {\n @include translateX(-10px); }\n 80% {\n @include translateX(10px); }\n 90% {\n @include translateX(-10px); }\n 100% {\n @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(tada) {\n 0% {\n @include scale(1); }\n 10% {\n @include transform(scale(0.9) rotate(-3deg)); }\n 20% {\n @include transform(scale(0.9) rotate(-3deg)); }\n 30% {\n @include transform(scale(1.1) rotate(3deg)); }\n 40% {\n @include transform(scale(1.1) rotate(-3deg)); }\n 50% {\n @include transform(scale(1.1) rotate(3deg)); }\n 60% {\n @include transform(scale(1.1) rotate(-3deg)); }\n 70% {\n @include transform(scale(1.1) rotate(3deg)); }\n 80% {\n @include transform(scale(1.1) rotate(-3deg)); }\n 90% {\n @include transform(scale(1.1) rotate(3deg)); }\n 100% {\n @include transform(scale(1) rotate(0)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(swing) {\n 20%, 40%, 60%, 80%, 100% {\n @include transform-origin(top center); }\n 20% {\n @include rotate(15deg); }\n 40% {\n @include rotate(-10deg); }\n 60% {\n @include rotate(5deg); }\n 80% {\n @include rotate(-5deg); }\n 100% {\n @include rotate(0deg); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(wobble) {\n 0% {\n @include translateX(0%); }\n 15% {\n @include transform(translateX(-25%) rotate(-5deg)); }\n 30% {\n @include transform(translateX(20%) rotate(3deg)); }\n 45% {\n @include transform(translateX(-15%) rotate(-3deg)); }\n 60% {\n @include transform(translateX(10%) rotate(2deg)); }\n 75% {\n @include transform(translateX(-5%) rotate(-1deg)); }\n 100% {\n @include transform(translateX(0%)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(pulse) {\n 0% {\n @include scale(1); }\n 50% {\n @include scale(1.1); }\n 100% {\n @include scale(1); } }\n \n \n// ---------------------------------------------------------------------------\n@include keyframes(wiggle) {\n 0% {\n @include skewX(9deg); }\n 10% {\n @include skewX(-8deg); }\n 20% {\n @include skewX(7deg); }\n 30% {\n @include skewX(-6deg); }\n 40% {\n @include skewX(5deg); }\n 50% {\n @include skewX(-4deg); }\n 60% {\n @include skewX(3deg); }\n 70% {\n @include skewX(-2deg); }\n 80% {\n @include skewX(1deg); }\n 90% {\n @include skewX(0deg); }\n 100% {\n @include skewX(0deg); } }","// ---------------------------------------------------------------------------\n@import \"bouncing/bouncing-exits\";\n@import \"bouncing/bouncing-entrances\";","// ---------------------------------------------------------------------------\n@include keyframes(bounceOut) {\n 0% {\n @include scale(1); }\n 25% {\n @include scale(0.95); }\n 50% {\n opacity: 1;\n @include scale(1.1); }\n 100% {\n opacity: 0;\n @include scale(0.3); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutUp) {\n 0% {\n @include translateY(0); }\n 20% {\n opacity: 1;\n @include translateY(20px); }\n 100% {\n opacity: 0;\n @include translateY(-2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutDown) {\n 0% {\n @include translateY(0); }\n 20% {\n opacity: 1;\n @include translateY(-20px); }\n 100% {\n opacity: 0;\n @include translateY(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutLeft) {\n 0% {\n @include translateX(0); }\n 20% {\n opacity: 1;\n @include translateX(20px); }\n 100% {\n opacity: 0;\n @include translateX(-2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutRight) {\n 0% {\n @include translateX(0); }\n 20% {\n opacity: 1;\n @include translateX(-20px); }\n 100% {\n opacity: 0;\n @include translateX(2000px); } }\n","// ---------------------------------------------------------------------------\n@include keyframes(bounceIn) {\n 0% {\n opacity: 0;\n @include scale(0.3); }\n 50% {\n opacity: 1;\n @include scale(1.05); }\n 70% {\n @include scale(0.9); }\n 100% {\n @include scale(1); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInDown) {\n 0% {\n opacity: 0;\n @include translateY(-2000px); }\n 60% {\n opacity: 1;\n @include translateY(30px); }\n 80% {\n @include translateY(-10px); }\n 100% {\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInUp) {\n 0% {\n opacity: 0;\n @include translateY(2000px); }\n 60% {\n opacity: 1;\n @include translateY(-30px); }\n 80% {\n @include translateY(10px); }\n 100% {\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInRight) {\n 0% {\n opacity: 0;\n @include translateX(2000px); }\n 60% {\n opacity: 1;\n @include translateX(-30px); }\n 80% {\n @include translateX(10px); }\n 100% {\n @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInLeft) {\n 0% {\n opacity: 0;\n @include translateX(-2000px); }\n 60% {\n opacity: 1;\n @include translateX(30px); }\n 80% {\n @include translateX(-10px); }\n 100% {\n @include translateX(0); } }\n","// ---------------------------------------------------------------------------\n@import \"fading/fading-exits\";\n@import \"fading/fading-entrances\";","// ---------------------------------------------------------------------------\n@include keyframes(fadeOut) {\n 0% {\n opacity: 1; }\n 100% {\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutUp) {\n 0% {\n @include translateY(0);\n opacity: 1; }\n 100% {\n @include translateY(-20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutDown) {\n 0% {\n @include translateY(0);\n opacity: 1; }\n 100% {\n @include translateY(20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutRight) {\n 0% {\n @include translateX(0);\n opacity: 1; }\n 100% {\n @include translateX(20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutLeft) {\n 0% {\n @include translateX(0);\n opacity: 1; }\n 100% {\n @include translateX(-20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutUpBig) {\n 0% {\n @include translateY(0);\n opacity: 1; }\n 100% {\n @include translateY(-2000px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutDownBig) {\n 0% {\n opacity: 1;\n @include translateY(0); }\n 100% {\n opacity: 0;\n @include translateY(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutRightBig) {\n 0% {\n opacity: 1;\n @include translateX(0); }\n 100% {\n opacity: 0;\n @include translateX(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutLeftBig) {\n 0% {\n opacity: 1;\n @include translateX(0); }\n 100% {\n opacity: 0;\n @include translateX(-2000px); } }\n","// ---------------------------------------------------------------------------\n@include keyframes(fadeIn) {\n 0% {\n opacity: 0; }\n 100% {\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInUp) {\n 0% {\n @include translateY(20px);\n opacity: 0; }\n 100% {\n @include translateY(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInDown) {\n 0% {\n @include translateY(-20px);\n opacity: 0; }\n 100% {\n @include translateY(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInRight) {\n 0% {\n @include translateX(20px);\n opacity: 0; }\n 100% {\n @include translateX(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInLeft) {\n 0% {\n @include translateX(-20px);\n opacity: 0; }\n 100% {\n @include translateX(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInUpBig) {\n 0% {\n @include translateY(2000px);\n opacity: 0; }\n 100% {\n @include translateY(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInDownBig) {\n 0% {\n opacity: 0;\n @include translateY(-2000px); }\n 100% {\n opacity: 1;\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInRightBig) {\n 0% {\n opacity: 0;\n @include translateX(2000px); }\n 100% {\n opacity: 1;\n @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInLeftBig) {\n 0% {\n opacity: 0;\n @include translateX(-2000px); }\n 100% {\n opacity: 1;\n @include translateX(0); } }\n","// ---------------------------------------------------------------------------\n@include keyframes(flip) {\n 0% {\n @include transform(perspective(400px) rotateY(0));\n @include animation-timing-function(ease-out);\n }\n 40% {\n @include transform(perspective(400px) translateZ(150px) rotateY(170deg));\n @include animation-timing-function(ease-out);\n }\n 50% {\n @include transform(perspective(400px) translateZ(150px) rotateY(190deg) scale(1));\n @include animation-timing-function(ease-in);\n }\n 80% {\n @include transform(perspective(400px) rotateY(360deg) scale(0.95));\n @include animation-timing-function(ease-in);\n }\n 100% {\n @include transform(perspective(400px) scale(1));\n @include animation-timing-function(ease-in);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipInX) {\n 0% {\n @include transform(perspective(400px) rotateX(90deg));\n @include opacity(0);\n }\n 40% {\n @include transform(perspective(400px) rotateX(-10deg));\n }\n 70% {\n @include transform(perspective(400px) rotateX(10deg));\n }\n 100% {\n @include transform(perspective(400px) rotateX(0deg));\n @include opacity(1);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipOutX) {\n 0% {\n @include transform(perspective(400px) rotateX(0deg));\n @include opacity(1);\n }\n 100% {\n @include transform(perspective(400px) rotateX(90deg));\n @include opacity(0);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipInY) {\n 0% {\n @include transform(perspective(400px) rotateY(90deg));\n @include opacity(0);\n }\n 40% {\n @include transform(perspective(400px) rotateY(-10deg));\n }\n 70% {\n @include transform(perspective(400px) rotateY(10deg));\n }\n 100% {\n @include transform(perspective(400px) rotateY(0deg));\n @include opacity(1);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipOutY) {\n 0% {\n @include transform(perspective(400px) rotateY(0deg));\n @include opacity(1);\n }\n 100% {\n @include transform(perspective(400px) rotateY(90deg));\n @include opacity(0);\n }\n}\n","// ---------------------------------------------------------------------------\n@include keyframes(lightSpeedIn) {\n 0% {\n @include transform(translateX(100%) skewX(-30deg));\n @include opacity(0); }\n 60% {\n @include transform(translateX(-20%) skewX(30deg));\n @include opacity(1); }\n 80% {\n @include transform(translateX(0%) skewX(-15deg));\n @include opacity(1); }\n 100% {\n @include transform(translateX(0%) skewX(0deg));\n @include opacity(1); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(lightSpeedOut) {\n 0% {\n @include transform(translateX(0%) skewX(0deg));\n @include opacity(1); }\n 100% {\n @include transform(translateX(100%) skewX(-30deg));\n @include opacity(0); } }","// ---------------------------------------------------------------------------\n@import \"rotating/rotating-exits\";\n@import \"rotating/rotating-entrances\";\n","// ---------------------------------------------------------------------------\n@include keyframes(rotateOut) {\n 0% {\n @include transform-origin(center center);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(center center);\n @include rotate(200deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutDownLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(90deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutUpLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(-90deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutDownRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(-90deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutUpRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(90deg);\n opacity: 0; } }\n","// ---------------------------------------------------------------------------\n@include keyframes(rotateIn) {\n 0% {\n @include transform-origin(center center);\n @include rotate(-200deg);\n opacity: 0; }\n 100% {\n @include transform-origin(center center);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInDownLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(-90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInUpLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInUpRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(-90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInDownRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; } }\n","// ---------------------------------------------------------------------------\n@include keyframes(hinge) {\n 0% {\n @include rotate(0);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 20%, 60% {\n @include rotate(80deg);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 40% {\n @include rotate(60deg);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 80% {\n @include transform(rotate(60deg) translateY(0));\n @include opacity(1);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 100% {\n @include translateY(700px);\n @include opacity(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rollIn) {\n 0% {\n @include opacity(0);\n @include transform(translateX(-100%) rotate(-120deg)); }\n 100% {\n @include opacity(1);\n @include transform(translateX(0px) rotate(0deg)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rollOut) {\n 0% {\n @include opacity(1);\n @include transform(translateX(0px) rotate(0deg)); }\n 100% {\n @include opacity(0);\n @include transform(translateX(-100%) rotate(-120deg)); } }\n","/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Vendor\n@import \"vendor/rfs\";\n\n// Deprecate\n@import \"mixins/deprecate\";\n\n// Utilities\n@import \"mixins/breakpoints\";\n@import \"mixins/hover\";\n@import \"mixins/image\";\n@import \"mixins/badge\";\n@import \"mixins/resize\";\n@import \"mixins/screen-reader\";\n@import \"mixins/size\";\n@import \"mixins/reset-text\";\n@import \"mixins/text-emphasis\";\n@import \"mixins/text-hide\";\n@import \"mixins/text-truncate\";\n@import \"mixins/visibility\";\n\n// Components\n@import \"mixins/alert\";\n@import \"mixins/buttons\";\n@import \"mixins/caret\";\n@import \"mixins/pagination\";\n@import \"mixins/lists\";\n@import \"mixins/list-group\";\n@import \"mixins/nav-divider\";\n@import \"mixins/forms\";\n@import \"mixins/table-row\";\n\n// Skins\n@import \"mixins/background-variant\";\n@import \"mixins/border-radius\";\n@import \"mixins/box-shadow\";\n@import \"mixins/gradients\";\n@import \"mixins/transition\";\n\n// Layout\n@import \"mixins/clearfix\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n@import \"mixins/float\";\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Deprecate mixin\n//\n// This mixin can be used to deprecate mixins or functions.\n// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to\n// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)\n@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {\n @if ($enable-deprecation-messages != false and $ignore-warning != true) {\n @warn \"#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.\";\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n @at-root a#{&} {\n @include hover-focus() {\n color: color-yiq($bg);\n background-color: darken($bg, 10%);\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);\n }\n }\n}\n","// Resize anything\n\n@mixin resizable($direction) {\n overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n resize: $direction; // Options: horizontal, vertical, both\n}\n","// Only display content to screen readers\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only() {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable() {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n","// Sizing shortcuts\n\n@mixin size($width, $height: $width) {\n width: $width;\n height: $height;\n @include deprecate(\"`size()`\", \"v4.3.0\", \"v5\");\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n color: $color !important;\n }\n @if $emphasized-link-hover-darken-percentage != 0 {\n a#{$parent} {\n @include hover-focus() {\n color: darken($color, $emphasized-link-hover-darken-percentage) !important;\n }\n }\n }\n @include deprecate(\"`text-emphasis-variant()`\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// CSS image replacement\n@mixin text-hide($ignore-warning: false) {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @include deprecate(\"`text-hide()`\", \"v4.1.0\", \"v5\", $ignore-warning);\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Visibility\n\n@mixin invisible($visibility) {\n visibility: $visibility !important;\n @include deprecate(\"`invisible()`\", \"v4.3.0\", \"v5\");\n}\n","@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover() {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n border-color: $color;\n\n @include hover() {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n","@mixin caret-down() {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up() {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right() {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left() {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == right {\n @include caret-right();\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-left();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus() {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n @include deprecate(\"The `nav-divider()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus($ignore-warning: false) {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n @include deprecate(\"The `form-control-focus()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state($state, $color, $icon) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: color-yiq($color);\n background-color: rgba($color, $form-feedback-tooltip-opacity);\n @include border-radius($form-feedback-tooltip-border-radius);\n\n // See https://github.com/twbs/bootstrap/pull/31557\n // Align tooltip to form elements\n .form-row > .col > &,\n .form-row > [class*=\"col-\"] > & {\n left: $form-grid-gutter-width / 2;\n }\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .custom-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $custom-select-feedback-icon-padding-right;\n background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n @include form-validation-state-selector($state) {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n border-color: $color;\n }\n }\n\n &:checked {\n ~ .custom-control-label::before {\n border-color: lighten($color, 10%);\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n &:not(:checked) ~ .custom-control-label::before {\n border-color: $color;\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n @include form-validation-state-selector($state) {\n ~ .custom-file-label {\n border-color: $color;\n }\n\n &:focus {\n ~ .custom-file-label {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus() {\n background-color: darken($color, 10%) !important;\n }\n }\n @include deprecate(\"The `bg-variant` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n @include deprecate(\"The `bg-gradient-variant` mixin\", \"v4.5.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n","@mixin box-shadow($shadow...) {\n @if $enable-shadows {\n $result: ();\n\n @if (length($shadow) == 1) {\n // We can pass `@include box-shadow(none);`\n $result: $shadow;\n } @else {\n // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;`\n @for $i from 1 through length($shadow) {\n @if nth($shadow, $i) != \"none\" {\n $result: append($result, nth($shadow, $i), \"comma\");\n }\n }\n }\n @if (length($result) > 0) {\n box-shadow: $result;\n }\n }\n}\n","// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// stylelint-disable declaration-no-important\n\n@mixin float-left() {\n float: left !important;\n @include deprecate(\"The `float-left` mixin\", \"v4.3.0\", \"v5\");\n}\n@mixin float-right() {\n float: right !important;\n @include deprecate(\"The `float-right` mixin\", \"v4.3.0\", \"v5\");\n}\n@mixin float-none() {\n float: none !important;\n @include deprecate(\"The `float-none` mixin\", \"v4.3.0\", \"v5\");\n}\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-` + + + + + + + +

Outlined
+
+ + + + + + +
+ +
Sizes
+
+ + + +
+ + + + +
+
Bootstrap Dropdown
+
+ + + + + + + + +
+ +
Dropdown Outlined
+
+ + + + + + + + +
+ +
+ + + + + + + + + + +
+

Advanced UI Elements

+
+ +
+

+ Clipboard, a modern approach to copy text to the clipboard. +

+

Usage

+

+ Add the following script files in <body>. +

+ +

+ To create a clipboard, add the following code: +

+ +
+ + +
+

+ Todolist is a minimal jQuery plugin to create checklist. +

+

Usage

+

+ Add the following script files in <body>. +

+ +

+ To create a filterable list, add the following code: +

+ +
+ + +
+

+ Dragula ,Drag and drop so simple it hurts. +

+

Usage

+

+ To use Dragula in your application, include the following files in <head>. +

+ +

+ Add the following script files in <body>. +

+ +

+ To create a drag n drop list, add the following code: +

+ +
+ + +
+

+ The contextMenu Plugin was designed for web applications in need of menus on a possibly large amount of objects. Click Here to see the official documentation. +

+
+ + +
+

+ noUiSlider is a range slider without bloat. +

+

Usage

+

+ To use NoUISlider in your application, include the following files in <head>. +

+ +

+ Add the following script files in <body>. +

+ +

+ To create a slider, add the following code: +

+ +
+ + +
+

+ Easy, flexible and responsive range slider with skin support. Click Here to see the official documentation. +

+
+ + +
+

+ Colcade is a simple lightweight masonry layout. +

+

Usage

+

+ Add the following script files in <body>. +

+ +

+ To create a responsive, add the following code: +

+ +
+ +
+ + + + +
+

Media

+
+ +
+

+ Light Gallery is a customizable, modular, responsive, Lightbox gallery plugin for jQuery. +

+

Usage

+

+ To use LightGallery in your application, include the following files in <head>. +

+ +

+ Add the following script files in <body>. +

+ +

+ To create Lightbox Gallery, add the following code: +

+ +
+ + +
+

+ Owl Carousel is a touch enabled jQuery plugin that lets you create a beautiful responsive carousel slider. +

+

Usage

+

+ To use Owl Carousel in your application, include the following files in <head>. +

+ +

+ Add the following script files in <body>. +

+ +

+ To create a carousel, add the following code: +

+ +
+ +
+ + +
+

Tables

+
+ +
+

+ To create a basic Twitter Bootstrap table, add the following code. +

+ +
+ +
+ + + + +
+

Charts

+
+
+

+ Chart.js is a simple yet flexible JavaScript charting for designers & developers. +

+

Usage

+

+ To use Chart.js in your application, include the following files in <head>. +

+ +

+ and the following script files in <body>. +

+ +

+ To create a simple chart, add the following code: +

+ +
+
+ +
+

Forms

+
+ +
+

+ The basic form elements can be added to your application as below: +

+ +
+ +
+ + + +
+

Icons

+
+ +
+

+ Material Design Icons growing icon collection allows designers and developers targeting various platforms to download icons in the format, color and size they need for any project. +

+

Usage

+

+ To use Material Design Icons in your application, include the following files in <head>. +

+ +

+ To generate an icon, add the following code: +

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

Credits

+

We have used the following plugins in Skydash admin

+
+
+ +
+
+ +
+
+
+
+
+ + + + +
+
+ Copyright © 2018 Bootstrapdash. All rights reserved. + Hand-crafted & made with +
+
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/admin/docs/documentation.js b/public/admin/docs/documentation.js new file mode 100644 index 0000000..e2aa8de --- /dev/null +++ b/public/admin/docs/documentation.js @@ -0,0 +1,24 @@ +(function($) { + 'use strict'; + $(function() { + // The function actually applying the offset + function offsetAnchor() { + if (location.hash.length !== 0) { + // window.scrollTo(window.scrollX, window.scrollY - 140); + $("html").animate({ scrollTop: $(location.hash).offset().top - 160 }, 500); + } + } + + // Captures click events of all elements with href starting with # + $(document).on('click', 'a[href^="#"]', function(event) { + // Click events are captured before hashchanges. Timeout + // causes offsetAnchor to be called after the page jump. + window.setTimeout(function() { + offsetAnchor(); + }, 0); + }); + + // Set the offset when entering page with hash present in the url + window.setTimeout(offsetAnchor, 0); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/fonts/FontAwesome.otf b/public/admin/fonts/FontAwesome.otf new file mode 100644 index 0000000..401ec0f Binary files /dev/null and b/public/admin/fonts/FontAwesome.otf differ diff --git a/public/admin/fonts/Manrope/Manrope-Bold.eot b/public/admin/fonts/Manrope/Manrope-Bold.eot new file mode 100644 index 0000000..eddfbf7 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Bold.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-Bold.ttf b/public/admin/fonts/Manrope/Manrope-Bold.ttf new file mode 100644 index 0000000..cbedc2f Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Bold.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-Bold.woff b/public/admin/fonts/Manrope/Manrope-Bold.woff new file mode 100644 index 0000000..e857590 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Bold.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-Bold.woff2 b/public/admin/fonts/Manrope/Manrope-Bold.woff2 new file mode 100644 index 0000000..9560dc1 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Bold.woff2 differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraBold.eot b/public/admin/fonts/Manrope/Manrope-ExtraBold.eot new file mode 100644 index 0000000..b97dd2a Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraBold.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraBold.ttf b/public/admin/fonts/Manrope/Manrope-ExtraBold.ttf new file mode 100644 index 0000000..3909c43 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraBold.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraBold.woff b/public/admin/fonts/Manrope/Manrope-ExtraBold.woff new file mode 100644 index 0000000..7c90bc1 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraBold.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraBold.woff2 b/public/admin/fonts/Manrope/Manrope-ExtraBold.woff2 new file mode 100644 index 0000000..8fa500b Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraBold.woff2 differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraLight.eot b/public/admin/fonts/Manrope/Manrope-ExtraLight.eot new file mode 100644 index 0000000..e36ae91 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraLight.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraLight.ttf b/public/admin/fonts/Manrope/Manrope-ExtraLight.ttf new file mode 100644 index 0000000..4df3256 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraLight.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraLight.woff b/public/admin/fonts/Manrope/Manrope-ExtraLight.woff new file mode 100644 index 0000000..4c86f53 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraLight.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-ExtraLight.woff2 b/public/admin/fonts/Manrope/Manrope-ExtraLight.woff2 new file mode 100644 index 0000000..3be17f3 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-ExtraLight.woff2 differ diff --git a/public/admin/fonts/Manrope/Manrope-Light.eot b/public/admin/fonts/Manrope/Manrope-Light.eot new file mode 100644 index 0000000..100801d Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Light.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-Light.ttf b/public/admin/fonts/Manrope/Manrope-Light.ttf new file mode 100644 index 0000000..2030815 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Light.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-Light.woff b/public/admin/fonts/Manrope/Manrope-Light.woff new file mode 100644 index 0000000..899c4ec Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Light.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-Light.woff2 b/public/admin/fonts/Manrope/Manrope-Light.woff2 new file mode 100644 index 0000000..e16488d Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Light.woff2 differ diff --git a/public/admin/fonts/Manrope/Manrope-Medium.eot b/public/admin/fonts/Manrope/Manrope-Medium.eot new file mode 100644 index 0000000..5e760c3 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Medium.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-Medium.ttf b/public/admin/fonts/Manrope/Manrope-Medium.ttf new file mode 100644 index 0000000..e0a9b87 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Medium.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-Medium.woff b/public/admin/fonts/Manrope/Manrope-Medium.woff new file mode 100644 index 0000000..ad60685 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Medium.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-Medium.woff2 b/public/admin/fonts/Manrope/Manrope-Medium.woff2 new file mode 100644 index 0000000..41d3787 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Medium.woff2 differ diff --git a/public/admin/fonts/Manrope/Manrope-Regular.eot b/public/admin/fonts/Manrope/Manrope-Regular.eot new file mode 100644 index 0000000..4428509 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Regular.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-Regular.ttf b/public/admin/fonts/Manrope/Manrope-Regular.ttf new file mode 100644 index 0000000..0d3bf5c Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Regular.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-Regular.woff b/public/admin/fonts/Manrope/Manrope-Regular.woff new file mode 100644 index 0000000..2ba8b51 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Regular.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-Regular.woff2 b/public/admin/fonts/Manrope/Manrope-Regular.woff2 new file mode 100644 index 0000000..7ddc5f9 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-Regular.woff2 differ diff --git a/public/admin/fonts/Manrope/Manrope-SemiBold.eot b/public/admin/fonts/Manrope/Manrope-SemiBold.eot new file mode 100644 index 0000000..c8b7cc1 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-SemiBold.eot differ diff --git a/public/admin/fonts/Manrope/Manrope-SemiBold.ttf b/public/admin/fonts/Manrope/Manrope-SemiBold.ttf new file mode 100644 index 0000000..554d541 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-SemiBold.ttf differ diff --git a/public/admin/fonts/Manrope/Manrope-SemiBold.woff b/public/admin/fonts/Manrope/Manrope-SemiBold.woff new file mode 100644 index 0000000..622b092 Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-SemiBold.woff differ diff --git a/public/admin/fonts/Manrope/Manrope-SemiBold.woff2 b/public/admin/fonts/Manrope/Manrope-SemiBold.woff2 new file mode 100644 index 0000000..c63ff7a Binary files /dev/null and b/public/admin/fonts/Manrope/Manrope-SemiBold.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-Black.eot b/public/admin/fonts/Nunito/Nunito-Black.eot new file mode 100644 index 0000000..fab479e Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Black.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-Black.ttf b/public/admin/fonts/Nunito/Nunito-Black.ttf new file mode 100644 index 0000000..3822b87 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Black.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-Black.woff b/public/admin/fonts/Nunito/Nunito-Black.woff new file mode 100644 index 0000000..220dbd9 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Black.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-Black.woff2 b/public/admin/fonts/Nunito/Nunito-Black.woff2 new file mode 100644 index 0000000..095855c Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Black.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-Bold.eot b/public/admin/fonts/Nunito/Nunito-Bold.eot new file mode 100644 index 0000000..11eebdd Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Bold.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-Bold.ttf b/public/admin/fonts/Nunito/Nunito-Bold.ttf new file mode 100644 index 0000000..fa799b0 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Bold.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-Bold.woff b/public/admin/fonts/Nunito/Nunito-Bold.woff new file mode 100644 index 0000000..88e559a Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Bold.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-Bold.woff2 b/public/admin/fonts/Nunito/Nunito-Bold.woff2 new file mode 100644 index 0000000..ad847f4 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Bold.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraBold.eot b/public/admin/fonts/Nunito/Nunito-ExtraBold.eot new file mode 100644 index 0000000..736d2cb Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraBold.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraBold.ttf b/public/admin/fonts/Nunito/Nunito-ExtraBold.ttf new file mode 100644 index 0000000..2f6d6a7 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraBold.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraBold.woff b/public/admin/fonts/Nunito/Nunito-ExtraBold.woff new file mode 100644 index 0000000..3b456a6 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraBold.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraBold.woff2 b/public/admin/fonts/Nunito/Nunito-ExtraBold.woff2 new file mode 100644 index 0000000..05cfcda Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraBold.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraLight.eot b/public/admin/fonts/Nunito/Nunito-ExtraLight.eot new file mode 100644 index 0000000..ead021f Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraLight.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraLight.ttf b/public/admin/fonts/Nunito/Nunito-ExtraLight.ttf new file mode 100644 index 0000000..dfabf94 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraLight.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraLight.woff b/public/admin/fonts/Nunito/Nunito-ExtraLight.woff new file mode 100644 index 0000000..86b4577 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraLight.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-ExtraLight.woff2 b/public/admin/fonts/Nunito/Nunito-ExtraLight.woff2 new file mode 100644 index 0000000..19c6786 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-ExtraLight.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-Italic.eot b/public/admin/fonts/Nunito/Nunito-Italic.eot new file mode 100644 index 0000000..0ec7895 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Italic.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-Italic.ttf b/public/admin/fonts/Nunito/Nunito-Italic.ttf new file mode 100644 index 0000000..0195b31 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Italic.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-Italic.woff b/public/admin/fonts/Nunito/Nunito-Italic.woff new file mode 100644 index 0000000..95ece90 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Italic.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-Italic.woff2 b/public/admin/fonts/Nunito/Nunito-Italic.woff2 new file mode 100644 index 0000000..4d5f9ff Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Italic.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-Light.eot b/public/admin/fonts/Nunito/Nunito-Light.eot new file mode 100644 index 0000000..2af128b Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Light.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-Light.ttf b/public/admin/fonts/Nunito/Nunito-Light.ttf new file mode 100644 index 0000000..0ecfb0d Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Light.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-Light.woff b/public/admin/fonts/Nunito/Nunito-Light.woff new file mode 100644 index 0000000..be0c921 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Light.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-Light.woff2 b/public/admin/fonts/Nunito/Nunito-Light.woff2 new file mode 100644 index 0000000..2494c8f Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Light.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-Regular.eot b/public/admin/fonts/Nunito/Nunito-Regular.eot new file mode 100644 index 0000000..97b8514 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Regular.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-Regular.ttf b/public/admin/fonts/Nunito/Nunito-Regular.ttf new file mode 100644 index 0000000..307ae01 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Regular.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-Regular.woff b/public/admin/fonts/Nunito/Nunito-Regular.woff new file mode 100644 index 0000000..b49967e Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Regular.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-Regular.woff2 b/public/admin/fonts/Nunito/Nunito-Regular.woff2 new file mode 100644 index 0000000..afcbda2 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-Regular.woff2 differ diff --git a/public/admin/fonts/Nunito/Nunito-SemiBold.eot b/public/admin/fonts/Nunito/Nunito-SemiBold.eot new file mode 100644 index 0000000..a2ea942 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-SemiBold.eot differ diff --git a/public/admin/fonts/Nunito/Nunito-SemiBold.ttf b/public/admin/fonts/Nunito/Nunito-SemiBold.ttf new file mode 100644 index 0000000..dca9105 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-SemiBold.ttf differ diff --git a/public/admin/fonts/Nunito/Nunito-SemiBold.woff b/public/admin/fonts/Nunito/Nunito-SemiBold.woff new file mode 100644 index 0000000..a22ea79 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-SemiBold.woff differ diff --git a/public/admin/fonts/Nunito/Nunito-SemiBold.woff2 b/public/admin/fonts/Nunito/Nunito-SemiBold.woff2 new file mode 100644 index 0000000..0f41dd9 Binary files /dev/null and b/public/admin/fonts/Nunito/Nunito-SemiBold.woff2 differ diff --git a/public/admin/fonts/Roboto/Roboto-Black.eot b/public/admin/fonts/Roboto/Roboto-Black.eot new file mode 100644 index 0000000..cd571fd Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Black.eot differ diff --git a/public/admin/fonts/Roboto/Roboto-Black.ttf b/public/admin/fonts/Roboto/Roboto-Black.ttf new file mode 100644 index 0000000..144abcd Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Black.ttf differ diff --git a/public/admin/fonts/Roboto/Roboto-Black.woff b/public/admin/fonts/Roboto/Roboto-Black.woff new file mode 100644 index 0000000..d77f5a1 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Black.woff differ diff --git a/public/admin/fonts/Roboto/Roboto-Black.woff2 b/public/admin/fonts/Roboto/Roboto-Black.woff2 new file mode 100644 index 0000000..8dff3b1 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Black.woff2 differ diff --git a/public/admin/fonts/Roboto/Roboto-Bold.eot b/public/admin/fonts/Roboto/Roboto-Bold.eot new file mode 100644 index 0000000..14ad9ae Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Bold.eot differ diff --git a/public/admin/fonts/Roboto/Roboto-Bold.ttf b/public/admin/fonts/Roboto/Roboto-Bold.ttf new file mode 100644 index 0000000..0388c50 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Bold.ttf differ diff --git a/public/admin/fonts/Roboto/Roboto-Bold.woff b/public/admin/fonts/Roboto/Roboto-Bold.woff new file mode 100644 index 0000000..51f1e89 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Bold.woff differ diff --git a/public/admin/fonts/Roboto/Roboto-Bold.woff2 b/public/admin/fonts/Roboto/Roboto-Bold.woff2 new file mode 100644 index 0000000..8d1ec3a Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Bold.woff2 differ diff --git a/public/admin/fonts/Roboto/Roboto-Light.eot b/public/admin/fonts/Roboto/Roboto-Light.eot new file mode 100644 index 0000000..3d50d57 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Light.eot differ diff --git a/public/admin/fonts/Roboto/Roboto-Light.ttf b/public/admin/fonts/Roboto/Roboto-Light.ttf new file mode 100644 index 0000000..3a9bdc6 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Light.ttf differ diff --git a/public/admin/fonts/Roboto/Roboto-Light.woff b/public/admin/fonts/Roboto/Roboto-Light.woff new file mode 100644 index 0000000..eec3617 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Light.woff differ diff --git a/public/admin/fonts/Roboto/Roboto-Light.woff2 b/public/admin/fonts/Roboto/Roboto-Light.woff2 new file mode 100644 index 0000000..0e0efd0 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Light.woff2 differ diff --git a/public/admin/fonts/Roboto/Roboto-Medium.eot b/public/admin/fonts/Roboto/Roboto-Medium.eot new file mode 100644 index 0000000..0f60b5e Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Medium.eot differ diff --git a/public/admin/fonts/Roboto/Roboto-Medium.ttf b/public/admin/fonts/Roboto/Roboto-Medium.ttf new file mode 100644 index 0000000..09f51e2 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Medium.ttf differ diff --git a/public/admin/fonts/Roboto/Roboto-Medium.woff b/public/admin/fonts/Roboto/Roboto-Medium.woff new file mode 100644 index 0000000..b4f0629 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Medium.woff differ diff --git a/public/admin/fonts/Roboto/Roboto-Medium.woff2 b/public/admin/fonts/Roboto/Roboto-Medium.woff2 new file mode 100644 index 0000000..02bf764 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Medium.woff2 differ diff --git a/public/admin/fonts/Roboto/Roboto-Regular.eot b/public/admin/fonts/Roboto/Roboto-Regular.eot new file mode 100644 index 0000000..2f61547 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Regular.eot differ diff --git a/public/admin/fonts/Roboto/Roboto-Regular.ttf b/public/admin/fonts/Roboto/Roboto-Regular.ttf new file mode 100644 index 0000000..28e2c02 Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Regular.ttf differ diff --git a/public/admin/fonts/Roboto/Roboto-Regular.woff b/public/admin/fonts/Roboto/Roboto-Regular.woff new file mode 100644 index 0000000..b070d8e Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Regular.woff differ diff --git a/public/admin/fonts/Roboto/Roboto-Regular.woff2 b/public/admin/fonts/Roboto/Roboto-Regular.woff2 new file mode 100644 index 0000000..30370cf Binary files /dev/null and b/public/admin/fonts/Roboto/Roboto-Regular.woff2 differ diff --git a/public/admin/fonts/Simple-Line-Icons.eot b/public/admin/fonts/Simple-Line-Icons.eot new file mode 100644 index 0000000..f0ca6e8 Binary files /dev/null and b/public/admin/fonts/Simple-Line-Icons.eot differ diff --git a/public/admin/fonts/Simple-Line-Icons.svg b/public/admin/fonts/Simple-Line-Icons.svg new file mode 100644 index 0000000..4988524 --- /dev/null +++ b/public/admin/fonts/Simple-Line-Icons.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/admin/fonts/Simple-Line-Icons.ttf b/public/admin/fonts/Simple-Line-Icons.ttf new file mode 100644 index 0000000..6ecb686 Binary files /dev/null and b/public/admin/fonts/Simple-Line-Icons.ttf differ diff --git a/public/admin/fonts/Simple-Line-Icons.woff b/public/admin/fonts/Simple-Line-Icons.woff new file mode 100644 index 0000000..b17d694 Binary files /dev/null and b/public/admin/fonts/Simple-Line-Icons.woff differ diff --git a/public/admin/fonts/Simple-Line-Icons.woff2 b/public/admin/fonts/Simple-Line-Icons.woff2 new file mode 100644 index 0000000..c49fccf Binary files /dev/null and b/public/admin/fonts/Simple-Line-Icons.woff2 differ diff --git a/public/admin/fonts/fontawesome-webfont.eot b/public/admin/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/public/admin/fonts/fontawesome-webfont.eot differ diff --git a/public/admin/fonts/fontawesome-webfont.svg b/public/admin/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/public/admin/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/admin/fonts/fontawesome-webfont.ttf b/public/admin/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/public/admin/fonts/fontawesome-webfont.ttf differ diff --git a/public/admin/fonts/fontawesome-webfont.woff b/public/admin/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/public/admin/fonts/fontawesome-webfont.woff differ diff --git a/public/admin/fonts/fontawesome-webfont.woff2 b/public/admin/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/public/admin/fonts/fontawesome-webfont.woff2 differ diff --git a/public/admin/fonts/glyphicons-halflings-regular.eot b/public/admin/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/public/admin/fonts/glyphicons-halflings-regular.eot differ diff --git a/public/admin/fonts/glyphicons-halflings-regular.svg b/public/admin/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/public/admin/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/admin/fonts/glyphicons-halflings-regular.ttf b/public/admin/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/public/admin/fonts/glyphicons-halflings-regular.ttf differ diff --git a/public/admin/fonts/glyphicons-halflings-regular.woff b/public/admin/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/public/admin/fonts/glyphicons-halflings-regular.woff differ diff --git a/public/admin/fonts/glyphicons-halflings-regular.woff2 b/public/admin/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/public/admin/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/public/admin/images/auth/lockscreen-bg.jpg b/public/admin/images/auth/lockscreen-bg.jpg new file mode 100644 index 0000000..4f2735f Binary files /dev/null and b/public/admin/images/auth/lockscreen-bg.jpg differ diff --git a/public/admin/images/auth/login-bg.jpg b/public/admin/images/auth/login-bg.jpg new file mode 100644 index 0000000..2dab271 Binary files /dev/null and b/public/admin/images/auth/login-bg.jpg differ diff --git a/public/admin/images/auth/register-bg.jpg b/public/admin/images/auth/register-bg.jpg new file mode 100644 index 0000000..1605e89 Binary files /dev/null and b/public/admin/images/auth/register-bg.jpg differ diff --git a/public/admin/images/author-signature.png b/public/admin/images/author-signature.png new file mode 100644 index 0000000..bea4f3a Binary files /dev/null and b/public/admin/images/author-signature.png differ diff --git a/public/admin/images/author.jpg b/public/admin/images/author.jpg new file mode 100644 index 0000000..f471ef2 Binary files /dev/null and b/public/admin/images/author.jpg differ diff --git a/public/admin/images/carousel/banner_1.jpg b/public/admin/images/carousel/banner_1.jpg new file mode 100644 index 0000000..13489aa Binary files /dev/null and b/public/admin/images/carousel/banner_1.jpg differ diff --git a/public/admin/images/carousel/banner_10.jpg b/public/admin/images/carousel/banner_10.jpg new file mode 100644 index 0000000..5ca2477 Binary files /dev/null and b/public/admin/images/carousel/banner_10.jpg differ diff --git a/public/admin/images/carousel/banner_11.jpg b/public/admin/images/carousel/banner_11.jpg new file mode 100644 index 0000000..8dbf11a Binary files /dev/null and b/public/admin/images/carousel/banner_11.jpg differ diff --git a/public/admin/images/carousel/banner_12.jpg b/public/admin/images/carousel/banner_12.jpg new file mode 100644 index 0000000..a362871 Binary files /dev/null and b/public/admin/images/carousel/banner_12.jpg differ diff --git a/public/admin/images/carousel/banner_2.jpg b/public/admin/images/carousel/banner_2.jpg new file mode 100644 index 0000000..961bc21 Binary files /dev/null and b/public/admin/images/carousel/banner_2.jpg differ diff --git a/public/admin/images/carousel/banner_3.jpg b/public/admin/images/carousel/banner_3.jpg new file mode 100644 index 0000000..32c4ff6 Binary files /dev/null and b/public/admin/images/carousel/banner_3.jpg differ diff --git a/public/admin/images/carousel/banner_4.jpg b/public/admin/images/carousel/banner_4.jpg new file mode 100644 index 0000000..e825957 Binary files /dev/null and b/public/admin/images/carousel/banner_4.jpg differ diff --git a/public/admin/images/carousel/banner_5.jpg b/public/admin/images/carousel/banner_5.jpg new file mode 100644 index 0000000..0c0a7c2 Binary files /dev/null and b/public/admin/images/carousel/banner_5.jpg differ diff --git a/public/admin/images/carousel/banner_6.jpg b/public/admin/images/carousel/banner_6.jpg new file mode 100644 index 0000000..1727105 Binary files /dev/null and b/public/admin/images/carousel/banner_6.jpg differ diff --git a/public/admin/images/carousel/banner_7.jpg b/public/admin/images/carousel/banner_7.jpg new file mode 100644 index 0000000..ccec1fb Binary files /dev/null and b/public/admin/images/carousel/banner_7.jpg differ diff --git a/public/admin/images/carousel/banner_8.jpg b/public/admin/images/carousel/banner_8.jpg new file mode 100644 index 0000000..7a3b905 Binary files /dev/null and b/public/admin/images/carousel/banner_8.jpg differ diff --git a/public/admin/images/carousel/banner_9.jpg b/public/admin/images/carousel/banner_9.jpg new file mode 100644 index 0000000..685659d Binary files /dev/null and b/public/admin/images/carousel/banner_9.jpg differ diff --git a/public/admin/images/dashboard/people.png b/public/admin/images/dashboard/people.png new file mode 100644 index 0000000..2f99086 Binary files /dev/null and b/public/admin/images/dashboard/people.png differ diff --git a/public/admin/images/dashboard/people.svg b/public/admin/images/dashboard/people.svg new file mode 100644 index 0000000..230eae7 --- /dev/null +++ b/public/admin/images/dashboard/people.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/admin/images/dashboard/people11.svg b/public/admin/images/dashboard/people11.svg new file mode 100644 index 0000000..18f53d8 --- /dev/null +++ b/public/admin/images/dashboard/people11.svg @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/admin/images/dashboard/shape-1.svg b/public/admin/images/dashboard/shape-1.svg new file mode 100644 index 0000000..7894ded --- /dev/null +++ b/public/admin/images/dashboard/shape-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/admin/images/dashboard/shape-2.svg b/public/admin/images/dashboard/shape-2.svg new file mode 100644 index 0000000..d2b8e8d --- /dev/null +++ b/public/admin/images/dashboard/shape-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/admin/images/dashboard/shape-3.svg b/public/admin/images/dashboard/shape-3.svg new file mode 100644 index 0000000..b0f36a6 --- /dev/null +++ b/public/admin/images/dashboard/shape-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/admin/images/dashboard/shape-4.svg b/public/admin/images/dashboard/shape-4.svg new file mode 100644 index 0000000..59d265d --- /dev/null +++ b/public/admin/images/dashboard/shape-4.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/admin/images/demo/boxed-layout.jpg b/public/admin/images/demo/boxed-layout.jpg new file mode 100644 index 0000000..143d70d Binary files /dev/null and b/public/admin/images/demo/boxed-layout.jpg differ diff --git a/public/admin/images/demo/calendar.jpg b/public/admin/images/demo/calendar.jpg new file mode 100644 index 0000000..91d03b4 Binary files /dev/null and b/public/admin/images/demo/calendar.jpg differ diff --git a/public/admin/images/demo/compact-menu.jpg b/public/admin/images/demo/compact-menu.jpg new file mode 100644 index 0000000..61b9f20 Binary files /dev/null and b/public/admin/images/demo/compact-menu.jpg differ diff --git a/public/admin/images/demo/dark-sidebar.jpg b/public/admin/images/demo/dark-sidebar.jpg new file mode 100644 index 0000000..5a24b70 Binary files /dev/null and b/public/admin/images/demo/dark-sidebar.jpg differ diff --git a/public/admin/images/demo/email.jpg b/public/admin/images/demo/email.jpg new file mode 100644 index 0000000..44e9161 Binary files /dev/null and b/public/admin/images/demo/email.jpg differ diff --git a/public/admin/images/demo/fixed-menu.jpg b/public/admin/images/demo/fixed-menu.jpg new file mode 100644 index 0000000..b532edf Binary files /dev/null and b/public/admin/images/demo/fixed-menu.jpg differ diff --git a/public/admin/images/demo/horizontal-menu-dark.jpg b/public/admin/images/demo/horizontal-menu-dark.jpg new file mode 100644 index 0000000..aa082e1 Binary files /dev/null and b/public/admin/images/demo/horizontal-menu-dark.jpg differ diff --git a/public/admin/images/demo/horizontal-menu-light.jpg b/public/admin/images/demo/horizontal-menu-light.jpg new file mode 100644 index 0000000..0e78079 Binary files /dev/null and b/public/admin/images/demo/horizontal-menu-light.jpg differ diff --git a/public/admin/images/demo/icon-menu.jpg b/public/admin/images/demo/icon-menu.jpg new file mode 100644 index 0000000..5f26c36 Binary files /dev/null and b/public/admin/images/demo/icon-menu.jpg differ diff --git a/public/admin/images/demo/login.jpg b/public/admin/images/demo/login.jpg new file mode 100644 index 0000000..fa81b16 Binary files /dev/null and b/public/admin/images/demo/login.jpg differ diff --git a/public/admin/images/demo/portfolio.jpg b/public/admin/images/demo/portfolio.jpg new file mode 100644 index 0000000..130d90f Binary files /dev/null and b/public/admin/images/demo/portfolio.jpg differ diff --git a/public/admin/images/demo/pricing.jpg b/public/admin/images/demo/pricing.jpg new file mode 100644 index 0000000..9347dd5 Binary files /dev/null and b/public/admin/images/demo/pricing.jpg differ diff --git a/public/admin/images/demo/toggle-menu.jpg b/public/admin/images/demo/toggle-menu.jpg new file mode 100644 index 0000000..cd63651 Binary files /dev/null and b/public/admin/images/demo/toggle-menu.jpg differ diff --git a/public/admin/images/demo/toggle-overlay-menu.jpg b/public/admin/images/demo/toggle-overlay-menu.jpg new file mode 100644 index 0000000..efc9ec8 Binary files /dev/null and b/public/admin/images/demo/toggle-overlay-menu.jpg differ diff --git a/public/admin/images/demo/vertical-dark.jpg b/public/admin/images/demo/vertical-dark.jpg new file mode 100644 index 0000000..3c7f3a2 Binary files /dev/null and b/public/admin/images/demo/vertical-dark.jpg differ diff --git a/public/admin/images/demo/vertical-default.jpg b/public/admin/images/demo/vertical-default.jpg new file mode 100644 index 0000000..95120cb Binary files /dev/null and b/public/admin/images/demo/vertical-default.jpg differ diff --git a/public/admin/images/ebook.png b/public/admin/images/ebook.png new file mode 100644 index 0000000..8a2876e Binary files /dev/null and b/public/admin/images/ebook.png differ diff --git a/public/admin/images/faces/face1.jpg b/public/admin/images/faces/face1.jpg new file mode 100644 index 0000000..a7bd9cb Binary files /dev/null and b/public/admin/images/faces/face1.jpg differ diff --git a/public/admin/images/faces/face10.jpg b/public/admin/images/faces/face10.jpg new file mode 100644 index 0000000..8c0cbe0 Binary files /dev/null and b/public/admin/images/faces/face10.jpg differ diff --git a/public/admin/images/faces/face11.jpg b/public/admin/images/faces/face11.jpg new file mode 100644 index 0000000..097e0e7 Binary files /dev/null and b/public/admin/images/faces/face11.jpg differ diff --git a/public/admin/images/faces/face12.jpg b/public/admin/images/faces/face12.jpg new file mode 100644 index 0000000..75c7282 Binary files /dev/null and b/public/admin/images/faces/face12.jpg differ diff --git a/public/admin/images/faces/face13.jpg b/public/admin/images/faces/face13.jpg new file mode 100644 index 0000000..8a5faa4 Binary files /dev/null and b/public/admin/images/faces/face13.jpg differ diff --git a/public/admin/images/faces/face14.jpg b/public/admin/images/faces/face14.jpg new file mode 100644 index 0000000..a5764fc Binary files /dev/null and b/public/admin/images/faces/face14.jpg differ diff --git a/public/admin/images/faces/face15.jpg b/public/admin/images/faces/face15.jpg new file mode 100644 index 0000000..e895153 Binary files /dev/null and b/public/admin/images/faces/face15.jpg differ diff --git a/public/admin/images/faces/face16.jpg b/public/admin/images/faces/face16.jpg new file mode 100644 index 0000000..ec1a6cb Binary files /dev/null and b/public/admin/images/faces/face16.jpg differ diff --git a/public/admin/images/faces/face17.jpg b/public/admin/images/faces/face17.jpg new file mode 100644 index 0000000..082d165 Binary files /dev/null and b/public/admin/images/faces/face17.jpg differ diff --git a/public/admin/images/faces/face18.jpg b/public/admin/images/faces/face18.jpg new file mode 100644 index 0000000..259a288 Binary files /dev/null and b/public/admin/images/faces/face18.jpg differ diff --git a/public/admin/images/faces/face19.jpg b/public/admin/images/faces/face19.jpg new file mode 100644 index 0000000..7c1486b Binary files /dev/null and b/public/admin/images/faces/face19.jpg differ diff --git a/public/admin/images/faces/face2.jpg b/public/admin/images/faces/face2.jpg new file mode 100644 index 0000000..cef2297 Binary files /dev/null and b/public/admin/images/faces/face2.jpg differ diff --git a/public/admin/images/faces/face20.jpg b/public/admin/images/faces/face20.jpg new file mode 100644 index 0000000..8cb74b3 Binary files /dev/null and b/public/admin/images/faces/face20.jpg differ diff --git a/public/admin/images/faces/face21.jpg b/public/admin/images/faces/face21.jpg new file mode 100644 index 0000000..452d233 Binary files /dev/null and b/public/admin/images/faces/face21.jpg differ diff --git a/public/admin/images/faces/face22.jpg b/public/admin/images/faces/face22.jpg new file mode 100644 index 0000000..929a146 Binary files /dev/null and b/public/admin/images/faces/face22.jpg differ diff --git a/public/admin/images/faces/face23.jpg b/public/admin/images/faces/face23.jpg new file mode 100644 index 0000000..c2b5169 Binary files /dev/null and b/public/admin/images/faces/face23.jpg differ diff --git a/public/admin/images/faces/face24.jpg b/public/admin/images/faces/face24.jpg new file mode 100644 index 0000000..f3dcc1f Binary files /dev/null and b/public/admin/images/faces/face24.jpg differ diff --git a/public/admin/images/faces/face25.jpg b/public/admin/images/faces/face25.jpg new file mode 100644 index 0000000..722d502 Binary files /dev/null and b/public/admin/images/faces/face25.jpg differ diff --git a/public/admin/images/faces/face26.jpg b/public/admin/images/faces/face26.jpg new file mode 100644 index 0000000..69ef971 Binary files /dev/null and b/public/admin/images/faces/face26.jpg differ diff --git a/public/admin/images/faces/face27.jpg b/public/admin/images/faces/face27.jpg new file mode 100644 index 0000000..48faade Binary files /dev/null and b/public/admin/images/faces/face27.jpg differ diff --git a/public/admin/images/faces/face28.jpg b/public/admin/images/faces/face28.jpg new file mode 100644 index 0000000..89c9a8e Binary files /dev/null and b/public/admin/images/faces/face28.jpg differ diff --git a/public/admin/images/faces/face3.jpg b/public/admin/images/faces/face3.jpg new file mode 100644 index 0000000..a45915d Binary files /dev/null and b/public/admin/images/faces/face3.jpg differ diff --git a/public/admin/images/faces/face4.jpg b/public/admin/images/faces/face4.jpg new file mode 100644 index 0000000..105bb22 Binary files /dev/null and b/public/admin/images/faces/face4.jpg differ diff --git a/public/admin/images/faces/face5.jpg b/public/admin/images/faces/face5.jpg new file mode 100644 index 0000000..1124570 Binary files /dev/null and b/public/admin/images/faces/face5.jpg differ diff --git a/public/admin/images/faces/face6.jpg b/public/admin/images/faces/face6.jpg new file mode 100644 index 0000000..2fc0702 Binary files /dev/null and b/public/admin/images/faces/face6.jpg differ diff --git a/public/admin/images/faces/face7.jpg b/public/admin/images/faces/face7.jpg new file mode 100644 index 0000000..2f3adef Binary files /dev/null and b/public/admin/images/faces/face7.jpg differ diff --git a/public/admin/images/faces/face8.jpg b/public/admin/images/faces/face8.jpg new file mode 100644 index 0000000..61276ba Binary files /dev/null and b/public/admin/images/faces/face8.jpg differ diff --git a/public/admin/images/faces/face9.jpg b/public/admin/images/faces/face9.jpg new file mode 100644 index 0000000..831eabc Binary files /dev/null and b/public/admin/images/faces/face9.jpg differ diff --git a/public/admin/images/favicon.ico b/public/admin/images/favicon.ico new file mode 100644 index 0000000..a48307a Binary files /dev/null and b/public/admin/images/favicon.ico differ diff --git a/public/admin/images/favicon.png b/public/admin/images/favicon.png new file mode 100644 index 0000000..e3686ee Binary files /dev/null and b/public/admin/images/favicon.png differ diff --git a/public/admin/images/file-icons/128/001-interface-1.png b/public/admin/images/file-icons/128/001-interface-1.png new file mode 100644 index 0000000..fd05b6e Binary files /dev/null and b/public/admin/images/file-icons/128/001-interface-1.png differ diff --git a/public/admin/images/file-icons/128/002-tool.png b/public/admin/images/file-icons/128/002-tool.png new file mode 100644 index 0000000..998f361 Binary files /dev/null and b/public/admin/images/file-icons/128/002-tool.png differ diff --git a/public/admin/images/file-icons/128/003-interface.png b/public/admin/images/file-icons/128/003-interface.png new file mode 100644 index 0000000..f29e769 Binary files /dev/null and b/public/admin/images/file-icons/128/003-interface.png differ diff --git a/public/admin/images/file-icons/128/004-folder-1.png b/public/admin/images/file-icons/128/004-folder-1.png new file mode 100644 index 0000000..8bf92a9 Binary files /dev/null and b/public/admin/images/file-icons/128/004-folder-1.png differ diff --git a/public/admin/images/file-icons/128/005-database.png b/public/admin/images/file-icons/128/005-database.png new file mode 100644 index 0000000..bef497e Binary files /dev/null and b/public/admin/images/file-icons/128/005-database.png differ diff --git a/public/admin/images/file-icons/128/006-record.png b/public/admin/images/file-icons/128/006-record.png new file mode 100644 index 0000000..882763c Binary files /dev/null and b/public/admin/images/file-icons/128/006-record.png differ diff --git a/public/admin/images/file-icons/128/007-folder.png b/public/admin/images/file-icons/128/007-folder.png new file mode 100644 index 0000000..3b0a5b4 Binary files /dev/null and b/public/admin/images/file-icons/128/007-folder.png differ diff --git a/public/admin/images/file-icons/128/008-archive.png b/public/admin/images/file-icons/128/008-archive.png new file mode 100644 index 0000000..cab121f Binary files /dev/null and b/public/admin/images/file-icons/128/008-archive.png differ diff --git a/public/admin/images/file-icons/256/001-interface-1.png b/public/admin/images/file-icons/256/001-interface-1.png new file mode 100644 index 0000000..90c34f5 Binary files /dev/null and b/public/admin/images/file-icons/256/001-interface-1.png differ diff --git a/public/admin/images/file-icons/256/002-tool.png b/public/admin/images/file-icons/256/002-tool.png new file mode 100644 index 0000000..1568d75 Binary files /dev/null and b/public/admin/images/file-icons/256/002-tool.png differ diff --git a/public/admin/images/file-icons/256/003-interface.png b/public/admin/images/file-icons/256/003-interface.png new file mode 100644 index 0000000..e5789f0 Binary files /dev/null and b/public/admin/images/file-icons/256/003-interface.png differ diff --git a/public/admin/images/file-icons/256/004-folder-1.png b/public/admin/images/file-icons/256/004-folder-1.png new file mode 100644 index 0000000..de0b731 Binary files /dev/null and b/public/admin/images/file-icons/256/004-folder-1.png differ diff --git a/public/admin/images/file-icons/256/005-database.png b/public/admin/images/file-icons/256/005-database.png new file mode 100644 index 0000000..2cd7fdb Binary files /dev/null and b/public/admin/images/file-icons/256/005-database.png differ diff --git a/public/admin/images/file-icons/256/006-record.png b/public/admin/images/file-icons/256/006-record.png new file mode 100644 index 0000000..af28d26 Binary files /dev/null and b/public/admin/images/file-icons/256/006-record.png differ diff --git a/public/admin/images/file-icons/256/007-folder.png b/public/admin/images/file-icons/256/007-folder.png new file mode 100644 index 0000000..622fe66 Binary files /dev/null and b/public/admin/images/file-icons/256/007-folder.png differ diff --git a/public/admin/images/file-icons/256/008-archive.png b/public/admin/images/file-icons/256/008-archive.png new file mode 100644 index 0000000..dd9b95d Binary files /dev/null and b/public/admin/images/file-icons/256/008-archive.png differ diff --git a/public/admin/images/file-icons/512/001-interface-1.png b/public/admin/images/file-icons/512/001-interface-1.png new file mode 100644 index 0000000..898cdb0 Binary files /dev/null and b/public/admin/images/file-icons/512/001-interface-1.png differ diff --git a/public/admin/images/file-icons/512/002-tool.png b/public/admin/images/file-icons/512/002-tool.png new file mode 100644 index 0000000..f9f6b70 Binary files /dev/null and b/public/admin/images/file-icons/512/002-tool.png differ diff --git a/public/admin/images/file-icons/512/003-interface.png b/public/admin/images/file-icons/512/003-interface.png new file mode 100644 index 0000000..b819ea0 Binary files /dev/null and b/public/admin/images/file-icons/512/003-interface.png differ diff --git a/public/admin/images/file-icons/512/004-folder-1.png b/public/admin/images/file-icons/512/004-folder-1.png new file mode 100644 index 0000000..672ced0 Binary files /dev/null and b/public/admin/images/file-icons/512/004-folder-1.png differ diff --git a/public/admin/images/file-icons/512/005-database.png b/public/admin/images/file-icons/512/005-database.png new file mode 100644 index 0000000..04ffb49 Binary files /dev/null and b/public/admin/images/file-icons/512/005-database.png differ diff --git a/public/admin/images/file-icons/512/006-record.png b/public/admin/images/file-icons/512/006-record.png new file mode 100644 index 0000000..0f1e47d Binary files /dev/null and b/public/admin/images/file-icons/512/006-record.png differ diff --git a/public/admin/images/file-icons/512/007-folder.png b/public/admin/images/file-icons/512/007-folder.png new file mode 100644 index 0000000..bed8cde Binary files /dev/null and b/public/admin/images/file-icons/512/007-folder.png differ diff --git a/public/admin/images/file-icons/512/008-archive.png b/public/admin/images/file-icons/512/008-archive.png new file mode 100644 index 0000000..614434a Binary files /dev/null and b/public/admin/images/file-icons/512/008-archive.png differ diff --git a/public/admin/images/file-icons/64/001-interface-1.png b/public/admin/images/file-icons/64/001-interface-1.png new file mode 100644 index 0000000..5e55e27 Binary files /dev/null and b/public/admin/images/file-icons/64/001-interface-1.png differ diff --git a/public/admin/images/file-icons/64/002-tool.png b/public/admin/images/file-icons/64/002-tool.png new file mode 100644 index 0000000..1d8aaf7 Binary files /dev/null and b/public/admin/images/file-icons/64/002-tool.png differ diff --git a/public/admin/images/file-icons/64/003-interface.png b/public/admin/images/file-icons/64/003-interface.png new file mode 100644 index 0000000..cc57def Binary files /dev/null and b/public/admin/images/file-icons/64/003-interface.png differ diff --git a/public/admin/images/file-icons/64/004-folder-1.png b/public/admin/images/file-icons/64/004-folder-1.png new file mode 100644 index 0000000..70ea76c Binary files /dev/null and b/public/admin/images/file-icons/64/004-folder-1.png differ diff --git a/public/admin/images/file-icons/64/005-database.png b/public/admin/images/file-icons/64/005-database.png new file mode 100644 index 0000000..19e7cec Binary files /dev/null and b/public/admin/images/file-icons/64/005-database.png differ diff --git a/public/admin/images/file-icons/64/006-record.png b/public/admin/images/file-icons/64/006-record.png new file mode 100644 index 0000000..a965c62 Binary files /dev/null and b/public/admin/images/file-icons/64/006-record.png differ diff --git a/public/admin/images/file-icons/64/007-folder.png b/public/admin/images/file-icons/64/007-folder.png new file mode 100644 index 0000000..b6c99d6 Binary files /dev/null and b/public/admin/images/file-icons/64/007-folder.png differ diff --git a/public/admin/images/file-icons/64/008-archive.png b/public/admin/images/file-icons/64/008-archive.png new file mode 100644 index 0000000..3ac3e91 Binary files /dev/null and b/public/admin/images/file-icons/64/008-archive.png differ diff --git a/public/admin/images/lightbox/play-button.png b/public/admin/images/lightbox/play-button.png new file mode 100644 index 0000000..30fe648 Binary files /dev/null and b/public/admin/images/lightbox/play-button.png differ diff --git a/public/admin/images/lightbox/thumb-v-v-1.jpg b/public/admin/images/lightbox/thumb-v-v-1.jpg new file mode 100644 index 0000000..9cd2ff3 Binary files /dev/null and b/public/admin/images/lightbox/thumb-v-v-1.jpg differ diff --git a/public/admin/images/lightbox/thumb-v-v-2.jpg b/public/admin/images/lightbox/thumb-v-v-2.jpg new file mode 100644 index 0000000..e318fa6 Binary files /dev/null and b/public/admin/images/lightbox/thumb-v-v-2.jpg differ diff --git a/public/admin/images/lightbox/thumb-v-y-1.jpg b/public/admin/images/lightbox/thumb-v-y-1.jpg new file mode 100644 index 0000000..6540cbd Binary files /dev/null and b/public/admin/images/lightbox/thumb-v-y-1.jpg differ diff --git a/public/admin/images/lightbox/thumb-v-y-2.jpg b/public/admin/images/lightbox/thumb-v-y-2.jpg new file mode 100644 index 0000000..45ff03b Binary files /dev/null and b/public/admin/images/lightbox/thumb-v-y-2.jpg differ diff --git a/public/admin/images/logo-light.svg b/public/admin/images/logo-light.svg new file mode 100644 index 0000000..0ce785e --- /dev/null +++ b/public/admin/images/logo-light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/admin/images/logo-mini.svg b/public/admin/images/logo-mini.svg new file mode 100644 index 0000000..5d4855c --- /dev/null +++ b/public/admin/images/logo-mini.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/admin/images/logo-white.svg b/public/admin/images/logo-white.svg new file mode 100644 index 0000000..0380d71 --- /dev/null +++ b/public/admin/images/logo-white.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/admin/images/logo.png b/public/admin/images/logo.png new file mode 100644 index 0000000..ddbfd38 Binary files /dev/null and b/public/admin/images/logo.png differ diff --git a/public/admin/images/logo.svg b/public/admin/images/logo.svg new file mode 100644 index 0000000..7b04b63 --- /dev/null +++ b/public/admin/images/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/admin/images/logo1.svg b/public/admin/images/logo1.svg new file mode 100644 index 0000000..f20b505 --- /dev/null +++ b/public/admin/images/logo1.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/admin/images/reader-1.jpg b/public/admin/images/reader-1.jpg new file mode 100644 index 0000000..4d6d4f3 Binary files /dev/null and b/public/admin/images/reader-1.jpg differ diff --git a/public/admin/images/reader-2.jpg b/public/admin/images/reader-2.jpg new file mode 100644 index 0000000..b7771f3 Binary files /dev/null and b/public/admin/images/reader-2.jpg differ diff --git a/public/admin/images/reader-3.jpg b/public/admin/images/reader-3.jpg new file mode 100644 index 0000000..c924e7a Binary files /dev/null and b/public/admin/images/reader-3.jpg differ diff --git a/public/admin/images/samples/1280x768/1.jpg b/public/admin/images/samples/1280x768/1.jpg new file mode 100644 index 0000000..c36525d Binary files /dev/null and b/public/admin/images/samples/1280x768/1.jpg differ diff --git a/public/admin/images/samples/1280x768/10.jpg b/public/admin/images/samples/1280x768/10.jpg new file mode 100644 index 0000000..c64239f Binary files /dev/null and b/public/admin/images/samples/1280x768/10.jpg differ diff --git a/public/admin/images/samples/1280x768/11.jpg b/public/admin/images/samples/1280x768/11.jpg new file mode 100644 index 0000000..5d4a9c1 Binary files /dev/null and b/public/admin/images/samples/1280x768/11.jpg differ diff --git a/public/admin/images/samples/1280x768/12.jpg b/public/admin/images/samples/1280x768/12.jpg new file mode 100644 index 0000000..5eca3e4 Binary files /dev/null and b/public/admin/images/samples/1280x768/12.jpg differ diff --git a/public/admin/images/samples/1280x768/13.jpg b/public/admin/images/samples/1280x768/13.jpg new file mode 100644 index 0000000..c899229 Binary files /dev/null and b/public/admin/images/samples/1280x768/13.jpg differ diff --git a/public/admin/images/samples/1280x768/14.jpg b/public/admin/images/samples/1280x768/14.jpg new file mode 100644 index 0000000..7c0c847 Binary files /dev/null and b/public/admin/images/samples/1280x768/14.jpg differ diff --git a/public/admin/images/samples/1280x768/15.jpg b/public/admin/images/samples/1280x768/15.jpg new file mode 100644 index 0000000..52f78ca Binary files /dev/null and b/public/admin/images/samples/1280x768/15.jpg differ diff --git a/public/admin/images/samples/1280x768/2.jpg b/public/admin/images/samples/1280x768/2.jpg new file mode 100644 index 0000000..a963eda Binary files /dev/null and b/public/admin/images/samples/1280x768/2.jpg differ diff --git a/public/admin/images/samples/1280x768/3.jpg b/public/admin/images/samples/1280x768/3.jpg new file mode 100644 index 0000000..92b0b62 Binary files /dev/null and b/public/admin/images/samples/1280x768/3.jpg differ diff --git a/public/admin/images/samples/1280x768/4.jpg b/public/admin/images/samples/1280x768/4.jpg new file mode 100644 index 0000000..f62d7d5 Binary files /dev/null and b/public/admin/images/samples/1280x768/4.jpg differ diff --git a/public/admin/images/samples/1280x768/5.jpg b/public/admin/images/samples/1280x768/5.jpg new file mode 100644 index 0000000..17bfc77 Binary files /dev/null and b/public/admin/images/samples/1280x768/5.jpg differ diff --git a/public/admin/images/samples/1280x768/6.jpg b/public/admin/images/samples/1280x768/6.jpg new file mode 100644 index 0000000..fd4c445 Binary files /dev/null and b/public/admin/images/samples/1280x768/6.jpg differ diff --git a/public/admin/images/samples/1280x768/7.jpg b/public/admin/images/samples/1280x768/7.jpg new file mode 100644 index 0000000..fcb33c6 Binary files /dev/null and b/public/admin/images/samples/1280x768/7.jpg differ diff --git a/public/admin/images/samples/1280x768/8.jpg b/public/admin/images/samples/1280x768/8.jpg new file mode 100644 index 0000000..d3f7704 Binary files /dev/null and b/public/admin/images/samples/1280x768/8.jpg differ diff --git a/public/admin/images/samples/1280x768/9.jpg b/public/admin/images/samples/1280x768/9.jpg new file mode 100644 index 0000000..b42976e Binary files /dev/null and b/public/admin/images/samples/1280x768/9.jpg differ diff --git a/public/admin/images/samples/300x300/1.jpg b/public/admin/images/samples/300x300/1.jpg new file mode 100644 index 0000000..cf0c417 Binary files /dev/null and b/public/admin/images/samples/300x300/1.jpg differ diff --git a/public/admin/images/samples/300x300/10.jpg b/public/admin/images/samples/300x300/10.jpg new file mode 100644 index 0000000..abcea61 Binary files /dev/null and b/public/admin/images/samples/300x300/10.jpg differ diff --git a/public/admin/images/samples/300x300/11.jpg b/public/admin/images/samples/300x300/11.jpg new file mode 100644 index 0000000..970cbae Binary files /dev/null and b/public/admin/images/samples/300x300/11.jpg differ diff --git a/public/admin/images/samples/300x300/12.jpg b/public/admin/images/samples/300x300/12.jpg new file mode 100644 index 0000000..0cd6ab9 Binary files /dev/null and b/public/admin/images/samples/300x300/12.jpg differ diff --git a/public/admin/images/samples/300x300/13.jpg b/public/admin/images/samples/300x300/13.jpg new file mode 100644 index 0000000..483bb85 Binary files /dev/null and b/public/admin/images/samples/300x300/13.jpg differ diff --git a/public/admin/images/samples/300x300/14.jpg b/public/admin/images/samples/300x300/14.jpg new file mode 100644 index 0000000..3765944 Binary files /dev/null and b/public/admin/images/samples/300x300/14.jpg differ diff --git a/public/admin/images/samples/300x300/15.jpg b/public/admin/images/samples/300x300/15.jpg new file mode 100644 index 0000000..ecb7f4e Binary files /dev/null and b/public/admin/images/samples/300x300/15.jpg differ diff --git a/public/admin/images/samples/300x300/2.jpg b/public/admin/images/samples/300x300/2.jpg new file mode 100644 index 0000000..041af33 Binary files /dev/null and b/public/admin/images/samples/300x300/2.jpg differ diff --git a/public/admin/images/samples/300x300/3.jpg b/public/admin/images/samples/300x300/3.jpg new file mode 100644 index 0000000..59799f0 Binary files /dev/null and b/public/admin/images/samples/300x300/3.jpg differ diff --git a/public/admin/images/samples/300x300/4.jpg b/public/admin/images/samples/300x300/4.jpg new file mode 100644 index 0000000..ac46902 Binary files /dev/null and b/public/admin/images/samples/300x300/4.jpg differ diff --git a/public/admin/images/samples/300x300/5.jpg b/public/admin/images/samples/300x300/5.jpg new file mode 100644 index 0000000..a346768 Binary files /dev/null and b/public/admin/images/samples/300x300/5.jpg differ diff --git a/public/admin/images/samples/300x300/6.jpg b/public/admin/images/samples/300x300/6.jpg new file mode 100644 index 0000000..514f677 Binary files /dev/null and b/public/admin/images/samples/300x300/6.jpg differ diff --git a/public/admin/images/samples/300x300/7.jpg b/public/admin/images/samples/300x300/7.jpg new file mode 100644 index 0000000..a2a9ee7 Binary files /dev/null and b/public/admin/images/samples/300x300/7.jpg differ diff --git a/public/admin/images/samples/300x300/8.jpg b/public/admin/images/samples/300x300/8.jpg new file mode 100644 index 0000000..efab825 Binary files /dev/null and b/public/admin/images/samples/300x300/8.jpg differ diff --git a/public/admin/images/samples/300x300/9.jpg b/public/admin/images/samples/300x300/9.jpg new file mode 100644 index 0000000..7f5aaef Binary files /dev/null and b/public/admin/images/samples/300x300/9.jpg differ diff --git a/public/admin/images/sprites/blue.png b/public/admin/images/sprites/blue.png new file mode 100644 index 0000000..d5acf33 Binary files /dev/null and b/public/admin/images/sprites/blue.png differ diff --git a/public/admin/images/sprites/dark.png b/public/admin/images/sprites/dark.png new file mode 100644 index 0000000..0255218 Binary files /dev/null and b/public/admin/images/sprites/dark.png differ diff --git a/public/admin/images/sprites/flag.png b/public/admin/images/sprites/flag.png new file mode 100644 index 0000000..d0798b4 Binary files /dev/null and b/public/admin/images/sprites/flag.png differ diff --git a/public/admin/images/sprites/green.png b/public/admin/images/sprites/green.png new file mode 100644 index 0000000..76a7db2 Binary files /dev/null and b/public/admin/images/sprites/green.png differ diff --git a/public/admin/images/sprites/jsgrid-icons.png b/public/admin/images/sprites/jsgrid-icons.png new file mode 100644 index 0000000..69fbe19 Binary files /dev/null and b/public/admin/images/sprites/jsgrid-icons.png differ diff --git a/public/admin/images/sprites/red.png b/public/admin/images/sprites/red.png new file mode 100644 index 0000000..2828424 Binary files /dev/null and b/public/admin/images/sprites/red.png differ diff --git a/public/admin/images/sprites/yellow.png b/public/admin/images/sprites/yellow.png new file mode 100644 index 0000000..0fc6c5a Binary files /dev/null and b/public/admin/images/sprites/yellow.png differ diff --git a/public/admin/images/testimonials-bg.jpeg b/public/admin/images/testimonials-bg.jpeg new file mode 100644 index 0000000..081ba4f Binary files /dev/null and b/public/admin/images/testimonials-bg.jpeg differ diff --git a/public/admin/images/video-review-bg.jpeg b/public/admin/images/video-review-bg.jpeg new file mode 100644 index 0000000..cc1174c Binary files /dev/null and b/public/admin/images/video-review-bg.jpeg differ diff --git a/public/admin/js/Chart.roundedBarCharts.js b/public/admin/js/Chart.roundedBarCharts.js new file mode 100644 index 0000000..efbbeca --- /dev/null +++ b/public/admin/js/Chart.roundedBarCharts.js @@ -0,0 +1,171 @@ +/* +* Rounded Rectangle Extension for Bar Charts and Horizontal Bar Charts +* Tested with Charts.js 2.7.0 +*/ +Chart.elements.Rectangle.prototype.draw = function() { + + var ctx = this._chart.ctx; + var vm = this._view; + var left, right, top, bottom, signX, signY, borderSkipped, radius; + var borderWidth = vm.borderWidth; + + // If radius is less than 0 or is large enough to cause drawing errors a max + // radius is imposed. If cornerRadius is not defined set it to 0. + var cornerRadius = this._chart.config.options.cornerRadius; + if(cornerRadius < 0){ cornerRadius = 0; } + if(typeof cornerRadius == 'undefined'){ cornerRadius = 0; } + + if (!vm.horizontal) { + // bar + left = vm.x - vm.width / 2; + right = vm.x + vm.width / 2; + top = vm.y; + bottom = vm.base; + signX = 1; + signY = bottom > top? 1: -1; + borderSkipped = vm.borderSkipped || 'bottom'; + } else { + // horizontal bar + left = vm.base; + right = vm.x; + top = vm.y - vm.height / 2; + bottom = vm.y + vm.height / 2; + signX = right > left? 1: -1; + signY = 1; + borderSkipped = vm.borderSkipped || 'left'; + } + + // Canvas doesn't allow us to stroke inside the width so we can + // adjust the sizes to fit if we're setting a stroke on the line + if (borderWidth) { + // borderWidth shold be less than bar width and bar height. + var barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)); + borderWidth = borderWidth > barSize? barSize: borderWidth; + var halfStroke = borderWidth / 2; + // Adjust borderWidth when bar top position is near vm.base(zero). + var borderLeft = left + (borderSkipped !== 'left'? halfStroke * signX: 0); + var borderRight = right + (borderSkipped !== 'right'? -halfStroke * signX: 0); + var borderTop = top + (borderSkipped !== 'top'? halfStroke * signY: 0); + var borderBottom = bottom + (borderSkipped !== 'bottom'? -halfStroke * signY: 0); + // not become a vertical line? + if (borderLeft !== borderRight) { + top = borderTop; + bottom = borderBottom; + } + // not become a horizontal line? + if (borderTop !== borderBottom) { + left = borderLeft; + right = borderRight; + } + } + + ctx.beginPath(); + ctx.fillStyle = vm.backgroundColor; + ctx.strokeStyle = vm.borderColor; + ctx.lineWidth = borderWidth; + + // Corner points, from bottom-left to bottom-right clockwise + // | 1 2 | + // | 0 3 | + var corners = [ + [left, bottom], + [left, top], + [right, top], + [right, bottom] + ]; + + // Find first (starting) corner with fallback to 'bottom' + var borders = ['bottom', 'left', 'top', 'right']; + var startCorner = borders.indexOf(borderSkipped, 0); + if (startCorner === -1) { + startCorner = 0; + } + + function cornerAt(index) { + return corners[(startCorner + index) % 4]; + } + + // Draw rectangle from 'startCorner' + var corner = cornerAt(0); + ctx.moveTo(corner[0], corner[1]); + + for (var i = 1; i < 4; i++) { + corner = cornerAt(i); + nextCornerId = i+1; + if(nextCornerId == 4){ + nextCornerId = 0 + } + + nextCorner = cornerAt(nextCornerId); + + width = corners[2][0] - corners[1][0]; + height = corners[0][1] - corners[1][1]; + x = corners[1][0]; + y = corners[1][1]; + + var radius = cornerRadius; + // Fix radius being too large + if(radius > Math.abs(height)/2){ + radius = Math.floor(Math.abs(height)/2); + } + if(radius > Math.abs(width)/2){ + radius = Math.floor(Math.abs(width)/2); + } + + if(height < 0){ + // Negative values in a standard bar chart + x_tl = x; x_tr = x+width; + y_tl = y+height; y_tr = y+height; + + x_bl = x; x_br = x+width; + y_bl = y; y_br = y; + + // Draw + ctx.moveTo(x_bl+radius, y_bl); + ctx.lineTo(x_br-radius, y_br); + ctx.quadraticCurveTo(x_br, y_br, x_br, y_br-radius); + ctx.lineTo(x_tr, y_tr+radius); + ctx.quadraticCurveTo(x_tr, y_tr, x_tr-radius, y_tr); + ctx.lineTo(x_tl+radius, y_tl); + ctx.quadraticCurveTo(x_tl, y_tl, x_tl, y_tl+radius); + ctx.lineTo(x_bl, y_bl-radius); + ctx.quadraticCurveTo(x_bl, y_bl, x_bl+radius, y_bl); + + }else if(width < 0){ + // Negative values in a horizontal bar chart + x_tl = x+width; x_tr = x; + y_tl= y; y_tr = y; + + x_bl = x+width; x_br = x; + y_bl = y+height; y_br = y+height; + + // Draw + ctx.moveTo(x_bl+radius, y_bl); + ctx.lineTo(x_br-radius, y_br); + ctx.quadraticCurveTo(x_br, y_br, x_br, y_br-radius); + ctx.lineTo(x_tr, y_tr+radius); + ctx.quadraticCurveTo(x_tr, y_tr, x_tr-radius, y_tr); + ctx.lineTo(x_tl+radius, y_tl); + ctx.quadraticCurveTo(x_tl, y_tl, x_tl, y_tl+radius); + ctx.lineTo(x_bl, y_bl-radius); + ctx.quadraticCurveTo(x_bl, y_bl, x_bl+radius, y_bl); + + }else{ + //Positive Value + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + } + } + + ctx.fill(); + if (borderWidth) { + ctx.stroke(); + } +}; diff --git a/public/admin/js/ace.js b/public/admin/js/ace.js new file mode 100644 index 0000000..0c5f5c6 --- /dev/null +++ b/public/admin/js/ace.js @@ -0,0 +1,7 @@ +(function($) { + 'use strict'; + var editor = ace.edit("aceExample"); + editor.setTheme("ace/theme/chaos"); + editor.getSession().setMode("ace/mode/javascript"); + document.getElementById('aceExample').style.fontSize = '1rem'; +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/alerts.js b/public/admin/js/alerts.js new file mode 100644 index 0000000..d951040 --- /dev/null +++ b/public/admin/js/alerts.js @@ -0,0 +1,102 @@ +(function($) { + showSwal = function(type) { + 'use strict'; + if (type === 'basic') { + swal({ + text: 'Any fool can use a computer', + button: { + text: "OK", + value: true, + visible: true, + className: "btn btn-primary" + } + }) + + } else if (type === 'title-and-text') { + swal({ + title: 'Read the alert!', + text: 'Click OK to close this alert', + button: { + text: "OK", + value: true, + visible: true, + className: "btn btn-primary" + } + }) + + } else if (type === 'success-message') { + swal({ + title: 'Congratulations!', + text: 'You entered the correct answer', + icon: 'success', + button: { + text: "Continue", + value: true, + visible: true, + className: "btn btn-primary" + } + }) + + } else if (type === 'auto-close') { + swal({ + title: 'Auto close alert!', + text: 'I will close in 2 seconds.', + timer: 2000, + button: false + }).then( + function() {}, + // handling the promise rejection + function(dismiss) { + if (dismiss === 'timer') { + console.log('I was closed by the timer') + } + } + ) + } else if (type === 'warning-message-and-cancel') { + swal({ + title: 'Are you sure?', + text: "You won't be able to revert this!", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3f51b5', + cancelButtonColor: '#ff4081', + confirmButtonText: 'Great ', + buttons: { + cancel: { + text: "Cancel", + value: null, + visible: true, + className: "btn btn-danger", + closeModal: true, + }, + confirm: { + text: "OK", + value: true, + visible: true, + className: "btn btn-primary", + closeModal: true + } + } + }) + + } else if (type === 'custom-html') { + swal({ + content: { + element: "input", + attributes: { + placeholder: "Type your password", + type: "password", + class: 'form-control' + }, + }, + button: { + text: "OK", + value: true, + visible: true, + className: "btn btn-primary" + } + }) + } + } + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/app.js b/public/admin/js/app.js new file mode 100644 index 0000000..589ea38 --- /dev/null +++ b/public/admin/js/app.js @@ -0,0 +1,52 @@ +$(function() { + + // Get the form. + var form = $('#ajax-contact'); + + // Get the messages div. + var formMessages = $('#form-messages'); + + // Set up an event listener for the contact form. + $(form).submit(function(e) { + // Stop the browser from submitting the form. + e.preventDefault(); + + // Serialize the form data. + var formData = $(form).serialize(); + + // Submit the form using AJAX. + $.ajax({ + type: 'POST', + url: $(form).attr('action'), + data: formData + }) + .done(function(response) { + // Make sure that the formMessages div has the 'success' class. + $(formMessages).removeClass('error'); + $(formMessages).addClass('success'); + + // Set the message text. + $(formMessages).text(response); + + // Clear the form. + $('#name').val(''); + $('#email').val(''); + $('#subject').val(''); + $('#message').val(''); + }) + .fail(function(data) { + // Make sure that the formMessages div has the 'error' class. + $(formMessages).removeClass('success'); + $(formMessages).addClass('error'); + + // Set the message text. + if (data.responseText !== '') { + $(formMessages).text(data.responseText); + } else { + $(formMessages).text('Oops! An error occured and your message could not be sent.'); + } + }); + + }); + +}); diff --git a/public/admin/js/avgrund.js b/public/admin/js/avgrund.js new file mode 100644 index 0000000..b7870d1 --- /dev/null +++ b/public/admin/js/avgrund.js @@ -0,0 +1,21 @@ +(function($) { + 'use strict'; + $(function() { + $('#show').avgrund({ + height: 500, + holderClass: 'custom', + showClose: true, + showCloseText: 'x', + onBlurContainer: '.container-scroller', + template: '

So implement your design and place content here! If you want to close modal, please hit "Esc", click somewhere on the screen or use special button.

' + + '
' + + '
' + + 'Great!' + + 'Cancel' + + '
' + }); + }) +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/bootstrap-table.js b/public/admin/js/bootstrap-table.js new file mode 100644 index 0000000..c02e62c --- /dev/null +++ b/public/admin/js/bootstrap-table.js @@ -0,0 +1,66 @@ +(function($) { + 'use strict'; + + function monthSorter(a, b) { + if (a.month < b.month) return -1; + if (a.month > b.month) return 1; + return 0; + } + + function buildTable($el, cells, rows) { + var i, j, row, + columns = [], + data = []; + + for (i = 0; i < cells; i++) { + columns.push({ + field: 'field' + i, + title: 'Cell' + i + }); + } + for (i = 0; i < rows; i++) { + row = {}; + for (j = 0; j < cells; j++) { + row['field' + j] = 'Row-' + i + '-' + j; + } + data.push(row); + } + $el.bootstrapTable('destroy').bootstrapTable({ + columns: columns, + data: data + }); + } + + $(function() { + buildTable($('#table'), 50, 50); + }); + + function actionFormatter(value, row, index) { + return [ + '', + '', + '', + '', + '', + '', + '' + ].join(''); + } + + window.actionEvents = { + 'click .like': function(e, value, row, index) { + alert('You click like icon, row: ' + JSON.stringify(row)); + console.log(value, row, index); + }, + 'click .edit': function(e, value, row, index) { + alert('You click edit icon, row: ' + JSON.stringify(row)); + console.log(value, row, index); + }, + 'click .remove': function(e, value, row, index) { + alert('You click remove icon, row: ' + JSON.stringify(row)); + console.log(value, row, index); + } + }; +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/bootstrap.min.js b/public/admin/js/bootstrap.min.js new file mode 100644 index 0000000..0355941 --- /dev/null +++ b/public/admin/js/bootstrap.min.js @@ -0,0 +1,1895 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if ("undefined" == typeof jQuery) + throw new Error("Bootstrap's JavaScript requires jQuery"); ++(function (a) { + "use strict"; + var b = a.fn.jquery.split(" ")[0].split("."); + if ( + (b[0] < 2 && b[1] < 9) || + (1 == b[0] && 9 == b[1] && b[2] < 1) || + b[0] > 3 + ) + throw new Error( + "Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4" + ); +})(jQuery), + +(function (a) { + "use strict"; + function b() { + var a = document.createElement("bootstrap"), + b = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd otransitionend", + transition: "transitionend", + }; + for (var c in b) if (void 0 !== a.style[c]) return { end: b[c] }; + return !1; + } + (a.fn.emulateTransitionEnd = function (b) { + var c = !1, + d = this; + a(this).one("bsTransitionEnd", function () { + c = !0; + }); + var e = function () { + c || a(d).trigger(a.support.transition.end); + }; + return setTimeout(e, b), this; + }), + a(function () { + (a.support.transition = b()), + a.support.transition && + (a.event.special.bsTransitionEnd = { + bindType: a.support.transition.end, + delegateType: a.support.transition.end, + handle: function (b) { + if (a(b.target).is(this)) + return b.handleObj.handler.apply( + this, + arguments + ); + }, + }); + }); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var c = a(this), + e = c.data("bs.alert"); + e || c.data("bs.alert", (e = new d(this))), + "string" == typeof b && e[b].call(c); + }); + } + var c = '[data-dismiss="alert"]', + d = function (b) { + a(b).on("click", c, this.close); + }; + (d.VERSION = "3.3.7"), + (d.TRANSITION_DURATION = 150), + (d.prototype.close = function (b) { + function c() { + g.detach().trigger("closed.bs.alert").remove(); + } + var e = a(this), + f = e.attr("data-target"); + f || + ((f = e.attr("href")), + (f = f && f.replace(/.*(?=#[^\s]*$)/, ""))); + var g = a("#" === f ? [] : f); + b && b.preventDefault(), + g.length || (g = e.closest(".alert")), + g.trigger((b = a.Event("close.bs.alert"))), + b.isDefaultPrevented() || + (g.removeClass("in"), + a.support.transition && g.hasClass("fade") + ? g + .one("bsTransitionEnd", c) + .emulateTransitionEnd(d.TRANSITION_DURATION) + : c()); + }); + var e = a.fn.alert; + (a.fn.alert = b), + (a.fn.alert.Constructor = d), + (a.fn.alert.noConflict = function () { + return (a.fn.alert = e), this; + }), + a(document).on("click.bs.alert.data-api", c, d.prototype.close); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), + e = d.data("bs.button"), + f = "object" == typeof b && b; + e || d.data("bs.button", (e = new c(this, f))), + "toggle" == b ? e.toggle() : b && e.setState(b); + }); + } + var c = function (b, d) { + (this.$element = a(b)), + (this.options = a.extend({}, c.DEFAULTS, d)), + (this.isLoading = !1); + }; + (c.VERSION = "3.3.7"), + (c.DEFAULTS = { loadingText: "loading..." }), + (c.prototype.setState = function (b) { + var c = "disabled", + d = this.$element, + e = d.is("input") ? "val" : "html", + f = d.data(); + (b += "Text"), + null == f.resetText && d.data("resetText", d[e]()), + setTimeout( + a.proxy(function () { + d[e](null == f[b] ? this.options[b] : f[b]), + "loadingText" == b + ? ((this.isLoading = !0), + d.addClass(c).attr(c, c).prop(c, !0)) + : this.isLoading && + ((this.isLoading = !1), + d + .removeClass(c) + .removeAttr(c) + .prop(c, !1)); + }, this), + 0 + ); + }), + (c.prototype.toggle = function () { + var a = !0, + b = this.$element.closest('[data-toggle="buttons"]'); + if (b.length) { + var c = this.$element.find("input"); + "radio" == c.prop("type") + ? (c.prop("checked") && (a = !1), + b.find(".active").removeClass("active"), + this.$element.addClass("active")) + : "checkbox" == c.prop("type") && + (c.prop("checked") !== + this.$element.hasClass("active") && (a = !1), + this.$element.toggleClass("active")), + c.prop("checked", this.$element.hasClass("active")), + a && c.trigger("change"); + } else + this.$element.attr( + "aria-pressed", + !this.$element.hasClass("active") + ), + this.$element.toggleClass("active"); + }); + var d = a.fn.button; + (a.fn.button = b), + (a.fn.button.Constructor = c), + (a.fn.button.noConflict = function () { + return (a.fn.button = d), this; + }), + a(document) + .on( + "click.bs.button.data-api", + '[data-toggle^="button"]', + function (c) { + var d = a(c.target).closest(".btn"); + b.call(d, "toggle"), + a(c.target).is( + 'input[type="radio"], input[type="checkbox"]' + ) || + (c.preventDefault(), + d.is("input,button") + ? d.trigger("focus") + : d + .find("input:visible,button:visible") + .first() + .trigger("focus")); + } + ) + .on( + "focus.bs.button.data-api blur.bs.button.data-api", + '[data-toggle^="button"]', + function (b) { + a(b.target) + .closest(".btn") + .toggleClass("focus", /^focus(in)?$/.test(b.type)); + } + ); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), + e = d.data("bs.carousel"), + f = a.extend( + {}, + c.DEFAULTS, + d.data(), + "object" == typeof b && b + ), + g = "string" == typeof b ? b : f.slide; + e || d.data("bs.carousel", (e = new c(this, f))), + "number" == typeof b + ? e.to(b) + : g + ? e[g]() + : f.interval && e.pause().cycle(); + }); + } + var c = function (b, c) { + (this.$element = a(b)), + (this.$indicators = this.$element.find(".carousel-indicators")), + (this.options = c), + (this.paused = null), + (this.sliding = null), + (this.interval = null), + (this.$active = null), + (this.$items = null), + this.options.keyboard && + this.$element.on( + "keydown.bs.carousel", + a.proxy(this.keydown, this) + ), + "hover" == this.options.pause && + !("ontouchstart" in document.documentElement) && + this.$element + .on("mouseenter.bs.carousel", a.proxy(this.pause, this)) + .on( + "mouseleave.bs.carousel", + a.proxy(this.cycle, this) + ); + }; + (c.VERSION = "3.3.7"), + (c.TRANSITION_DURATION = 600), + (c.DEFAULTS = { + interval: 5e3, + pause: "hover", + wrap: !0, + keyboard: !0, + }), + (c.prototype.keydown = function (a) { + if (!/input|textarea/i.test(a.target.tagName)) { + switch (a.which) { + case 37: + this.prev(); + break; + case 39: + this.next(); + break; + default: + return; + } + a.preventDefault(); + } + }), + (c.prototype.cycle = function (b) { + return ( + b || (this.paused = !1), + this.interval && clearInterval(this.interval), + this.options.interval && + !this.paused && + (this.interval = setInterval( + a.proxy(this.next, this), + this.options.interval + )), + this + ); + }), + (c.prototype.getItemIndex = function (a) { + return ( + (this.$items = a.parent().children(".item")), + this.$items.index(a || this.$active) + ); + }), + (c.prototype.getItemForDirection = function (a, b) { + var c = this.getItemIndex(b), + d = + ("prev" == a && 0 === c) || + ("next" == a && c == this.$items.length - 1); + if (d && !this.options.wrap) return b; + var e = "prev" == a ? -1 : 1, + f = (c + e) % this.$items.length; + return this.$items.eq(f); + }), + (c.prototype.to = function (a) { + var b = this, + c = this.getItemIndex( + (this.$active = this.$element.find(".item.active")) + ); + if (!(a > this.$items.length - 1 || a < 0)) + return this.sliding + ? this.$element.one("slid.bs.carousel", function () { + b.to(a); + }) + : c == a + ? this.pause().cycle() + : this.slide( + a > c ? "next" : "prev", + this.$items.eq(a) + ); + }), + (c.prototype.pause = function (b) { + return ( + b || (this.paused = !0), + this.$element.find(".next, .prev").length && + a.support.transition && + (this.$element.trigger(a.support.transition.end), + this.cycle(!0)), + (this.interval = clearInterval(this.interval)), + this + ); + }), + (c.prototype.next = function () { + if (!this.sliding) return this.slide("next"); + }), + (c.prototype.prev = function () { + if (!this.sliding) return this.slide("prev"); + }), + (c.prototype.slide = function (b, d) { + var e = this.$element.find(".item.active"), + f = d || this.getItemForDirection(b, e), + g = this.interval, + h = "next" == b ? "left" : "right", + i = this; + if (f.hasClass("active")) return (this.sliding = !1); + var j = f[0], + k = a.Event("slide.bs.carousel", { + relatedTarget: j, + direction: h, + }); + if ((this.$element.trigger(k), !k.isDefaultPrevented())) { + if ( + ((this.sliding = !0), + g && this.pause(), + this.$indicators.length) + ) { + this.$indicators.find(".active").removeClass("active"); + var l = a( + this.$indicators.children()[this.getItemIndex(f)] + ); + l && l.addClass("active"); + } + var m = a.Event("slid.bs.carousel", { + relatedTarget: j, + direction: h, + }); + return ( + a.support.transition && this.$element.hasClass("slide") + ? (f.addClass(b), + f[0].offsetWidth, + e.addClass(h), + f.addClass(h), + e + .one("bsTransitionEnd", function () { + f + .removeClass([b, h].join(" ")) + .addClass("active"), + e.removeClass( + ["active", h].join(" ") + ), + (i.sliding = !1), + setTimeout(function () { + i.$element.trigger(m); + }, 0); + }) + .emulateTransitionEnd(c.TRANSITION_DURATION)) + : (e.removeClass("active"), + f.addClass("active"), + (this.sliding = !1), + this.$element.trigger(m)), + g && this.cycle(), + this + ); + } + }); + var d = a.fn.carousel; + (a.fn.carousel = b), + (a.fn.carousel.Constructor = c), + (a.fn.carousel.noConflict = function () { + return (a.fn.carousel = d), this; + }); + var e = function (c) { + var d, + e = a(this), + f = a( + e.attr("data-target") || + ((d = e.attr("href")) && + d.replace(/.*(?=#[^\s]+$)/, "")) + ); + if (f.hasClass("carousel")) { + var g = a.extend({}, f.data(), e.data()), + h = e.attr("data-slide-to"); + h && (g.interval = !1), + b.call(f, g), + h && f.data("bs.carousel").to(h), + c.preventDefault(); + } + }; + a(document) + .on("click.bs.carousel.data-api", "[data-slide]", e) + .on("click.bs.carousel.data-api", "[data-slide-to]", e), + a(window).on("load", function () { + a('[data-ride="carousel"]').each(function () { + var c = a(this); + b.call(c, c.data()); + }); + }); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + var c, + d = + b.attr("data-target") || + ((c = b.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "")); + return a(d); + } + function c(b) { + return this.each(function () { + var c = a(this), + e = c.data("bs.collapse"), + f = a.extend( + {}, + d.DEFAULTS, + c.data(), + "object" == typeof b && b + ); + !e && f.toggle && /show|hide/.test(b) && (f.toggle = !1), + e || c.data("bs.collapse", (e = new d(this, f))), + "string" == typeof b && e[b](); + }); + } + var d = function (b, c) { + (this.$element = a(b)), + (this.options = a.extend({}, d.DEFAULTS, c)), + (this.$trigger = a( + '[data-toggle="collapse"][href="#' + + b.id + + '"],[data-toggle="collapse"][data-target="#' + + b.id + + '"]' + )), + (this.transitioning = null), + this.options.parent + ? (this.$parent = this.getParent()) + : this.addAriaAndCollapsedClass( + this.$element, + this.$trigger + ), + this.options.toggle && this.toggle(); + }; + (d.VERSION = "3.3.7"), + (d.TRANSITION_DURATION = 350), + (d.DEFAULTS = { toggle: !0 }), + (d.prototype.dimension = function () { + var a = this.$element.hasClass("width"); + return a ? "width" : "height"; + }), + (d.prototype.show = function () { + if (!this.transitioning && !this.$element.hasClass("in")) { + var b, + e = + this.$parent && + this.$parent + .children(".panel") + .children(".in, .collapsing"); + if ( + !( + e && + e.length && + ((b = e.data("bs.collapse")), b && b.transitioning) + ) + ) { + var f = a.Event("show.bs.collapse"); + if ( + (this.$element.trigger(f), !f.isDefaultPrevented()) + ) { + e && + e.length && + (c.call(e, "hide"), + b || e.data("bs.collapse", null)); + var g = this.dimension(); + this.$element + .removeClass("collapse") + .addClass("collapsing") + [g](0) + .attr("aria-expanded", !0), + this.$trigger + .removeClass("collapsed") + .attr("aria-expanded", !0), + (this.transitioning = 1); + var h = function () { + this.$element + .removeClass("collapsing") + .addClass("collapse in") + [g](""), + (this.transitioning = 0), + this.$element.trigger("shown.bs.collapse"); + }; + if (!a.support.transition) return h.call(this); + var i = a.camelCase(["scroll", g].join("-")); + this.$element + .one("bsTransitionEnd", a.proxy(h, this)) + .emulateTransitionEnd(d.TRANSITION_DURATION) + [g](this.$element[0][i]); + } + } + } + }), + (d.prototype.hide = function () { + if (!this.transitioning && this.$element.hasClass("in")) { + var b = a.Event("hide.bs.collapse"); + if ((this.$element.trigger(b), !b.isDefaultPrevented())) { + var c = this.dimension(); + this.$element[c](this.$element[c]())[0].offsetHeight, + this.$element + .addClass("collapsing") + .removeClass("collapse in") + .attr("aria-expanded", !1), + this.$trigger + .addClass("collapsed") + .attr("aria-expanded", !1), + (this.transitioning = 1); + var e = function () { + (this.transitioning = 0), + this.$element + .removeClass("collapsing") + .addClass("collapse") + .trigger("hidden.bs.collapse"); + }; + return a.support.transition + ? void this.$element[c](0) + .one("bsTransitionEnd", a.proxy(e, this)) + .emulateTransitionEnd(d.TRANSITION_DURATION) + : e.call(this); + } + } + }), + (d.prototype.toggle = function () { + this[this.$element.hasClass("in") ? "hide" : "show"](); + }), + (d.prototype.getParent = function () { + return a(this.options.parent) + .find( + '[data-toggle="collapse"][data-parent="' + + this.options.parent + + '"]' + ) + .each( + a.proxy(function (c, d) { + var e = a(d); + this.addAriaAndCollapsedClass(b(e), e); + }, this) + ) + .end(); + }), + (d.prototype.addAriaAndCollapsedClass = function (a, b) { + var c = a.hasClass("in"); + a.attr("aria-expanded", c), + b.toggleClass("collapsed", !c).attr("aria-expanded", c); + }); + var e = a.fn.collapse; + (a.fn.collapse = c), + (a.fn.collapse.Constructor = d), + (a.fn.collapse.noConflict = function () { + return (a.fn.collapse = e), this; + }), + a(document).on( + "click.bs.collapse.data-api", + '[data-toggle="collapse"]', + function (d) { + var e = a(this); + e.attr("data-target") || d.preventDefault(); + var f = b(e), + g = f.data("bs.collapse"), + h = g ? "toggle" : e.data(); + c.call(f, h); + } + ); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + var c = b.attr("data-target"); + c || + ((c = b.attr("href")), + (c = + c && + /#[A-Za-z]/.test(c) && + c.replace(/.*(?=#[^\s]*$)/, ""))); + var d = c && a(c); + return d && d.length ? d : b.parent(); + } + function c(c) { + (c && 3 === c.which) || + (a(e).remove(), + a(f).each(function () { + var d = a(this), + e = b(d), + f = { relatedTarget: this }; + e.hasClass("open") && + ((c && + "click" == c.type && + /input|textarea/i.test(c.target.tagName) && + a.contains(e[0], c.target)) || + (e.trigger((c = a.Event("hide.bs.dropdown", f))), + c.isDefaultPrevented() || + (d.attr("aria-expanded", "false"), + e + .removeClass("open") + .trigger( + a.Event("hidden.bs.dropdown", f) + )))); + })); + } + function d(b) { + return this.each(function () { + var c = a(this), + d = c.data("bs.dropdown"); + d || c.data("bs.dropdown", (d = new g(this))), + "string" == typeof b && d[b].call(c); + }); + } + var e = ".dropdown-backdrop", + f = '[data-toggle="dropdown"]', + g = function (b) { + a(b).on("click.bs.dropdown", this.toggle); + }; + (g.VERSION = "3.3.7"), + (g.prototype.toggle = function (d) { + var e = a(this); + if (!e.is(".disabled, :disabled")) { + var f = b(e), + g = f.hasClass("open"); + if ((c(), !g)) { + "ontouchstart" in document.documentElement && + !f.closest(".navbar-nav").length && + a(document.createElement("div")) + .addClass("dropdown-backdrop") + .insertAfter(a(this)) + .on("click", c); + var h = { relatedTarget: this }; + if ( + (f.trigger((d = a.Event("show.bs.dropdown", h))), + d.isDefaultPrevented()) + ) + return; + e.trigger("focus").attr("aria-expanded", "true"), + f + .toggleClass("open") + .trigger(a.Event("shown.bs.dropdown", h)); + } + return !1; + } + }), + (g.prototype.keydown = function (c) { + if ( + /(38|40|27|32)/.test(c.which) && + !/input|textarea/i.test(c.target.tagName) + ) { + var d = a(this); + if ( + (c.preventDefault(), + c.stopPropagation(), + !d.is(".disabled, :disabled")) + ) { + var e = b(d), + g = e.hasClass("open"); + if ((!g && 27 != c.which) || (g && 27 == c.which)) + return ( + 27 == c.which && e.find(f).trigger("focus"), + d.trigger("click") + ); + var h = " li:not(.disabled):visible a", + i = e.find(".dropdown-menu" + h); + if (i.length) { + var j = i.index(c.target); + 38 == c.which && j > 0 && j--, + 40 == c.which && j < i.length - 1 && j++, + ~j || (j = 0), + i.eq(j).trigger("focus"); + } + } + } + }); + var h = a.fn.dropdown; + (a.fn.dropdown = d), + (a.fn.dropdown.Constructor = g), + (a.fn.dropdown.noConflict = function () { + return (a.fn.dropdown = h), this; + }), + a(document) + .on("click.bs.dropdown.data-api", c) + .on( + "click.bs.dropdown.data-api", + ".dropdown form", + function (a) { + a.stopPropagation(); + } + ) + .on("click.bs.dropdown.data-api", f, g.prototype.toggle) + .on("keydown.bs.dropdown.data-api", f, g.prototype.keydown) + .on( + "keydown.bs.dropdown.data-api", + ".dropdown-menu", + g.prototype.keydown + ); + })(jQuery), + +(function (a) { + "use strict"; + function b(b, d) { + return this.each(function () { + var e = a(this), + f = e.data("bs.modal"), + g = a.extend( + {}, + c.DEFAULTS, + e.data(), + "object" == typeof b && b + ); + f || e.data("bs.modal", (f = new c(this, g))), + "string" == typeof b ? f[b](d) : g.show && f.show(d); + }); + } + var c = function (b, c) { + (this.options = c), + (this.$body = a(document.body)), + (this.$element = a(b)), + (this.$dialog = this.$element.find(".modal-dialog")), + (this.$backdrop = null), + (this.isShown = null), + (this.originalBodyPad = null), + (this.scrollbarWidth = 0), + (this.ignoreBackdropClick = !1), + this.options.remote && + this.$element.find(".modal-content").load( + this.options.remote, + a.proxy(function () { + this.$element.trigger("loaded.bs.modal"); + }, this) + ); + }; + (c.VERSION = "3.3.7"), + (c.TRANSITION_DURATION = 300), + (c.BACKDROP_TRANSITION_DURATION = 150), + (c.DEFAULTS = { backdrop: !0, keyboard: !0, show: !0 }), + (c.prototype.toggle = function (a) { + return this.isShown ? this.hide() : this.show(a); + }), + (c.prototype.show = function (b) { + var d = this, + e = a.Event("show.bs.modal", { relatedTarget: b }); + this.$element.trigger(e), + this.isShown || + e.isDefaultPrevented() || + ((this.isShown = !0), + this.checkScrollbar(), + this.setScrollbar(), + this.$body.addClass("modal-open"), + this.escape(), + this.resize(), + this.$element.on( + "click.dismiss.bs.modal", + '[data-dismiss="modal"]', + a.proxy(this.hide, this) + ), + this.$dialog.on( + "mousedown.dismiss.bs.modal", + function () { + d.$element.one( + "mouseup.dismiss.bs.modal", + function (b) { + a(b.target).is(d.$element) && + (d.ignoreBackdropClick = !0); + } + ); + } + ), + this.backdrop(function () { + var e = + a.support.transition && + d.$element.hasClass("fade"); + d.$element.parent().length || + d.$element.appendTo(d.$body), + d.$element.show().scrollTop(0), + d.adjustDialog(), + e && d.$element[0].offsetWidth, + d.$element.addClass("in"), + d.enforceFocus(); + var f = a.Event("shown.bs.modal", { + relatedTarget: b, + }); + e + ? d.$dialog + .one("bsTransitionEnd", function () { + d.$element + .trigger("focus") + .trigger(f); + }) + .emulateTransitionEnd( + c.TRANSITION_DURATION + ) + : d.$element.trigger("focus").trigger(f); + })); + }), + (c.prototype.hide = function (b) { + b && b.preventDefault(), + (b = a.Event("hide.bs.modal")), + this.$element.trigger(b), + this.isShown && + !b.isDefaultPrevented() && + ((this.isShown = !1), + this.escape(), + this.resize(), + a(document).off("focusin.bs.modal"), + this.$element + .removeClass("in") + .off("click.dismiss.bs.modal") + .off("mouseup.dismiss.bs.modal"), + this.$dialog.off("mousedown.dismiss.bs.modal"), + a.support.transition && this.$element.hasClass("fade") + ? this.$element + .one( + "bsTransitionEnd", + a.proxy(this.hideModal, this) + ) + .emulateTransitionEnd(c.TRANSITION_DURATION) + : this.hideModal()); + }), + (c.prototype.enforceFocus = function () { + a(document) + .off("focusin.bs.modal") + .on( + "focusin.bs.modal", + a.proxy(function (a) { + document === a.target || + this.$element[0] === a.target || + this.$element.has(a.target).length || + this.$element.trigger("focus"); + }, this) + ); + }), + (c.prototype.escape = function () { + this.isShown && this.options.keyboard + ? this.$element.on( + "keydown.dismiss.bs.modal", + a.proxy(function (a) { + 27 == a.which && this.hide(); + }, this) + ) + : this.isShown || + this.$element.off("keydown.dismiss.bs.modal"); + }), + (c.prototype.resize = function () { + this.isShown + ? a(window).on( + "resize.bs.modal", + a.proxy(this.handleUpdate, this) + ) + : a(window).off("resize.bs.modal"); + }), + (c.prototype.hideModal = function () { + var a = this; + this.$element.hide(), + this.backdrop(function () { + a.$body.removeClass("modal-open"), + a.resetAdjustments(), + a.resetScrollbar(), + a.$element.trigger("hidden.bs.modal"); + }); + }), + (c.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove(), + (this.$backdrop = null); + }), + (c.prototype.backdrop = function (b) { + var d = this, + e = this.$element.hasClass("fade") ? "fade" : ""; + if (this.isShown && this.options.backdrop) { + var f = a.support.transition && e; + if ( + ((this.$backdrop = a(document.createElement("div")) + .addClass("modal-backdrop " + e) + .appendTo(this.$body)), + this.$element.on( + "click.dismiss.bs.modal", + a.proxy(function (a) { + return this.ignoreBackdropClick + ? void (this.ignoreBackdropClick = !1) + : void ( + a.target === a.currentTarget && + ("static" == this.options.backdrop + ? this.$element[0].focus() + : this.hide()) + ); + }, this) + ), + f && this.$backdrop[0].offsetWidth, + this.$backdrop.addClass("in"), + !b) + ) + return; + f + ? this.$backdrop + .one("bsTransitionEnd", b) + .emulateTransitionEnd( + c.BACKDROP_TRANSITION_DURATION + ) + : b(); + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass("in"); + var g = function () { + d.removeBackdrop(), b && b(); + }; + a.support.transition && this.$element.hasClass("fade") + ? this.$backdrop + .one("bsTransitionEnd", g) + .emulateTransitionEnd( + c.BACKDROP_TRANSITION_DURATION + ) + : g(); + } else b && b(); + }), + (c.prototype.handleUpdate = function () { + this.adjustDialog(); + }), + (c.prototype.adjustDialog = function () { + var a = + this.$element[0].scrollHeight > + document.documentElement.clientHeight; + this.$element.css({ + paddingLeft: + !this.bodyIsOverflowing && a ? this.scrollbarWidth : "", + paddingRight: + this.bodyIsOverflowing && !a ? this.scrollbarWidth : "", + }); + }), + (c.prototype.resetAdjustments = function () { + this.$element.css({ paddingLeft: "", paddingRight: "" }); + }), + (c.prototype.checkScrollbar = function () { + var a = window.innerWidth; + if (!a) { + var b = document.documentElement.getBoundingClientRect(); + a = b.right - Math.abs(b.left); + } + (this.bodyIsOverflowing = document.body.clientWidth < a), + (this.scrollbarWidth = this.measureScrollbar()); + }), + (c.prototype.setScrollbar = function () { + var a = parseInt(this.$body.css("padding-right") || 0, 10); + (this.originalBodyPad = document.body.style.paddingRight || ""), + this.bodyIsOverflowing && + this.$body.css( + "padding-right", + a + this.scrollbarWidth + ); + }), + (c.prototype.resetScrollbar = function () { + this.$body.css("padding-right", this.originalBodyPad); + }), + (c.prototype.measureScrollbar = function () { + var a = document.createElement("div"); + (a.className = "modal-scrollbar-measure"), this.$body.append(a); + var b = a.offsetWidth - a.clientWidth; + return this.$body[0].removeChild(a), b; + }); + var d = a.fn.modal; + (a.fn.modal = b), + (a.fn.modal.Constructor = c), + (a.fn.modal.noConflict = function () { + return (a.fn.modal = d), this; + }), + a(document).on( + "click.bs.modal.data-api", + '[data-toggle="modal"]', + function (c) { + var d = a(this), + e = d.attr("href"), + f = a( + d.attr("data-target") || + (e && e.replace(/.*(?=#[^\s]+$)/, "")) + ), + g = f.data("bs.modal") + ? "toggle" + : a.extend( + { remote: !/#/.test(e) && e }, + f.data(), + d.data() + ); + d.is("a") && c.preventDefault(), + f.one("show.bs.modal", function (a) { + a.isDefaultPrevented() || + f.one("hidden.bs.modal", function () { + d.is(":visible") && d.trigger("focus"); + }); + }), + b.call(f, g, this); + } + ); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), + e = d.data("bs.tooltip"), + f = "object" == typeof b && b; + (!e && /destroy|hide/.test(b)) || + (e || d.data("bs.tooltip", (e = new c(this, f))), + "string" == typeof b && e[b]()); + }); + } + var c = function (a, b) { + (this.type = null), + (this.options = null), + (this.enabled = null), + (this.timeout = null), + (this.hoverState = null), + (this.$element = null), + (this.inState = null), + this.init("tooltip", a, b); + }; + (c.VERSION = "3.3.7"), + (c.TRANSITION_DURATION = 150), + (c.DEFAULTS = { + animation: !0, + placement: "top", + selector: !1, + template: + '', + trigger: "hover focus", + title: "", + delay: 0, + html: !1, + container: !1, + viewport: { selector: "body", padding: 0 }, + }), + (c.prototype.init = function (b, c, d) { + if ( + ((this.enabled = !0), + (this.type = b), + (this.$element = a(c)), + (this.options = this.getOptions(d)), + (this.$viewport = + this.options.viewport && + a( + a.isFunction(this.options.viewport) + ? this.options.viewport.call( + this, + this.$element + ) + : this.options.viewport.selector || + this.options.viewport + )), + (this.inState = { click: !1, hover: !1, focus: !1 }), + this.$element[0] instanceof document.constructor && + !this.options.selector) + ) + throw new Error( + "`selector` option must be specified when initializing " + + this.type + + " on the window.document object!" + ); + for ( + var e = this.options.trigger.split(" "), f = e.length; + f--; + + ) { + var g = e[f]; + if ("click" == g) + this.$element.on( + "click." + this.type, + this.options.selector, + a.proxy(this.toggle, this) + ); + else if ("manual" != g) { + var h = "hover" == g ? "mouseenter" : "focusin", + i = "hover" == g ? "mouseleave" : "focusout"; + this.$element.on( + h + "." + this.type, + this.options.selector, + a.proxy(this.enter, this) + ), + this.$element.on( + i + "." + this.type, + this.options.selector, + a.proxy(this.leave, this) + ); + } + } + this.options.selector + ? (this._options = a.extend({}, this.options, { + trigger: "manual", + selector: "", + })) + : this.fixTitle(); + }), + (c.prototype.getDefaults = function () { + return c.DEFAULTS; + }), + (c.prototype.getOptions = function (b) { + return ( + (b = a.extend( + {}, + this.getDefaults(), + this.$element.data(), + b + )), + b.delay && + "number" == typeof b.delay && + (b.delay = { show: b.delay, hide: b.delay }), + b + ); + }), + (c.prototype.getDelegateOptions = function () { + var b = {}, + c = this.getDefaults(); + return ( + this._options && + a.each(this._options, function (a, d) { + c[a] != d && (b[a] = d); + }), + b + ); + }), + (c.prototype.enter = function (b) { + var c = + b instanceof this.constructor + ? b + : a(b.currentTarget).data("bs." + this.type); + return ( + c || + ((c = new this.constructor( + b.currentTarget, + this.getDelegateOptions() + )), + a(b.currentTarget).data("bs." + this.type, c)), + b instanceof a.Event && + (c.inState["focusin" == b.type ? "focus" : "hover"] = + !0), + c.tip().hasClass("in") || "in" == c.hoverState + ? void (c.hoverState = "in") + : (clearTimeout(c.timeout), + (c.hoverState = "in"), + c.options.delay && c.options.delay.show + ? void (c.timeout = setTimeout(function () { + "in" == c.hoverState && c.show(); + }, c.options.delay.show)) + : c.show()) + ); + }), + (c.prototype.isInStateTrue = function () { + for (var a in this.inState) if (this.inState[a]) return !0; + return !1; + }), + (c.prototype.leave = function (b) { + var c = + b instanceof this.constructor + ? b + : a(b.currentTarget).data("bs." + this.type); + if ( + (c || + ((c = new this.constructor( + b.currentTarget, + this.getDelegateOptions() + )), + a(b.currentTarget).data("bs." + this.type, c)), + b instanceof a.Event && + (c.inState["focusout" == b.type ? "focus" : "hover"] = + !1), + !c.isInStateTrue()) + ) + return ( + clearTimeout(c.timeout), + (c.hoverState = "out"), + c.options.delay && c.options.delay.hide + ? void (c.timeout = setTimeout(function () { + "out" == c.hoverState && c.hide(); + }, c.options.delay.hide)) + : c.hide() + ); + }), + (c.prototype.show = function () { + var b = a.Event("show.bs." + this.type); + if (this.hasContent() && this.enabled) { + this.$element.trigger(b); + var d = a.contains( + this.$element[0].ownerDocument.documentElement, + this.$element[0] + ); + if (b.isDefaultPrevented() || !d) return; + var e = this, + f = this.tip(), + g = this.getUID(this.type); + this.setContent(), + f.attr("id", g), + this.$element.attr("aria-describedby", g), + this.options.animation && f.addClass("fade"); + var h = + "function" == typeof this.options.placement + ? this.options.placement.call( + this, + f[0], + this.$element[0] + ) + : this.options.placement, + i = /\s?auto?\s?/i, + j = i.test(h); + j && (h = h.replace(i, "") || "top"), + f + .detach() + .css({ top: 0, left: 0, display: "block" }) + .addClass(h) + .data("bs." + this.type, this), + this.options.container + ? f.appendTo(this.options.container) + : f.insertAfter(this.$element), + this.$element.trigger("inserted.bs." + this.type); + var k = this.getPosition(), + l = f[0].offsetWidth, + m = f[0].offsetHeight; + if (j) { + var n = h, + o = this.getPosition(this.$viewport); + (h = + "bottom" == h && k.bottom + m > o.bottom + ? "top" + : "top" == h && k.top - m < o.top + ? "bottom" + : "right" == h && k.right + l > o.width + ? "left" + : "left" == h && k.left - l < o.left + ? "right" + : h), + f.removeClass(n).addClass(h); + } + var p = this.getCalculatedOffset(h, k, l, m); + this.applyPlacement(p, h); + var q = function () { + var a = e.hoverState; + e.$element.trigger("shown.bs." + e.type), + (e.hoverState = null), + "out" == a && e.leave(e); + }; + a.support.transition && this.$tip.hasClass("fade") + ? f + .one("bsTransitionEnd", q) + .emulateTransitionEnd(c.TRANSITION_DURATION) + : q(); + } + }), + (c.prototype.applyPlacement = function (b, c) { + var d = this.tip(), + e = d[0].offsetWidth, + f = d[0].offsetHeight, + g = parseInt(d.css("margin-top"), 10), + h = parseInt(d.css("margin-left"), 10); + isNaN(g) && (g = 0), + isNaN(h) && (h = 0), + (b.top += g), + (b.left += h), + a.offset.setOffset( + d[0], + a.extend( + { + using: function (a) { + d.css({ + top: Math.round(a.top), + left: Math.round(a.left), + }); + }, + }, + b + ), + 0 + ), + d.addClass("in"); + var i = d[0].offsetWidth, + j = d[0].offsetHeight; + "top" == c && j != f && (b.top = b.top + f - j); + var k = this.getViewportAdjustedDelta(c, b, i, j); + k.left ? (b.left += k.left) : (b.top += k.top); + var l = /top|bottom/.test(c), + m = l ? 2 * k.left - e + i : 2 * k.top - f + j, + n = l ? "offsetWidth" : "offsetHeight"; + d.offset(b), this.replaceArrow(m, d[0][n], l); + }), + (c.prototype.replaceArrow = function (a, b, c) { + this.arrow() + .css(c ? "left" : "top", 50 * (1 - a / b) + "%") + .css(c ? "top" : "left", ""); + }), + (c.prototype.setContent = function () { + var a = this.tip(), + b = this.getTitle(); + a + .find(".tooltip-inner") + [this.options.html ? "html" : "text"](b), + a.removeClass("fade in top bottom left right"); + }), + (c.prototype.hide = function (b) { + function d() { + "in" != e.hoverState && f.detach(), + e.$element && + e.$element + .removeAttr("aria-describedby") + .trigger("hidden.bs." + e.type), + b && b(); + } + var e = this, + f = a(this.$tip), + g = a.Event("hide.bs." + this.type); + if ((this.$element.trigger(g), !g.isDefaultPrevented())) + return ( + f.removeClass("in"), + a.support.transition && f.hasClass("fade") + ? f + .one("bsTransitionEnd", d) + .emulateTransitionEnd(c.TRANSITION_DURATION) + : d(), + (this.hoverState = null), + this + ); + }), + (c.prototype.fixTitle = function () { + var a = this.$element; + (a.attr("title") || + "string" != typeof a.attr("data-original-title")) && + a + .attr("data-original-title", a.attr("title") || "") + .attr("title", ""); + }), + (c.prototype.hasContent = function () { + return this.getTitle(); + }), + (c.prototype.getPosition = function (b) { + b = b || this.$element; + var c = b[0], + d = "BODY" == c.tagName, + e = c.getBoundingClientRect(); + null == e.width && + (e = a.extend({}, e, { + width: e.right - e.left, + height: e.bottom - e.top, + })); + var f = window.SVGElement && c instanceof window.SVGElement, + g = d ? { top: 0, left: 0 } : f ? null : b.offset(), + h = { + scroll: d + ? document.documentElement.scrollTop || + document.body.scrollTop + : b.scrollTop(), + }, + i = d + ? { + width: a(window).width(), + height: a(window).height(), + } + : null; + return a.extend({}, e, h, i, g); + }), + (c.prototype.getCalculatedOffset = function (a, b, c, d) { + return "bottom" == a + ? { + top: b.top + b.height, + left: b.left + b.width / 2 - c / 2, + } + : "top" == a + ? { top: b.top - d, left: b.left + b.width / 2 - c / 2 } + : "left" == a + ? { top: b.top + b.height / 2 - d / 2, left: b.left - c } + : { + top: b.top + b.height / 2 - d / 2, + left: b.left + b.width, + }; + }), + (c.prototype.getViewportAdjustedDelta = function (a, b, c, d) { + var e = { top: 0, left: 0 }; + if (!this.$viewport) return e; + var f = + (this.options.viewport && + this.options.viewport.padding) || + 0, + g = this.getPosition(this.$viewport); + if (/right|left/.test(a)) { + var h = b.top - f - g.scroll, + i = b.top + f - g.scroll + d; + h < g.top + ? (e.top = g.top - h) + : i > g.top + g.height && + (e.top = g.top + g.height - i); + } else { + var j = b.left - f, + k = b.left + f + c; + j < g.left + ? (e.left = g.left - j) + : k > g.right && (e.left = g.left + g.width - k); + } + return e; + }), + (c.prototype.getTitle = function () { + var a, + b = this.$element, + c = this.options; + return (a = + b.attr("data-original-title") || + ("function" == typeof c.title + ? c.title.call(b[0]) + : c.title)); + }), + (c.prototype.getUID = function (a) { + do a += ~~(1e6 * Math.random()); + while (document.getElementById(a)); + return a; + }), + (c.prototype.tip = function () { + if ( + !this.$tip && + ((this.$tip = a(this.options.template)), + 1 != this.$tip.length) + ) + throw new Error( + this.type + + " `template` option must consist of exactly 1 top-level element!" + ); + return this.$tip; + }), + (c.prototype.arrow = function () { + return (this.$arrow = + this.$arrow || this.tip().find(".tooltip-arrow")); + }), + (c.prototype.enable = function () { + this.enabled = !0; + }), + (c.prototype.disable = function () { + this.enabled = !1; + }), + (c.prototype.toggleEnabled = function () { + this.enabled = !this.enabled; + }), + (c.prototype.toggle = function (b) { + var c = this; + b && + ((c = a(b.currentTarget).data("bs." + this.type)), + c || + ((c = new this.constructor( + b.currentTarget, + this.getDelegateOptions() + )), + a(b.currentTarget).data("bs." + this.type, c))), + b + ? ((c.inState.click = !c.inState.click), + c.isInStateTrue() ? c.enter(c) : c.leave(c)) + : c.tip().hasClass("in") + ? c.leave(c) + : c.enter(c); + }), + (c.prototype.destroy = function () { + var a = this; + clearTimeout(this.timeout), + this.hide(function () { + a.$element.off("." + a.type).removeData("bs." + a.type), + a.$tip && a.$tip.detach(), + (a.$tip = null), + (a.$arrow = null), + (a.$viewport = null), + (a.$element = null); + }); + }); + var d = a.fn.tooltip; + (a.fn.tooltip = b), + (a.fn.tooltip.Constructor = c), + (a.fn.tooltip.noConflict = function () { + return (a.fn.tooltip = d), this; + }); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), + e = d.data("bs.popover"), + f = "object" == typeof b && b; + (!e && /destroy|hide/.test(b)) || + (e || d.data("bs.popover", (e = new c(this, f))), + "string" == typeof b && e[b]()); + }); + } + var c = function (a, b) { + this.init("popover", a, b); + }; + if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js"); + (c.VERSION = "3.3.7"), + (c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, { + placement: "right", + trigger: "click", + content: "", + template: + '', + })), + (c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype)), + (c.prototype.constructor = c), + (c.prototype.getDefaults = function () { + return c.DEFAULTS; + }), + (c.prototype.setContent = function () { + var a = this.tip(), + b = this.getTitle(), + c = this.getContent(); + a + .find(".popover-title") + [this.options.html ? "html" : "text"](b), + a + .find(".popover-content") + .children() + .detach() + .end() + [ + this.options.html + ? "string" == typeof c + ? "html" + : "append" + : "text" + ](c), + a.removeClass("fade top bottom left right in"), + a.find(".popover-title").html() || + a.find(".popover-title").hide(); + }), + (c.prototype.hasContent = function () { + return this.getTitle() || this.getContent(); + }), + (c.prototype.getContent = function () { + var a = this.$element, + b = this.options; + return ( + a.attr("data-content") || + ("function" == typeof b.content + ? b.content.call(a[0]) + : b.content) + ); + }), + (c.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find(".arrow")); + }); + var d = a.fn.popover; + (a.fn.popover = b), + (a.fn.popover.Constructor = c), + (a.fn.popover.noConflict = function () { + return (a.fn.popover = d), this; + }); + })(jQuery), + +(function (a) { + "use strict"; + function b(c, d) { + (this.$body = a(document.body)), + (this.$scrollElement = a(a(c).is(document.body) ? window : c)), + (this.options = a.extend({}, b.DEFAULTS, d)), + (this.selector = (this.options.target || "") + " .nav li > a"), + (this.offsets = []), + (this.targets = []), + (this.activeTarget = null), + (this.scrollHeight = 0), + this.$scrollElement.on( + "scroll.bs.scrollspy", + a.proxy(this.process, this) + ), + this.refresh(), + this.process(); + } + function c(c) { + return this.each(function () { + var d = a(this), + e = d.data("bs.scrollspy"), + f = "object" == typeof c && c; + e || d.data("bs.scrollspy", (e = new b(this, f))), + "string" == typeof c && e[c](); + }); + } + (b.VERSION = "3.3.7"), + (b.DEFAULTS = { offset: 10 }), + (b.prototype.getScrollHeight = function () { + return ( + this.$scrollElement[0].scrollHeight || + Math.max( + this.$body[0].scrollHeight, + document.documentElement.scrollHeight + ) + ); + }), + (b.prototype.refresh = function () { + var b = this, + c = "offset", + d = 0; + (this.offsets = []), + (this.targets = []), + (this.scrollHeight = this.getScrollHeight()), + a.isWindow(this.$scrollElement[0]) || + ((c = "position"), + (d = this.$scrollElement.scrollTop())), + this.$body + .find(this.selector) + .map(function () { + var b = a(this), + e = b.data("target") || b.attr("href"), + f = /^#./.test(e) && a(e); + return ( + (f && + f.length && + f.is(":visible") && [ + [f[c]().top + d, e], + ]) || + null + ); + }) + .sort(function (a, b) { + return a[0] - b[0]; + }) + .each(function () { + b.offsets.push(this[0]), b.targets.push(this[1]); + }); + }), + (b.prototype.process = function () { + var a, + b = this.$scrollElement.scrollTop() + this.options.offset, + c = this.getScrollHeight(), + d = this.options.offset + c - this.$scrollElement.height(), + e = this.offsets, + f = this.targets, + g = this.activeTarget; + if ((this.scrollHeight != c && this.refresh(), b >= d)) + return g != (a = f[f.length - 1]) && this.activate(a); + if (g && b < e[0]) + return (this.activeTarget = null), this.clear(); + for (a = e.length; a--; ) + g != f[a] && + b >= e[a] && + (void 0 === e[a + 1] || b < e[a + 1]) && + this.activate(f[a]); + }), + (b.prototype.activate = function (b) { + (this.activeTarget = b), this.clear(); + var c = + this.selector + + '[data-target="' + + b + + '"],' + + this.selector + + '[href="' + + b + + '"]', + d = a(c).parents("li").addClass("active"); + d.parent(".dropdown-menu").length && + (d = d.closest("li.dropdown").addClass("active")), + d.trigger("activate.bs.scrollspy"); + }), + (b.prototype.clear = function () { + a(this.selector) + .parentsUntil(this.options.target, ".active") + .removeClass("active"); + }); + var d = a.fn.scrollspy; + (a.fn.scrollspy = c), + (a.fn.scrollspy.Constructor = b), + (a.fn.scrollspy.noConflict = function () { + return (a.fn.scrollspy = d), this; + }), + a(window).on("load.bs.scrollspy.data-api", function () { + a('[data-spy="scroll"]').each(function () { + var b = a(this); + c.call(b, b.data()); + }); + }); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), + e = d.data("bs.tab"); + e || d.data("bs.tab", (e = new c(this))), + "string" == typeof b && e[b](); + }); + } + var c = function (b) { + this.element = a(b); + }; + (c.VERSION = "3.3.7"), + (c.TRANSITION_DURATION = 150), + (c.prototype.show = function () { + var b = this.element, + c = b.closest("ul:not(.dropdown-menu)"), + d = b.data("target"); + if ( + (d || + ((d = b.attr("href")), + (d = d && d.replace(/.*(?=#[^\s]*$)/, ""))), + !b.parent("li").hasClass("active")) + ) { + var e = c.find(".active:last a"), + f = a.Event("hide.bs.tab", { relatedTarget: b[0] }), + g = a.Event("show.bs.tab", { relatedTarget: e[0] }); + if ( + (e.trigger(f), + b.trigger(g), + !g.isDefaultPrevented() && !f.isDefaultPrevented()) + ) { + var h = a(d); + this.activate(b.closest("li"), c), + this.activate(h, h.parent(), function () { + e.trigger({ + type: "hidden.bs.tab", + relatedTarget: b[0], + }), + b.trigger({ + type: "shown.bs.tab", + relatedTarget: e[0], + }); + }); + } + } + }), + (c.prototype.activate = function (b, d, e) { + function f() { + g + .removeClass("active") + .find("> .dropdown-menu > .active") + .removeClass("active") + .end() + .find('[data-toggle="tab"]') + .attr("aria-expanded", !1), + b + .addClass("active") + .find('[data-toggle="tab"]') + .attr("aria-expanded", !0), + h + ? (b[0].offsetWidth, b.addClass("in")) + : b.removeClass("fade"), + b.parent(".dropdown-menu").length && + b + .closest("li.dropdown") + .addClass("active") + .end() + .find('[data-toggle="tab"]') + .attr("aria-expanded", !0), + e && e(); + } + var g = d.find("> .active"), + h = + e && + a.support.transition && + ((g.length && g.hasClass("fade")) || + !!d.find("> .fade").length); + g.length && h + ? g + .one("bsTransitionEnd", f) + .emulateTransitionEnd(c.TRANSITION_DURATION) + : f(), + g.removeClass("in"); + }); + var d = a.fn.tab; + (a.fn.tab = b), + (a.fn.tab.Constructor = c), + (a.fn.tab.noConflict = function () { + return (a.fn.tab = d), this; + }); + var e = function (c) { + c.preventDefault(), b.call(a(this), "show"); + }; + a(document) + .on("click.bs.tab.data-api", '[data-toggle="tab"]', e) + .on("click.bs.tab.data-api", '[data-toggle="pill"]', e); + })(jQuery), + +(function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), + e = d.data("bs.affix"), + f = "object" == typeof b && b; + e || d.data("bs.affix", (e = new c(this, f))), + "string" == typeof b && e[b](); + }); + } + var c = function (b, d) { + (this.options = a.extend({}, c.DEFAULTS, d)), + (this.$target = a(this.options.target) + .on( + "scroll.bs.affix.data-api", + a.proxy(this.checkPosition, this) + ) + .on( + "click.bs.affix.data-api", + a.proxy(this.checkPositionWithEventLoop, this) + )), + (this.$element = a(b)), + (this.affixed = null), + (this.unpin = null), + (this.pinnedOffset = null), + this.checkPosition(); + }; + (c.VERSION = "3.3.7"), + (c.RESET = "affix affix-top affix-bottom"), + (c.DEFAULTS = { offset: 0, target: window }), + (c.prototype.getState = function (a, b, c, d) { + var e = this.$target.scrollTop(), + f = this.$element.offset(), + g = this.$target.height(); + if (null != c && "top" == this.affixed) return e < c && "top"; + if ("bottom" == this.affixed) + return null != c + ? !(e + this.unpin <= f.top) && "bottom" + : !(e + g <= a - d) && "bottom"; + var h = null == this.affixed, + i = h ? e : f.top, + j = h ? g : b; + return null != c && e <= c + ? "top" + : null != d && i + j >= a - d && "bottom"; + }), + (c.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset; + this.$element.removeClass(c.RESET).addClass("affix"); + var a = this.$target.scrollTop(), + b = this.$element.offset(); + return (this.pinnedOffset = b.top - a); + }), + (c.prototype.checkPositionWithEventLoop = function () { + setTimeout(a.proxy(this.checkPosition, this), 1); + }), + (c.prototype.checkPosition = function () { + if (this.$element.is(":visible")) { + var b = this.$element.height(), + d = this.options.offset, + e = d.top, + f = d.bottom, + g = Math.max( + a(document).height(), + a(document.body).height() + ); + "object" != typeof d && (f = e = d), + "function" == typeof e && (e = d.top(this.$element)), + "function" == typeof f && (f = d.bottom(this.$element)); + var h = this.getState(g, b, e, f); + if (this.affixed != h) { + null != this.unpin && this.$element.css("top", ""); + var i = "affix" + (h ? "-" + h : ""), + j = a.Event(i + ".bs.affix"); + if ((this.$element.trigger(j), j.isDefaultPrevented())) + return; + (this.affixed = h), + (this.unpin = + "bottom" == h ? this.getPinnedOffset() : null), + this.$element + .removeClass(c.RESET) + .addClass(i) + .trigger( + i.replace("affix", "affixed") + ".bs.affix" + ); + } + "bottom" == h && this.$element.offset({ top: g - b - f }); + } + }); + var d = a.fn.affix; + (a.fn.affix = b), + (a.fn.affix.Constructor = c), + (a.fn.affix.noConflict = function () { + return (a.fn.affix = d), this; + }), + a(window).on("load", function () { + a('[data-spy="affix"]').each(function () { + var c = a(this), + d = c.data(); + (d.offset = d.offset || {}), + null != d.offsetBottom && + (d.offset.bottom = d.offsetBottom), + null != d.offsetTop && (d.offset.top = d.offsetTop), + b.call(c, d); + }); + }); + })(jQuery); diff --git a/public/admin/js/bt-maxLength.js b/public/admin/js/bt-maxLength.js new file mode 100644 index 0000000..91bfd56 --- /dev/null +++ b/public/admin/js/bt-maxLength.js @@ -0,0 +1,31 @@ +(function($) { + 'use strict'; + $('#defaultconfig').maxlength({ + warningClass: "badge mt-1 badge-success", + limitReachedClass: "badge mt-1 badge-danger" + }); + + $('#defaultconfig-2').maxlength({ + alwaysShow: true, + threshold: 20, + warningClass: "badge mt-1 badge-success", + limitReachedClass: "badge mt-1 badge-danger" + }); + + $('#defaultconfig-3').maxlength({ + alwaysShow: true, + threshold: 10, + warningClass: "badge mt-1 badge-success", + limitReachedClass: "badge mt-1 badge-danger", + separator: ' of ', + preText: 'You have ', + postText: ' chars remaining.', + validate: true + }); + + $('#maxlength-textarea').maxlength({ + alwaysShow: true, + warningClass: "badge mt-1 badge-success", + limitReachedClass: "badge mt-1 badge-danger" + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/c3.js b/public/admin/js/c3.js new file mode 100644 index 0000000..a8e1721 --- /dev/null +++ b/public/admin/js/c3.js @@ -0,0 +1,218 @@ +(function($) { + 'use strict'; + var c3LineChart = c3.generate({ + bindto: '#c3-line-chart', + data: { + columns: [ + ['data1', 30, 200, 100, 400, 150, 250], + ['data2', 50, 20, 10, 40, 15, 25] + ] + }, + color: { + pattern: ['rgba(88,216,163,1)', 'rgba(237,28,36,0.6)', 'rgba(4,189,254,0.6)'] + }, + padding: { + top: 0, + right: 0, + bottom: 30, + left: 0, + } + }); + + setTimeout(function() { + c3LineChart.load({ + columns: [ + ['data1', 230, 190, 300, 500, 300, 400] + ] + }); + }, 1000); + + setTimeout(function() { + c3LineChart.load({ + columns: [ + ['data3', 130, 150, 200, 300, 200, 100] + ] + }); + }, 1500); + + setTimeout(function() { + c3LineChart.unload({ + ids: 'data1' + }); + }, 2000); + + var c3SplineChart = c3.generate({ + bindto: '#c3-spline-chart', + data: { + columns: [ + ['data1', 30, 200, 100, 400, 150, 250], + ['data2', 130, 100, 140, 200, 150, 50] + ], + type: 'spline' + }, + color: { + pattern: ['rgba(88,216,163,1)', 'rgba(237,28,36,0.6)', 'rgba(4,189,254,0.6)'] + }, + padding: { + top: 0, + right: 0, + bottom: 30, + left: 0, + } + }); + var c3BarChart = c3.generate({ + bindto: '#c3-bar-chart', + data: { + columns: [ + ['data1', 30, 200, 100, 400, 150, 250], + ['data2', 130, 100, 140, 200, 150, 50] + ], + type: 'bar' + }, + color: { + pattern: ['rgba(88,216,163,1)', 'rgba(4,189,254,0.6)', 'rgba(237,28,36,0.6)'] + }, + padding: { + top: 0, + right: 0, + bottom: 30, + left: 0, + }, + bar: { + width: { + ratio: 0.7 // this makes bar width 50% of length between ticks + } + } + }); + + setTimeout(function() { + c3BarChart.load({ + columns: [ + ['data3', 130, -150, 200, 300, -200, 100] + ] + }); + }, 1000); + + var c3StepChart = c3.generate({ + bindto: '#c3-step-chart', + data: { + columns: [ + ['data1', 300, 350, 300, 0, 0, 100], + ['data2', 130, 100, 140, 200, 150, 50] + ], + types: { + data1: 'step', + data2: 'area-step' + } + }, + color: { + pattern: ['rgba(88,216,163,1)', 'rgba(4,189,254,0.6)', 'rgba(237,28,36,0.6)'] + }, + padding: { + top: 0, + right: 0, + bottom: 30, + left: 0, + } + }); + var c3PieChart = c3.generate({ + bindto: '#c3-pie-chart', + data: { + // iris data from R + columns: [ + ['data1', 30], + ['data2', 120], + ], + type: 'pie', + onclick: function(d, i) { + console.log("onclick", d, i); + }, + onmouseover: function(d, i) { + console.log("onmouseover", d, i); + }, + onmouseout: function(d, i) { + console.log("onmouseout", d, i); + } + }, + color: { + pattern: ['#6153F9', '#8E97FC', '#A7B3FD'] + }, + padding: { + top: 0, + right: 0, + bottom: 30, + left: 0, + } + }); + + setTimeout(function() { + c3PieChart.load({ + columns: [ + ["Income", 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2], + ["Outcome", 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3], + ["Revenue", 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 1.9, 2.0, 2.3, 1.8], + ] + }); + }, 1500); + + setTimeout(function() { + c3PieChart.unload({ + ids: 'data1' + }); + c3PieChart.unload({ + ids: 'data2' + }); + }, 2500); + var c3DonutChart = c3.generate({ + bindto: '#c3-donut-chart', + data: { + columns: [ + ['data1', 30], + ['data2', 120], + ], + type: 'donut', + onclick: function(d, i) { + console.log("onclick", d, i); + }, + onmouseover: function(d, i) { + console.log("onmouseover", d, i); + }, + onmouseout: function(d, i) { + console.log("onmouseout", d, i); + } + }, + color: { + pattern: ['rgba(88,216,163,1)', 'rgba(4,189,254,0.6)', 'rgba(237,28,36,0.6)'] + }, + padding: { + top: 0, + right: 0, + bottom: 30, + left: 0, + }, + donut: { + title: "Iris Petal Width" + } + }); + + setTimeout(function() { + c3DonutChart.load({ + columns: [ + ["setosa", 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2], + ["versicolor", 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3], + ["virginica", 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 1.9, 2.0, 2.3, 1.8], + ] + }); + }, 1500); + + setTimeout(function() { + c3DonutChart.unload({ + ids: 'data1' + }); + c3DonutChart.unload({ + ids: 'data2' + }); + }, 2500); + + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/calendar.js b/public/admin/js/calendar.js new file mode 100644 index 0000000..68a3ea0 --- /dev/null +++ b/public/admin/js/calendar.js @@ -0,0 +1,73 @@ +(function($) { + 'use strict'; + $(function() { + if ($('#calendar').length) { + $('#calendar').fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,basicWeek,basicDay' + }, + defaultDate: '2017-07-12', + navLinks: true, // can click day/week names to navigate views + editable: true, + eventLimit: true, // allow "more" link when too many events + events: [{ + title: 'All Day Event', + start: '2017-07-08' + }, + { + title: 'Long Event', + start: '2017-07-01', + end: '2017-07-07' + }, + { + id: 999, + title: 'Repeating Event', + start: '2017-07-09T16:00:00' + }, + { + id: 999, + title: 'Repeating Event', + start: '2017-07-16T16:00:00' + }, + { + title: 'Conference', + start: '2017-07-11', + end: '2017-07-13' + }, + { + title: 'Meeting', + start: '2017-07-12T10:30:00', + end: '2017-07-12T12:30:00' + }, + { + title: 'Lunch', + start: '2017-07-12T12:00:00' + }, + { + title: 'Meeting', + start: '2017-07-12T14:30:00' + }, + { + title: 'Happy Hour', + start: '2017-07-12T17:30:00' + }, + { + title: 'Dinner', + start: '2017-07-12T20:00:00' + }, + { + title: 'Birthday Party', + start: '2017-07-13T07:00:00' + }, + { + title: 'Click for Google', + url: 'http://google.com/', + start: '2017-07-28' + } + ] + }) + } + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/chart.js b/public/admin/js/chart.js new file mode 100644 index 0000000..298e78a --- /dev/null +++ b/public/admin/js/chart.js @@ -0,0 +1,352 @@ +$(function() { + /* ChartJS + * ------- + * Data and config for chartjs + */ + 'use strict'; + var data = { + labels: ["2013", "2014", "2014", "2015", "2016", "2017"], + datasets: [{ + label: '# of Votes', + data: [10, 19, 3, 5, 2, 3], + backgroundColor: [ + 'rgba(255, 99, 132, 0.2)', + 'rgba(54, 162, 235, 0.2)', + 'rgba(255, 206, 86, 0.2)', + 'rgba(75, 192, 192, 0.2)', + 'rgba(153, 102, 255, 0.2)', + 'rgba(255, 159, 64, 0.2)' + ], + borderColor: [ + 'rgba(255,99,132,1)', + 'rgba(54, 162, 235, 1)', + 'rgba(255, 206, 86, 1)', + 'rgba(75, 192, 192, 1)', + 'rgba(153, 102, 255, 1)', + 'rgba(255, 159, 64, 1)' + ], + borderWidth: 1, + fill: false + }] + }; + var multiLineData = { + labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], + datasets: [{ + label: 'Dataset 1', + data: [12, 19, 3, 5, 2, 3], + borderColor: [ + '#587ce4' + ], + borderWidth: 2, + fill: false + }, + { + label: 'Dataset 2', + data: [5, 23, 7, 12, 42, 23], + borderColor: [ + '#ede190' + ], + borderWidth: 2, + fill: false + }, + { + label: 'Dataset 3', + data: [15, 10, 21, 32, 12, 33], + borderColor: [ + '#f44252' + ], + borderWidth: 2, + fill: false + } + ] + }; + var options = { + scales: { + yAxes: [{ + ticks: { + beginAtZero: true + } + }] + }, + legend: { + display: false + }, + elements: { + point: { + radius: 0 + } + } + + }; + var doughnutPieData = { + datasets: [{ + data: [30, 40, 30], + backgroundColor: [ + 'rgba(255, 99, 132, 0.5)', + 'rgba(54, 162, 235, 0.5)', + 'rgba(255, 206, 86, 0.5)', + 'rgba(75, 192, 192, 0.5)', + 'rgba(153, 102, 255, 0.5)', + 'rgba(255, 159, 64, 0.5)' + ], + borderColor: [ + 'rgba(255,99,132,1)', + 'rgba(54, 162, 235, 1)', + 'rgba(255, 206, 86, 1)', + 'rgba(75, 192, 192, 1)', + 'rgba(153, 102, 255, 1)', + 'rgba(255, 159, 64, 1)' + ], + }], + + // These labels appear in the legend and in the tooltips when hovering different arcs + labels: [ + 'Pink', + 'Blue', + 'Yellow', + ] + }; + var doughnutPieOptions = { + responsive: true, + animation: { + animateScale: true, + animateRotate: true + } + }; + var areaData = { + labels: ["2013", "2014", "2015", "2016", "2017"], + datasets: [{ + label: '# of Votes', + data: [12, 19, 3, 5, 2, 3], + backgroundColor: [ + 'rgba(255, 99, 132, 0.2)', + 'rgba(54, 162, 235, 0.2)', + 'rgba(255, 206, 86, 0.2)', + 'rgba(75, 192, 192, 0.2)', + 'rgba(153, 102, 255, 0.2)', + 'rgba(255, 159, 64, 0.2)' + ], + borderColor: [ + 'rgba(255,99,132,1)', + 'rgba(54, 162, 235, 1)', + 'rgba(255, 206, 86, 1)', + 'rgba(75, 192, 192, 1)', + 'rgba(153, 102, 255, 1)', + 'rgba(255, 159, 64, 1)' + ], + borderWidth: 1, + fill: true, // 3: no fill + }] + }; + + var areaOptions = { + plugins: { + filler: { + propagate: true + } + } + } + + var multiAreaData = { + labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + datasets: [{ + label: 'Facebook', + data: [8, 11, 13, 15, 12, 13, 16, 15, 13, 19, 11, 14], + borderColor: ['rgba(255, 99, 132, 0.5)'], + backgroundColor: ['rgba(255, 99, 132, 0.5)'], + borderWidth: 1, + fill: true + }, + { + label: 'Twitter', + data: [7, 17, 12, 16, 14, 18, 16, 12, 15, 11, 13, 9], + borderColor: ['rgba(54, 162, 235, 0.5)'], + backgroundColor: ['rgba(54, 162, 235, 0.5)'], + borderWidth: 1, + fill: true + }, + { + label: 'Linkedin', + data: [6, 14, 16, 20, 12, 18, 15, 12, 17, 19, 15, 11], + borderColor: ['rgba(255, 206, 86, 0.5)'], + backgroundColor: ['rgba(255, 206, 86, 0.5)'], + borderWidth: 1, + fill: true + } + ] + }; + + var multiAreaOptions = { + plugins: { + filler: { + propagate: true + } + }, + elements: { + point: { + radius: 0 + } + }, + scales: { + xAxes: [{ + gridLines: { + display: false + } + }], + yAxes: [{ + gridLines: { + display: false + } + }] + } + } + + var scatterChartData = { + datasets: [{ + label: 'First Dataset', + data: [{ + x: -10, + y: 0 + }, + { + x: 0, + y: 3 + }, + { + x: -25, + y: 5 + }, + { + x: 40, + y: 5 + } + ], + backgroundColor: [ + 'rgba(255, 99, 132, 0.2)' + ], + borderColor: [ + 'rgba(255,99,132,1)' + ], + borderWidth: 1 + }, + { + label: 'Second Dataset', + data: [{ + x: 10, + y: 5 + }, + { + x: 20, + y: -30 + }, + { + x: -25, + y: 15 + }, + { + x: -10, + y: 5 + } + ], + backgroundColor: [ + 'rgba(54, 162, 235, 0.2)', + ], + borderColor: [ + 'rgba(54, 162, 235, 1)', + ], + borderWidth: 1 + } + ] + } + + var scatterChartOptions = { + scales: { + xAxes: [{ + type: 'linear', + position: 'bottom' + }] + } + } + // Get context with jQuery - using jQuery's .get() method. + if ($("#barChart").length) { + var barChartCanvas = $("#barChart").get(0).getContext("2d"); + // This will get the first returned node in the jQuery collection. + var barChart = new Chart(barChartCanvas, { + type: 'bar', + data: data, + options: options + }); + } + + if ($("#lineChart").length) { + var lineChartCanvas = $("#lineChart").get(0).getContext("2d"); + var lineChart = new Chart(lineChartCanvas, { + type: 'line', + data: data, + options: options + }); + } + + if ($("#linechart-multi").length) { + var multiLineCanvas = $("#linechart-multi").get(0).getContext("2d"); + var lineChart = new Chart(multiLineCanvas, { + type: 'line', + data: multiLineData, + options: options + }); + } + + if ($("#areachart-multi").length) { + var multiAreaCanvas = $("#areachart-multi").get(0).getContext("2d"); + var multiAreaChart = new Chart(multiAreaCanvas, { + type: 'line', + data: multiAreaData, + options: multiAreaOptions + }); + } + + if ($("#doughnutChart").length) { + var doughnutChartCanvas = $("#doughnutChart").get(0).getContext("2d"); + var doughnutChart = new Chart(doughnutChartCanvas, { + type: 'doughnut', + data: doughnutPieData, + options: doughnutPieOptions + }); + } + + if ($("#pieChart").length) { + var pieChartCanvas = $("#pieChart").get(0).getContext("2d"); + var pieChart = new Chart(pieChartCanvas, { + type: 'pie', + data: doughnutPieData, + options: doughnutPieOptions + }); + } + + if ($("#areaChart").length) { + var areaChartCanvas = $("#areaChart").get(0).getContext("2d"); + var areaChart = new Chart(areaChartCanvas, { + type: 'line', + data: areaData, + options: areaOptions + }); + } + + if ($("#scatterChart").length) { + var scatterChartCanvas = $("#scatterChart").get(0).getContext("2d"); + var scatterChart = new Chart(scatterChartCanvas, { + type: 'scatter', + data: scatterChartData, + options: scatterChartOptions + }); + } + + if ($("#browserTrafficChart").length) { + var doughnutChartCanvas = $("#browserTrafficChart").get(0).getContext("2d"); + var doughnutChart = new Chart(doughnutChartCanvas, { + type: 'doughnut', + data: browserTrafficData, + options: doughnutPieOptions + }); + } +}); \ No newline at end of file diff --git a/public/admin/js/chartist.js b/public/admin/js/chartist.js new file mode 100644 index 0000000..d1aa2d1 --- /dev/null +++ b/public/admin/js/chartist.js @@ -0,0 +1,217 @@ +(function($) { + //simple line + 'use strict'; + if ($('#ct-chart-line').length) { + new Chartist.Line('#ct-chart-line', { + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], + series: [ + [12, 9, 7, 8, 5], + [2, 1, 3.5, 7, 3], + [1, 3, 4, 5, 6] + ] + }, { + fullWidth: true, + chartPadding: { + right: 40 + } + }); + } + + //Line scatterer + var times = function(n) { + return Array.apply(null, new Array(n)); + }; + + var data = times(52).map(Math.random).reduce(function(data, rnd, index) { + data.labels.push(index + 1); + for (var i = 0; i < data.series.length; i++) { + data.series[i].push(Math.random() * 100) + } + return data; + }, { + labels: [], + series: times(4).map(function() { + return new Array() + }) + }); + + var options = { + showLine: false, + axisX: { + labelInterpolationFnc: function(value, index) { + return index % 13 === 0 ? 'W' + value : null; + } + } + }; + + var responsiveOptions = [ + ['screen and (min-width: 640px)', { + axisX: { + labelInterpolationFnc: function(value, index) { + return index % 4 === 0 ? 'W' + value : null; + } + } + }] + ]; + + if ($('#ct-chart-line-scatterer').length) { + new Chartist.Line('#ct-chart-line-scatterer', data, options, responsiveOptions); + } + + //Stacked bar Chart + if ($('#ct-chart-stacked-bar').length) { + new Chartist.Bar('#ct-chart-stacked-bar', { + labels: ['Q1', 'Q2', 'Q3', 'Q4'], + series: [ + ['800000', '1200000', '1400000', '1300000'], + ['200000', '400000', '500000', '300000'], + ['100000', '200000', '400000', '600000'], + ['400000', '600000', '200000', '0000'] + ] + }, { + stackBars: true, + axisY: { + labelInterpolationFnc: function(value) { + return (value / 1000) + 'k'; + } + } + }).on('draw', function(data) { + if (data.type === 'bar') { + data.element.attr({ + style: 'stroke-width: 30px' + }); + } + }); + } + + + //Horizontal bar chart + if ($('#ct-chart-horizontal-bar').length) { + new Chartist.Bar('#ct-chart-horizontal-bar', { + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + series: [ + [5, 4, 3, 7, 5, 10, 3], + [3, 2, 9, 5, 4, 6, 4], + [2, 6, 7, 1, 3, 5, 9], + [2, 6, 7, 1, 3, 5, 19], + ] + }, { + seriesBarDistance: 10, + reverseData: true, + horizontalBars: true, + axisY: { + offset: 20 + }, + axisX: { + labelOffset: { + x: 0, + y: 6 + }, + }, + chartPadding: { + left: 20, + bottom: 20 + } + }); + } + + //Pie + if ($('#ct-chart-pie').length) { + var data = { + series: [5, 3, 4] + }; + + var sum = function(a, b) { + return a + b + }; + + new Chartist.Pie('#ct-chart-pie', data, { + labelInterpolationFnc: function(value) { + return Math.round(value / data.series.reduce(sum) * 100) + '%'; + } + }); + } + + //Donut + var labels = ['safari', 'chrome', 'explorer', 'firefox']; + var data = { + series: [20, 40, 10, 30] + }; + + if ($('#ct-chart-donut').length) { + new Chartist.Pie('#ct-chart-donut', data, { + donut: true, + donutWidth: 60, + donutSolid: true, + startAngle: 270, + showLabel: true, + labelInterpolationFnc: function(value, index) { + var percentage = Math.round(value / data.series.reduce(sum) * 100) + '%'; + return labels[index] + ' ' + percentage; + } + }); + } + + + + //Dashboard Tickets Chart + if ($('#ct-chart-dash-barChart').length) { + new Chartist.Bar('#ct-chart-dash-barChart', { + labels: ['Week 1', 'Week 2', 'Week 3', 'Week 4'], + series: [ + [300, 140, 230, 140], + [323, 529, 644, 230], + [734, 539, 624, 334], + ] + }, { + stackBars: true, + axisY: { + labelInterpolationFnc: function(value) { + return (value / 100) + 'k'; + } + } + }).on('draw', function(data) { + if (data.type === 'bar') { + data.element.attr({ + style: 'stroke-width: 50px' + }); + } + }); + } + + //dashboard staked bar chart + if ($('#ct-chart-vartical-stacked-bar').length) { + new Chartist.Bar('#ct-chart-vartical-stacked-bar', { + labels: ['J', 'F', 'M', 'A', 'M', 'J', 'A'], + series: [{ + "name": "Income", + "data": [8, 4, 6, 3, 7, 3, 8] + }, + { + "name": "Outcome", + "data": [2, 7, 4, 8, 4, 6, 1] + }, + { + "name": "Revenue", + "data": [4, 3, 3, 6, 7, 2, 4] + } + ] + }, { + seriesBarDistance: 10, + reverseData: true, + horizontalBars: false, + height: '280px', + fullWidth: true, + chartPadding: { + top: 30, + left: 0, + right: 0, + bottom: 0 + }, + plugins: [ + Chartist.plugins.legend() + ] + }); + } + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/circle-progress.js b/public/admin/js/circle-progress.js new file mode 100644 index 0000000..8b0dc3e --- /dev/null +++ b/public/admin/js/circle-progress.js @@ -0,0 +1,8 @@ +(function($) { + 'use strict'; + if ($(".circle-progress-1").length) { + $('.circle-progress-1').circleProgress({}).on('circle-animation-progress', function(event, progress, stepValue) { + $(this).find('.value').html(Math.round(100 * stepValue.toFixed(2).substr(1)) + '%'); + }); + } +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/clipboard.js b/public/admin/js/clipboard.js new file mode 100644 index 0000000..dbc1b20 --- /dev/null +++ b/public/admin/js/clipboard.js @@ -0,0 +1,10 @@ +(function($) { + 'use strict'; + var clipboard = new ClipboardJS('.btn-clipboard'); + clipboard.on('success', function(e) { + console.log(e); + }); + clipboard.on('error', function(e) { + console.log(e); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/codeEditor.js b/public/admin/js/codeEditor.js new file mode 100644 index 0000000..b34ff58 --- /dev/null +++ b/public/admin/js/codeEditor.js @@ -0,0 +1,121 @@ +(function($) { + 'use strict'; + if ($('textarea[name=code-editable]').length) { + var editableCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-editable'), { + mode: "javascript", + theme: "ambiance", + lineNumbers: true + }); + } + if ($('#code-readonly').length) { + var readOnlyCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-readonly'), { + mode: "javascript", + theme: "ambiance", + lineNumbers: true, + readOnly: "true" + }); + } + if ($('#cm-js-mode').length) { + var cm = CodeMirror(document.getElementById("cm-js-mode"), { + mode: "javascript", + lineNumbers: true + }); + } + + //Use this method of there are multiple codes with same properties + if ($('.multiple-codes').length) { + var code_type = ''; + var editorTextarea = $('.multiple-codes'); + for (var i = 0; i < editorTextarea.length; i++) { + $(editorTextarea[i]).attr('id', 'code-' + i); + CodeMirror.fromTextArea(document.getElementById('code-' + i), { + mode: "javascript", + theme: "ambiance", + lineNumbers: true, + readOnly: "true", + maxHighlightLength: 0, + workDelay: 0 + }); + } + } + + //Use this method of there are multiple codes with same properties in shell mode + if ($('.shell-mode').length) { + var code_type = ''; + var shellEditor = $('.shell-mode'); + for (var i = 0; i < shellEditor.length; i++) { + $(shellEditor[i]).attr('id', 'code-' + i); + CodeMirror.fromTextArea(document.getElementById('code-' + i), { + mode: "shell", + theme: "ambiance", + readOnly: "true", + maxHighlightLength: 0, + workDelay: 0 + }); + } + } + if ($('#ace_html').length) { + $(function() { + var editor = ace.edit("ace_html"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/html"); + document.getElementById('ace_html'); + }); + } + if ($('#ace_javaScript').length) { + $(function() { + var editor = ace.edit("ace_javaScript"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/javascript"); + document.getElementById('aceExample'); + }); + } + if ($('#ace_json').length) { + $(function() { + var editor = ace.edit("ace_json"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/json"); + document.getElementById('ace_json'); + }); + } + if ($('#ace_css').length) { + $(function() { + var editor = ace.edit("ace_css"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/css"); + document.getElementById('ace_css'); + }); + } + if ($('#ace_scss').length) { + $(function() { + var editor = ace.edit("ace_scss"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/scss"); + document.getElementById('ace_scss'); + }); + } + if ($('#ace_php').length) { + $(function() { + var editor = ace.edit("ace_php"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/php"); + document.getElementById('ace_php'); + }); + } + if ($('#ace_ruby').length) { + $(function() { + var editor = ace.edit("ace_ruby"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/ruby"); + document.getElementById('ace_ruby'); + }); + } + if ($('#ace_coffee').length) { + $(function() { + var editor = ace.edit("ace_coffee"); + editor.setTheme("ace/theme/monokai"); + editor.getSession().setMode("ace/mode/coffee"); + document.getElementById('ace_coffee'); + }); + } +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/codemirror.js b/public/admin/js/codemirror.js new file mode 100644 index 0000000..225bc0c --- /dev/null +++ b/public/admin/js/codemirror.js @@ -0,0 +1,51 @@ +(function($) { + 'use strict'; + if ($('textarea[name=code-editable]').length) { + var editableCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-editable'), { + mode: "javascript", + theme: "ambiance", + lineNumbers: true + }); + } + if ($('#code-readonly').length) { + var readOnlyCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-readonly'), { + mode: "javascript", + theme: "ambiance", + lineNumbers: true, + readOnly: "nocursor" + }); + } + + //Use this method of there are multiple codes with same properties + if ($('.multiple-codes').length) { + var code_type = ''; + var editorTextarea = $('.multiple-codes'); + for (var i = 0; i < editorTextarea.length; i++) { + $(editorTextarea[i]).attr('id', 'code-' + i); + CodeMirror.fromTextArea(document.getElementById('code-' + i), { + mode: "javascript", + theme: "ambiance", + lineNumbers: true, + readOnly: "nocursor", + maxHighlightLength: 0, + workDelay: 0 + }); + } + } + + //Use this method of there are multiple codes with same properties in shell mode + if ($('.shell-mode').length) { + var code_type = ''; + var shellEditor = $('.shell-mode'); + for (var i = 0; i < shellEditor.length; i++) { + $(shellEditor[i]).attr('id', 'code-' + i); + CodeMirror.fromTextArea(document.getElementById('code-' + i), { + mode: "shell", + theme: "ambiance", + readOnly: "nocursor", + maxHighlightLength: 0, + workDelay: 0 + }); + } + } +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/context-menu.js b/public/admin/js/context-menu.js new file mode 100644 index 0000000..bbaa60a --- /dev/null +++ b/public/admin/js/context-menu.js @@ -0,0 +1,240 @@ +(function($) { + 'use strict'; + $.contextMenu({ + selector: '#context-menu-simple', + callback: function(key, options) {}, + items: { + "edit": { + name: "Edit", + icon: "edit" + }, + "cut": { + name: "Cut", + icon: "cut" + }, + copy: { + name: "Copy", + icon: "copy" + }, + "paste": { + name: "Paste", + icon: "paste" + }, + "delete": { + name: "Delete", + icon: "delete" + }, + "sep1": "---------", + "quit": { + name: "Quit", + icon: function() { + return 'context-menu-icon context-menu-icon-quit'; + } + } + } + }); + $.contextMenu({ + selector: '#context-menu-access', + callback: function(key, options) { + var m = "clicked: " + key; + window.console && console.log(m) || alert(m); + }, + items: { + "edit": { + name: "Edit", + icon: "edit", + accesskey: "e" + }, + "cut": { + name: "Cut", + icon: "cut", + accesskey: "c" + }, + // first unused character is taken (here: o) + "copy": { + name: "Copy", + icon: "copy", + accesskey: "c o p y" + }, + // words are truncated to their first letter (here: p) + "paste": { + name: "Paste", + icon: "paste", + accesskey: "cool paste" + }, + "delete": { + name: "Delete", + icon: "delete" + }, + "sep1": "---------", + "quit": { + name: "Quit", + icon: function($element, key, item) { + return 'context-menu-icon context-menu-icon-quit'; + } + } + } + }); + $.contextMenu({ + selector: '#context-menu-open', + callback: function(key, options) { + var m = "clicked: " + key; + window.console && console.log(m) || alert(m); + }, + items: { + "edit": { + name: "Closing on Click", + icon: "edit", + callback: function() { + return true; + } + }, + "cut": { + name: "Open after Click", + icon: "cut", + callback: function() { + return false; + } + } + } + }); + $.contextMenu({ + selector: '#context-menu-multi', + callback: function(key, options) { + var m = "clicked: " + key; + window.console && console.log(m) || alert(m); + }, + items: { + "edit": { + "name": "Edit", + "icon": "edit" + }, + "cut": { + "name": "Cut", + "icon": "cut" + }, + "sep1": "---------", + "quit": { + "name": "Quit", + "icon": "quit" + }, + "sep2": "---------", + "fold1": { + "name": "Sub group", + "items": { + "fold1-key1": { + "name": "Foo bar" + }, + "fold2": { + "name": "Sub group 2", + "items": { + "fold2-key1": { + "name": "alpha" + }, + "fold2-key2": { + "name": "bravo" + }, + "fold2-key3": { + "name": "charlie" + } + } + }, + "fold1-key3": { + "name": "delta" + } + } + }, + "fold1a": { + "name": "Other group", + "items": { + "fold1a-key1": { + "name": "echo" + }, + "fold1a-key2": { + "name": "foxtrot" + }, + "fold1a-key3": { + "name": "golf" + } + } + } + } + }); + $.contextMenu({ + selector: '#context-menu-hover', + trigger: 'hover', + delay: 500, + callback: function(key, options) { + var m = "clicked: " + key; + window.console && console.log(m) || alert(m); + }, + items: { + "edit": { + name: "Edit", + icon: "edit" + }, + "cut": { + name: "Cut", + icon: "cut" + }, + "copy": { + name: "Copy", + icon: "copy" + }, + "paste": { + name: "Paste", + icon: "paste" + }, + "delete": { + name: "Delete", + icon: "delete" + }, + "sep1": "---------", + "quit": { + name: "Quit", + icon: function($element, key, item) { + return 'context-menu-icon context-menu-icon-quit'; + } + } + } + }); + $.contextMenu({ + selector: '#context-menu-hover-autohide', + trigger: 'hover', + delay: 500, + autoHide: true, + callback: function(key, options) { + var m = "clicked: " + key; + window.console && console.log(m) || alert(m); + }, + items: { + "edit": { + name: "Edit", + icon: "edit" + }, + "cut": { + name: "Cut", + icon: "cut" + }, + "copy": { + name: "Copy", + icon: "copy" + }, + "paste": { + name: "Paste", + icon: "paste" + }, + "delete": { + name: "Delete", + icon: "delete" + }, + "sep1": "---------", + "quit": { + name: "Quit", + icon: function($element, key, item) { + return 'context-menu-icon context-menu-icon-quit'; + } + } + } + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/counter.js b/public/admin/js/counter.js new file mode 100644 index 0000000..1d6d740 --- /dev/null +++ b/public/admin/js/counter.js @@ -0,0 +1,32 @@ +var a = 0; +$(window).scroll(function() { + + var oTop = $('.mu-single-counter').offset().top - window.innerHeight; + if (a == 0 && $(window).scrollTop() > oTop) { + $('.counter-value').each(function() { + var $this = $(this), + countTo = $this.attr('data-count'); + $({ + countNum: $this.text() + }).animate({ + countNum: countTo + }, + + { + + duration: 2000, + easing: 'swing', + step: function() { + $this.text(Math.floor(this.countNum)); + }, + complete: function() { + $this.text(this.countNum); + //alert('finished'); + } + + }); + }); + a = 1; + } + +}); \ No newline at end of file diff --git a/public/admin/js/cropper.js b/public/admin/js/cropper.js new file mode 100644 index 0000000..aadeb30 --- /dev/null +++ b/public/admin/js/cropper.js @@ -0,0 +1,6 @@ +(function($) { + 'use strict'; + $('#cropperExample').cropper({ + aspectRatio: 16 / 9 + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/custom.js b/public/admin/js/custom.js new file mode 100644 index 0000000..a21f7e4 --- /dev/null +++ b/public/admin/js/custom.js @@ -0,0 +1,139 @@ +/** + * Template Name: Kindle + * Version: 1.0 + * Template Scripts + * Author: MarkUps + * Author URI: http://www.markups.io/ + + Custom JS + + 1. FIXED MENU + 2. MENU SMOOTH SCROLLING + 3. GOOGLE MAP + 4. READER TESTIMONIALS ( SLICK SLIDER ) + 5. MOBILE MENU CLOSE + +**/ + + + +(function( $ ){ + + + /* ----------------------------------------------------------- */ + /* 1. FIXED MENU + /* ----------------------------------------------------------- */ + + + jQuery(window).bind('scroll', function () { + if ($(window).scrollTop() > 150) { + + $('#mu-header').addClass('mu-fixed-nav'); + + } else { + $('#mu-header').removeClass('mu-fixed-nav'); + } + }); + + + /* ----------------------------------------------------------- */ + /* 2. MENU SMOOTH SCROLLING + /* ----------------------------------------------------------- */ + + //MENU SCROLLING WITH ACTIVE ITEM SELECTED + + // Cache selectors + var lastId, + topMenu = $(".mu-menu"), + topMenuHeight = topMenu.outerHeight()+13, + // All list items + menuItems = topMenu.find('a[href^=\\#]'), + // Anchors corresponding to menu items + scrollItems = menuItems.map(function(){ + var item = $($(this).attr("href")); + if (item.length) { return item; } + }); + + // Bind click handler to menu items + // so we can get a fancy scroll animation + menuItems.click(function(e){ + var href = $(this).attr("href"), + offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+22; + jQuery('html, body').stop().animate({ + scrollTop: offsetTop + }, 1500); + e.preventDefault(); + }); + + // Bind to scroll + jQuery(window).scroll(function(){ + // Get container scroll position + var fromTop = $(this).scrollTop()+topMenuHeight; + + // Get id of current scroll item + var cur = scrollItems.map(function(){ + if ($(this).offset().top < fromTop) + return this; + }); + // Get the id of the current element + cur = cur[cur.length-1]; + var id = cur && cur.length ? cur[0].id : ""; + + if (lastId !== id) { + lastId = id; + // Set/remove active class + menuItems + .parent().removeClass("active") + .end().filter("[href=\\#"+id+"]").parent().addClass("active"); + } + }) + + + /* ----------------------------------------------------------- */ + /* 3. GOOGLE MAP + /* ----------------------------------------------------------- */ + + $('#mu-google-map').click(function () { + + $('#mu-google-map iframe').css("pointer-events", "auto"); + + }); + + $("#mu-google-map").mouseleave(function() { + + $('#mu-google-map iframe').css("pointer-events", "none"); + + }); + + + + /* ----------------------------------------------------------- */ + /* 4. READER TESTIMONIALS (SLICK SLIDER) + /* ----------------------------------------------------------- */ + + $('.mu-testimonial-slide').slick({ + arrows: false, + dots: true, + infinite: true, + speed: 500, + autoplay: true, + cssEase: 'linear' + }); + + /* ----------------------------------------------------------- */ + /* 5. MOBILE MENU CLOSE + /* ----------------------------------------------------------- */ + + jQuery('.mu-menu').on('click', 'li a', function() { + $('.mu-navbar .in').collapse('hide'); + }); + + + + + +})( jQuery ); + + + + \ No newline at end of file diff --git a/public/admin/js/dashboard.js b/public/admin/js/dashboard.js new file mode 100644 index 0000000..a481d24 --- /dev/null +++ b/public/admin/js/dashboard.js @@ -0,0 +1,882 @@ +(function ($) { + "use strict"; + $(function () { + if ($("#order-chart").length) { + var areaData = { + labels: [ + "10", + "", + "", + "20", + "", + "", + "30", + "", + "", + "40", + "", + "", + "50", + "", + "", + "60", + "", + "", + "70", + ], + datasets: [ + { + data: [ + 200, + 480, + 700, + 600, + 620, + 350, + 380, + 350, + 850, + "600", + "650", + "350", + "590", + "350", + "620", + "500", + "990", + "780", + "650", + ], + borderColor: ["#4747A1"], + borderWidth: 2, + fill: false, + label: "Orders", + }, + { + data: [ + 400, + 450, + 410, + 500, + 480, + 600, + 450, + 550, + 460, + "560", + "450", + "700", + "450", + "640", + "550", + "650", + "400", + "850", + "800", + ], + borderColor: ["#F09397"], + borderWidth: 2, + fill: false, + label: "Downloads", + }, + ], + }; + var areaOptions = { + responsive: true, + maintainAspectRatio: true, + plugins: { + filler: { + propagate: false, + }, + }, + scales: { + xAxes: [ + { + display: true, + ticks: { + display: true, + padding: 10, + fontColor: "#6C7383", + }, + gridLines: { + display: false, + drawBorder: false, + color: "transparent", + zeroLineColor: "#eeeeee", + }, + }, + ], + yAxes: [ + { + display: true, + ticks: { + display: true, + autoSkip: false, + maxRotation: 0, + stepSize: 200, + min: 200, + max: 1200, + padding: 18, + fontColor: "#6C7383", + }, + gridLines: { + display: true, + color: "#f2f2f2", + drawBorder: false, + }, + }, + ], + }, + legend: { + display: false, + }, + tooltips: { + enabled: true, + }, + elements: { + line: { + tension: 0.35, + }, + point: { + radius: 0, + }, + }, + }; + var revenueChartCanvas = $("#order-chart").get(0).getContext("2d"); + var revenueChart = new Chart(revenueChartCanvas, { + type: "line", + data: areaData, + options: areaOptions, + }); + } + if ($("#order-chart-dark").length) { + var areaData = { + labels: [ + "10", + "", + "", + "20", + "", + "", + "30", + "", + "", + "40", + "", + "", + "50", + "", + "", + "60", + "", + "", + "70", + ], + datasets: [ + { + data: [ + 200, + 480, + 700, + 600, + 620, + 350, + 380, + 350, + 850, + "600", + "650", + "350", + "590", + "350", + "620", + "500", + "990", + "780", + "650", + ], + borderColor: ["#4747A1"], + borderWidth: 2, + fill: false, + label: "Orders", + }, + { + data: [ + 400, + 450, + 410, + 500, + 480, + 600, + 450, + 550, + 460, + "560", + "450", + "700", + "450", + "640", + "550", + "650", + "400", + "850", + "800", + ], + borderColor: ["#F09397"], + borderWidth: 2, + fill: false, + label: "Downloads", + }, + ], + }; + var areaOptions = { + responsive: true, + maintainAspectRatio: true, + plugins: { + filler: { + propagate: false, + }, + }, + scales: { + xAxes: [ + { + display: true, + ticks: { + display: true, + padding: 10, + fontColor: "#fff", + }, + gridLines: { + display: false, + drawBorder: false, + color: "transparent", + zeroLineColor: "#575757", + }, + }, + ], + yAxes: [ + { + display: true, + ticks: { + display: true, + autoSkip: false, + maxRotation: 0, + stepSize: 200, + min: 200, + max: 1200, + padding: 18, + fontColor: "#fff", + }, + gridLines: { + display: true, + color: "#575757", + drawBorder: false, + }, + }, + ], + }, + legend: { + display: false, + }, + tooltips: { + enabled: true, + }, + elements: { + line: { + tension: 0.35, + }, + point: { + radius: 0, + }, + }, + }; + var revenueChartCanvas = $("#order-chart-dark") + .get(0) + .getContext("2d"); + var revenueChart = new Chart(revenueChartCanvas, { + type: "line", + data: areaData, + options: areaOptions, + }); + } + if ($("#sales-chart").length) { + var SalesChartCanvas = $("#sales-chart").get(0).getContext("2d"); + var SalesChart = new Chart(SalesChartCanvas, { + type: "bar", + data: { + labels: ["Jan", "Feb", "Mar", "Apr", "May"], + datasets: [ + { + label: "Offline Sales", + data: [480, 230, 470, 210, 330], + backgroundColor: "#98BDFF", + }, + { + label: "Online Sales", + data: [400, 340, 550, 480, 170], + backgroundColor: "#4B49AC", + }, + ], + }, + options: { + cornerRadius: 5, + responsive: true, + maintainAspectRatio: true, + layout: { + padding: { + left: 0, + right: 0, + top: 20, + bottom: 0, + }, + }, + scales: { + yAxes: [ + { + display: true, + gridLines: { + display: true, + drawBorder: false, + color: "#F2F2F2", + }, + ticks: { + display: true, + min: 0, + max: 560, + callback: function (value, index, values) { + return value + "$"; + }, + autoSkip: true, + maxTicksLimit: 10, + fontColor: "#6C7383", + }, + }, + ], + xAxes: [ + { + stacked: false, + ticks: { + beginAtZero: true, + fontColor: "#6C7383", + }, + gridLines: { + color: "rgba(0, 0, 0, 0)", + display: false, + }, + barPercentage: 1, + }, + ], + }, + legend: { + display: false, + }, + elements: { + point: { + radius: 0, + }, + }, + }, + }); + document.getElementById("sales-legend").innerHTML = + SalesChart.generateLegend(); + } + if ($("#sales-chart-dark").length) { + var SalesChartCanvas = $("#sales-chart-dark") + .get(0) + .getContext("2d"); + var SalesChart = new Chart(SalesChartCanvas, { + type: "bar", + data: { + labels: ["Jan", "Feb", "Mar", "Apr", "May"], + datasets: [ + { + label: "Offline Sales", + data: [480, 230, 470, 210, 330], + backgroundColor: "#98BDFF", + }, + { + label: "Online Sales", + data: [400, 340, 550, 480, 170], + backgroundColor: "#4B49AC", + }, + ], + }, + options: { + cornerRadius: 5, + responsive: true, + maintainAspectRatio: true, + layout: { + padding: { + left: 0, + right: 0, + top: 20, + bottom: 0, + }, + }, + scales: { + yAxes: [ + { + display: true, + gridLines: { + display: true, + drawBorder: false, + color: "#575757", + }, + ticks: { + display: true, + min: 0, + max: 500, + callback: function (value, index, values) { + return value + "$"; + }, + autoSkip: true, + maxTicksLimit: 10, + fontColor: "#F0F0F0", + }, + }, + ], + xAxes: [ + { + stacked: false, + ticks: { + beginAtZero: true, + fontColor: "#F0F0F0", + }, + gridLines: { + color: "#575757", + display: false, + }, + barPercentage: 1, + }, + ], + }, + legend: { + display: false, + }, + elements: { + point: { + radius: 0, + }, + }, + }, + }); + document.getElementById("sales-legend").innerHTML = + SalesChart.generateLegend(); + } + if ($("#north-america-chart").length) { + var areaData = { + labels: ["Jan", "Feb", "Mar"], + datasets: [ + { + data: [100, 50, 50], + backgroundColor: ["#4B49AC", "#FFC100", "#248AFD"], + borderColor: "rgba(0,0,0,0)", + }, + ], + }; + var areaOptions = { + responsive: true, + maintainAspectRatio: true, + segmentShowStroke: false, + cutoutPercentage: 78, + elements: { + arc: { + borderWidth: 4, + }, + }, + legend: { + display: false, + }, + tooltips: { + enabled: true, + }, + legendCallback: function (chart) { + var text = []; + text.push('
'); + text.push( + '

Offline sales

' + ); + text.push('

88333

'); + text.push("
"); + text.push( + '

Online sales

' + ); + text.push('

66093

'); + text.push("
"); + text.push( + '

Returns

' + ); + text.push('

39836

'); + text.push("
"); + text.push("
"); + return text.join(""); + }, + }; + var northAmericaChartPlugins = { + beforeDraw: function (chart) { + var width = chart.chart.width, + height = chart.chart.height, + ctx = chart.chart.ctx; + + ctx.restore(); + var fontSize = 3.125; + ctx.font = "500 " + fontSize + "em sans-serif"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "#13381B"; + + var text = "90", + textX = Math.round( + (width - ctx.measureText(text).width) / 2 + ), + textY = height / 2; + + ctx.fillText(text, textX, textY); + ctx.save(); + }, + }; + var northAmericaChartCanvas = $("#north-america-chart") + .get(0) + .getContext("2d"); + var northAmericaChart = new Chart(northAmericaChartCanvas, { + type: "doughnut", + data: areaData, + options: areaOptions, + plugins: northAmericaChartPlugins, + }); + document.getElementById("north-america-legend").innerHTML = + northAmericaChart.generateLegend(); + } + if ($("#north-america-chart-dark").length) { + var areaData = { + labels: ["Jan", "Feb", "Mar"], + datasets: [ + { + data: [100, 50, 50], + backgroundColor: ["#4B49AC", "#FFC100", "#248AFD"], + borderColor: "rgba(0,0,0,0)", + }, + ], + }; + var areaOptions = { + responsive: true, + maintainAspectRatio: true, + segmentShowStroke: false, + cutoutPercentage: 78, + elements: { + arc: { + borderWidth: 4, + }, + }, + legend: { + display: false, + }, + tooltips: { + enabled: true, + }, + legendCallback: function (chart) { + var text = []; + text.push('
'); + text.push( + '

Offline sales

' + ); + text.push('

88333

'); + text.push("
"); + text.push( + '

Online sales

' + ); + text.push('

66093

'); + text.push("
"); + text.push( + '

Returns

' + ); + text.push('

39836

'); + text.push("
"); + text.push("
"); + return text.join(""); + }, + }; + var northAmericaChartPlugins = { + beforeDraw: function (chart) { + var width = chart.chart.width, + height = chart.chart.height, + ctx = chart.chart.ctx; + + ctx.restore(); + var fontSize = 3.125; + ctx.font = "500 " + fontSize + "em sans-serif"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "#fff"; + + var text = "90", + textX = Math.round( + (width - ctx.measureText(text).width) / 2 + ), + textY = height / 2; + + ctx.fillText(text, textX, textY); + ctx.save(); + }, + }; + var northAmericaChartCanvas = $("#north-america-chart-dark") + .get(0) + .getContext("2d"); + var northAmericaChart = new Chart(northAmericaChartCanvas, { + type: "doughnut", + data: areaData, + options: areaOptions, + plugins: northAmericaChartPlugins, + }); + document.getElementById("north-america-legend").innerHTML = + northAmericaChart.generateLegend(); + } + + if ($("#south-america-chart").length) { + var areaData = { + labels: ["Jan", "Feb", "Mar"], + datasets: [ + { + data: [60, 70, 70], + backgroundColor: ["#4B49AC", "#FFC100", "#248AFD"], + borderColor: "rgba(0,0,0,0)", + }, + ], + }; + var areaOptions = { + responsive: true, + maintainAspectRatio: true, + segmentShowStroke: false, + cutoutPercentage: 78, + elements: { + arc: { + borderWidth: 4, + }, + }, + legend: { + display: false, + }, + tooltips: { + enabled: true, + }, + legendCallback: function (chart) { + var text = []; + text.push('
'); + text.push( + '

Offline sales

' + ); + text.push('

495343

'); + text.push("
"); + text.push( + '

Online sales

' + ); + text.push('

630983

'); + text.push("
"); + text.push( + '

Returns

' + ); + text.push('

290831

'); + text.push("
"); + text.push("
"); + return text.join(""); + }, + }; + var southAmericaChartPlugins = { + beforeDraw: function (chart) { + var width = chart.chart.width, + height = chart.chart.height, + ctx = chart.chart.ctx; + + ctx.restore(); + var fontSize = 3.125; + ctx.font = "600 " + fontSize + "em sans-serif"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "#000"; + + var text = "76", + textX = Math.round( + (width - ctx.measureText(text).width) / 2 + ), + textY = height / 2; + + ctx.fillText(text, textX, textY); + ctx.save(); + }, + }; + var southAmericaChartCanvas = $("#south-america-chart") + .get(0) + .getContext("2d"); + var southAmericaChart = new Chart(southAmericaChartCanvas, { + type: "doughnut", + data: areaData, + options: areaOptions, + plugins: southAmericaChartPlugins, + }); + document.getElementById("south-america-legend").innerHTML = + southAmericaChart.generateLegend(); + } + if ($("#south-america-chart-dark").length) { + var areaData = { + labels: ["Jan", "Feb", "Mar"], + datasets: [ + { + data: [60, 70, 70], + backgroundColor: ["#4B49AC", "#FFC100", "#248AFD"], + borderColor: "rgba(0,0,0,0)", + }, + ], + }; + var areaOptions = { + responsive: true, + maintainAspectRatio: true, + segmentShowStroke: false, + cutoutPercentage: 78, + elements: { + arc: { + borderWidth: 4, + }, + }, + legend: { + display: false, + }, + tooltips: { + enabled: true, + }, + legendCallback: function (chart) { + var text = []; + text.push('
'); + text.push( + '

Offline sales

' + ); + text.push('

495343

'); + text.push("
"); + text.push( + '

Online sales

' + ); + text.push('

630983

'); + text.push("
"); + text.push( + '

Returns

' + ); + text.push('

290831

'); + text.push("
"); + text.push("
"); + return text.join(""); + }, + }; + var southAmericaChartPlugins = { + beforeDraw: function (chart) { + var width = chart.chart.width, + height = chart.chart.height, + ctx = chart.chart.ctx; + + ctx.restore(); + var fontSize = 3.125; + ctx.font = "600 " + fontSize + "em sans-serif"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "#fff"; + + var text = "76", + textX = Math.round( + (width - ctx.measureText(text).width) / 2 + ), + textY = height / 2; + + ctx.fillText(text, textX, textY); + ctx.save(); + }, + }; + var southAmericaChartCanvas = $("#south-america-chart-dark") + .get(0) + .getContext("2d"); + var southAmericaChart = new Chart(southAmericaChartCanvas, { + type: "doughnut", + data: areaData, + options: areaOptions, + plugins: southAmericaChartPlugins, + }); + document.getElementById("south-america-legend").innerHTML = + southAmericaChart.generateLegend(); + } + + function format(d) { + // `d` is the original data object for the row + return ( + '' + + '' + + '' + ); + "" + "

Policy start date

25/04/2020

Policy end date

24/04/2021

Sum insured

$26,000

Premium

$1200

Quote no.

Incs234

Vehicle Reg. No.

KL-65-A-7004

Policy number

Incsq123456

Policy number

Incsq123456
A

Agent / Broker

Abcd Enterprices
profile

Policy holder Name & ID Number

Phillip Harris / 1234567

Branch

Koramangala, Bangalore

Channel

Online
"; + } + var table = $("#example").DataTable({ + ajax: "js/data.txt", + columns: [ + { data: "Quote" }, + { data: "Product" }, + { data: "Business" }, + { data: "Policy" }, + { data: "Premium" }, + { data: "Status" }, + { data: "Updated" }, + { + className: "details-control", + orderable: false, + data: null, + defaultContent: "", + }, + ], + order: [[1, "asc"]], + paging: false, + ordering: true, + info: false, + filter: false, + columnDefs: [ + { + orderable: false, + className: "select-checkbox", + targets: 0, + }, + ], + select: { + style: "os", + selector: "td:first-child", + }, + }); + $("#example tbody").on("click", "td.details-control", function () { + var tr = $(this).closest("tr"); + var row = table.row(tr); + + if (row.child.isShown()) { + // This row is already open - close it + row.child.hide(); + tr.removeClass("shown"); + } else { + // Open this row + row.child(format(row.data())).show(); + tr.addClass("shown"); + } + }); + }); +})(jQuery); diff --git a/public/admin/js/data-table.js b/public/admin/js/data-table.js new file mode 100644 index 0000000..4709d7e --- /dev/null +++ b/public/admin/js/data-table.js @@ -0,0 +1,25 @@ +(function($) { + 'use strict'; + $(function() { + $('#order-listing').DataTable({ + "aLengthMenu": [ + [5, 10, 15, -1], + [5, 10, 15, "All"] + ], + "iDisplayLength": 10, + "language": { + search: "" + } + }); + $('#order-listing').each(function() { + var datatable = $(this); + // SEARCH - Add the placeholder for Search and Turn this into in-line form control + var search_input = datatable.closest('.dataTables_wrapper').find('div[id$=_filter] input'); + search_input.attr('placeholder', 'Search'); + search_input.removeClass('form-control-sm'); + // LENGTH - Inline-Form control + var length_sel = datatable.closest('.dataTables_wrapper').find('div[id$=_length] select'); + length_sel.removeClass('form-control-sm'); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/data.txt b/public/admin/js/data.txt new file mode 100644 index 0000000..0134693 --- /dev/null +++ b/public/admin/js/data.txt @@ -0,0 +1,97 @@ +{ + "data": [ + { + "id": "1", + "Quote": "Incs234", + "Product": "Car insurance", + "Business": "Business type 1", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "In progress", + "Updated": "25/04/2020" + },{ + "id": "2", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Active", + "Updated": "25/04/2020" + },{ + "id": "3", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Expired", + "Updated": "25/04/2020" + },{ + "id": "4", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "In progress", + "Updated": "25/04/2020" + },{ + "id": "5", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Active", + "Updated": "25/04/2020" + },{ + "id": "6", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Active", + "Updated": "25/04/2020" + },{ + "id": "7", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Active", + "Updated": "25/04/2020" + },{ + "id": "8", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Expired", + "Updated": "25/04/2020" + },{ + "id": "9", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "Active", + "Updated": "25/04/2020" + },{ + "id": "10", + "Quote": "Incs235", + "Product": "Car insurance", + "Business": "Business type 2", + "Policy": "Jesse Thomas", + "Premium": "$1200", + "Status": "In progress", + "Updated": "25/04/2020" + } + + + ] +} \ No newline at end of file diff --git a/public/admin/js/dataTables.select.min.js b/public/admin/js/dataTables.select.min.js new file mode 100644 index 0000000..3765f6c --- /dev/null +++ b/public/admin/js/dataTables.select.min.js @@ -0,0 +1,38 @@ +/*! + Copyright 2015-2019 SpryMedia Ltd. + + This source file is free software, available under the following license: + MIT license - http://datatables.net/license/mit + + This source file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + + For details please refer to: http://www.datatables.net/extensions/select + Select for DataTables 1.3.1 + 2015-2019 SpryMedia Ltd - datatables.net/license/mit +*/ +(function(f){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return f(k,window,document)}):"object"===typeof exports?module.exports=function(k,p){k||(k=window);p&&p.fn.dataTable||(p=require("datatables.net")(k,p).$);return f(p,k,k.document)}:f(jQuery,window,document)})(function(f,k,p,h){function z(a,b,c){var d=function(c,b){if(c>b){var d=b;b=c;c=d}var e=!1;return a.columns(":visible").indexes().filter(function(a){a===c&&(e=!0);return a===b?(e=!1,!0):e})};var e= +function(c,b){var d=a.rows({search:"applied"}).indexes();if(d.indexOf(c)>d.indexOf(b)){var e=b;b=c;c=e}var f=!1;return d.filter(function(a){a===c&&(f=!0);return a===b?(f=!1,!0):f})};a.cells({selected:!0}).any()||c?(d=d(c.column,b.column),c=e(c.row,b.row)):(d=d(0,b.column),c=e(0,b.row));c=a.cells(c,d).flatten();a.cells(b,{selected:!0}).any()?a.cells(c).deselect():a.cells(c).select()}function v(a){var b=a.settings()[0]._select.selector;f(a.table().container()).off("mousedown.dtSelect",b).off("mouseup.dtSelect", +b).off("click.dtSelect",b);f("body").off("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"))}function A(a){var b=f(a.table().container()),c=a.settings()[0],d=c._select.selector,e;b.on("mousedown.dtSelect",d,function(a){if(a.shiftKey||a.metaKey||a.ctrlKey)b.css("-moz-user-select","none").one("selectstart.dtSelect",d,function(){return!1});k.getSelection&&(e=k.getSelection())}).on("mouseup.dtSelect",d,function(){b.css("-moz-user-select","")}).on("click.dtSelect",d,function(c){var b= +a.select.items();if(e){var d=k.getSelection();if((!d.anchorNode||f(d.anchorNode).closest("table")[0]===a.table().node())&&d!==e)return}d=a.settings()[0];var l=f.trim(a.settings()[0].oClasses.sWrapper).replace(/ +/g,".");if(f(c.target).closest("div."+l)[0]==a.table().container()&&(l=a.cell(f(c.target).closest("td, th")),l.any())){var g=f.Event("user-select.dt");m(a,g,[b,l,c]);g.isDefaultPrevented()||(g=l.index(),"row"===b?(b=g.row,w(c,a,d,"row",b)):"column"===b?(b=l.index().column,w(c,a,d,"column", +b)):"cell"===b&&(b=l.index(),w(c,a,d,"cell",b)),d._select_lastCell=g)}});f("body").on("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"),function(b){!c._select.blurable||f(b.target).parents().filter(a.table().container()).length||0===f(b.target).parents("html").length||f(b.target).parents("div.DTE").length||r(c,!0)})}function m(a,b,c,d){if(!d||a.flatten().length)"string"===typeof b&&(b+=".dt"),c.unshift(a),f(a.table().node()).trigger(b,c)}function B(a){var b=a.settings()[0];if(b._select.info&& +b.aanFeatures.i&&"api"!==a.select.style()){var c=a.rows({selected:!0}).flatten().length,d=a.columns({selected:!0}).flatten().length,e=a.cells({selected:!0}).flatten().length,l=function(b,c,d){b.append(f('').append(a.i18n("select."+c+"s",{_:"%d "+c+"s selected",0:"",1:"1 "+c+" selected"},d)))};f.each(b.aanFeatures.i,function(b,a){a=f(a);b=f('');l(b,"row",c);l(b,"column",d);l(b,"cell",e);var g=a.children("span.select-info");g.length&&g.remove(); +""!==b.text()&&a.append(b)})}}function D(a){var b=new g.Api(a);a.aoRowCreatedCallback.push({fn:function(b,d,e){d=a.aoData[e];d._select_selected&&f(b).addClass(a._select.className);b=0;for(e=a.aoColumns.length;bg){var u=g;g=d;d=u}e.splice(g+1,e.length);e.splice(0,d)}else e.splice(f.inArray(c,e)+1,e.length);a[b](c,{selected:!0}).any()?(e.splice(f.inArray(c,e),1),a[b+"s"](e).deselect()):a[b+"s"](e).select()}function r(a,b){if(b||"single"===a._select.style)a=new g.Api(a),a.rows({selected:!0}).deselect(),a.columns({selected:!0}).deselect(),a.cells({selected:!0}).deselect()}function w(a,b,c,d,e){var f=b.select.style(),g=b.select.toggleable(),h=b[d](e,{selected:!0}).any();if(!h||g)"os"===f?a.ctrlKey|| +a.metaKey?b[d](e).select(!h):a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):(a=b[d+"s"]({selected:!0}),h&&1===a.flatten().length?b[d](e).deselect():(a.deselect(),b[d](e).select())):"multi+shift"==f?a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):b[d](e).select(!h):b[d](e).select(!h)}function t(a,b){return function(c){return c.i18n("buttons."+a,b)}}function x(a){a=a._eventNamespace; +return"draw.dt.DT"+a+" select.dt.DT"+a+" deselect.dt.DT"+a}function E(a,b){return-1!==f.inArray("rows",b.limitTo)&&a.rows({selected:!0}).any()||-1!==f.inArray("columns",b.limitTo)&&a.columns({selected:!0}).any()||-1!==f.inArray("cells",b.limitTo)&&a.cells({selected:!0}).any()?!0:!1}var g=f.fn.dataTable;g.select={};g.select.version="1.3.1";g.select.init=function(a){var b=a.settings()[0],c=b.oInit.select,d=g.defaults.select;c=c===h?d:c;d="row";var e="api",l=!1,u=!0,k=!0,m="td, th",p="selected",n=!1; +b._select={};!0===c?(e="os",n=!0):"string"===typeof c?(e=c,n=!0):f.isPlainObject(c)&&(c.blurable!==h&&(l=c.blurable),c.toggleable!==h&&(u=c.toggleable),c.info!==h&&(k=c.info),c.items!==h&&(d=c.items),e=c.style!==h?c.style:"os",n=!0,c.selector!==h&&(m=c.selector),c.className!==h&&(p=c.className));a.select.selector(m);a.select.items(d);a.select.style(e);a.select.blurable(l);a.select.toggleable(u);a.select.info(k);b._select.className=p;f.fn.dataTable.ext.order["select-checkbox"]=function(b,a){return this.api().column(a, +{order:"index"}).nodes().map(function(a){return"row"===b._select.items?f(a).parent().hasClass(b._select.className):"cell"===b._select.items?f(a).hasClass(b._select.className):!1})};!n&&f(a.table().node()).hasClass("selectable")&&a.select.style("os")};f.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(a,b){g.ext.selector[b.type].push(function(a,d,e){d=d.selected;var c=[];if(!0!==d&&!1!==d)return e;for(var f=0,g=e.length;f -1) && + (filter.Age === undefined || client.Age === filter.Age) && + (!filter.Address || client.Address.indexOf(filter.Address) > -1) && + (!filter.Country || client.Country === filter.Country) && + (filter.Married === undefined || client.Married === filter.Married); + }); + }, + + insertItem: function(insertingClient) { + this.clients.push(insertingClient); + }, + + updateItem: function(updatingClient) {}, + + deleteItem: function(deletingClient) { + var clientIndex = $.inArray(deletingClient, this.clients); + this.clients.splice(clientIndex, 1); + } + + }; + + window.db = db; + + + db.countries = [{ + Name: "", + Id: 0 + }, + { + Name: "United States", + Id: 1 + }, + { + Name: "Canada", + Id: 2 + }, + { + Name: "United Kingdom", + Id: 3 + }, + { + Name: "France", + Id: 4 + }, + { + Name: "Brazil", + Id: 5 + }, + { + Name: "China", + Id: 6 + }, + { + Name: "Russia", + Id: 7 + } + ]; + + db.clients = [{ + "Name": "Otto Clay", + "Age": 61, + "Country": 6, + "Address": "Ap #897-1459 Quam Avenue", + "Married": false + }, + { + "Name": "Connor Johnston", + "Age": 73, + "Country": 7, + "Address": "Ap #370-4647 Dis Av.", + "Married": false + }, + { + "Name": "Lacey Hess", + "Age": 29, + "Country": 7, + "Address": "Ap #365-8835 Integer St.", + "Married": false + }, + { + "Name": "Timothy Henson", + "Age": 78, + "Country": 1, + "Address": "911-5143 Luctus Ave", + "Married": false + }, + { + "Name": "Ramona Benton", + "Age": 43, + "Country": 5, + "Address": "Ap #614-689 Vehicula Street", + "Married": true + }, + { + "Name": "Ezra Tillman", + "Age": 51, + "Country": 1, + "Address": "P.O. Box 738, 7583 Quisque St.", + "Married": true + }, + { + "Name": "Dante Carter", + "Age": 59, + "Country": 1, + "Address": "P.O. Box 976, 6316 Lorem, St.", + "Married": false + }, + { + "Name": "Christopher Mcclure", + "Age": 58, + "Country": 1, + "Address": "847-4303 Dictum Av.", + "Married": true + }, + { + "Name": "Ruby Rocha", + "Age": 62, + "Country": 2, + "Address": "5212 Sagittis Ave", + "Married": false + }, + { + "Name": "Imelda Hardin", + "Age": 39, + "Country": 5, + "Address": "719-7009 Auctor Av.", + "Married": false + }, + { + "Name": "Jonah Johns", + "Age": 28, + "Country": 5, + "Address": "P.O. Box 939, 9310 A Ave", + "Married": false + }, + { + "Name": "Herman Rosa", + "Age": 49, + "Country": 7, + "Address": "718-7162 Molestie Av.", + "Married": true + }, + { + "Name": "Arthur Gay", + "Age": 20, + "Country": 7, + "Address": "5497 Neque Street", + "Married": false + }, + { + "Name": "Xena Wilkerson", + "Age": 63, + "Country": 1, + "Address": "Ap #303-6974 Proin Street", + "Married": true + }, + { + "Name": "Lilah Atkins", + "Age": 33, + "Country": 5, + "Address": "622-8602 Gravida Ave", + "Married": true + }, + { + "Name": "Malik Shepard", + "Age": 59, + "Country": 1, + "Address": "967-5176 Tincidunt Av.", + "Married": false + }, + { + "Name": "Keely Silva", + "Age": 24, + "Country": 1, + "Address": "P.O. Box 153, 8995 Praesent Ave", + "Married": false + }, + { + "Name": "Hunter Pate", + "Age": 73, + "Country": 7, + "Address": "P.O. Box 771, 7599 Ante, Road", + "Married": false + }, + { + "Name": "Mikayla Roach", + "Age": 55, + "Country": 5, + "Address": "Ap #438-9886 Donec Rd.", + "Married": true + }, + { + "Name": "Upton Joseph", + "Age": 48, + "Country": 4, + "Address": "Ap #896-7592 Habitant St.", + "Married": true + }, + { + "Name": "Jeanette Pate", + "Age": 59, + "Country": 2, + "Address": "P.O. Box 177, 7584 Amet, St.", + "Married": false + }, + { + "Name": "Kaden Hernandez", + "Age": 79, + "Country": 3, + "Address": "366 Ut St.", + "Married": true + }, + { + "Name": "Kenyon Stevens", + "Age": 20, + "Country": 3, + "Address": "P.O. Box 704, 4580 Gravida Rd.", + "Married": false + }, + { + "Name": "Jerome Harper", + "Age": 31, + "Country": 5, + "Address": "2464 Porttitor Road", + "Married": false + }, + { + "Name": "Jelani Patel", + "Age": 36, + "Country": 2, + "Address": "P.O. Box 541, 5805 Nec Av.", + "Married": true + }, + { + "Name": "Keaton Oconnor", + "Age": 21, + "Country": 1, + "Address": "Ap #657-1093 Nec, Street", + "Married": false + }, + { + "Name": "Bree Johnston", + "Age": 31, + "Country": 2, + "Address": "372-5942 Vulputate Avenue", + "Married": false + }, + { + "Name": "Maisie Hodges", + "Age": 70, + "Country": 7, + "Address": "P.O. Box 445, 3880 Odio, Rd.", + "Married": false + }, + { + "Name": "Kuame Calhoun", + "Age": 39, + "Country": 2, + "Address": "P.O. Box 609, 4105 Rutrum St.", + "Married": true + }, + { + "Name": "Carlos Cameron", + "Age": 38, + "Country": 5, + "Address": "Ap #215-5386 A, Avenue", + "Married": false + }, + { + "Name": "Fulton Parsons", + "Age": 25, + "Country": 7, + "Address": "P.O. Box 523, 3705 Sed Rd.", + "Married": false + }, + { + "Name": "Wallace Christian", + "Age": 43, + "Country": 3, + "Address": "416-8816 Mauris Avenue", + "Married": true + }, + { + "Name": "Caryn Maldonado", + "Age": 40, + "Country": 1, + "Address": "108-282 Nonummy Ave", + "Married": false + }, + { + "Name": "Whilemina Frank", + "Age": 20, + "Country": 7, + "Address": "P.O. Box 681, 3938 Egestas. Av.", + "Married": true + }, + { + "Name": "Emery Moon", + "Age": 41, + "Country": 4, + "Address": "Ap #717-8556 Non Road", + "Married": true + }, + { + "Name": "Price Watkins", + "Age": 35, + "Country": 4, + "Address": "832-7810 Nunc Rd.", + "Married": false + }, + { + "Name": "Lydia Castillo", + "Age": 59, + "Country": 7, + "Address": "5280 Placerat, Ave", + "Married": true + }, + { + "Name": "Lawrence Conway", + "Age": 53, + "Country": 1, + "Address": "Ap #452-2808 Imperdiet St.", + "Married": false + }, + { + "Name": "Kalia Nicholson", + "Age": 67, + "Country": 5, + "Address": "P.O. Box 871, 3023 Tellus Road", + "Married": true + }, + { + "Name": "Brielle Baxter", + "Age": 45, + "Country": 3, + "Address": "Ap #822-9526 Ut, Road", + "Married": true + }, + { + "Name": "Valentine Brady", + "Age": 72, + "Country": 7, + "Address": "8014 Enim. Road", + "Married": true + }, + { + "Name": "Rebecca Gardner", + "Age": 57, + "Country": 4, + "Address": "8655 Arcu. Road", + "Married": true + }, + { + "Name": "Vladimir Tate", + "Age": 26, + "Country": 1, + "Address": "130-1291 Non, Rd.", + "Married": true + }, + { + "Name": "Vernon Hays", + "Age": 56, + "Country": 4, + "Address": "964-5552 In Rd.", + "Married": true + }, + { + "Name": "Allegra Hull", + "Age": 22, + "Country": 4, + "Address": "245-8891 Donec St.", + "Married": true + }, + { + "Name": "Hu Hendrix", + "Age": 65, + "Country": 7, + "Address": "428-5404 Tempus Ave", + "Married": true + }, + { + "Name": "Kenyon Battle", + "Age": 32, + "Country": 2, + "Address": "921-6804 Lectus St.", + "Married": false + }, + { + "Name": "Gloria Nielsen", + "Age": 24, + "Country": 4, + "Address": "Ap #275-4345 Lorem, Street", + "Married": true + }, + { + "Name": "Illiana Kidd", + "Age": 59, + "Country": 2, + "Address": "7618 Lacus. Av.", + "Married": false + }, + { + "Name": "Adria Todd", + "Age": 68, + "Country": 6, + "Address": "1889 Tincidunt Road", + "Married": false + }, + { + "Name": "Kirsten Mayo", + "Age": 71, + "Country": 1, + "Address": "100-8640 Orci, Avenue", + "Married": false + }, + { + "Name": "Willa Hobbs", + "Age": 60, + "Country": 6, + "Address": "P.O. Box 323, 158 Tristique St.", + "Married": false + }, + { + "Name": "Alexis Clements", + "Age": 69, + "Country": 5, + "Address": "P.O. Box 176, 5107 Proin Rd.", + "Married": false + }, + { + "Name": "Akeem Conrad", + "Age": 60, + "Country": 2, + "Address": "282-495 Sed Ave", + "Married": true + }, + { + "Name": "Montana Silva", + "Age": 79, + "Country": 6, + "Address": "P.O. Box 120, 9766 Consectetuer St.", + "Married": false + }, + { + "Name": "Kaseem Hensley", + "Age": 77, + "Country": 6, + "Address": "Ap #510-8903 Mauris. Av.", + "Married": true + }, + { + "Name": "Christopher Morton", + "Age": 35, + "Country": 5, + "Address": "P.O. Box 234, 3651 Sodales Avenue", + "Married": false + }, + { + "Name": "Wade Fernandez", + "Age": 49, + "Country": 6, + "Address": "740-5059 Dolor. Road", + "Married": true + }, + { + "Name": "Illiana Kirby", + "Age": 31, + "Country": 2, + "Address": "527-3553 Mi Ave", + "Married": false + }, + { + "Name": "Kimberley Hurley", + "Age": 65, + "Country": 5, + "Address": "P.O. Box 637, 9915 Dictum St.", + "Married": false + }, + { + "Name": "Arthur Olsen", + "Age": 74, + "Country": 5, + "Address": "887-5080 Eget St.", + "Married": false + }, + { + "Name": "Brody Potts", + "Age": 59, + "Country": 2, + "Address": "Ap #577-7690 Sem Road", + "Married": false + }, + { + "Name": "Dillon Ford", + "Age": 60, + "Country": 1, + "Address": "Ap #885-9289 A, Av.", + "Married": true + }, + { + "Name": "Hannah Juarez", + "Age": 61, + "Country": 2, + "Address": "4744 Sapien, Rd.", + "Married": true + }, + { + "Name": "Vincent Shaffer", + "Age": 25, + "Country": 2, + "Address": "9203 Nunc St.", + "Married": true + }, + { + "Name": "George Holt", + "Age": 27, + "Country": 6, + "Address": "4162 Cras Rd.", + "Married": false + }, + { + "Name": "Tobias Bartlett", + "Age": 74, + "Country": 4, + "Address": "792-6145 Mauris St.", + "Married": true + }, + { + "Name": "Xavier Hooper", + "Age": 35, + "Country": 1, + "Address": "879-5026 Interdum. Rd.", + "Married": false + }, + { + "Name": "Declan Dorsey", + "Age": 31, + "Country": 2, + "Address": "Ap #926-4171 Aenean Road", + "Married": true + }, + { + "Name": "Clementine Tran", + "Age": 43, + "Country": 4, + "Address": "P.O. Box 176, 9865 Eu Rd.", + "Married": true + }, + { + "Name": "Pamela Moody", + "Age": 55, + "Country": 6, + "Address": "622-6233 Luctus Rd.", + "Married": true + }, + { + "Name": "Julie Leon", + "Age": 43, + "Country": 6, + "Address": "Ap #915-6782 Sem Av.", + "Married": true + }, + { + "Name": "Shana Nolan", + "Age": 79, + "Country": 5, + "Address": "P.O. Box 603, 899 Eu St.", + "Married": false + }, + { + "Name": "Vaughan Moody", + "Age": 37, + "Country": 5, + "Address": "880 Erat Rd.", + "Married": false + }, + { + "Name": "Randall Reeves", + "Age": 44, + "Country": 3, + "Address": "1819 Non Street", + "Married": false + }, + { + "Name": "Dominic Raymond", + "Age": 68, + "Country": 1, + "Address": "Ap #689-4874 Nisi Rd.", + "Married": true + }, + { + "Name": "Lev Pugh", + "Age": 69, + "Country": 5, + "Address": "Ap #433-6844 Auctor Avenue", + "Married": true + }, + { + "Name": "Desiree Hughes", + "Age": 80, + "Country": 4, + "Address": "605-6645 Fermentum Avenue", + "Married": true + }, + { + "Name": "Idona Oneill", + "Age": 23, + "Country": 7, + "Address": "751-8148 Aliquam Avenue", + "Married": true + }, + { + "Name": "Lani Mayo", + "Age": 76, + "Country": 1, + "Address": "635-2704 Tristique St.", + "Married": true + }, + { + "Name": "Cathleen Bonner", + "Age": 40, + "Country": 1, + "Address": "916-2910 Dolor Av.", + "Married": false + }, + { + "Name": "Sydney Murray", + "Age": 44, + "Country": 5, + "Address": "835-2330 Fringilla St.", + "Married": false + }, + { + "Name": "Brenna Rodriguez", + "Age": 77, + "Country": 6, + "Address": "3687 Imperdiet Av.", + "Married": true + }, + { + "Name": "Alfreda Mcdaniel", + "Age": 38, + "Country": 7, + "Address": "745-8221 Aliquet Rd.", + "Married": true + }, + { + "Name": "Zachery Atkins", + "Age": 30, + "Country": 1, + "Address": "549-2208 Auctor. Road", + "Married": true + }, + { + "Name": "Amelia Rich", + "Age": 56, + "Country": 4, + "Address": "P.O. Box 734, 4717 Nunc Rd.", + "Married": false + }, + { + "Name": "Kiayada Witt", + "Age": 62, + "Country": 3, + "Address": "Ap #735-3421 Malesuada Avenue", + "Married": false + }, + { + "Name": "Lysandra Pierce", + "Age": 36, + "Country": 1, + "Address": "Ap #146-2835 Curabitur St.", + "Married": true + }, + { + "Name": "Cara Rios", + "Age": 58, + "Country": 4, + "Address": "Ap #562-7811 Quam. Ave", + "Married": true + }, + { + "Name": "Austin Andrews", + "Age": 55, + "Country": 7, + "Address": "P.O. Box 274, 5505 Sociis Rd.", + "Married": false + }, + { + "Name": "Lillian Peterson", + "Age": 39, + "Country": 2, + "Address": "6212 A Avenue", + "Married": false + }, + { + "Name": "Adria Beach", + "Age": 29, + "Country": 2, + "Address": "P.O. Box 183, 2717 Nunc Avenue", + "Married": true + }, + { + "Name": "Oleg Durham", + "Age": 80, + "Country": 4, + "Address": "931-3208 Nunc Rd.", + "Married": false + }, + { + "Name": "Casey Reese", + "Age": 60, + "Country": 4, + "Address": "383-3675 Ultrices, St.", + "Married": false + }, + { + "Name": "Kane Burnett", + "Age": 80, + "Country": 1, + "Address": "759-8212 Dolor. Ave", + "Married": false + }, + { + "Name": "Stewart Wilson", + "Age": 46, + "Country": 7, + "Address": "718-7845 Sagittis. Av.", + "Married": false + }, + { + "Name": "Charity Holcomb", + "Age": 31, + "Country": 6, + "Address": "641-7892 Enim. Ave", + "Married": false + }, + { + "Name": "Kyra Cummings", + "Age": 43, + "Country": 4, + "Address": "P.O. Box 702, 6621 Mus. Av.", + "Married": false + }, + { + "Name": "Stuart Wallace", + "Age": 25, + "Country": 7, + "Address": "648-4990 Sed Rd.", + "Married": true + }, + { + "Name": "Carter Clarke", + "Age": 59, + "Country": 6, + "Address": "Ap #547-2921 A Street", + "Married": false + } + ]; + + db.users = [{ + "ID": "x", + "Account": "A758A693-0302-03D1-AE53-EEFE22855556", + "Name": "Carson Kelley", + "RegisterDate": "2002-04-20T22:55:52-07:00" + }, + { + "Account": "D89FF524-1233-0CE7-C9E1-56EFF017A321", + "Name": "Prescott Griffin", + "RegisterDate": "2011-02-22T05:59:55-08:00" + }, + { + "Account": "06FAAD9A-5114-08F6-D60C-961B2528B4F0", + "Name": "Amir Saunders", + "RegisterDate": "2014-08-13T09:17:49-07:00" + }, + { + "Account": "EED7653D-7DD9-A722-64A8-36A55ECDBE77", + "Name": "Derek Thornton", + "RegisterDate": "2012-02-27T01:31:07-08:00" + }, + { + "Account": "2A2E6D40-FEBD-C643-A751-9AB4CAF1E2F6", + "Name": "Fletcher Romero", + "RegisterDate": "2010-06-25T15:49:54-07:00" + }, + { + "Account": "3978F8FA-DFF0-DA0E-0A5D-EB9D281A3286", + "Name": "Thaddeus Stein", + "RegisterDate": "2013-11-10T07:29:41-08:00" + }, + { + "Account": "658DBF5A-176E-569A-9273-74FB5F69FA42", + "Name": "Nash Knapp", + "RegisterDate": "2005-06-24T09:11:19-07:00" + }, + { + "Account": "76D2EE4B-7A73-1212-F6F2-957EF8C1F907", + "Name": "Quamar Vega", + "RegisterDate": "2011-04-13T20:06:29-07:00" + }, + { + "Account": "00E46809-A595-CE82-C5B4-D1CAEB7E3E58", + "Name": "Philip Galloway", + "RegisterDate": "2008-08-21T18:59:38-07:00" + }, + { + "Account": "C196781C-DDCC-AF83-DDC2-CA3E851A47A0", + "Name": "Mason French", + "RegisterDate": "2000-11-15T00:38:37-08:00" + }, + { + "Account": "5911F201-818A-B393-5888-13157CE0D63F", + "Name": "Ross Cortez", + "RegisterDate": "2010-05-27T17:35:32-07:00" + }, + { + "Account": "B8BB78F9-E1A1-A956-086F-E12B6FE168B6", + "Name": "Logan King", + "RegisterDate": "2003-07-08T16:58:06-07:00" + }, + { + "Account": "06F636C3-9599-1A2D-5FD5-86B24ADDE626", + "Name": "Cedric Leblanc", + "RegisterDate": "2011-06-30T14:30:10-07:00" + }, + { + "Account": "FE880CDD-F6E7-75CB-743C-64C6DE192412", + "Name": "Simon Sullivan", + "RegisterDate": "2013-06-11T16:35:07-07:00" + }, + { + "Account": "BBEDD673-E2C1-4872-A5D3-C4EBD4BE0A12", + "Name": "Jamal West", + "RegisterDate": "2001-03-16T20:18:29-08:00" + }, + { + "Account": "19BC22FA-C52E-0CC6-9552-10365C755FAC", + "Name": "Hector Morales", + "RegisterDate": "2012-11-01T01:56:34-07:00" + }, + { + "Account": "A8292214-2C13-5989-3419-6B83DD637D6C", + "Name": "Herrod Hart", + "RegisterDate": "2008-03-13T19:21:04-07:00" + }, + { + "Account": "0285564B-F447-0E7F-EAA1-7FB8F9C453C8", + "Name": "Clark Maxwell", + "RegisterDate": "2004-08-05T08:22:24-07:00" + }, + { + "Account": "EA78F076-4F6E-4228-268C-1F51272498AE", + "Name": "Reuben Walter", + "RegisterDate": "2011-01-23T01:55:59-08:00" + }, + { + "Account": "6A88C194-EA21-426F-4FE2-F2AE33F51793", + "Name": "Ira Ingram", + "RegisterDate": "2008-08-15T05:57:46-07:00" + }, + { + "Account": "4275E873-439C-AD26-56B3-8715E336508E", + "Name": "Damian Morrow", + "RegisterDate": "2015-09-13T01:50:55-07:00" + }, + { + "Account": "A0D733C4-9070-B8D6-4387-D44F0BA515BE", + "Name": "Macon Farrell", + "RegisterDate": "2011-03-14T05:41:40-07:00" + }, + { + "Account": "B3683DE8-C2FA-7CA0-A8A6-8FA7E954F90A", + "Name": "Joel Galloway", + "RegisterDate": "2003-02-03T04:19:01-08:00" + }, + { + "Account": "01D95A8E-91BC-2050-F5D0-4437AAFFD11F", + "Name": "Rigel Horton", + "RegisterDate": "2015-06-20T11:53:11-07:00" + }, + { + "Account": "F0D12CC0-31AC-A82E-FD73-EEEFDBD21A36", + "Name": "Sylvester Gaines", + "RegisterDate": "2004-03-12T09:57:13-08:00" + }, + { + "Account": "874FCC49-9A61-71BC-2F4E-2CE88348AD7B", + "Name": "Abbot Mckay", + "RegisterDate": "2008-12-26T20:42:57-08:00" + }, + { + "Account": "B8DA1912-20A0-FB6E-0031-5F88FD63EF90", + "Name": "Solomon Green", + "RegisterDate": "2013-09-04T01:44:47-07:00" + } + ]; + + }()); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/demo.js b/public/admin/js/demo.js new file mode 100644 index 0000000..6dcf1ad --- /dev/null +++ b/public/admin/js/demo.js @@ -0,0 +1,10 @@ +(function($) { + 'use strict'; + $(function() { + $("#features-link").on("click", function() { + $('html, body').animate({ + scrollTop: $("#features").offset().top + }, 1000); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/desktop-notification.js b/public/admin/js/desktop-notification.js new file mode 100644 index 0000000..073e4b8 --- /dev/null +++ b/public/admin/js/desktop-notification.js @@ -0,0 +1,80 @@ +(function($) { + 'use strict'; + $.fn.easyNotify = function(options) { + + var settings = $.extend({ + title: "Notification", + options: { + body: "", + icon: "", + lang: 'pt-BR', + onClose: "", + onClick: "", + onError: "" + } + }, options); + + this.init = function() { + var notify = this; + if (!("Notification" in window)) { + alert("This browser does not support desktop notification"); + } else if (Notification.permission === "granted") { + + var notification = new Notification(settings.title, settings.options); + + notification.onclose = function() { + if (typeof settings.options.onClose === 'function') { + settings.options.onClose(); + } + }; + + notification.onclick = function() { + if (typeof settings.options.onClick === 'function') { + settings.options.onClick(); + } + }; + + notification.onerror = function() { + if (typeof settings.options.onError === 'function') { + settings.options.onError(); + } + }; + + } else if (Notification.permission !== 'denied') { + Notification.requestPermission(function(permission) { + if (permission === "granted") { + notify.init(); + } + + }); + } + + }; + + this.init(); + return this; + }; + + + //Initialise notification + var myFunction = function() { + alert('Click function'); + }; + var myImg = "https://unsplash.it/600/600?image=777"; + + $("form").submit(function(event) { + event.preventDefault(); + + var options = { + title: $("#title").val(), + options: { + body: $("#message").val(), + icon: myImg, + lang: 'en-US', + onClick: myFunction + } + }; + console.log(options); + $("#easyNotify").easyNotify(options); + }); +}(jQuery)); \ No newline at end of file diff --git a/public/admin/js/dragula.js b/public/admin/js/dragula.js new file mode 100644 index 0000000..758f5bd --- /dev/null +++ b/public/admin/js/dragula.js @@ -0,0 +1,16 @@ +(function($) { + 'use strict'; + var iconTochange; + dragula([document.getElementById("dragula-left"), document.getElementById("dragula-right")]); + dragula([document.getElementById("profile-list-left"), document.getElementById("profile-list-right")]); + dragula([document.getElementById("dragula-event-left"), document.getElementById("dragula-event-right")]) + .on('drop', function(el) { + console.log($(el)); + iconTochange = $(el).find('.ti'); + if (iconTochange.hasClass('ti-pin-alt')) { + iconTochange.removeClass('ti-pin-alt text-primary').addClass('ti-time text-success'); + } else if (iconTochange.hasClass('ti-time')) { + iconTochange.removeClass('ti-time text-success').addClass('ti-pin-alt text-primary'); + } + }) +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/dropify.js b/public/admin/js/dropify.js new file mode 100644 index 0000000..1a74da3 --- /dev/null +++ b/public/admin/js/dropify.js @@ -0,0 +1,4 @@ +(function($) { + 'use strict'; + $('.dropify').dropify(); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/dropzone.js b/public/admin/js/dropzone.js new file mode 100644 index 0000000..991ec71 --- /dev/null +++ b/public/admin/js/dropzone.js @@ -0,0 +1,6 @@ +(function($) { + 'use strict'; + $("my-awesome-dropzone").dropzone({ + url: "bootstrapdash.com/" + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/editorDemo.js b/public/admin/js/editorDemo.js new file mode 100644 index 0000000..613eb76 --- /dev/null +++ b/public/admin/js/editorDemo.js @@ -0,0 +1,219 @@ +(function($) { + 'use strict'; + /*Quill editor*/ + if ($("#quillExample1").length) { + var quill = new Quill('#quillExample1', { + modules: { + toolbar: [ + [{ + header: [1, 2, false] + }], + ['bold', 'italic', 'underline'], + ['image', 'code-block'] + ] + }, + placeholder: 'Compose an epic...', + theme: 'snow' // or 'bubble' + }); + } + + /*simplemde editor*/ + if ($("#simpleMde").length) { + var simplemde = new SimpleMDE({ + element: $("#simpleMde")[0] + }); + } + + /*Tinymce editor*/ + if ($("#tinyMceExample").length) { + tinymce.init({ + selector: '#tinyMceExample', + height: 500, + theme: 'silver', + plugins: [ + 'advlist autolink lists link image charmap print preview hr anchor pagebreak', + 'searchreplace wordcount visualblocks visualchars code fullscreen' + ], + toolbar1: 'undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image', + toolbar2: 'print preview media | forecolor backcolor emoticons | codesample help', + image_advtab: true, + templates: [{ + title: 'Test template 1', + content: 'Test 1' + }, + { + title: 'Test template 2', + content: 'Test 2' + } + ], + content_css: [] + }); + } + + /*Summernote editor*/ + if ($("#summernoteExample").length) { + $('#summernoteExample').summernote({ + height: 300, + tabsize: 2 + }); + } + + /*X-editable editor*/ + if ($('#editable-form').length) { + $.fn.editable.defaults.mode = 'inline'; + $.fn.editableform.buttons = + '' + + ''; + $('#username').editable({ + type: 'text', + pk: 1, + name: 'username', + title: 'Enter username' + }); + + $('#firstname').editable({ + validate: function(value) { + if ($.trim(value) === '') return 'This field is required'; + } + }); + + $('#sex').editable({ + source: [{ + value: 1, + text: 'Male' + }, + { + value: 2, + text: 'Female' + } + ] + }); + + $('#status').editable(); + + $('#group').editable({ + showbuttons: false + }); + + $('#vacation').editable({ + datepicker: { + todayBtn: 'linked' + } + }); + + $('#dob').editable(); + + $('#event').editable({ + placement: 'right', + combodate: { + firstItem: 'name' + } + }); + + $('#meeting_start').editable({ + format: 'yyyy-mm-dd hh:ii', + viewformat: 'dd/mm/yyyy hh:ii', + validate: function(v) { + if (v && v.getDate() === 10) return 'Day cant be 10!'; + }, + datetimepicker: { + todayBtn: 'linked', + weekStart: 1 + } + }); + + $('#comments').editable({ + showbuttons: 'bottom' + }); + + $('#note').editable(); + $('#pencil').on("click", function(e) { + e.stopPropagation(); + e.preventDefault(); + $('#note').editable('toggle'); + }); + + $('#state').editable({ + source: ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Dakota", "North Carolina", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"] + }); + + $('#state2').editable({ + value: 'California', + typeahead: { + name: 'state', + local: ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Dakota", "North Carolina", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"] + } + }); + + $('#fruits').editable({ + pk: 1, + limit: 3, + source: [{ + value: 1, + text: 'banana' + }, + { + value: 2, + text: 'peach' + }, + { + value: 3, + text: 'apple' + }, + { + value: 4, + text: 'watermelon' + }, + { + value: 5, + text: 'orange' + } + ] + }); + + $('#tags').editable({ + inputclass: 'input-large', + select2: { + tags: ['html', 'javascript', 'css', 'ajax'], + tokenSeparators: [",", " "] + } + }); + + $('#address').editable({ + url: '/post', + value: { + city: "Moscow", + street: "Lenina", + building: "12" + }, + validate: function(value) { + if (value.city === '') return 'city is required!'; + }, + display: function(value) { + if (!value) { + $(this).empty(); + return; + } + var html = '' + $('
').text(value.city).html() + ', ' + $('
').text(value.street).html() + ' st., bld. ' + $('
').text(value.building).html(); + $(this).html(html); + } + }); + + $('#user .editable').on('hidden', function(e, reason) { + if (reason === 'save' || reason === 'nochange') { + var $next = $(this).closest('tr').next().find('.editable'); + if ($('#autoopen').is(':checked')) { + setTimeout(function() { + $next.editable('show'); + }, 300); + } else { + $next.focus(); + } + } + }); + } +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/file-upload.js b/public/admin/js/file-upload.js new file mode 100644 index 0000000..6991221 --- /dev/null +++ b/public/admin/js/file-upload.js @@ -0,0 +1,12 @@ +(function($) { + 'use strict'; + $(function() { + $('.file-upload-browse').on('click', function() { + var file = $(this).parent().parent().parent().find('.file-upload-default'); + file.trigger('click'); + }); + $('.file-upload-default').on('change', function() { + $(this).parent().find('.form-control').val($(this).val().replace(/C:\\fakepath\\/i, '')); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/flot-chart.js b/public/admin/js/flot-chart.js new file mode 100644 index 0000000..28b11f4 --- /dev/null +++ b/public/admin/js/flot-chart.js @@ -0,0 +1,563 @@ +(function($) { + 'use strict'; + var data = [{ + data: 18000, + color: '#FABA66', + label: 'Linda' + }, + { + data: 20000, + color: '#F36368', + label: 'John' + }, + { + data: 13000, + color: '#76C1FA', + label: 'Margaret' + }, + { + data: 15000, + color: '#63CF72', + label: 'Richard' + } + ]; + + if ($("#pie-chart").length) { + $.plot("#pie-chart", data, { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 3 / 4, + formatter: labelFormatter, + background: { + opacity: 0.5 + } + } + } + }, + legend: { + show: false + } + }); + } + + function labelFormatter(label, series) { + return "
" + label + "
" + Math.round(series.percent) + "%
"; + } + + + /*--------------------- + ----- LINE CHART ----- + ---------------------*/ + + var d1 = [ + [0, 30], + [1, 35], + [2, 35], + [3, 30], + [4, 30] + ]; + var d2 = [ + [0, 50], + [1, 40], + [2, 45], + [3, 60], + [4, 50] + ]; + var d3 = [ + [0, 40], + [1, 50], + [2, 35], + [3, 25], + [4, 40] + ]; + + var stackedData = [{ + data: d1, + color: "#76C1FA" + }, + { + data: d2, + color: "#63CF72" + }, + { + data: d3, + color: "#F36368" + } + ]; + /*--------------------------------------------------- + Make some random data for Recent Items chart + ---------------------------------------------------*/ + + + var options = { + series: { + shadowSize: 0, + lines: { + show: true, + }, + }, + grid: { + borderWidth: 1, + labelMargin: 10, + mouseActiveRadius: 6, + borderColor: '#eee', + show: true, + hoverable: true, + clickable: true + + }, + xaxis: { + tickColor: '#eee', + tickDecimals: 0, + font: { + lineHeight: 15, + style: "normal", + color: "#000" + }, + shadowSize: 0, + ticks: [ + [0, "Jan"], + [1, "Feb"], + [2, "Mar"], + [3, "Apr"], + [4, "May"], + [5, "Jun"], + [6, "Jul"], + [7, "Aug"], + [8, "Sep"], + [9, "Oct"], + [10, "Nov"], + [11, "Dec"] + ] + }, + + yaxis: { + tickColor: '#eee', + tickDecimals: 0, + font: { + lineHeight: 15, + style: "normal", + color: "#000", + }, + shadowSize: 0 + }, + + legend: { + container: '.flc-line', + backgroundOpacity: 0.5, + noColumns: 0, + backgroundColor: "white", + lineWidth: 0 + }, + colors: ["#F36368", "#63CF72", "#68B3C8"] + }; + + + if ($("#line-chart").length) { + $.plot($("#line-chart"), [{ + data: d1, + lines: { + show: true + }, + label: 'Product A', + stack: true, + color: '#F36368' + }, + { + data: d2, + lines: { + show: true + }, + label: 'Product B', + stack: true, + color: '#FABA66' + }, + { + data: d3, + lines: { + show: true + }, + label: 'Product C', + stack: true, + color: '#68B3C8' + } + ], options); + } + + + + + /*--------------------------------- + Tooltips for Flot Charts + ---------------------------------*/ + if ($(".flot-chart-line").length) { + $(".flot-chart-line").on("bind", "plothover", function(event, pos, item) { + if (item) { + var x = item.datapoint[0].toFixed(2), + y = item.datapoint[1].toFixed(2); + $(".flot-tooltip").html(item.series.label + " Sales " + " : " + y).css({ + top: item.pageY + 5, + left: item.pageX + 5 + }).show(); + } else { + $(".flot-tooltip").hide(); + } + }); + + $("
").appendTo("body"); + } + + + + + /*--------------------- + ----- AREA CHART ----- + ---------------------*/ + + + var d1 = [ + [0, 0], + [1, 35], + [2, 35], + [3, 30], + [4, 30], + [5, 5], + [6, 32], + [7, 37], + [8, 30], + [9, 35], + [10, 30], + [11, 5] + ]; + + + var options = { + series: { + shadowSize: 0, + curvedLines: { //This is a third party plugin to make curved lines + apply: true, + active: true, + monotonicFit: true + }, + lines: { + show: false, + fill: 0.98, + lineWidth: 0, + }, + }, + grid: { + borderWidth: 0, + labelMargin: 10, + hoverable: true, + clickable: true, + mouseActiveRadius: 6, + + }, + xaxis: { + tickDecimals: 0, + tickLength: 0 + }, + + yaxis: { + tickDecimals: 0, + tickLength: 0 + }, + + legend: { + show: false + } + }; + + var curvedLineOptions = { + series: { + shadowSize: 0, + curvedLines: { //This is a third party plugin to make curved lines + apply: true, + active: true, + monotonicFit: true + }, + lines: { + show: false, + lineWidth: 0, + }, + }, + grid: { + borderWidth: 0, + labelMargin: 10, + hoverable: true, + clickable: true, + mouseActiveRadius: 6, + + }, + xaxis: { + tickDecimals: 0, + ticks: false + }, + + yaxis: { + tickDecimals: 0, + ticks: false + }, + + legend: { + noColumns: 4, + container: $("#chartLegend") + } + }; + + if ($("#area-chart").length) { + $.plot($("#area-chart"), [{ + data: d1, + lines: { + show: true, + fill: 0.6 + }, + label: 'Product 1', + stack: true, + color: '#76C1FA' + }], options); + } + + + + + /*--------------------- + ----- COLUMN CHART ----- + ---------------------*/ + + $(function() { + + var data = [ + ["January", 10], + ["February", 8], + ["March", 4], + ["April", 13], + ["May", 17], + ["June", 9] + ]; + + if ($("#column-chart").length) { + $.plot("#column-chart", [data], { + series: { + bars: { + show: true, + barWidth: 0.6, + align: "center" + } + }, + xaxis: { + mode: "categories", + tickLength: 0 + }, + + grid: { + borderWidth: 0, + labelMargin: 10, + hoverable: true, + clickable: true, + mouseActiveRadius: 6, + } + + }); + } + }); + + + + /*-------------------------------- + ----- STACKED CHART ----- + --------------------------------*/ + + $(function() { + + var d1 = []; + for (var i = 0; i <= 10; i += 1) { + d1.push([i, parseInt(Math.random() * 30)]); + } + + var d2 = []; + for (var i = 0; i <= 10; i += 1) { + d2.push([i, parseInt(Math.random() * 30)]); + } + + var d3 = []; + for (var i = 0; i <= 10; i += 1) { + d3.push([i, parseInt(Math.random() * 30)]); + } + + if ($("#stacked-bar-chart").length) { + $.plot("#stacked-bar-chart", stackedData, { + series: { + stack: 0, + lines: { + show: false, + fill: true, + steps: false + }, + bars: { + show: true, + fill: true, + barWidth: 0.6 + }, + }, + grid: { + borderWidth: 0, + labelMargin: 10, + hoverable: true, + clickable: true, + mouseActiveRadius: 6, + } + }); + } + }); + + /*-------------------------------- + ----- REALTIME CHART ----- + --------------------------------*/ + $(function() { + + // We use an inline data source in the example, usually data would + // be fetched from a server + + var data = [], + totalPoints = 300; + + function getRandomData() { + + if (data.length > 0) + data = data.slice(1); + + // Do a random walk + + while (data.length < totalPoints) { + + var prev = data.length > 0 ? data[data.length - 1] : 50, + y = prev + Math.random() * 10 - 5; + + if (y < 0) { + y = 0; + } else if (y > 100) { + y = 100; + } + + data.push(y); + } + + // Zip the generated y values with the x values + + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + + return res; + } + + // Set up the control widget + + var updateInterval = 30; + if ($("#realtime-chart").length) { + var plot = $.plot("#realtime-chart", [getRandomData()], { + series: { + shadowSize: 0 // Drawing is faster without shadows + }, + yaxis: { + min: 0, + max: 100 + }, + xaxis: { + show: false + }, + grid: { + borderWidth: 0, + labelMargin: 10, + hoverable: true, + clickable: true, + mouseActiveRadius: 6, + } + + }); + + function update() { + + plot.setData([getRandomData()]); + + // Since the axes don't change, we don't need to call plot.setupGrid() + + plot.draw(); + setTimeout(update, updateInterval); + } + + update(); + } + + }); + /*-------------------------------- + ----- CURVED LINE CHART ----- + --------------------------------*/ + + $(function() { + + var d1 = [ + [0, 6], + [1, 14], + [2, 10], + [3, 14], + [4, 5] + ]; + var d2 = [ + [0, 6], + [1, 7], + [2, 11], + [3, 8], + [4, 11] + ]; + var d3 = [ + [0, 6], + [1, 5], + [2, 6], + [3, 10], + [4, 5] + ]; + + if ($("#curved-line-chart").length) { + $.plot($("#curved-line-chart"), [{ + data: d1, + lines: { + show: true, + fill: 0.98 + }, + label: 'Plans', + stack: true, + color: '#5E50F9' + }, + { + data: d2, + lines: { + show: true, + fill: 0.98 + }, + label: 'Purchase', + stack: true, + color: '#8C95FC' + }, + { + data: d3, + lines: { + show: true, + fill: 0.98 + }, + label: 'Services', + stack: true, + color: '#A8B4FD' + } + ], curvedLineOptions); + } + + }); + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/form-addons.js b/public/admin/js/form-addons.js new file mode 100644 index 0000000..d62847c --- /dev/null +++ b/public/admin/js/form-addons.js @@ -0,0 +1,146 @@ +(function($) { + 'use strict'; + + // Jquery Tag Input Starts + $('#tags').tagsInput({ + 'width': '100%', + 'height': '75%', + 'interactive': true, + 'defaultText': 'Add More', + 'removeWithBackspace': true, + 'minChars': 0, + 'maxChars': 20, // if not provided there is no limit + 'placeholderColor': '#666666' + }); + + // Jquery Tag Input Ends + // Jquery Bar Rating Starts + + $(function() { + function ratingEnable() { + $('#example-1to10').barrating('show', { + theme: 'bars-1to10' + }); + + $('#example-movie').barrating('show', { + theme: 'bars-movie' + }); + + $('#example-movie').barrating('set', 'Mediocre'); + + $('#example-square').barrating('show', { + theme: 'bars-square', + showValues: true, + showSelectedRating: false + }); + + $('#example-pill').barrating('show', { + theme: 'bars-pill', + initialRating: 'A', + showValues: true, + showSelectedRating: false, + allowEmpty: true, + emptyValue: '-- no rating selected --', + onSelect: function(value, text) { + alert('Selected rating: ' + value); + } + }); + + $('#example-reversed').barrating('show', { + theme: 'bars-reversed', + showSelectedRating: true, + reverse: true + }); + + $('#example-horizontal').barrating('show', { + theme: 'bars-horizontal', + reverse: true, + hoverState: false + }); + + $('#example-fontawesome').barrating({ + theme: 'fontawesome-stars', + showSelectedRating: false + }); + + $('#example-css').barrating({ + theme: 'css-stars', + showSelectedRating: false + }); + + $('#example-bootstrap').barrating({ + theme: 'bootstrap-stars', + showSelectedRating: false + }); + + var currentRating = $('#example-fontawesome-o').data('current-rating'); + + $('.stars-example-fontawesome-o .current-rating') + .find('span') + .html(currentRating); + + $('.stars-example-fontawesome-o .clear-rating').on('click', function(event) { + event.preventDefault(); + + $('#example-fontawesome-o') + .barrating('clear'); + }); + + $('#example-fontawesome-o').barrating({ + theme: 'fontawesome-stars-o', + showSelectedRating: false, + initialRating: currentRating, + onSelect: function(value, text) { + if (!value) { + $('#example-fontawesome-o') + .barrating('clear'); + } else { + $('.stars-example-fontawesome-o .current-rating') + .addClass('hidden'); + + $('.stars-example-fontawesome-o .your-rating') + .removeClass('hidden') + .find('span') + .html(value); + } + }, + onClear: function(value, text) { + $('.stars-example-fontawesome-o') + .find('.current-rating') + .removeClass('hidden') + .end() + .find('.your-rating') + .addClass('hidden'); + } + }); + } + + function ratingDisable() { + $('select').barrating('destroy'); + } + + $('.rating-enable').on("click", function(event) { + event.preventDefault(); + + ratingEnable(); + + $(this).addClass('deactivated'); + $('.rating-disable').removeClass('deactivated'); + }); + + $('.rating-disable').on("click", function(event) { + event.preventDefault(); + + ratingDisable(); + + $(this).addClass('deactivated'); + $('.rating-enable').removeClass('deactivated'); + }); + + ratingEnable(); + }); + + + // Jquery Bar Rating Ends + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/form-repeater.js b/public/admin/js/form-repeater.js new file mode 100644 index 0000000..ad80ffc --- /dev/null +++ b/public/admin/js/form-repeater.js @@ -0,0 +1,38 @@ +(function($) { + 'use strict'; + $(function() { + $('.repeater').repeater({ + // (Optional) + // "defaultValues" sets the values of added items. The keys of + // defaultValues refer to the value of the input's name attribute. + // If a default value is not specified for an input, then it will + // have its value cleared. + defaultValues: { + 'text-input': 'foo' + }, + // (Optional) + // "show" is called just after an item is added. The item is hidden + // at this point. If a show callback is not given the item will + // have $(this).show() called on it. + show: function() { + $(this).slideDown(); + }, + // (Optional) + // "hide" is called when a user clicks on a data-repeater-delete + // element. The item is still visible. "hide" is passed a function + // as its first argument which will properly remove the item. + // "hide" allows for a confirmation step, to send a delete request + // to the server, etc. If a hide callback is not given the item + // will be deleted. + hide: function(deleteElement) { + if (confirm('Are you sure you want to delete this element?')) { + $(this).slideUp(deleteElement); + } + }, + // (Optional) + // Removes the delete button from the first list item, + // defaults to false. + isFirstItemUndeletable: true + }) + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/form-validation.js b/public/admin/js/form-validation.js new file mode 100644 index 0000000..33c0c92 --- /dev/null +++ b/public/admin/js/form-validation.js @@ -0,0 +1,97 @@ +(function($) { + 'use strict'; + $.validator.setDefaults({ + submitHandler: function() { + alert("submitted!"); + } + }); + $(function() { + // validate the comment form when it is submitted + $("#commentForm").validate({ + errorPlacement: function(label, element) { + label.addClass('mt-2 text-danger'); + label.insertAfter(element); + }, + highlight: function(element, errorClass) { + $(element).parent().addClass('has-danger') + $(element).addClass('form-control-danger') + } + }); + // validate signup form on keyup and submit + $("#signupForm").validate({ + rules: { + firstname: "required", + lastname: "required", + username: { + required: true, + minlength: 2 + }, + password: { + required: true, + minlength: 5 + }, + confirm_password: { + required: true, + minlength: 5, + equalTo: "#password" + }, + email: { + required: true, + email: true + }, + topic: { + required: "#newsletter:checked", + minlength: 2 + }, + agree: "required" + }, + messages: { + firstname: "Please enter your firstname", + lastname: "Please enter your lastname", + username: { + required: "Please enter a username", + minlength: "Your username must consist of at least 2 characters" + }, + password: { + required: "Please provide a password", + minlength: "Your password must be at least 5 characters long" + }, + confirm_password: { + required: "Please provide a password", + minlength: "Your password must be at least 5 characters long", + equalTo: "Please enter the same password as above" + }, + email: "Please enter a valid email address", + agree: "Please accept our policy", + topic: "Please select at least 2 topics" + }, + errorPlacement: function(label, element) { + label.addClass('mt-2 text-danger'); + label.insertAfter(element); + }, + highlight: function(element, errorClass) { + $(element).parent().addClass('has-danger') + $(element).addClass('form-control-danger') + } + }); + // propose username by combining first- and lastname + $("#username").focus(function() { + var firstname = $("#firstname").val(); + var lastname = $("#lastname").val(); + if (firstname && lastname && !this.value) { + this.value = firstname + "." + lastname; + } + }); + //code to hide topic selection, disable for demo + var newsletter = $("#newsletter"); + // newsletter topics are optional, hide at first + var inital = newsletter.is(":checked"); + var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray"); + var topicInputs = topics.find("input").attr("disabled", !inital); + // show when newsletter is checked + newsletter.on("click", function() { + topics[this.checked ? "removeClass" : "addClass"]("gray"); + topicInputs.attr("disabled", !this.checked); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/formpickers.js b/public/admin/js/formpickers.js new file mode 100644 index 0000000..ed4118e --- /dev/null +++ b/public/admin/js/formpickers.js @@ -0,0 +1,37 @@ +(function($) { + 'use strict'; + if ($("#timepicker-example").length) { + $('#timepicker-example').datetimepicker({ + format: 'LT' + }); + } + if ($(".color-picker").length) { + $('.color-picker').asColorPicker(); + } + if ($("#datepicker-popup").length) { + $('#datepicker-popup').datepicker({ + enableOnReadonly: true, + todayHighlight: true, + }); + } + if ($("#inline-datepicker").length) { + $('#inline-datepicker').datepicker({ + enableOnReadonly: true, + todayHighlight: true, + }); + } + if ($(".datepicker-autoclose").length) { + $('.datepicker-autoclose').datepicker({ + autoclose: true + }); + } + if ($('input[name="date-range"]').length) { + $('input[name="date-range"]').daterangepicker(); + } + if($('.input-daterange').length) { + $('.input-daterange input').each(function() { + $(this).datepicker('clearDates'); + }); + $('.input-daterange').datepicker({}); + } +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/google-charts.js b/public/admin/js/google-charts.js new file mode 100644 index 0000000..7e96700 --- /dev/null +++ b/public/admin/js/google-charts.js @@ -0,0 +1,242 @@ +// Region Charts Starts + +google.charts.load('current', { + 'packages': ['geochart'], + // Note: you will need to get a mapsApiKey for your project. + // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings + 'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY' +}); +google.charts.setOnLoadCallback(drawRegionsMap); + +function drawRegionsMap() { + var data = google.visualization.arrayToDataTable([ + ['Country', 'Popularity'], + ['Germany', 200], + ['United States', 300], + ['Brazil', 400], + ['Canada', 500], + ['France', 600], + ['RU', 700] + ]); + + var options = { + colorAxis: { + colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'] + } + }; + var chart = new google.visualization.GeoChart(document.getElementById('regions-chart')); + + chart.draw(data, options); +} + +// Region Charts Ends + + +// Bar Charts Starts + +google.charts.load('current', { + 'packages': ['bar'] +}); +google.charts.setOnLoadCallback(drawStuff); + +function drawStuff() { + var data = new google.visualization.arrayToDataTable([ + ['Opening Move', 'Percentage'], + ["King's pawn (e4)", 44], + ["Queen's pawn (d4)", 31], + ["Knight to King 3 (Nf3)", 12], + ["Queen's bishop pawn (c4)", 10], + ['Other', 3] + ]); + + var options = { + title: 'Approximating Normal Distribution', + legend: { + position: 'none' + }, + colors: ['#76C1FA'], + + chartArea: { + width: 401 + }, + hAxis: { + ticks: [-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1] + }, + bar: { + gap: 0 + }, + + histogram: { + bucketSize: 0.02, + maxNumBuckets: 200, + minValue: -1, + maxValue: 1 + } + }; + + var chart = new google.charts.Bar(document.getElementById('Bar-chart')); + chart.draw(data, options); +}; + + +// Bar Charts Ends + + +// Histogram Charts Starts +(function($) { + + google.charts.load("current", { + packages: ["corechart"] + }); + google.charts.setOnLoadCallback(drawChart); + + function drawChart() { + var data = google.visualization.arrayToDataTable([ + ['Quarks', 'Leptons', 'Gauge Bosons', 'Scalar Bosons'], + [2 / 3, -1, 0, 0], + [2 / 3, -1, 0, null], + [2 / 3, -1, 0, null], + [-1 / 3, 0, 1, null], + [-1 / 3, 0, -1, null], + [-1 / 3, 0, null, null], + [-1 / 3, 0, null, null] + ]); + + var options = { + title: 'Charges of subatomic particles', + legend: { + position: 'top', + maxLines: 2 + }, + colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'], + interpolateNulls: false, + chartArea: { + width: 401 + }, + }; + + var chart = new google.visualization.Histogram(document.getElementById('Histogram-chart')); + chart.draw(data, options); + } + +})(jQuery); + +// Histogram Charts Ends + + +// Area Chart Starts +(function($) { + + google.charts.load('current', { + 'packages': ['corechart'] + }); + google.charts.setOnLoadCallback(drawChart); + + function drawChart() { + var data = google.visualization.arrayToDataTable([ + ['Year', 'Sales', 'Expenses'], + ['2013', 1000, 400], + ['2014', 1170, 460], + ['2015', 660, 1120], + ['2016', 1030, 540] + ]); + + var options = { + title: 'Company Performance', + hAxis: { + title: 'Year', + titleTextStyle: { + color: '#333' + } + }, + colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'], + chartArea: { + width: 500 + }, + vAxis: { + minValue: 0 + } + }; + + var AreaChart = new google.visualization.AreaChart(document.getElementById('area-chart')); + AreaChart.draw(data, options); + } + +})(jQuery); +// Area Chart Ends + + + +// Donut Chart Starts + +google.charts.load("current", { + packages: ["corechart"] +}); +google.charts.setOnLoadCallback(drawChart); + +function drawChart() { + var data = google.visualization.arrayToDataTable([ + ['Task', 'Hours per Day'], + ['Work', 11], + ['Eat', 2], + ['Commute', 2], + ['Watch TV', 2], + ['Sleep', 7] + ]); + + var options = { + title: 'My Daily Activities', + pieHole: 0.4, + colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'], + chartArea: { + width: 500 + }, + }; + + var Donutchart = new google.visualization.PieChart(document.getElementById('Donut-chart')); + Donutchart.draw(data, options); +} + + +// Donut Chart Ends + + +// Curve Chart Starts +(function($) { + + google.charts.load('current', { + 'packages': ['corechart'] + }); + google.charts.setOnLoadCallback(drawChart); + + function drawChart() { + var data = google.visualization.arrayToDataTable([ + ['Year', 'Sales', 'Expenses'], + ['2004', 1000, 400], + ['2005', 1170, 460], + ['2006', 660, 1120], + ['2007', 1030, 540] + ]); + + var options = { + title: 'Company Performance', + curveType: 'function', + legend: { + position: 'bottom' + }, + colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'], + chartArea: { + width: 500 + }, + }; + + var chart = new google.visualization.LineChart(document.getElementById('curve_chart')); + + chart.draw(data, options); + } + + + + +})(jQuery); +// Curve Chart Ends \ No newline at end of file diff --git a/public/admin/js/google-maps.js b/public/admin/js/google-maps.js new file mode 100644 index 0000000..0755b44 --- /dev/null +++ b/public/admin/js/google-maps.js @@ -0,0 +1,698 @@ +'use strict'; + +function initMap() { + //Map location + var MapLocation = { + lat: 40.6971494, + lng: -74.2598719 + }; + + // Map Zooming + var MapZoom = 14; + + + // Basic Map + if($("#map-with-marker").length) { + var MapWithMarker = new google.maps.Map(document.getElementById('map-with-marker'), { + zoom: MapZoom, + center: MapLocation + }); + var marker_1 = new google.maps.Marker({ + position: MapLocation, + map: MapWithMarker + }); + } + + // Basic map with cutom marker + if($("#custom-marker").length) { + var CustomMarker = new google.maps.Map(document.getElementById('custom-marker'), { + zoom: MapZoom, + center: MapLocation + }); + var iconBase = '../../images/file-icons/'; + var marker_2 = new google.maps.Marker({ + position: MapLocation, + map: CustomMarker, + icon: iconBase + 'flag.png' + }); + } + + // Map without controls + if($("#map-minimal").length) { + var MinimalMap = new google.maps.Map(document.getElementById('map-minimal'), { + zoom: MapZoom, + center: MapLocation, + disableDefaultUI: true + }); + var marker_3 = new google.maps.Marker({ + position: MapLocation, + map: MinimalMap + }); + } + + // Night Mode + if($("#night-mode-map").length) { + var NightModeMap = new google.maps.Map(document.getElementById('night-mode-map'), { + zoom: MapZoom, + center: MapLocation, + styles: [{ + "featureType": "all", + "elementType": "all", + "stylers": [{ + "saturation": -100 + }, + { + "gamma": 0.5 + } + ] + }] + }); + } + + // Apple Theme + if($("#apple-map-theme").length) { + var AppletThemeMap = new google.maps.Map(document.getElementById('apple-map-theme'), { + zoom: MapZoom, + center: MapLocation, + styles: [{ + "featureType": "landscape.man_made", + "elementType": "geometry", + "stylers": [{ + "color": "#f7f1df" + }] + }, + { + "featureType": "landscape.natural", + "elementType": "geometry", + "stylers": [{ + "color": "#d0e3b4" + }] + }, + { + "featureType": "landscape.natural.terrain", + "elementType": "geometry", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "poi", + "elementType": "labels", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "poi.business", + "elementType": "all", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "poi.medical", + "elementType": "geometry", + "stylers": [{ + "color": "#fbd3da" + }] + }, + { + "featureType": "poi.park", + "elementType": "geometry", + "stylers": [{ + "color": "#bde6ab" + }] + }, + { + "featureType": "road", + "elementType": "geometry.stroke", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "road", + "elementType": "labels", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "road.highway", + "elementType": "geometry.fill", + "stylers": [{ + "color": "#ffe15f" + }] + }, + { + "featureType": "road.highway", + "elementType": "geometry.stroke", + "stylers": [{ + "color": "#efd151" + }] + }, + { + "featureType": "road.arterial", + "elementType": "geometry.fill", + "stylers": [{ + "color": "#ffffff" + }] + }, + { + "featureType": "road.local", + "elementType": "geometry.fill", + "stylers": [{ + "color": "black" + }] + }, + { + "featureType": "transit.station.airport", + "elementType": "geometry.fill", + "stylers": [{ + "color": "#cfb2db" + }] + }, + { + "featureType": "water", + "elementType": "geometry", + "stylers": [{ + "color": "#a2daf2" + }] + } + ] + }); + } + + // Nature Theme + if($("#nature-map-theme").length) { + var NatureThemeMap = new google.maps.Map(document.getElementById('nature-map-theme'), { + zoom: MapZoom, + center: MapLocation, + styles: [{ + "featureType": "landscape", + "stylers": [{ + "hue": "#FFA800" + }, + { + "saturation": 0 + }, + { + "lightness": 0 + }, + { + "gamma": 1 + } + ] + }, + { + "featureType": "road.highway", + "stylers": [{ + "hue": "#53FF00" + }, + { + "saturation": -73 + }, + { + "lightness": 40 + }, + { + "gamma": 1 + } + ] + }, + { + "featureType": "road.arterial", + "stylers": [{ + "hue": "#FBFF00" + }, + { + "saturation": 0 + }, + { + "lightness": 0 + }, + { + "gamma": 1 + } + ] + }, + { + "featureType": "road.local", + "stylers": [{ + "hue": "#00FFFD" + }, + { + "saturation": 0 + }, + { + "lightness": 30 + }, + { + "gamma": 1 + } + ] + }, + { + "featureType": "water", + "stylers": [{ + "hue": "#00BFFF" + }, + { + "saturation": 6 + }, + { + "lightness": 8 + }, + { + "gamma": 1 + } + ] + }, + { + "featureType": "poi", + "stylers": [{ + "hue": "#679714" + }, + { + "saturation": 33.4 + }, + { + "lightness": -25.4 + }, + { + "gamma": 1 + } + ] + } + ] + }); + } + + // Captor Theme + if($("#captor-map-theme").length) { + var CaptorThemeMap = new google.maps.Map(document.getElementById('captor-map-theme'), { + zoom: MapZoom, + center: MapLocation, + styles: [{ + "featureType": "water", + "stylers": [{ + "color": "#0e171d" + }] + }, + { + "featureType": "landscape", + "stylers": [{ + "color": "#1e303d" + }] + }, + { + "featureType": "road", + "stylers": [{ + "color": "#1e303d" + }] + }, + { + "featureType": "poi.park", + "stylers": [{ + "color": "#1e303d" + }] + }, + { + "featureType": "transit", + "stylers": [{ + "color": "#182731" + }, + { + "visibility": "simplified" + } + ] + }, + { + "featureType": "poi", + "elementType": "labels.icon", + "stylers": [{ + "color": "#f0c514" + }, + { + "visibility": "off" + } + ] + }, + { + "featureType": "poi", + "elementType": "labels.text.stroke", + "stylers": [{ + "color": "#1e303d" + }, + { + "visibility": "off" + } + ] + }, + { + "featureType": "transit", + "elementType": "labels.text.fill", + "stylers": [{ + "color": "#e77e24" + }, + { + "visibility": "off" + } + ] + }, + { + "featureType": "road", + "elementType": "labels.text.fill", + "stylers": [{ + "color": "#94a5a6" + }] + }, + { + "featureType": "administrative", + "elementType": "labels", + "stylers": [{ + "visibility": "simplified" + }, + { + "color": "#e84c3c" + } + ] + }, + { + "featureType": "poi", + "stylers": [{ + "color": "#e84c3c" + }, + { + "visibility": "off" + } + ] + } + ] + }); + } + + // Avagardo Theme + if($("#avocado-map-theme").length) { + var AvagardoThemeMap = new google.maps.Map(document.getElementById('avocado-map-theme'), { + zoom: MapZoom, + center: MapLocation, + styles: [{ + "featureType": "water", + "elementType": "geometry", + "stylers": [{ + "visibility": "on" + }, + { + "color": "#aee2e0" + } + ] + }, + { + "featureType": "landscape", + "elementType": "geometry.fill", + "stylers": [{ + "color": "#abce83" + }] + }, + { + "featureType": "poi", + "elementType": "geometry.fill", + "stylers": [{ + "color": "#769E72" + }] + }, + { + "featureType": "poi", + "elementType": "labels.text.fill", + "stylers": [{ + "color": "#7B8758" + }] + }, + { + "featureType": "poi", + "elementType": "labels.text.stroke", + "stylers": [{ + "color": "#EBF4A4" + }] + }, + { + "featureType": "poi.park", + "elementType": "geometry", + "stylers": [{ + "visibility": "simplified" + }, + { + "color": "#8dab68" + } + ] + }, + { + "featureType": "road", + "elementType": "geometry.fill", + "stylers": [{ + "visibility": "simplified" + }] + }, + { + "featureType": "road", + "elementType": "labels.text.fill", + "stylers": [{ + "color": "#5B5B3F" + }] + }, + { + "featureType": "road", + "elementType": "labels.text.stroke", + "stylers": [{ + "color": "#ABCE83" + }] + }, + { + "featureType": "road", + "elementType": "labels.icon", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "road.local", + "elementType": "geometry", + "stylers": [{ + "color": "#A4C67D" + }] + }, + { + "featureType": "road.arterial", + "elementType": "geometry", + "stylers": [{ + "color": "#9BBF72" + }] + }, + { + "featureType": "road.highway", + "elementType": "geometry", + "stylers": [{ + "color": "#EBF4A4" + }] + }, + { + "featureType": "transit", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "administrative", + "elementType": "geometry.stroke", + "stylers": [{ + "visibility": "on" + }, + { + "color": "#87ae79" + } + ] + }, + { + "featureType": "administrative", + "elementType": "geometry.fill", + "stylers": [{ + "color": "#7f2200" + }, + { + "visibility": "off" + } + ] + }, + { + "featureType": "administrative", + "elementType": "labels.text.stroke", + "stylers": [{ + "color": "#ffffff" + }, + { + "visibility": "on" + }, + { + "weight": 4.1 + } + ] + }, + { + "featureType": "administrative", + "elementType": "labels.text.fill", + "stylers": [{ + "color": "#495421" + }] + }, + { + "featureType": "administrative.neighborhood", + "elementType": "labels", + "stylers": [{ + "visibility": "off" + }] + } + ] + }); + } + + // Propia Theme + if($("#propia-map-theme").length) { + var PropiaThemeMap = new google.maps.Map(document.getElementById('propia-map-theme'), { + zoom: MapZoom, + center: MapLocation, + styles: [{ + "featureType": "landscape", + "stylers": [{ + "visibility": "simplified" + }, + { + "color": "#2b3f57" + }, + { + "weight": 0.1 + } + ] + }, + { + "featureType": "administrative", + "stylers": [{ + "visibility": "on" + }, + { + "hue": "#ff0000" + }, + { + "weight": 0.4 + }, + { + "color": "#ffffff" + } + ] + }, + { + "featureType": "road.highway", + "elementType": "labels.text", + "stylers": [{ + "weight": 1.3 + }, + { + "color": "#FFFFFF" + } + ] + }, + { + "featureType": "road.highway", + "elementType": "geometry", + "stylers": [{ + "color": "#f55f77" + }, + { + "weight": 3 + } + ] + }, + { + "featureType": "road.arterial", + "elementType": "geometry", + "stylers": [{ + "color": "#f55f77" + }, + { + "weight": 1.1 + } + ] + }, + { + "featureType": "road.local", + "elementType": "geometry", + "stylers": [{ + "color": "#f55f77" + }, + { + "weight": 0.4 + } + ] + }, + {}, + { + "featureType": "road.highway", + "elementType": "labels", + "stylers": [{ + "weight": 0.8 + }, + { + "color": "#ffffff" + }, + { + "visibility": "on" + } + ] + }, + { + "featureType": "road.local", + "elementType": "labels", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "road.arterial", + "elementType": "labels", + "stylers": [{ + "color": "#ffffff" + }, + { + "weight": 0.7 + } + ] + }, + { + "featureType": "poi", + "elementType": "labels", + "stylers": [{ + "visibility": "off" + }] + }, + { + "featureType": "poi", + "stylers": [{ + "color": "#6c5b7b" + }] + }, + { + "featureType": "water", + "stylers": [{ + "color": "#f3b191" + }] + }, + { + "featureType": "transit.line", + "stylers": [{ + "visibility": "on" + }] + } + ] + }); + } +} \ No newline at end of file diff --git a/public/admin/js/hoverable-collapse.js b/public/admin/js/hoverable-collapse.js new file mode 100644 index 0000000..04d51bd --- /dev/null +++ b/public/admin/js/hoverable-collapse.js @@ -0,0 +1,25 @@ +(function($) { + 'use strict'; + //Open submenu on hover in compact sidebar mode and horizontal menu mode + $(document).on('mouseenter mouseleave', '.sidebar .nav-item', function(ev) { + var body = $('body'); + var sidebarIconOnly = body.hasClass("sidebar-icon-only"); + var sidebarFixed = body.hasClass("sidebar-fixed"); + if (!('ontouchstart' in document.documentElement)) { + if (sidebarIconOnly) { + if (sidebarFixed) { + if (ev.type === 'mouseenter') { + body.removeClass('sidebar-icon-only'); + } + } else { + var $menuItem = $(this); + if (ev.type === 'mouseenter') { + $menuItem.addClass('hover-open') + } else { + $menuItem.removeClass('hover-open') + } + } + } + } + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/iCheck.js b/public/admin/js/iCheck.js new file mode 100644 index 0000000..d3e4ec3 --- /dev/null +++ b/public/admin/js/iCheck.js @@ -0,0 +1,43 @@ +(function($) { + 'use strict'; + $(function() { + $('.icheck input').iCheck({ + checkboxClass: 'icheckbox_minimal-blue', + radioClass: 'iradio_minimal', + increaseArea: '20%' + }); + $('.icheck-square input').iCheck({ + checkboxClass: 'icheckbox_square-blue', + radioClass: 'iradio_square', + increaseArea: '20%' + }); + $('.icheck-flat input').iCheck({ + checkboxClass: 'icheckbox_flat-blue', + radioClass: 'iradio_flat', + increaseArea: '20%' + }); + var icheckLineArray = $('.icheck-line input'); + for (var i = 0; i < icheckLineArray.length; i++) { + var self = $(icheckLineArray[i]); + var label = self.next(); + var label_text = label.text(); + + label.remove(); + self.iCheck({ + checkboxClass: 'icheckbox_line-blue', + radioClass: 'iradio_line', + insert: '
' + label_text + }); + } + $('.icheck-polaris input').iCheck({ + checkboxClass: 'icheckbox_polaris', + radioClass: 'iradio_polaris', + increaseArea: '20%' + }); + $('.icheck-futurico input').iCheck({ + checkboxClass: 'icheckbox_futurico', + radioClass: 'iradio_futurico', + increaseArea: '20%' + }); + }); +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/inputmask.js b/public/admin/js/inputmask.js new file mode 100644 index 0000000..3bc7928 --- /dev/null +++ b/public/admin/js/inputmask.js @@ -0,0 +1,7 @@ +(function($) { + 'use strict'; + + // initializing inputmask + $(":input").inputmask(); + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/ion-range-slider.js b/public/admin/js/ion-range-slider.js new file mode 100644 index 0000000..933cf93 --- /dev/null +++ b/public/admin/js/ion-range-slider.js @@ -0,0 +1,189 @@ +(function($) { + 'use strict'; + + if ($('#range_01').length) { + $("#range_01").ionRangeSlider(); + } + + if ($("#range_02").length) { + $("#range_02").ionRangeSlider({ + min: 100, + max: 1000, + from: 550 + }); + } + + if ($("#range_03").length) { + $("#range_03").ionRangeSlider({ + type: "double", + grid: true, + min: 0, + max: 1000, + from: 200, + to: 800, + prefix: "$" + }); + } + + if ($("#range_04").length) { + $("#range_04").ionRangeSlider({ + type: "double", + min: 100, + max: 200, + from: 145, + to: 155, + prefix: "Weight: ", + postfix: " million pounds", + decorate_both: true + }); + } + + if ($("#range_05").length) { + $("#range_05").ionRangeSlider({ + type: "double", + min: 1000, + max: 2000, + from: 1200, + to: 1800, + hide_min_max: true, + hide_from_to: true, + grid: false + }); + } + + if ($("#range_06").length) { + $("#range_06").ionRangeSlider({ + type: "double", + min: 1000, + max: 2000, + from: 1200, + to: 1800, + hide_min_max: true, + hide_from_to: true, + grid: true + }); + } + + if ($("#range_07").length) { + $("#range_07").ionRangeSlider({ + type: "double", + grid: true, + min: 0, + max: 10000, + from: 1000, + prefix: "$" + }); + } + + if ($("#range_08").length) { + $("#range_08").ionRangeSlider({ + type: "single", + grid: true, + min: -90, + max: 90, + from: 0, + postfix: "°" + }); + } + + if ($("#range_09").length) { + $("#range_09").ionRangeSlider({ + type: "double", + min: 0, + max: 10000, + grid: true + }); + } + + if ($("#range_10").length) { + $("#range_10").ionRangeSlider({ + type: "double", + min: 0, + max: 10000, + grid: true, + grid_num: 10 + }); + } + + if ($("#range_11").length) { + $("#range_11").ionRangeSlider({ + type: "double", + min: 0, + max: 10000, + step: 500, + grid: true, + grid_snap: true + }); + } + + if ($("#range_12").length) { + $("#range_12").ionRangeSlider({ + type: "single", + min: 0, + max: 10, + step: 2.34, + grid: true, + grid_snap: true + }); + } + + if ($("#range_13").length) { + $("#range_13").ionRangeSlider({ + type: "double", + min: 0, + max: 100, + from: 30, + to: 70, + from_fixed: true + }); + } + + if ($("#range_14").length) { + $("#range_14").ionRangeSlider({ + min: 0, + max: 100, + from: 30, + from_min: 10, + from_max: 50 + }); + } + + if ($("#range_15").length) { + $("#range_15").ionRangeSlider({ + min: 0, + max: 100, + from: 30, + from_min: 10, + from_max: 50, + from_shadow: true + }); + } + + if ($("#range_16").length) { + $("#range_16").ionRangeSlider({ + type: "double", + min: 0, + max: 100, + from: 20, + from_min: 10, + from_max: 30, + from_shadow: true, + to: 80, + to_min: 70, + to_max: 90, + to_shadow: true, + grid: true, + grid_num: 10 + }); + } + + if ($("#range_17").length) { + $("#range_17").ionRangeSlider({ + min: 0, + max: 100, + from: 30, + disable: true + }); + } + +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/jq.tablesort.js b/public/admin/js/jq.tablesort.js new file mode 100644 index 0000000..c3fe6c2 --- /dev/null +++ b/public/admin/js/jq.tablesort.js @@ -0,0 +1,123 @@ +/* + * jq.TableSort -- jQuery Table sorter Plug-in. + * + * Version 1.0.0. + * + * Copyright (c) 2017 Dmitry Zavodnikov. + * + * Licensed under the MIT License. + */ +(function($) { + 'use strict'; + var SORT = 'sort'; + var ASC = 'asc'; + var DESC = 'desc'; + var UNSORT = 'unsort'; + + var config = { + defaultColumn: 0, + defaultOrder: 'asc', + styles: { + 'sort': 'sortStyle', + 'asc': 'ascStyle', + 'desc': 'descStyle', + 'unsort': 'unsortStyle' + }, + selector: function(tableBody, column) { + var groups = []; + + var tableRows = $(tableBody).find('tr'); + for (var i = 0; i < tableRows.length; i++) { + var td = $(tableRows[i]).find('td')[column]; + + groups.push({ + 'values': [tableRows[i]], + 'key': $(td).text() + }); + } + return groups; + }, + comparator: function(group1, group2) { + return group1.key.localeCompare(group2.key); + } + }; + + function getTableHeaders(table) { + return $(table).find('thead > tr > th'); + } + + function getSortableTableHeaders(table) { + return getTableHeaders(table).filter(function(index) { + return $(this).hasClass(config.styles[SORT]); + }); + } + + function changeOrder(table, column) { + var sortedHeader = getTableHeaders(table).filter(function(index) { + return $(this).hasClass(config.styles[ASC]) || $(this).hasClass(config.styles[DESC]); + }); + + var sordOrder = config.defaultOrder; + if (sortedHeader.hasClass(config.styles[ASC])) { + sordOrder = ASC; + } + if (sortedHeader.hasClass(config.styles[DESC])) { + sordOrder = DESC; + } + + var th = getTableHeaders(table)[column]; + + if (th === sortedHeader[0]) { + if (sordOrder === ASC) { + sordOrder = DESC; + } else { + sordOrder = ASC; + } + } + + var headers = getSortableTableHeaders(table); + headers.removeClass(config.styles[ASC]); + headers.removeClass(config.styles[DESC]); + headers.addClass(config.styles[UNSORT]); + + $(th).removeClass(config.styles[UNSORT]); + $(th).addClass(config.styles[sordOrder]); + + var tbody = $(table).find('tbody')[0]; + var groups = config.selector(tbody, column); + + // Sorting. + groups.sort(function(a, b) { + var res = config.comparator(a, b); + return sordOrder === ASC ? res : -1 * res; + }); + + for (var i = 0; i < groups.length; i++) { + var trList = groups[i]; + var trListValues = trList.values; + for (var j = 0; j < trListValues.length; j++) { + tbody.append(trListValues[j]); + } + } + } + + $.fn.tablesort = function(userConfig) { + // Create and save table sort configuration. + $.extend(config, userConfig); + + // Process all selected tables. + var selectedTables = this; + for (var i = 0; i < selectedTables.length; i++) { + var table = selectedTables[i]; + var tableHeader = getSortableTableHeaders(table); + for (var j = 0; j < tableHeader.length; j++) { + var th = tableHeader[j]; + $(th).on("click", function(event) { + var clickColumn = $.inArray(event.currentTarget, getTableHeaders(table)); + changeOrder(table, clickColumn); + }); + } + } + return this; + }; +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/jquery-file-upload.js b/public/admin/js/jquery-file-upload.js new file mode 100644 index 0000000..d723a95 --- /dev/null +++ b/public/admin/js/jquery-file-upload.js @@ -0,0 +1,9 @@ +(function($) { + 'use strict'; + if ($("#fileuploader").length) { + $("#fileuploader").uploadFile({ + url: "YOUR_FILE_UPLOAD_URL", + fileName: "myfile" + }); + } +})(jQuery); \ No newline at end of file diff --git a/public/admin/js/js-grid.js b/public/admin/js/js-grid.js new file mode 100644 index 0000000..2545db7 --- /dev/null +++ b/public/admin/js/js-grid.js @@ -0,0 +1,192 @@ +(function($) { + 'use strict'; + $(function() { + + //basic config + if ($("#js-grid").length) { + $("#js-grid").jsGrid({ + height: "500px", + width: "100%", + filtering: true, + editing: true, + inserting: true, + sorting: true, + paging: true, + autoload: true, + pageSize: 15, + pageButtonCount: 5, + deleteConfirm: "Do you really want to delete the client?", + data: db.clients, + fields: [{ + name: "Name", + type: "text", + width: 150 + }, + { + name: "Age", + type: "number", + width: 50 + }, + { + name: "Address", + type: "text", + width: 200 + }, + { + name: "Country", + type: "select", + items: db.countries, + valueField: "Id", + textField: "Name" + }, + { + name: "Married", + title: "Is Married", + itemTemplate: function(value, item) { + return $("
") + .addClass("form-check mt-0") + .append( + $("