diff --git a/.env.example b/.env.example index fc8c1ae4..e166a279 100644 --- a/.env.example +++ b/.env.example @@ -49,6 +49,8 @@ APP_FALLBACK_LOCALE=en APP_FAKER_LOCALE=en_US APP_MAINTENANCE_DRIVER=file APP_MAINTENANCE_STORE=database +PHP_CLI_SERVER_WORKERS=4 + BCRYPT_ROUNDS=12 SESSION_ENCRYPT=false diff --git a/.gitignore b/.gitignore index 296d87cf..eb61786e 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ Homestead.yaml .phpunit.result.cache .phpunit.cache mysql-connector-java-* +/storage/pail +/.nova diff --git a/README.md b/README.md index 37bbe086..3e45c8dd 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Jitterbug uses the [devbridge autocomplete plugin](https://github.com/devbridge/ 1. Define a controller method in the SuggestionsController class for the field using plural naming conventions. You only need to copy and paste one of the exsiting methods and change the parameters for the ```getAutocompleteSuggestions()``` method call to correspond to the model you want the suggestions for, and then the field name. 2. Add a route to routes.php in the 'suggestions' group that references the controller method that was defined in step 1. 3. Go to the form where you want the suggestions to appear, and give the input element a css id name. e.g. #speed, or #recording-location, etc. -4. In app.js, add a jQuery selector using the id you created in step 3, then call autocomplete. The serviceUrl should correspond to the route you created in step 2. For example: +4. In jitterbug.js, add a jQuery selector using the id you created in step 3, then call autocomplete. The serviceUrl should correspond to the route you created in step 2. For example: ```javascript $('#speed').autocomplete({ @@ -91,17 +91,22 @@ $('#speed').autocomplete({ ## Compiling Assets -Jitterbug uses [Laravel Mix](https://laravel.com/docs/8.x/mix) to compile its assets, including Sass for its css. -Add your css to `resources/assets/sass/app.scss` and then run `npm run dev` in the application terminal to compile the new changes. +Jitterbug uses [Vite](https://laravel.com/docs/12.x/vite) to compile its assets, including Sass for its css. +Add your css to `resources/assets/sass/app.scss` and then run `npm run build` in the application terminal to compile the new changes. +The same goes for any JavaScript changes you make. +You can also toggle whether the assets are minified in `vite.config.js`. You should minify them for production, but can be +useful debug feature to not minifiy them. For example, in the VM: ```bash vagrant ssh -cd /vagrant -npm run dev +cd /jitterbug +npm run build ``` +Note: if running `build` you may need to run `npm install` first so it picks up the correct C compiler. + ## Running [Laravel Dusk](https://laravel.com/docs/8.x/dusk) tests (VM only) 1. Start up the vm and ssh into the VM @@ -114,7 +119,7 @@ npm run dev 2. Navigate to the Jitterbug repo folder ```bash - cd /vagrant + cd /jitterbug ``` 3. Run the Laravel Dusk tests diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index 7ef3bf4a..736c6ba2 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -3,20 +3,18 @@ namespace Jitterbug\Http\Controllers\Admin; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Models\User; -class AdminController extends Controller +class AdminController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index() diff --git a/app/Http/Controllers/Admin/CollectionTypesController.php b/app/Http/Controllers/Admin/CollectionTypesController.php index 8898049a..debbd6ac 100644 --- a/app/Http/Controllers/Admin/CollectionTypesController.php +++ b/app/Http/Controllers/Admin/CollectionTypesController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\CollectionTypeRequest; @@ -14,16 +15,13 @@ /** * Controller for the management of collection types in the Admin area. */ -class CollectionTypesController extends Controller +class CollectionTypesController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index(Request $request) diff --git a/app/Http/Controllers/Admin/CollectionsController.php b/app/Http/Controllers/Admin/CollectionsController.php index c028a99e..1d57a5cb 100644 --- a/app/Http/Controllers/Admin/CollectionsController.php +++ b/app/Http/Controllers/Admin/CollectionsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\CollectionRequest; @@ -18,7 +19,7 @@ /** * Controller for the management of collections in the Admin area. */ -class CollectionsController extends Controller +class CollectionsController extends Controller implements HasMiddleware { protected $solrItems; @@ -33,12 +34,19 @@ class CollectionsController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrItems = new SolariumProxy('jitterbug-items'); $this->solrInstances = new SolariumProxy('jitterbug-instances'); $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Admin/DepartmentsController.php b/app/Http/Controllers/Admin/DepartmentsController.php index 0467cf91..b3a3d602 100644 --- a/app/Http/Controllers/Admin/DepartmentsController.php +++ b/app/Http/Controllers/Admin/DepartmentsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\DepartmentRequest; @@ -14,7 +15,7 @@ /** * Controller for the management of departments in the Admin area. */ -class DepartmentsController extends Controller +class DepartmentsController extends Controller implements HasMiddleware { protected $solrInstances; @@ -25,10 +26,17 @@ class DepartmentsController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrInstances = new SolariumProxy('jitterbug-instances'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Admin/FormatsController.php b/app/Http/Controllers/Admin/FormatsController.php index 437947cd..3f768ff0 100644 --- a/app/Http/Controllers/Admin/FormatsController.php +++ b/app/Http/Controllers/Admin/FormatsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\FormatRequest; @@ -17,7 +18,7 @@ /** * Controller for the management of formats in the Admin area. */ -class FormatsController extends Controller +class FormatsController extends Controller implements HasMiddleware { protected $solrItems; @@ -32,12 +33,19 @@ class FormatsController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrItems = new SolariumProxy('jitterbug-items'); $this->solrInstances = new SolariumProxy('jitterbug-instances'); $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Admin/PlaybackMachinesController.php b/app/Http/Controllers/Admin/PlaybackMachinesController.php index f4b5043a..417e00aa 100644 --- a/app/Http/Controllers/Admin/PlaybackMachinesController.php +++ b/app/Http/Controllers/Admin/PlaybackMachinesController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\PlaybackMachineRequest; @@ -14,7 +15,7 @@ /** * Controller for the management of playback machines in the Admin area. */ -class PlaybackMachinesController extends Controller +class PlaybackMachinesController extends Controller implements HasMiddleware { protected $solrTransfers; @@ -25,10 +26,17 @@ class PlaybackMachinesController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Admin/PmSpeedsController.php b/app/Http/Controllers/Admin/PmSpeedsController.php index 7046d657..0ffb9fcc 100644 --- a/app/Http/Controllers/Admin/PmSpeedsController.php +++ b/app/Http/Controllers/Admin/PmSpeedsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\PmSpeedRequest; @@ -13,16 +14,13 @@ /** * Controller for the management of PM speeds in the Admin area. */ -class PmSpeedsController extends Controller +class PmSpeedsController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index(Request $request) diff --git a/app/Http/Controllers/Admin/PrefixesController.php b/app/Http/Controllers/Admin/PrefixesController.php index 9d0b2fcd..f9bd6302 100644 --- a/app/Http/Controllers/Admin/PrefixesController.php +++ b/app/Http/Controllers/Admin/PrefixesController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\PrefixRequest; use Jitterbug\Models\CollectionType; @@ -12,16 +13,13 @@ /** * Controller for the management of Prefixes in the Admin area. */ -class PrefixesController extends Controller +class PrefixesController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index(Request $request) diff --git a/app/Http/Controllers/Admin/ProjectsController.php b/app/Http/Controllers/Admin/ProjectsController.php index 3f7f469c..1e761535 100644 --- a/app/Http/Controllers/Admin/ProjectsController.php +++ b/app/Http/Controllers/Admin/ProjectsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\ProjectRequest; @@ -14,7 +15,7 @@ /** * Controller for the management of projects in the Admin area. */ -class ProjectsController extends Controller +class ProjectsController extends Controller implements HasMiddleware { protected $solrInstances; @@ -25,10 +26,17 @@ class ProjectsController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrInstances = new SolariumProxy('jitterbug-instances'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Admin/ReproductionMachinesController.php b/app/Http/Controllers/Admin/ReproductionMachinesController.php index 96bdf06c..40ebbc34 100644 --- a/app/Http/Controllers/Admin/ReproductionMachinesController.php +++ b/app/Http/Controllers/Admin/ReproductionMachinesController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\ReproductionMachineRequest; @@ -14,7 +15,7 @@ /** * Controller for the management of reproduction machines in the Admin area. */ -class ReproductionMachinesController extends Controller +class ReproductionMachinesController extends Controller implements HasMiddleware { protected $solrInstances; @@ -25,10 +26,17 @@ class ReproductionMachinesController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrInstances = new SolariumProxy('jitterbug-instances'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Admin/SamplingRatesController.php b/app/Http/Controllers/Admin/SamplingRatesController.php index 134a54e3..239a27a1 100644 --- a/app/Http/Controllers/Admin/SamplingRatesController.php +++ b/app/Http/Controllers/Admin/SamplingRatesController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\SamplingRateRequest; @@ -13,16 +14,13 @@ /** * Controller for the management of sampling rates in the Admin area. */ -class SamplingRatesController extends Controller +class SamplingRatesController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index(Request $request) diff --git a/app/Http/Controllers/Admin/TapeBrandsController.php b/app/Http/Controllers/Admin/TapeBrandsController.php index 797c9db3..40d4da1a 100644 --- a/app/Http/Controllers/Admin/TapeBrandsController.php +++ b/app/Http/Controllers/Admin/TapeBrandsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\TapeBrandRequest; @@ -13,16 +14,13 @@ /** * Controller for the management of tape brands in the Admin area. */ -class TapeBrandsController extends Controller +class TapeBrandsController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index(Request $request) diff --git a/app/Http/Controllers/Admin/UsersController.php b/app/Http/Controllers/Admin/UsersController.php index 7c3812fd..3375be4b 100644 --- a/app/Http/Controllers/Admin/UsersController.php +++ b/app/Http/Controllers/Admin/UsersController.php @@ -3,20 +3,18 @@ namespace Jitterbug\Http\Controllers\Admin; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Models\Mark; use Jitterbug\Models\User; -class UsersController extends Controller +class UsersController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware(['auth', 'admin']); + return [ + ['auth', 'admin'], + ]; } public function index(Request $request) diff --git a/app/Http/Controllers/Admin/VendorsController.php b/app/Http/Controllers/Admin/VendorsController.php index e6575cc8..9c5740f4 100644 --- a/app/Http/Controllers/Admin/VendorsController.php +++ b/app/Http/Controllers/Admin/VendorsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\MessageBag; use Jitterbug\Http\Controllers\Controller; use Jitterbug\Http\Requests\VendorRequest; @@ -14,7 +15,7 @@ /** * Controller for the management of vendors in the Admin area. */ -class VendorsController extends Controller +class VendorsController extends Controller implements HasMiddleware { protected $solrTransfers; @@ -25,10 +26,17 @@ class VendorsController extends Controller */ public function __construct() { - $this->middleware(['auth', 'admin']); + $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + ['auth', 'admin'], + ]; + } + public function index(Request $request) { if ($request->ajax()) { diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 3df7e605..bceec2cd 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -4,10 +4,12 @@ use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; +use Illuminate\Routing\Controllers\Middleware; use Jitterbug\Http\Controllers\Controller; use LdapRecord\Auth\BindException; -class LoginController extends Controller +class LoginController extends Controller implements HasMiddleware { use AuthenticatesUsers { logout as doLogout; @@ -21,14 +23,11 @@ class LoginController extends Controller */ protected $redirectTo = '/dashboard'; - /** - * Create a new authentication controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware('guest', ['except' => 'logout']); + return [ + new Middleware('guest', except: ['logout']), + ]; } public function logout(Request $request) @@ -84,7 +83,7 @@ protected function credentials(Request $request) 'password' => $request->get('password'), 'fallback' => [ 'username' => $request->get('username'), - 'password' => $request->get('password') + 'password' => $request->get('password'), ], ]; } diff --git a/app/Http/Controllers/CallNumbersController.php b/app/Http/Controllers/CallNumbersController.php index 10116c5e..acb5124b 100644 --- a/app/Http/Controllers/CallNumbersController.php +++ b/app/Http/Controllers/CallNumbersController.php @@ -3,22 +3,20 @@ namespace Jitterbug\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Jitterbug\Models\CallNumberSequence; use Jitterbug\Models\PreservationInstance; /** * Controller for operations related to call numbers. */ -class CallNumbersController extends Controller +class CallNumbersController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware('auth'); + return [ + 'auth', + ]; } public function generate(Request $request) diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 7d70253a..6a393e6d 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,16 +2,10 @@ namespace Jitterbug\Http\Controllers; -use Illuminate\Foundation\Auth\Access\AuthorizesRequests; -use Illuminate\Foundation\Bus\DispatchesJobs; -use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Http\Request; -use Illuminate\Routing\Controller as BaseController; -abstract class Controller extends BaseController +abstract class Controller { - use AuthorizesRequests, DispatchesJobs, ValidatesRequests; - /** * Resolve a table selection range (beginning and ending indices) to an * array of record ids, fetching the ids from Solr. If beginning and diff --git a/app/Http/Controllers/CutsController.php b/app/Http/Controllers/CutsController.php index 482da4cd..eb98be28 100644 --- a/app/Http/Controllers/CutsController.php +++ b/app/Http/Controllers/CutsController.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Jitterbug\Http\Requests\CutRequest; use Jitterbug\Models\AudioVisualItem; use Jitterbug\Models\Cut; @@ -12,7 +13,7 @@ use Jitterbug\Support\SolariumProxy; use Uuid; -class CutsController extends Controller +class CutsController extends Controller implements HasMiddleware { protected $solrItems; @@ -27,13 +28,19 @@ class CutsController extends Controller */ public function __construct() { - $this->middleware('auth'); $this->solrItems = new SolariumProxy('jitterbug-items'); $this->solrInstances = new SolariumProxy('jitterbug-instances'); $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + 'auth', + ]; + } + /** * Display the details of a cut. */ diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 26baf24f..af1c31be 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -4,6 +4,7 @@ use Auth; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Jitterbug\Models\AudioVisualItemType; use Jitterbug\Models\Mark; use Jitterbug\Models\PreservationInstanceType; @@ -13,16 +14,13 @@ use Jitterbug\Presenters\DashboardMark; use Jitterbug\Presenters\TypeCounts; -class DashboardController extends Controller +class DashboardController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware('auth'); + return [ + 'auth', + ]; } public function index() diff --git a/app/Http/Controllers/InstancesController.php b/app/Http/Controllers/InstancesController.php index bb268513..f67327d6 100644 --- a/app/Http/Controllers/InstancesController.php +++ b/app/Http/Controllers/InstancesController.php @@ -5,6 +5,7 @@ use Auth; use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\Str; use Jitterbug\Export\InstancesExport; use Jitterbug\Http\Requests\InstanceRequest; @@ -28,7 +29,7 @@ use Jitterbug\Support\SolariumProxy; use Uuid; -class InstancesController extends Controller +class InstancesController extends Controller implements HasMiddleware { protected $solrItems; @@ -43,12 +44,19 @@ class InstancesController extends Controller */ public function __construct() { - $this->middleware('auth'); + $this->solrItems = new SolariumProxy('jitterbug-items'); $this->solrInstances = new SolariumProxy('jitterbug-instances'); $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + 'auth', + ]; + } + /** * Show the list of preservation instances and a search interface for * filtering and searching. diff --git a/app/Http/Controllers/ItemsController.php b/app/Http/Controllers/ItemsController.php index a93895d5..7e8ba6f0 100644 --- a/app/Http/Controllers/ItemsController.php +++ b/app/Http/Controllers/ItemsController.php @@ -5,6 +5,7 @@ use Auth; use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\Str; use Jitterbug\Export\ItemsExport; use Jitterbug\Http\Requests\ItemRequest; @@ -27,7 +28,7 @@ use Session; use Uuid; -class ItemsController extends Controller +class ItemsController extends Controller implements HasMiddleware { protected $solrItems; @@ -42,12 +43,19 @@ class ItemsController extends Controller */ public function __construct() { - $this->middleware('auth'); + $this->solrItems = new SolariumProxy('jitterbug-items'); $this->solrInstances = new SolariumProxy('jitterbug-instances'); $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + 'auth', + ]; + } + /** * Show the list of items and a search interface for * filtering and searching. diff --git a/app/Http/Controllers/MarksController.php b/app/Http/Controllers/MarksController.php index c9b87bae..a6bbbed1 100644 --- a/app/Http/Controllers/MarksController.php +++ b/app/Http/Controllers/MarksController.php @@ -2,20 +2,18 @@ namespace Jitterbug\Http\Controllers; -use Auth; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; +use Illuminate\Support\Facades\Auth; use Jitterbug\Models\Mark; -class MarksController extends Controller +class MarksController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware('auth'); + return [ + 'auth', + ]; } /** diff --git a/app/Http/Controllers/SuggestionsController.php b/app/Http/Controllers/SuggestionsController.php index 4d09ce41..a71d0ae4 100644 --- a/app/Http/Controllers/SuggestionsController.php +++ b/app/Http/Controllers/SuggestionsController.php @@ -3,6 +3,7 @@ namespace Jitterbug\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; /** * Controller for producing form level autocomplete suggestions for @@ -25,7 +26,7 @@ * the input element a css id name. e.g. #speed, or #recording-location, * etc. * - * 4. In app.js, add a jQuery selector using the id you created in step 3, + * 4. In jitterbug.js, add a jQuery selector using the id you created in step 3, * then call autocomplete. The serviceUrl should correspond to the route * you created in step 2. For example: * @@ -34,16 +35,13 @@ * deferRequestBy: 100 * }); */ -class SuggestionsController extends Controller +class SuggestionsController extends Controller implements HasMiddleware { - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() + public static function middleware(): array { - $this->middleware('auth'); + return [ + 'auth', + ]; } public function recordingLocations(Request $request) diff --git a/app/Http/Controllers/TransfersController.php b/app/Http/Controllers/TransfersController.php index d0fb84ca..a5b38ec9 100644 --- a/app/Http/Controllers/TransfersController.php +++ b/app/Http/Controllers/TransfersController.php @@ -5,6 +5,7 @@ use Auth; use DB; use Illuminate\Http\Request; +use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Support\Str; use Jitterbug\Export\TransfersExport; use Jitterbug\Http\Requests\TransferRequest; @@ -27,7 +28,7 @@ use Jitterbug\Support\SolariumProxy; use Uuid; -class TransfersController extends Controller +class TransfersController extends Controller implements HasMiddleware { protected $requiredAudioImportKeys = []; @@ -46,13 +47,19 @@ class TransfersController extends Controller */ public function __construct() { - $this->middleware('auth'); $this->solrItems = new SolariumProxy('jitterbug-items'); $this->solrInstances = new SolariumProxy('jitterbug-instances'); $this->solrTransfers = new SolariumProxy('jitterbug-transfers'); } + public static function middleware(): array + { + return [ + 'auth', + ]; + } + /** * Show the list of transfers and a search interface for * filtering and searching. diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 8b600908..53e8d9ca 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -4,7 +4,6 @@ use Closure; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; -use Illuminate\Http\Request; use Illuminate\Session\TokenMismatchException; class VerifyCsrfToken extends BaseVerifier @@ -12,13 +11,11 @@ class VerifyCsrfToken extends BaseVerifier /** * Handle an incoming request. * - * @param Request $request - * @param \Closure $next - * @return mixed + * * @throws TokenMismatchException */ public function handle($request, Closure $next): mixed { return parent::handle($request, $next); } -} \ No newline at end of file +} diff --git a/app/Http/Requests/InstanceRequest.php b/app/Http/Requests/InstanceRequest.php index dcbd08ec..35fcbae0 100644 --- a/app/Http/Requests/InstanceRequest.php +++ b/app/Http/Requests/InstanceRequest.php @@ -22,7 +22,7 @@ public function rules(): array { // Add rules for base preservation instances $rules = []; - $rules['batch_size'] = 'required_if:batch,1|integer|between:2,100'; + $rules['batch_size'] = 'nullable|required_if:batch,1|integer|between:2,100'; $this->addRuleIfNotMixed($rules, 'call_number', 'required|min:4|max:30|exists:audio_visual_items,call_number,deleted_at,NULL'); // If this is a batch create or update, don't require a file name since it @@ -35,7 +35,7 @@ public function rules(): array } $this->addRuleIfNotMixed($rules, 'file_location', 'max:60'); $this->addRuleIfNotMixed($rules, 'file_size_in_bytes', - 'integer|required|digits_between:0,15'); + 'required|integer|digits_between:0,15'); $this->addRuleIfNotMixed($rules, 'duration', ['required', 'regex:'.DurationFormat::$pattern, ]); $this->addRuleIfNotMixed($rules, 'checksum', 'max:255'); diff --git a/app/Http/Requests/ItemRequest.php b/app/Http/Requests/ItemRequest.php index 4ac4bc10..d38d5372 100644 --- a/app/Http/Requests/ItemRequest.php +++ b/app/Http/Requests/ItemRequest.php @@ -19,7 +19,7 @@ public function rules(): array { // Add rules for base audio visual item $rules = []; - $rules['batch_size'] = 'required_if:batch,1|integer|between:2,100'; + $rules['batch_size'] = 'nullable|required_if:batch,1|integer|between:2,100'; if ($this->route()->getName() !== 'items.store') { $this->addRuleIfNotMixed($rules, 'call_number', 'required|min:4|max:30|unique:audio_visual_items,call_number,'. @@ -35,9 +35,9 @@ public function rules(): array $this->addRuleIfNotMixed($rules, 'recording_location', 'max:255'); $this->addRuleIfNotMixed($rules, 'physical_location', 'max:255'); $this->addRuleIfNotMixed($rules, 'access_restrictions', 'max:255'); - $this->addRuleIfNotMixed($rules, 'oclc', 'integer|digits_between:0,15'); + $this->addRuleIfNotMixed($rules, 'oclc', 'nullable|integer|digits_between:0,15'); $this->addRuleIfNotMixed($rules, 'item_year', 'max:255'); - $this->addRuleIfNotMixed($rules, 'item_date', 'date_format:Y-m-d'); + $this->addRuleIfNotMixed($rules, 'item_date', 'nullable|date_format:Y-m-d'); $this->addRuleIfNotMixed($rules, 'speed', 'max:255'); $this->addRuleIfNotMixed($rules, 'entry_date', 'required|date_format:Y-m-d'); diff --git a/app/Import/AudioImport.php b/app/Import/AudioImport.php index 3d05038f..b410e124 100644 --- a/app/Import/AudioImport.php +++ b/app/Import/AudioImport.php @@ -5,6 +5,7 @@ use Auth; use DB; use Illuminate\Support\MessageBag; +use Illuminate\Support\Str; use Jitterbug\Models\AudioInstance; use Jitterbug\Models\AudioItem; use Jitterbug\Models\AudioTransfer; @@ -157,7 +158,7 @@ public function validate() // Validates certain field values already exist in the DB foreach ($this->mustAlreadyExistInDbKeys as $dbKey => $class) { - if (! empty($row[$dbKey]) && ! $this->valueExists($class, snake_case($dbKey), $row[$dbKey])) { + if (! empty($row[$dbKey]) && ! $this->valueExists($class, Str::snake($dbKey), $row[$dbKey])) { $bag->add($dbKey, $dbKey.' must already exist in the database.'); } } diff --git a/app/Import/ItemsImport.php b/app/Import/ItemsImport.php index 2dc5c911..df60f0eb 100644 --- a/app/Import/ItemsImport.php +++ b/app/Import/ItemsImport.php @@ -67,7 +67,7 @@ public function validate() } // Validates certain field values already exist in the DB foreach ($this->mustAlreadyExistInDbKeys as $dbKey => $class) { - if (! empty($row[$dbKey]) && ! $this->valueExists($class, snake_case($dbKey), $row[$dbKey])) { + if (! empty($row[$dbKey]) && ! $this->valueExists($class, Str::snake($dbKey), $row[$dbKey])) { $bag->add($dbKey, $dbKey.' must already exist in the database.'); } } diff --git a/app/Models/BatchAudioVisualItem.php b/app/Models/BatchAudioVisualItem.php index 22f5a4fe..7e1cee63 100644 --- a/app/Models/BatchAudioVisualItem.php +++ b/app/Models/BatchAudioVisualItem.php @@ -2,6 +2,8 @@ namespace Jitterbug\Models; +use Illuminate\Database\Eloquent\Relations\MorphTo; + class BatchAudioVisualItem extends AudioVisualItem { use MergeableAttributes; @@ -10,11 +12,11 @@ class BatchAudioVisualItem extends AudioVisualItem protected $subclasses; - protected $aggregateItem; + protected AudioVisualItem $aggregateItem; - protected $aggregateSubclass; + protected mixed $aggregateSubclass; - protected $batchGuarded = ['id', 'subclass_type', 'subclass_id', 'created_at', + protected array $batchGuarded = ['id', 'subclass_type', 'subclass_id', 'created_at', 'updated_at', ]; protected $attributes; @@ -39,12 +41,12 @@ public function __construct($items, $subclasses) $this->attributes = $this->aggregateItem->attributes; } - public function batch() + public function batch(): true { return true; } - public function getIdsAttribute() + public function getIdsAttribute(): string { $ids = []; foreach ($this->items as $item) { @@ -59,12 +61,12 @@ public function getSubclassAttribute() return $this->aggregateSubclass; } - public function subclass() + public function subclass(): MorphTo { return $this->aggregateSubclass; } - public function getTypeAttribute() + public function getTypeAttribute(): string { $fullType = $this->items->first()->getAttribute('subclass_type'); $type = substr($fullType, 0, strlen($fullType) - strlen('Item')); diff --git a/app/Models/BatchPreservationInstance.php b/app/Models/BatchPreservationInstance.php index 9392133a..1ac3e902 100644 --- a/app/Models/BatchPreservationInstance.php +++ b/app/Models/BatchPreservationInstance.php @@ -2,6 +2,7 @@ namespace Jitterbug\Models; +use Illuminate\Database\Eloquent\Relations\MorphTo; use Jitterbug\Util\DurationFormat; class BatchPreservationInstance extends PreservationInstance @@ -12,11 +13,11 @@ class BatchPreservationInstance extends PreservationInstance protected $subclasses; - protected $aggregateInstance; + protected PreservationInstance $aggregateInstance; - protected $aggregateSubclass; + protected mixed $aggregateSubclass; - protected $batchGuarded = ['id', 'subclass_type', 'subclass_id', 'created_at', + protected array $batchGuarded = ['id', 'subclass_type', 'subclass_id', 'created_at', 'updated_at', ]; protected $attributes; @@ -40,12 +41,12 @@ public function __construct($instances, $subclasses) $this->attributes = $this->aggregateInstance->attributes; } - public function batch() + public function batch(): true { return true; } - public function getDurationAttribute() + public function getDurationAttribute(): float|int|string|null { if ($this->duration_in_seconds === '') { return $this->duration_in_seconds; @@ -54,7 +55,7 @@ public function getDurationAttribute() } } - public function getIdsAttribute() + public function getIdsAttribute(): string { $ids = []; foreach ($this->instances as $instance) { @@ -69,12 +70,12 @@ public function getSubclassAttribute() return $this->aggregateSubclass; } - public function subclass() + public function subclass(): MorphTo { return $this->aggregateSubclass; } - public function getTypeAttribute() + public function getTypeAttribute(): string { $fullType = $this->instances->first()->getAttribute('subclass_type'); $type = substr($fullType, 0, strlen($fullType) - strlen('Instance')); diff --git a/app/Models/BatchTransfer.php b/app/Models/BatchTransfer.php index 2d5e7ebb..8b1e8825 100644 --- a/app/Models/BatchTransfer.php +++ b/app/Models/BatchTransfer.php @@ -2,6 +2,8 @@ namespace Jitterbug\Models; +use Illuminate\Database\Eloquent\Relations\MorphTo; + class BatchTransfer extends Transfer { use MergeableAttributes; @@ -10,11 +12,11 @@ class BatchTransfer extends Transfer protected $subclasses; - protected $aggregateTransfer; + protected Transfer $aggregateTransfer; - protected $aggregateSubclass; + protected mixed $aggregateSubclass; - protected $batchGuarded = ['id', 'subclass_type', 'subclass_id', 'created_at', + protected array $batchGuarded = ['id', 'subclass_type', 'subclass_id', 'created_at', 'updated_at', ]; protected $attributes; @@ -38,12 +40,12 @@ public function __construct($transfers, $subclasses) $this->attributes = $this->aggregateTransfer->attributes; } - public function batch() + public function batch(): true { return true; } - public function getIdsAttribute() + public function getIdsAttribute(): string { $ids = []; foreach ($this->transfers as $transfer) { @@ -58,12 +60,12 @@ public function getSubclassAttribute() return $this->aggregateSubclass; } - public function subclass() + public function subclass(): MorphTo { return $this->aggregateSubclass; } - public function getTypeAttribute() + public function getTypeAttribute(): string { $fullType = $this->transfers->first()->getAttribute('subclass_type'); $type = substr($fullType, 0, strlen($fullType) - strlen('Transfer')); diff --git a/app/Models/Format.php b/app/Models/Format.php index 72e7b980..07b459d5 100644 --- a/app/Models/Format.php +++ b/app/Models/Format.php @@ -2,6 +2,7 @@ namespace Jitterbug\Models; +use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; @@ -17,7 +18,8 @@ class Format extends Model protected $fillable = ['name', 'prefix', 'legacy_prefix']; // Filters out formats that will not be used for new items - public function scopeWithFutureUse($query) + #[Scope] + protected function withFutureUse($query) { return $query->where('id', '<>', 25) ->where('id', '<>', 54); diff --git a/app/Models/Markable.php b/app/Models/Markable.php index 296629a3..55d59986 100644 --- a/app/Models/Markable.php +++ b/app/Models/Markable.php @@ -23,9 +23,9 @@ public function addMark() $mark = $this->getMark(); if ($mark === null) { $mark = new Mark; - $mark->markableType = class_basename(get_class($this)); - $mark->markableId = $this->id; - $mark->userId = \Auth::user()->id; + $mark->markable_type = class_basename(get_class($this)); + $mark->markable_id = $this->id; + $mark->user_id = \Auth::user()->id; } else { $mark->touch(); } diff --git a/app/Models/User.php b/app/Models/User.php index effdbcdd..ba9f3480 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -5,6 +5,7 @@ use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; +use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\Access\Authorizable; @@ -56,7 +57,8 @@ public function marks(): HasMany * Return users that have logged into the system. Basically * filters out legacy users and the system user. */ - public function scopeHasLoggedIn($query) + #[Scope] + protected function hasLoggedIn($query) { return $query->where('password', '<>', 'null'); } diff --git a/app/Presenters/DashboardMark.php b/app/Presenters/DashboardMark.php index 4e0482f9..cc4e3f08 100644 --- a/app/Presenters/DashboardMark.php +++ b/app/Presenters/DashboardMark.php @@ -2,6 +2,7 @@ namespace Jitterbug\Presenters; +use Illuminate\Support\Str; use Westsworld\TimeAgo; /** @@ -18,7 +19,7 @@ public function __construct($mark) $this->mark = $mark; $class = $this->mark->markable_type; - $snakeClass = snake_case($class); + $snakeClass = Str::snake($class); $explodedClass = explode('_', $snakeClass); $this->objectType = array_pop($explodedClass); } diff --git a/app/Presenters/TransactionDigest.php b/app/Presenters/TransactionDigest.php index 0792c7d2..2c1fd3aa 100644 --- a/app/Presenters/TransactionDigest.php +++ b/app/Presenters/TransactionDigest.php @@ -590,7 +590,7 @@ protected function buildObjectTypesToIds() } // e.g. convert 'AudioVisualItem' to 'audio_visual_item' - $snakeClass = snake_case($class); + $snakeClass = Str::snake($class); $explodedClass = explode('_', $snakeClass); // We have a base class instance, so get the subclass type // ('audio', 'film' or 'video') diff --git a/artisan b/artisan index 8e04b422..c35e31d6 100755 --- a/artisan +++ b/artisan @@ -1,6 +1,7 @@ #!/usr/bin/env php handleCommand(new ArgvInput); +/** @var Application $app */ +$app = require_once __DIR__.'/bootstrap/app.php'; + +$status = $app->handleCommand(new ArgvInput); exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php index ff18c5e0..123f33c7 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -34,7 +34,7 @@ $middleware->web([ EncryptCookies::class, - VerifyCsrfToken::class + VerifyCsrfToken::class, ]); $middleware->throttleApi('60,1'); diff --git a/composer.json b/composer.json index 3849bf94..1e6d10c7 100644 --- a/composer.json +++ b/composer.json @@ -15,30 +15,31 @@ } ], "require": { - "laravel/framework": "^11.45", + "laravel/framework": "^12.21", "solarium/solarium": "^6.3", - "symfony/event-dispatcher": "^7.0", + "symfony/event-dispatcher": "^7.2", "venturecraft/revisionable": "dev-main", - "diglactic/laravel-breadcrumbs": "^9.0", + "diglactic/laravel-breadcrumbs": "^10.0", "ramsey/uuid": "^4.2", - "directorytree/ldaprecord-laravel": "^v3.3", + "directorytree/ldaprecord-laravel": "^3.4", "jimmiw/php-time-ago": "^3.2", - "laravel/tinker": "^v2.9", + "laravel/tinker": "^2.10.1", "doctrine/dbal": "^3.5", "laravel/helpers": "^1.7", - "laravel/ui": "^v4.5", + "laravel/ui": "^4.6", "fakerphp/faker": "^1.23", "php": "^8.2", - "spatie/laravel-html": "^3.6" + "spatie/laravel-html": "^3.11" }, "require-dev": { "mockery/mockery": "^1.6", - "phpunit/phpunit": "^11.0.1", - "symfony/css-selector": "^7.0", - "symfony/dom-crawler": "^7.0", + "phpunit/phpunit": "^11.5.3", + "symfony/css-selector": "^7.2", + "symfony/dom-crawler": "^7.2", "filp/whoops": "^2.8", - "laravel/dusk": "^8.0", - "nunomaduro/collision": "^8.0" + "laravel/dusk": "^8.2", + "nunomaduro/collision": "^8.6", + "laravel/pail": "^1.2.2" }, "autoload": { "psr-4": { @@ -70,6 +71,10 @@ "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover" + ], + "dev": [ + "Composer\\Config::disableProcessTimeout", + "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite" ] }, "config": { diff --git a/composer.lock b/composer.lock index f3448f07..424690dd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,29 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bdc8141c42948e5ba3a94206d0fc037b", + "content-hash": "3a38cf6884ac7452f470ec0d7d2b5676", "packages": [ { "name": "brick/math", - "version": "0.12.3", + "version": "0.14.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", + "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -56,7 +56,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.3" + "source": "https://github.com/brick/math/tree/0.14.0" }, "funding": [ { @@ -64,7 +64,7 @@ "type": "github" } ], - "time": "2025-02-28T13:11:00+00:00" + "time": "2025-08-29T12:40:03+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -212,31 +212,30 @@ }, { "name": "diglactic/laravel-breadcrumbs", - "version": "v9.0.0", + "version": "v10.0.0", "source": { "type": "git", "url": "https://github.com/diglactic/laravel-breadcrumbs.git", - "reference": "88e8f01e013e811215770e27b40a74014c28f2c4" + "reference": "1bfe5e29aacf88beeab64ae3e860e0f2d8ace36a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/88e8f01e013e811215770e27b40a74014c28f2c4", - "reference": "88e8f01e013e811215770e27b40a74014c28f2c4", + "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/1bfe5e29aacf88beeab64ae3e860e0f2d8ace36a", + "reference": "1bfe5e29aacf88beeab64ae3e860e0f2d8ace36a", "shasum": "" }, "require": { "facade/ignition-contracts": "^1.0", - "laravel/framework": "^8.0 || ^9.0 || ^10.0 || ^11.0", - "php": "^7.3 || ^8.0" + "laravel/framework": "^10.0 || ^11.0 || ^12.0", + "php": "^8.1" }, "conflict": { "davejamesmiller/laravel-breadcrumbs": "*" }, "require-dev": { - "orchestra/testbench": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "php-coveralls/php-coveralls": "^2.7", - "phpunit/phpunit": "^9.5 || ^10.5", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1" + "orchestra/testbench": "^8.0 || ^9.0 || ^10.0", + "phpunit/phpunit": "^10.5 || ^11.5", + "spatie/phpunit-snapshot-assertions": "^5.1" }, "type": "library", "extra": { @@ -277,22 +276,22 @@ ], "support": { "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", - "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v9.0.0" + "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v10.0.0" }, - "time": "2024-03-12T00:42:39+00:00" + "time": "2025-02-25T05:44:07+00:00" }, { "name": "directorytree/ldaprecord", - "version": "v3.8.2", + "version": "v3.8.4", "source": { "type": "git", "url": "https://github.com/DirectoryTree/LdapRecord.git", - "reference": "cff35dc485cdfbc68e53948e4842e37e68770dde" + "reference": "e081b80d4a22d470719d9b5e7552a3ad90c56d44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/cff35dc485cdfbc68e53948e4842e37e68770dde", - "reference": "cff35dc485cdfbc68e53948e4842e37e68770dde", + "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/e081b80d4a22d470719d9b5e7552a3ad90c56d44", + "reference": "e081b80d4a22d470719d9b5e7552a3ad90c56d44", "shasum": "" }, "require": { @@ -355,7 +354,7 @@ "type": "github" } ], - "time": "2025-05-20T20:49:13+00:00" + "time": "2025-09-20T02:16:09+00:00" }, { "name": "directorytree/ldaprecord-laravel", @@ -426,16 +425,16 @@ }, { "name": "doctrine/dbal", - "version": "3.10.0", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "1cf840d696373ea0d58ad0a8875c0fadcfc67214" + "reference": "c6c16cf787eaba3112203dfcd715fa2059c62282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/1cf840d696373ea0d58ad0a8875c0fadcfc67214", - "reference": "1cf840d696373ea0d58ad0a8875c0fadcfc67214", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c6c16cf787eaba3112203dfcd715fa2059c62282", + "reference": "c6c16cf787eaba3112203dfcd715fa2059c62282", "shasum": "" }, "require": { @@ -451,10 +450,10 @@ }, "require-dev": { "doctrine/cache": "^1.11|^2.0", - "doctrine/coding-standard": "13.0.0", + "doctrine/coding-standard": "13.0.1", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.17", + "phpstan/phpstan": "2.1.22", "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "9.6.23", "slevomat/coding-standard": "8.16.2", @@ -520,7 +519,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.10.0" + "source": "https://github.com/doctrine/dbal/tree/3.10.2" }, "funding": [ { @@ -536,7 +535,7 @@ "type": "tidelift" } ], - "time": "2025-07-10T21:11:04+00:00" + "time": "2025-09-04T23:51:27+00:00" }, { "name": "doctrine/deprecations", @@ -679,33 +678,32 @@ }, { "name": "doctrine/inflector", - "version": "2.0.10", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "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" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -750,7 +748,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" + "source": "https://github.com/doctrine/inflector/tree/2.1.0" }, "funding": [ { @@ -766,7 +764,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/lexer", @@ -1228,22 +1226,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.3", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1334,7 +1332,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1350,20 +1348,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:37:11+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1371,7 +1369,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -1417,7 +1415,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.2.0" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1433,20 +1431,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:27:01+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -1462,7 +1460,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1533,7 +1531,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.1" + "source": "https://github.com/guzzle/psr7/tree/2.8.0" }, "funding": [ { @@ -1549,20 +1547,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T12:30:47+00:00" + "time": "2025-08-23T21:21:41+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.4", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", "shasum": "" }, "require": { @@ -1571,7 +1569,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", "uri-template/tests": "1.0.0" }, "type": "library", @@ -1619,7 +1617,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" }, "funding": [ { @@ -1635,7 +1633,7 @@ "type": "tidelift" } ], - "time": "2025-02-03T10:55:03+00:00" + "time": "2025-08-22T14:27:06+00:00" }, { "name": "halaxa/json-machine", @@ -1753,20 +1751,20 @@ }, { "name": "laravel/framework", - "version": "v11.45.1", + "version": "v12.31.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b09ba32795b8e71df10856a2694706663984a239" + "reference": "281b711710c245dd8275d73132e92635be3094df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b09ba32795b8e71df10856a2694706663984a239", - "reference": "b09ba32795b8e71df10856a2694706663984a239", + "url": "https://api.github.com/repos/laravel/framework/zipball/281b711710c245dd8275d73132e92635be3094df", + "reference": "281b711710c245dd8275d73132e92635be3094df", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.11|^0.12|^0.13|^0.14", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", @@ -1781,32 +1779,35 @@ "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/prompts": "^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.7", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.6|^3.8.4", + "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", + "phiki/phiki": "^2.0.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0.3", - "symfony/error-handler": "^7.0.3", - "symfony/finder": "^7.0.3", + "symfony/console": "^7.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.0.3", - "symfony/mailer": "^7.0.3", - "symfony/mime": "^7.0.3", - "symfony/polyfill-php83": "^1.31", - "symfony/process": "^7.0.3", - "symfony/routing": "^7.0.3", - "symfony/uid": "^7.0.3", - "symfony/var-dumper": "^7.0.3", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", + "symfony/polyfill-php83": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-php85": "^1.33", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.6.1", "voku/portable-ascii": "^2.0.2" @@ -1838,6 +1839,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", "illuminate/mail": "self.version", @@ -1870,17 +1872,18 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.13.2", - "pda/pheanstalk": "^5.0.6", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^10.6.5", + "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1", - "predis/predis": "^2.3", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", + "predis/predis": "^2.3|^3.0", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0.3", - "symfony/http-client": "^7.0.3", - "symfony/psr-http-message-bridge": "^7.0.3", - "symfony/translation": "^7.0.3" + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", @@ -1895,7 +1898,7 @@ "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|^6.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", @@ -1906,22 +1909,22 @@ "mockery/mockery": "Required to use mocking (^1.6).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.3.6|^12.0.1).", - "predis/predis": "Required to use the predis connector (^2.3).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", + "predis/predis": "Required to use the predis connector (^2.3|^3.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "11.x-dev" + "dev-master": "12.x-dev" } }, "autoload": { @@ -1964,20 +1967,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-06-03T14:01:40+00:00" + "time": "2025-09-23T15:33:04+00:00" }, { "name": "laravel/helpers", - "version": "v1.7.2", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70" + "reference": "d0094b4bc4364560c8ee3a9e956596d760d4afab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/672d79d5b5f65dc821e57783fa11f22c4d762d70", - "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70", + "url": "https://api.github.com/repos/laravel/helpers/zipball/d0094b4bc4364560c8ee3a9e956596d760d4afab", + "reference": "d0094b4bc4364560c8ee3a9e956596d760d4afab", "shasum": "" }, "require": { @@ -2019,22 +2022,22 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.7.2" + "source": "https://github.com/laravel/helpers/tree/v1.8.1" }, - "time": "2025-01-24T15:41:25+00:00" + "time": "2025-09-02T15:31:25+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.6", + "version": "v0.3.7", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077" + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a1891d362714bc40c8d23b0b1d7090f022ea27cc", + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc", "shasum": "" }, "require": { @@ -2051,8 +2054,8 @@ "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -2078,22 +2081,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.6" + "source": "https://github.com/laravel/prompts/tree/v0.3.7" }, - "time": "2025-07-07T14:17:42+00:00" + "time": "2025-09-19T13:47:56+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.4", + "version": "v2.0.5", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + "reference": "3832547db6e0e2f8bb03d4093857b378c66eceed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3832547db6e0e2f8bb03d4093857b378c66eceed", + "reference": "3832547db6e0e2f8bb03d4093857b378c66eceed", "shasum": "" }, "require": { @@ -2141,7 +2144,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-03-19T13:51:03+00:00" + "time": "2025-09-22T17:29:40+00:00" }, { "name": "laravel/tinker", @@ -2928,16 +2931,16 @@ }, { "name": "nesbot/carbon", - "version": "3.10.1", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "1fd1935b2d90aef2f093c5e35f7ae1257c448d00" + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/1fd1935b2d90aef2f093c5e35f7ae1257c448d00", - "reference": "1fd1935b2d90aef2f093c5e35f7ae1257c448d00", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", "shasum": "" }, "require": { @@ -2955,13 +2958,13 @@ "require-dev": { "doctrine/dbal": "^3.6.3 || ^4.0", "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.75.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", "phpmd/phpmd": "^2.15.0", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.17", - "phpunit/phpunit": "^10.5.46", - "squizlabs/php_codesniffer": "^3.13.0" + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4" }, "bin": [ "bin/carbon" @@ -3029,7 +3032,7 @@ "type": "tidelift" } ], - "time": "2025-06-21T15:19:35+00:00" + "time": "2025-09-06T13:39:36+00:00" }, { "name": "nette/schema", @@ -3095,29 +3098,29 @@ }, { "name": "nette/utils", - "version": "v4.0.7", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", + "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", "shasum": "" }, "require": { - "php": "8.0 - 8.4" + "php": "8.0 - 8.5" }, "conflict": { "nette/finder": "<3", "nette/schema": "<1.2.2" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", + "jetbrains/phpstorm-attributes": "^1.2", "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -3135,6 +3138,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -3175,22 +3181,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.7" + "source": "https://github.com/nette/utils/tree/v4.0.8" }, - "time": "2025-06-03T04:55:08+00:00" + "time": "2025-08-06T21:43:34+00:00" }, { "name": "nikic/php-parser", - "version": "v5.6.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56" + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/221b0d0fdf1369c71047ad1d18bb5880017bbc56", - "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", "shasum": "" }, "require": { @@ -3209,7 +3215,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -3233,9 +3239,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" }, - "time": "2025-07-27T20:03:57+00:00" + "time": "2025-08-13T20:13:15+00:00" }, { "name": "nunomaduro/termwind", @@ -3324,18 +3330,89 @@ ], "time": "2025-05-08T08:14:37+00:00" }, + { + "name": "phiki/phiki", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phikiphp/phiki.git", + "reference": "160785c50c01077780ab217e5808f00ab8f05a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phikiphp/phiki/zipball/160785c50c01077780ab217e5808f00ab8f05a13", + "reference": "160785c50c01077780ab217e5808f00ab8f05a13", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/commonmark": "^2.5.3", + "php": "^8.2", + "psr/simple-cache": "^3.0" + }, + "require-dev": { + "illuminate/support": "^11.45", + "laravel/pint": "^1.18.1", + "orchestra/testbench": "^9.15", + "pestphp/pest": "^3.5.1", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^7.1.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Phiki\\Adapters\\Laravel\\PhikiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Phiki\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Chandler", + "email": "support@ryangjchandler.co.uk", + "homepage": "https://ryangjchandler.co.uk", + "role": "Developer" + } + ], + "description": "Syntax highlighting using TextMate grammars in PHP.", + "support": { + "issues": "https://github.com/phikiphp/phiki/issues", + "source": "https://github.com/phikiphp/phiki/tree/v2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sponsors/ryangjchandler", + "type": "github" + }, + { + "url": "https://buymeacoffee.com/ryangjchandler", + "type": "other" + } + ], + "time": "2025-09-20T17:21:02+00:00" + }, { "name": "phpoption/phpoption", - "version": "1.9.3", + "version": "1.9.4", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", + "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", "shasum": "" }, "require": { @@ -3343,7 +3420,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" }, "type": "library", "extra": { @@ -3385,7 +3462,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.4" }, "funding": [ { @@ -3397,7 +3474,7 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2025-08-21T11:53:16+00:00" }, { "name": "psr/cache", @@ -3862,16 +3939,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.9", + "version": "v0.12.12", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "1b801844becfe648985372cb4b12ad6840245ace" + "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1b801844becfe648985372cb4b12ad6840245ace", - "reference": "1b801844becfe648985372cb4b12ad6840245ace", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/cd23863404a40ccfaf733e3af4db2b459837f7e7", + "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7", "shasum": "" }, "require": { @@ -3921,12 +3998,11 @@ "authors": [ { "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "email": "justin@justinhileman.info" } ], "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "homepage": "https://psysh.org", "keywords": [ "REPL", "console", @@ -3935,9 +4011,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.9" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.12" }, - "time": "2025-06-23T02:35:06+00:00" + "time": "2025-09-20T13:46:31+00:00" }, { "name": "ralouphie/getallheaders", @@ -4061,20 +4137,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.0", + "version": "4.9.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -4133,9 +4209,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" + "source": "https://github.com/ramsey/uuid/tree/4.9.1" }, - "time": "2025-06-25T14:20:11+00:00" + "time": "2025-09-04T20:59:21+00:00" }, { "name": "solarium/solarium", @@ -4359,16 +4435,16 @@ }, { "name": "symfony/console", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101" + "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9e27aecde8f506ba0fd1d9989620c04a87697101", - "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101", + "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", "shasum": "" }, "require": { @@ -4433,7 +4509,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.1" + "source": "https://github.com/symfony/console/tree/v7.3.3" }, "funding": [ { @@ -4444,12 +4520,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-27T19:55:54+00:00" + "time": "2025-08-25T06:35:40+00:00" }, { "name": "symfony/css-selector", @@ -4585,16 +4665,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.3.1", + "version": "v7.3.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235" + "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/35b55b166f6752d6aaf21aa042fc5ed280fce235", - "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", "shasum": "" }, "require": { @@ -4642,7 +4722,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.1" + "source": "https://github.com/symfony/error-handler/tree/v7.3.2" }, "funding": [ { @@ -4653,25 +4733,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-13T07:48:40+00:00" + "time": "2025-07-07T08:17:57+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", "shasum": "" }, "require": { @@ -4722,7 +4806,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" }, "funding": [ { @@ -4733,12 +4817,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-22T09:11:45+00:00" + "time": "2025-08-13T11:49:31+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4818,16 +4906,16 @@ }, { "name": "symfony/finder", - "version": "v7.3.0", + "version": "v7.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", "shasum": "" }, "require": { @@ -4862,7 +4950,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.0" + "source": "https://github.com/symfony/finder/tree/v7.3.2" }, "funding": [ { @@ -4873,25 +4961,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-30T19:00:26+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "23dd60256610c86a3414575b70c596e5deff6ed9" + "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/23dd60256610c86a3414575b70c596e5deff6ed9", - "reference": "23dd60256610c86a3414575b70c596e5deff6ed9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7475561ec27020196c49bb7c4f178d33d7d3dc00", + "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00", "shasum": "" }, "require": { @@ -4941,7 +5033,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.3.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.3" }, "funding": [ { @@ -4952,25 +5044,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-23T15:07:14+00:00" + "time": "2025-08-20T08:04:18+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831" + "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1644879a66e4aa29c36fe33dfa6c54b450ce1831", - "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/72c304de37e1a1cec6d5d12b81187ebd4850a17b", + "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b", "shasum": "" }, "require": { @@ -5055,7 +5151,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.3.1" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.3" }, "funding": [ { @@ -5066,25 +5162,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-28T08:24:55+00:00" + "time": "2025-08-29T08:23:45+00:00" }, { "name": "symfony/mailer", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "b5db5105b290bdbea5ab27b89c69effcf1cb3368" + "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b5db5105b290bdbea5ab27b89c69effcf1cb3368", - "reference": "b5db5105b290bdbea5ab27b89c69effcf1cb3368", + "url": "https://api.github.com/repos/symfony/mailer/zipball/a32f3f45f1990db8c4341d5122a7d3a381c7e575", + "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575", "shasum": "" }, "require": { @@ -5135,7 +5235,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.1" + "source": "https://github.com/symfony/mailer/tree/v7.3.3" }, "funding": [ { @@ -5146,25 +5246,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-27T19:55:54+00:00" + "time": "2025-08-13T11:49:31+00:00" }, { "name": "symfony/mime", - "version": "v7.3.0", + "version": "v7.3.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9" + "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", + "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", "shasum": "" }, "require": { @@ -5219,7 +5323,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.0" + "source": "https://github.com/symfony/mime/tree/v7.3.2" }, "funding": [ { @@ -5230,16 +5334,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-19T08:51:26+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -5298,7 +5406,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -5309,6 +5417,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5318,16 +5430,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -5376,7 +5488,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -5387,16 +5499,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -5459,7 +5575,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" }, "funding": [ { @@ -5470,6 +5586,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5479,7 +5599,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5540,7 +5660,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -5551,6 +5671,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5560,7 +5684,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -5621,7 +5745,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -5632,6 +5756,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5641,7 +5769,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -5701,7 +5829,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -5712,6 +5840,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5721,16 +5853,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { @@ -5777,7 +5909,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" }, "funding": [ { @@ -5788,16 +5920,180 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "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.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "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.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-23T16:12:55+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -5856,7 +6152,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" }, "funding": [ { @@ -5867,6 +6163,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5876,16 +6176,16 @@ }, { "name": "symfony/process", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", + "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", "shasum": "" }, "require": { @@ -5917,7 +6217,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.3.3" }, "funding": [ { @@ -5928,25 +6228,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-17T09:11:12+00:00" + "time": "2025-08-18T09:42:54+00:00" }, { "name": "symfony/routing", - "version": "v7.3.0", + "version": "v7.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8e213820c5fea844ecea29203d2a308019007c15" + "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8e213820c5fea844ecea29203d2a308019007c15", - "reference": "8e213820c5fea844ecea29203d2a308019007c15", + "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", "shasum": "" }, "require": { @@ -5998,7 +6302,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.3.0" + "source": "https://github.com/symfony/routing/tree/v7.3.2" }, "funding": [ { @@ -6009,12 +6313,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-24T20:43:28+00:00" + "time": "2025-07-15T11:36:08+00:00" }, { "name": "symfony/service-contracts", @@ -6101,16 +6409,16 @@ }, { "name": "symfony/string", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" + "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", + "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", "shasum": "" }, "require": { @@ -6168,7 +6476,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.0" + "source": "https://github.com/symfony/string/tree/v7.3.3" }, "funding": [ { @@ -6179,25 +6487,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-20T20:19:01+00:00" + "time": "2025-08-25T06:35:40+00:00" }, { "name": "symfony/translation", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "241d5ac4910d256660238a7ecf250deba4c73063" + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/241d5ac4910d256660238a7ecf250deba4c73063", - "reference": "241d5ac4910d256660238a7ecf250deba4c73063", + "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", "shasum": "" }, "require": { @@ -6264,7 +6576,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.1" + "source": "https://github.com/symfony/translation/tree/v7.3.3" }, "funding": [ { @@ -6275,12 +6587,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-27T19:55:54+00:00" + "time": "2025-08-01T21:02:37+00:00" }, { "name": "symfony/translation-contracts", @@ -6436,16 +6752,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42" + "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", - "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", "shasum": "" }, "require": { @@ -6457,7 +6773,6 @@ "symfony/console": "<6.4" }, "require-dev": { - "ext-iconv": "*", "symfony/console": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", @@ -6500,7 +6815,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.1" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.3" }, "funding": [ { @@ -6511,12 +6826,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-27T19:55:54+00:00" + "time": "2025-08-13T11:49:31+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -6579,21 +6898,21 @@ "source": { "type": "git", "url": "https://github.com/UNC-Libraries/revisionable-1.git", - "reference": "cc5ceb88134e3a041af5a31e6c2fd67db3db3c10" + "reference": "8cee583bb4e317b874ebe6ed25c663d086e2c788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/UNC-Libraries/revisionable-1/zipball/cc5ceb88134e3a041af5a31e6c2fd67db3db3c10", - "reference": "cc5ceb88134e3a041af5a31e6c2fd67db3db3c10", + "url": "https://api.github.com/repos/UNC-Libraries/revisionable-1/zipball/8cee583bb4e317b874ebe6ed25c663d086e2c788", + "reference": "8cee583bb4e317b874ebe6ed25c663d086e2c788", "shasum": "" }, "require": { - "illuminate/support": "~4.0|~5.0|~5.1|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "laravel/framework": "~5.4|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "~4.0|~5.0|~5.1|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "laravel/framework": "~5.4|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": ">=5.4.0" }, "require-dev": { - "orchestra/testbench": "~3.0|^8.0|^9.0" + "orchestra/testbench": "~3.0|^8.0|^9.0|^10.0" }, "default-branch": true, "type": "library", @@ -6640,7 +6959,7 @@ "issues": "https://github.com/VentureCraft/revisionable/issues", "source": "https://github.com/VentureCraft/revisionable" }, - "time": "2024-05-24T15:02:24+00:00" + "time": "2025-07-31T13:55:04+00:00" }, { "name": "vlucas/phpdotenv", @@ -6862,16 +7181,16 @@ "packages-dev": [ { "name": "filp/whoops", - "version": "2.18.3", + "version": "2.18.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "59a123a3d459c5a23055802237cb317f609867e5" + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", - "reference": "59a123a3d459c5a23055802237cb317f609867e5", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", "shasum": "" }, "require": { @@ -6921,7 +7240,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.3" + "source": "https://github.com/filp/whoops/tree/2.18.4" }, "funding": [ { @@ -6929,7 +7248,7 @@ "type": "github" } ], - "time": "2025-06-16T00:02:10+00:00" + "time": "2025-08-08T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -7056,6 +7375,85 @@ }, "time": "2025-06-10T13:59:27+00:00" }, + { + "name": "laravel/pail", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/8cc3d575c1f0e57eeb923f366a37528c50d2385a", + "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0", + "illuminate/contracts": "^10.24|^11.0|^12.0", + "illuminate/log": "^10.24|^11.0|^12.0", + "illuminate/process": "^10.24|^11.0|^12.0", + "illuminate/support": "^10.24|^11.0|^12.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2025-06-05T13:55:57+00:00" + }, { "name": "masterminds/html5", "version": "2.10.0", @@ -7208,16 +7606,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.3", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "faed855a7b5f4d4637717c2b3863e277116beb36" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36", - "reference": "faed855a7b5f4d4637717c2b3863e277116beb36", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -7256,7 +7654,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -7264,7 +7662,7 @@ "type": "tidelift" } ], - "time": "2025-07-05T12:25:42+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nunomaduro/collision", @@ -7551,16 +7949,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.10", + "version": "11.0.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76" + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", "shasum": "" }, "require": { @@ -7617,7 +8015,7 @@ "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/show" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" }, "funding": [ { @@ -7637,7 +8035,7 @@ "type": "tidelift" } ], - "time": "2025-06-18T08:56:18+00:00" + "time": "2025-08-27T14:37:49+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7886,16 +8284,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.27", + "version": "11.5.41", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "446d43867314781df7e9adf79c3ec7464956fd8f" + "reference": "b42782bcb947d2c197aea42ce9714ee2d974b283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/446d43867314781df7e9adf79c3ec7464956fd8f", - "reference": "446d43867314781df7e9adf79c3ec7464956fd8f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b42782bcb947d2c197aea42ce9714ee2d974b283", + "reference": "b42782bcb947d2c197aea42ce9714ee2d974b283", "shasum": "" }, "require": { @@ -7905,24 +8303,24 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.3", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.10", + "phpunit/php-code-coverage": "^11.0.11", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.1", + "sebastian/comparator": "^6.3.2", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", + "sebastian/type": "^5.1.3", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" }, @@ -7967,7 +8365,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.27" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.41" }, "funding": [ { @@ -7991,7 +8389,7 @@ "type": "tidelift" } ], - "time": "2025-07-11T04:10:06+00:00" + "time": "2025-09-24T06:32:10+00:00" }, { "name": "sebastian/cli-parser", @@ -8165,16 +8563,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.1", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", "shasum": "" }, "require": { @@ -8233,15 +8631,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2025-03-07T06:57:01+00:00" + "time": "2025-08-10T08:07:46+00:00" }, { "name": "sebastian/complexity", @@ -8446,16 +8856,16 @@ }, { "name": "sebastian/exporter", - "version": "6.3.0", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -8469,7 +8879,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -8512,15 +8922,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -8758,23 +9180,23 @@ }, { "name": "sebastian/recursion-context", - "version": "6.0.2", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -8810,28 +9232,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2024-07-03T05:10:34+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { "name": "sebastian/type", - "version": "5.1.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { @@ -8867,15 +9301,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2025-03-18T13:35:50+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", @@ -8985,16 +9431,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.3.1", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9" + "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8b2ee2e06ab99fa5f067b6699296d4e35c156bb9", - "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/efa076ea0eeff504383ff0dcf827ea5ce15690ba", + "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba", "shasum": "" }, "require": { @@ -9032,7 +9478,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.3.1" + "source": "https://github.com/symfony/dom-crawler/tree/v7.3.3" }, "funding": [ { @@ -9043,12 +9489,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-15T10:07:06+00:00" + "time": "2025-08-06T20:13:54+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/cache.php b/config/cache.php index 9e3136c1..0c7474cb 100644 --- a/config/cache.php +++ b/config/cache.php @@ -6,6 +6,7 @@ 'file' => [ 'driver' => 'file', 'path' => env('STORAGE_PATH', storage_path()).'/framework/cache', + 'lock_path' => storage_path('framework/cache/data'), ], ], diff --git a/config/database.php b/config/database.php index de5982b5..8757587f 100644 --- a/config/database.php +++ b/config/database.php @@ -9,6 +9,11 @@ 'driver' => 'sqlite', 'database' => storage_path().'/database.sqlite', 'prefix' => '', + 'url' => env('DB_URL'), + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, ], 'mysql' => [ @@ -21,6 +26,14 @@ 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, + 'url' => env('DB_URL'), + 'port' => env('DB_PORT', '3306'), + 'unix_socket' => env('DB_SOCKET', ''), + 'prefix_indexes' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], ], ], @@ -37,6 +50,9 @@ 'host' => '127.0.0.1', 'port' => 6379, 'database' => 0, + 'url' => env('REDIS_URL'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), ], ], diff --git a/config/filesystems.php b/config/filesystems.php index fb8365e1..1e52e8bf 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -9,6 +9,8 @@ 'driver' => 'local', 'root' => env('STORAGE_PATH', storage_path()).'/app', 'throw' => false, + 'serve' => true, + 'report' => false, ], 'rackspace' => [ diff --git a/config/logging.php b/config/logging.php index 67d3436a..07ea9c3f 100644 --- a/config/logging.php +++ b/config/logging.php @@ -7,6 +7,7 @@ 'driver' => 'single', 'path' => env('LOG_CHANNEL_PATH', storage_path('logs/laravel.log')), 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], ], diff --git a/database/seeders/UsersTableSeeder.php b/database/seeders/UsersTableSeeder.php index b47eb826..9b09486f 100644 --- a/database/seeders/UsersTableSeeder.php +++ b/database/seeders/UsersTableSeeder.php @@ -27,4 +27,4 @@ public function run(): void ]); } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 38824c0c..700cb3a4 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,32 @@ { - "private": true, - "scripts": { - "dev": "npm run development", - "development": "node node_modules/cross-env/src/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js", - "watch": "npm run development -- --watch" - }, - "devDependencies": { - "@popperjs/core": "^2.11.8", - "bootstrap": "^5.3.7", - "cross-env": "^7.0.3", - "devbridge-autocomplete": "1.4.11", - "js-cookie": "~3.0.5", - "laravel-mix": "^6.0.49", - "postcss": "^8.4.38", - "resolve-url-loader": "^5.0.0", - "sass": "^1.77.2", - "sass-loader": "^14.2.1" - }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@popperjs/core": "^2.11.8", + "@rollup/plugin-inject": "5.0.5", + "bootstrap": "^5.3.7", + "chosen-js": "^1.8.7", + "concurrently": "^9.0.1", + "cross-env": "^7.0.3", + "datatables.net-dt": "^2.3.4", + "devbridge-autocomplete": "1.5.0", + "flatpickr": "^4.6.13", + "font-awesome": "^4.7.0", + "jquery": "^3.7.1", + "laravel-vite-plugin": "^1.3.0", + "postcss": "^8.4.38", + "resolve-url-loader": "^5.0.0", + "sass": "^1.77.2", + "sass-loader": "^14.2.1", + "vite": "^6.3.6" + }, + "optionalDependencies": { + "@esbuild/linux-arm64": "^0.25.10", + "@rollup/rollup-linux-arm64-gnu": "4.52.0" + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/public/.htaccess b/public/.htaccess index 77827ae7..b574a597 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,14 +1,24 @@ - Options -MultiViews + Options -MultiViews -Indexes RewriteEngine On - # Redirect Trailing Slashes... - RewriteRule ^(.*)/$ /$1 [L,R=301] + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - # Handle Front Controller... + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # 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/build/assets/app-CjrxpgHt.js b/public/build/assets/app-CjrxpgHt.js new file mode 100644 index 00000000..33b1c899 --- /dev/null +++ b/public/build/assets/app-CjrxpgHt.js @@ -0,0 +1,42 @@ +var Zc=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n.exports);var rv=Zc(bc=>{function ef(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Bi={exports:{}};/*! + * jQuery JavaScript Library v3.7.1 + * https://jquery.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-08-28T13:37Z + */var tf=Bi.exports,Fs;function nf(){return Fs||(Fs=1,(function(t){(function(n,e){t.exports=n.document?e(n,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return e(r)}})(typeof window<"u"?window:tf,function(n,e){var r=[],a=Object.getPrototypeOf,s=r.slice,c=r.flat?function(i){return r.flat.call(i)}:function(i){return r.concat.apply([],i)},h=r.push,d=r.indexOf,l={},u=l.toString,b=l.hasOwnProperty,y=b.toString,C=y.call(Object),E={},T=function(o){return typeof o=="function"&&typeof o.nodeType!="number"&&typeof o.item!="function"},N=function(o){return o!=null&&o===o.window},F=n.document,$={type:!0,src:!0,nonce:!0,noModule:!0};function Z(i,o,f){f=f||F;var m,v,_=f.createElement("script");if(_.text=i,o)for(m in $)v=o[m]||o.getAttribute&&o.getAttribute(m),v&&_.setAttribute(m,v);f.head.appendChild(_).parentNode.removeChild(_)}function J(i){return i==null?i+"":typeof i=="object"||typeof i=="function"?l[u.call(i)]||"object":typeof i}var ne="3.7.1",G=/HTML$/i,p=function(i,o){return new p.fn.init(i,o)};p.fn=p.prototype={jquery:ne,constructor:p,length:0,toArray:function(){return s.call(this)},get:function(i){return i==null?s.call(this):i<0?this[i+this.length]:this[i]},pushStack:function(i){var o=p.merge(this.constructor(),i);return o.prevObject=this,o},each:function(i){return p.each(this,i)},map:function(i){return this.pushStack(p.map(this,function(o,f){return i.call(o,f,o)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(p.grep(this,function(i,o){return(o+1)%2}))},odd:function(){return this.pushStack(p.grep(this,function(i,o){return o%2}))},eq:function(i){var o=this.length,f=+i+(i<0?o:0);return this.pushStack(f>=0&&f0&&o-1 in i}function M(i,o){return i.nodeName&&i.nodeName.toLowerCase()===o.toLowerCase()}var B=r.pop,V=r.sort,re=r.splice,X="[\\x20\\t\\r\\n\\f]",ee=new RegExp("^"+X+"+|((?:^|[^\\\\])(?:\\\\.)*)"+X+"+$","g");p.contains=function(i,o){var f=o&&o.parentNode;return i===f||!!(f&&f.nodeType===1&&(i.contains?i.contains(f):i.compareDocumentPosition&&i.compareDocumentPosition(f)&16))};var oe=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function ge(i,o){return o?i==="\0"?"�":i.slice(0,-1)+"\\"+i.charCodeAt(i.length-1).toString(16)+" ":"\\"+i}p.escapeSelector=function(i){return(i+"").replace(oe,ge)};var ye=F,Me=h;(function(){var i,o,f,m,v,_=Me,w,O,k,R,q,z=p.expando,H=0,te=0,Ce=Ei(),Oe=Ei(),Ee=Ei(),Ge=Ei(),Ye=function(S,L){return S===L&&(v=!0),0},Qt="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",Zt="(?:\\\\[\\da-fA-F]{1,6}"+X+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",Ie="\\["+X+"*("+Zt+")(?:"+X+"*([*^$|!~]?=)"+X+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+Zt+"))|)"+X+"*\\]",Yn=":("+Zt+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+Ie+")*)|.*)\\)|)",Le=new RegExp(X+"+","g"),We=new RegExp("^"+X+"*,"+X+"*"),Kr=new RegExp("^"+X+"*([>+~]|"+X+")"+X+"*"),ja=new RegExp(X+"|>"),en=new RegExp(Yn),Gr=new RegExp("^"+Zt+"$"),tn={ID:new RegExp("^#("+Zt+")"),CLASS:new RegExp("^\\.("+Zt+")"),TAG:new RegExp("^("+Zt+"|[*])"),ATTR:new RegExp("^"+Ie),PSEUDO:new RegExp("^"+Yn),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+X+"*(even|odd|(([+-]|)(\\d*)n|)"+X+"*(?:([+-]|)"+X+"*(\\d+)|))"+X+"*\\)|)","i"),bool:new RegExp("^(?:"+Qt+")$","i"),needsContext:new RegExp("^"+X+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+X+"*((?:-\\d)?\\d*)"+X+"*\\)|)(?=[^-]|$)","i")},xn=/^(?:input|select|textarea|button)$/i,En=/^h\d$/i,Nt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Ha=/[+~]/,un=new RegExp("\\\\[\\da-fA-F]{1,6}"+X+"?|\\\\([^\\r\\n\\f])","g"),cn=function(S,L){var j="0x"+S.slice(1)-65536;return L||(j<0?String.fromCharCode(j+65536):String.fromCharCode(j>>10|55296,j&1023|56320))},Uc=function(){Sn()},zc=Ai(function(S){return S.disabled===!0&&M(S,"fieldset")},{dir:"parentNode",next:"legend"});function Kc(){try{return w.activeElement}catch{}}try{_.apply(r=s.call(ye.childNodes),ye.childNodes),r[ye.childNodes.length].nodeType}catch{_={apply:function(L,j){Me.apply(L,s.call(j))},call:function(L){Me.apply(L,s.call(arguments,1))}}}function He(S,L,j,W){var U,ae,le,pe,ue,Ae,we,De=L&&L.ownerDocument,ke=L?L.nodeType:9;if(j=j||[],typeof S!="string"||!S||ke!==1&&ke!==9&&ke!==11)return j;if(!W&&(Sn(L),L=L||w,k)){if(ke!==11&&(ue=Nt.exec(S)))if(U=ue[1]){if(ke===9)if(le=L.getElementById(U)){if(le.id===U)return _.call(j,le),j}else return j;else if(De&&(le=De.getElementById(U))&&He.contains(L,le)&&le.id===U)return _.call(j,le),j}else{if(ue[2])return _.apply(j,L.getElementsByTagName(S)),j;if((U=ue[3])&&L.getElementsByClassName)return _.apply(j,L.getElementsByClassName(U)),j}if(!Ge[S+" "]&&(!R||!R.test(S))){if(we=S,De=L,ke===1&&(ja.test(S)||Kr.test(S))){for(De=Ha.test(S)&&$a(L.parentNode)||L,(De!=L||!E.scope)&&((pe=L.getAttribute("id"))?pe=p.escapeSelector(pe):L.setAttribute("id",pe=z)),Ae=Xr(S),ae=Ae.length;ae--;)Ae[ae]=(pe?"#"+pe:":scope")+" "+Si(Ae[ae]);we=Ae.join(",")}try{return _.apply(j,De.querySelectorAll(we)),j}catch{Ge(S,!0)}finally{pe===z&&L.removeAttribute("id")}}}return Rs(S.replace(ee,"$1"),L,j,W)}function Ei(){var S=[];function L(j,W){return S.push(j+" ")>o.cacheLength&&delete L[S.shift()],L[j+" "]=W}return L}function zt(S){return S[z]=!0,S}function dr(S){var L=w.createElement("fieldset");try{return!!S(L)}catch{return!1}finally{L.parentNode&&L.parentNode.removeChild(L),L=null}}function Gc(S){return function(L){return M(L,"input")&&L.type===S}}function Xc(S){return function(L){return(M(L,"input")||M(L,"button"))&&L.type===S}}function Ls(S){return function(L){return"form"in L?L.parentNode&&L.disabled===!1?"label"in L?"label"in L.parentNode?L.parentNode.disabled===S:L.disabled===S:L.isDisabled===S||L.isDisabled!==!S&&zc(L)===S:L.disabled===S:"label"in L?L.disabled===S:!1}}function Un(S){return zt(function(L){return L=+L,zt(function(j,W){for(var U,ae=S([],j.length,L),le=ae.length;le--;)j[U=ae[le]]&&(j[U]=!(W[U]=j[U]))})})}function $a(S){return S&&typeof S.getElementsByTagName<"u"&&S}function Sn(S){var L,j=S?S.ownerDocument||S:ye;return j==w||j.nodeType!==9||!j.documentElement||(w=j,O=w.documentElement,k=!p.isXMLDoc(w),q=O.matches||O.webkitMatchesSelector||O.msMatchesSelector,O.msMatchesSelector&&ye!=w&&(L=w.defaultView)&&L.top!==L&&L.addEventListener("unload",Uc),E.getById=dr(function(W){return O.appendChild(W).id=p.expando,!w.getElementsByName||!w.getElementsByName(p.expando).length}),E.disconnectedMatch=dr(function(W){return q.call(W,"*")}),E.scope=dr(function(){return w.querySelectorAll(":scope")}),E.cssHas=dr(function(){try{return w.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),E.getById?(o.filter.ID=function(W){var U=W.replace(un,cn);return function(ae){return ae.getAttribute("id")===U}},o.find.ID=function(W,U){if(typeof U.getElementById<"u"&&k){var ae=U.getElementById(W);return ae?[ae]:[]}}):(o.filter.ID=function(W){var U=W.replace(un,cn);return function(ae){var le=typeof ae.getAttributeNode<"u"&&ae.getAttributeNode("id");return le&&le.value===U}},o.find.ID=function(W,U){if(typeof U.getElementById<"u"&&k){var ae,le,pe,ue=U.getElementById(W);if(ue){if(ae=ue.getAttributeNode("id"),ae&&ae.value===W)return[ue];for(pe=U.getElementsByName(W),le=0;ue=pe[le++];)if(ae=ue.getAttributeNode("id"),ae&&ae.value===W)return[ue]}return[]}}),o.find.TAG=function(W,U){return typeof U.getElementsByTagName<"u"?U.getElementsByTagName(W):U.querySelectorAll(W)},o.find.CLASS=function(W,U){if(typeof U.getElementsByClassName<"u"&&k)return U.getElementsByClassName(W)},R=[],dr(function(W){var U;O.appendChild(W).innerHTML="",W.querySelectorAll("[selected]").length||R.push("\\["+X+"*(?:value|"+Qt+")"),W.querySelectorAll("[id~="+z+"-]").length||R.push("~="),W.querySelectorAll("a#"+z+"+*").length||R.push(".#.+[+~]"),W.querySelectorAll(":checked").length||R.push(":checked"),U=w.createElement("input"),U.setAttribute("type","hidden"),W.appendChild(U).setAttribute("name","D"),O.appendChild(W).disabled=!0,W.querySelectorAll(":disabled").length!==2&&R.push(":enabled",":disabled"),U=w.createElement("input"),U.setAttribute("name",""),W.appendChild(U),W.querySelectorAll("[name='']").length||R.push("\\["+X+"*name"+X+"*="+X+`*(?:''|"")`)}),E.cssHas||R.push(":has"),R=R.length&&new RegExp(R.join("|")),Ye=function(W,U){if(W===U)return v=!0,0;var ae=!W.compareDocumentPosition-!U.compareDocumentPosition;return ae||(ae=(W.ownerDocument||W)==(U.ownerDocument||U)?W.compareDocumentPosition(U):1,ae&1||!E.sortDetached&&U.compareDocumentPosition(W)===ae?W===w||W.ownerDocument==ye&&He.contains(ye,W)?-1:U===w||U.ownerDocument==ye&&He.contains(ye,U)?1:m?d.call(m,W)-d.call(m,U):0:ae&4?-1:1)}),w}He.matches=function(S,L){return He(S,null,null,L)},He.matchesSelector=function(S,L){if(Sn(S),k&&!Ge[L+" "]&&(!R||!R.test(L)))try{var j=q.call(S,L);if(j||E.disconnectedMatch||S.document&&S.document.nodeType!==11)return j}catch{Ge(L,!0)}return He(L,w,null,[S]).length>0},He.contains=function(S,L){return(S.ownerDocument||S)!=w&&Sn(S),p.contains(S,L)},He.attr=function(S,L){(S.ownerDocument||S)!=w&&Sn(S);var j=o.attrHandle[L.toLowerCase()],W=j&&b.call(o.attrHandle,L.toLowerCase())?j(S,L,!k):void 0;return W!==void 0?W:S.getAttribute(L)},He.error=function(S){throw new Error("Syntax error, unrecognized expression: "+S)},p.uniqueSort=function(S){var L,j=[],W=0,U=0;if(v=!E.sortStable,m=!E.sortStable&&s.call(S,0),V.call(S,Ye),v){for(;L=S[U++];)L===S[U]&&(W=j.push(U));for(;W--;)re.call(S,j[W],1)}return m=null,S},p.fn.uniqueSort=function(){return this.pushStack(p.uniqueSort(s.apply(this)))},o=p.expr={cacheLength:50,createPseudo:zt,match:tn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(S){return S[1]=S[1].replace(un,cn),S[3]=(S[3]||S[4]||S[5]||"").replace(un,cn),S[2]==="~="&&(S[3]=" "+S[3]+" "),S.slice(0,4)},CHILD:function(S){return S[1]=S[1].toLowerCase(),S[1].slice(0,3)==="nth"?(S[3]||He.error(S[0]),S[4]=+(S[4]?S[5]+(S[6]||1):2*(S[3]==="even"||S[3]==="odd")),S[5]=+(S[7]+S[8]||S[3]==="odd")):S[3]&&He.error(S[0]),S},PSEUDO:function(S){var L,j=!S[6]&&S[2];return tn.CHILD.test(S[0])?null:(S[3]?S[2]=S[4]||S[5]||"":j&&en.test(j)&&(L=Xr(j,!0))&&(L=j.indexOf(")",j.length-L)-j.length)&&(S[0]=S[0].slice(0,L),S[2]=j.slice(0,L)),S.slice(0,3))}},filter:{TAG:function(S){var L=S.replace(un,cn).toLowerCase();return S==="*"?function(){return!0}:function(j){return M(j,L)}},CLASS:function(S){var L=Ce[S+" "];return L||(L=new RegExp("(^|"+X+")"+S+"("+X+"|$)"))&&Ce(S,function(j){return L.test(typeof j.className=="string"&&j.className||typeof j.getAttribute<"u"&&j.getAttribute("class")||"")})},ATTR:function(S,L,j){return function(W){var U=He.attr(W,S);return U==null?L==="!=":L?(U+="",L==="="?U===j:L==="!="?U!==j:L==="^="?j&&U.indexOf(j)===0:L==="*="?j&&U.indexOf(j)>-1:L==="$="?j&&U.slice(-j.length)===j:L==="~="?(" "+U.replace(Le," ")+" ").indexOf(j)>-1:L==="|="?U===j||U.slice(0,j.length+1)===j+"-":!1):!0}},CHILD:function(S,L,j,W,U){var ae=S.slice(0,3)!=="nth",le=S.slice(-4)!=="last",pe=L==="of-type";return W===1&&U===0?function(ue){return!!ue.parentNode}:function(ue,Ae,we){var De,ke,be,Be,pt,et=ae!==le?"nextSibling":"previousSibling",It=ue.parentNode,nn=pe&&ue.nodeName.toLowerCase(),hr=!we&&!pe,at=!1;if(It){if(ae){for(;et;){for(be=ue;be=be[et];)if(pe?M(be,nn):be.nodeType===1)return!1;pt=et=S==="only"&&!pt&&"nextSibling"}return!0}if(pt=[le?It.firstChild:It.lastChild],le&&hr){for(ke=It[z]||(It[z]={}),De=ke[S]||[],Be=De[0]===H&&De[1],at=Be&&De[2],be=Be&&It.childNodes[Be];be=++Be&&be&&be[et]||(at=Be=0)||pt.pop();)if(be.nodeType===1&&++at&&be===ue){ke[S]=[H,Be,at];break}}else if(hr&&(ke=ue[z]||(ue[z]={}),De=ke[S]||[],Be=De[0]===H&&De[1],at=Be),at===!1)for(;(be=++Be&&be&&be[et]||(at=Be=0)||pt.pop())&&!((pe?M(be,nn):be.nodeType===1)&&++at&&(hr&&(ke=be[z]||(be[z]={}),ke[S]=[H,at]),be===ue)););return at-=U,at===W||at%W===0&&at/W>=0}}},PSEUDO:function(S,L){var j,W=o.pseudos[S]||o.setFilters[S.toLowerCase()]||He.error("unsupported pseudo: "+S);return W[z]?W(L):W.length>1?(j=[S,S,"",L],o.setFilters.hasOwnProperty(S.toLowerCase())?zt(function(U,ae){for(var le,pe=W(U,L),ue=pe.length;ue--;)le=d.call(U,pe[ue]),U[le]=!(ae[le]=pe[ue])}):function(U){return W(U,0,j)}):W}},pseudos:{not:zt(function(S){var L=[],j=[],W=qa(S.replace(ee,"$1"));return W[z]?zt(function(U,ae,le,pe){for(var ue,Ae=W(U,null,pe,[]),we=U.length;we--;)(ue=Ae[we])&&(U[we]=!(ae[we]=ue))}):function(U,ae,le){return L[0]=U,W(L,null,le,j),L[0]=null,!j.pop()}}),has:zt(function(S){return function(L){return He(S,L).length>0}}),contains:zt(function(S){return S=S.replace(un,cn),function(L){return(L.textContent||p.text(L)).indexOf(S)>-1}}),lang:zt(function(S){return Gr.test(S||"")||He.error("unsupported lang: "+S),S=S.replace(un,cn).toLowerCase(),function(L){var j;do if(j=k?L.lang:L.getAttribute("xml:lang")||L.getAttribute("lang"))return j=j.toLowerCase(),j===S||j.indexOf(S+"-")===0;while((L=L.parentNode)&&L.nodeType===1);return!1}}),target:function(S){var L=n.location&&n.location.hash;return L&&L.slice(1)===S.id},root:function(S){return S===O},focus:function(S){return S===Kc()&&w.hasFocus()&&!!(S.type||S.href||~S.tabIndex)},enabled:Ls(!1),disabled:Ls(!0),checked:function(S){return M(S,"input")&&!!S.checked||M(S,"option")&&!!S.selected},selected:function(S){return S.parentNode&&S.parentNode.selectedIndex,S.selected===!0},empty:function(S){for(S=S.firstChild;S;S=S.nextSibling)if(S.nodeType<6)return!1;return!0},parent:function(S){return!o.pseudos.empty(S)},header:function(S){return En.test(S.nodeName)},input:function(S){return xn.test(S.nodeName)},button:function(S){return M(S,"input")&&S.type==="button"||M(S,"button")},text:function(S){var L;return M(S,"input")&&S.type==="text"&&((L=S.getAttribute("type"))==null||L.toLowerCase()==="text")},first:Un(function(){return[0]}),last:Un(function(S,L){return[L-1]}),eq:Un(function(S,L,j){return[j<0?j+L:j]}),even:Un(function(S,L){for(var j=0;jL?W=L:W=j;--W>=0;)S.push(W);return S}),gt:Un(function(S,L,j){for(var W=j<0?j+L:j;++W1?function(L,j,W){for(var U=S.length;U--;)if(!S[U](L,j,W))return!1;return!0}:S[0]}function Jc(S,L,j){for(var W=0,U=L.length;W-1&&(le[we]=!(pe[we]=ke))}}else be=ki(be===pe?be.splice(et,be.length):be),U?U(null,pe,be,Ae):_.apply(pe,be)})}function Va(S){for(var L,j,W,U=S.length,ae=o.relative[S[0].type],le=ae||o.relative[" "],pe=ae?1:0,ue=Ai(function(De){return De===L},le,!0),Ae=Ai(function(De){return d.call(L,De)>-1},le,!0),we=[function(De,ke,be){var Be=!ae&&(be||ke!=f)||((L=ke).nodeType?ue(De,ke,be):Ae(De,ke,be));return L=null,Be}];pe1&&Ba(we),pe>1&&Si(S.slice(0,pe-1).concat({value:S[pe-2].type===" "?"*":""})).replace(ee,"$1"),j,pe0,W=S.length>0,U=function(ae,le,pe,ue,Ae){var we,De,ke,be=0,Be="0",pt=ae&&[],et=[],It=f,nn=ae||W&&o.find.TAG("*",Ae),hr=H+=It==null?1:Math.random()||.1,at=nn.length;for(Ae&&(f=le==w||le||Ae);Be!==at&&(we=nn[Be])!=null;Be++){if(W&&we){for(De=0,!le&&we.ownerDocument!=w&&(Sn(we),pe=!k);ke=S[De++];)if(ke(we,le||w,pe)){_.call(ue,we);break}Ae&&(H=hr)}j&&((we=!ke&&we)&&be--,ae&&pt.push(we))}if(be+=Be,j&&Be!==be){for(De=0;ke=L[De++];)ke(pt,et,le,pe);if(ae){if(be>0)for(;Be--;)pt[Be]||et[Be]||(et[Be]=B.call(ue));et=ki(et)}_.apply(ue,et),Ae&&!ae&&et.length>0&&be+L.length>1&&p.uniqueSort(ue)}return Ae&&(H=hr,f=It),pt};return j?zt(U):U}function qa(S,L){var j,W=[],U=[],ae=Ee[S+" "];if(!ae){for(L||(L=Xr(S)),j=L.length;j--;)ae=Va(L[j]),ae[z]?W.push(ae):U.push(ae);ae=Ee(S,Qc(U,W)),ae.selector=S}return ae}function Rs(S,L,j,W){var U,ae,le,pe,ue,Ae=typeof S=="function"&&S,we=!W&&Xr(S=Ae.selector||S);if(j=j||[],we.length===1){if(ae=we[0]=we[0].slice(0),ae.length>2&&(le=ae[0]).type==="ID"&&L.nodeType===9&&k&&o.relative[ae[1].type]){if(L=(o.find.ID(le.matches[0].replace(un,cn),L)||[])[0],L)Ae&&(L=L.parentNode);else return j;S=S.slice(ae.shift().value.length)}for(U=tn.needsContext.test(S)?0:ae.length;U--&&(le=ae[U],!o.relative[pe=le.type]);)if((ue=o.find[pe])&&(W=ue(le.matches[0].replace(un,cn),Ha.test(ae[0].type)&&$a(L.parentNode)||L))){if(ae.splice(U,1),S=W.length&&Si(ae),!S)return _.apply(j,W),j;break}}return(Ae||qa(S,we))(W,L,!k,j,!L||Ha.test(S)&&$a(L.parentNode)||L),j}E.sortStable=z.split("").sort(Ye).join("")===z,Sn(),E.sortDetached=dr(function(S){return S.compareDocumentPosition(w.createElement("fieldset"))&1}),p.find=He,p.expr[":"]=p.expr.pseudos,p.unique=p.uniqueSort,He.compile=qa,He.select=Rs,He.setDocument=Sn,He.tokenize=Xr,He.escape=p.escapeSelector,He.getText=p.text,He.isXML=p.isXMLDoc,He.selectors=p.expr,He.support=p.support,He.uniqueSort=p.uniqueSort})();var Se=function(i,o,f){for(var m=[],v=f!==void 0;(i=i[o])&&i.nodeType!==9;)if(i.nodeType===1){if(v&&p(i).is(f))break;m.push(i)}return m},Xe=function(i,o){for(var f=[];i;i=i.nextSibling)i.nodeType===1&&i!==o&&f.push(i);return f},rt=p.expr.match.needsContext,Gt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Xt(i,o,f){return T(o)?p.grep(i,function(m,v){return!!o.call(m,v,m)!==f}):o.nodeType?p.grep(i,function(m){return m===o!==f}):typeof o!="string"?p.grep(i,function(m){return d.call(o,m)>-1!==f}):p.filter(o,i,f)}p.filter=function(i,o,f){var m=o[0];return f&&(i=":not("+i+")"),o.length===1&&m.nodeType===1?p.find.matchesSelector(m,i)?[m]:[]:p.find.matches(i,p.grep(o,function(v){return v.nodeType===1}))},p.fn.extend({find:function(i){var o,f,m=this.length,v=this;if(typeof i!="string")return this.pushStack(p(i).filter(function(){for(o=0;o1?p.uniqueSort(f):f},filter:function(i){return this.pushStack(Xt(this,i||[],!1))},not:function(i){return this.pushStack(Xt(this,i||[],!0))},is:function(i){return!!Xt(this,typeof i=="string"&&rt.test(i)?p(i):i||[],!1).length}});var $t,Je=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Bt=p.fn.init=function(i,o,f){var m,v;if(!i)return this;if(f=f||$t,typeof i=="string")if(i[0]==="<"&&i[i.length-1]===">"&&i.length>=3?m=[null,i,null]:m=Je.exec(i),m&&(m[1]||!o))if(m[1]){if(o=o instanceof p?o[0]:o,p.merge(this,p.parseHTML(m[1],o&&o.nodeType?o.ownerDocument||o:F,!0)),Gt.test(m[1])&&p.isPlainObject(o))for(m in o)T(this[m])?this[m](o[m]):this.attr(m,o[m]);return this}else return v=F.getElementById(m[2]),v&&(this[0]=v,this.length=1),this;else return!o||o.jquery?(o||f).find(i):this.constructor(o).find(i);else{if(i.nodeType)return this[0]=i,this.length=1,this;if(T(i))return f.ready!==void 0?f.ready(i):i(p)}return p.makeArray(i,this)};Bt.prototype=p.fn,$t=p(F);var Wt=/^(?:parents|prev(?:Until|All))/,Ke={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({has:function(i){var o=p(i,this),f=o.length;return this.filter(function(){for(var m=0;m-1:f.nodeType===1&&p.find.matchesSelector(f,i))){_.push(f);break}}return this.pushStack(_.length>1?p.uniqueSort(_):_)},index:function(i){return i?typeof i=="string"?d.call(p(i),this[0]):d.call(this,i.jquery?i[0]:i):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(i,o){return this.pushStack(p.uniqueSort(p.merge(this.get(),p(i,o))))},addBack:function(i){return this.add(i==null?this.prevObject:this.prevObject.filter(i))}});function Vt(i,o){for(;(i=i[o])&&i.nodeType!==1;);return i}p.each({parent:function(i){var o=i.parentNode;return o&&o.nodeType!==11?o:null},parents:function(i){return Se(i,"parentNode")},parentsUntil:function(i,o,f){return Se(i,"parentNode",f)},next:function(i){return Vt(i,"nextSibling")},prev:function(i){return Vt(i,"previousSibling")},nextAll:function(i){return Se(i,"nextSibling")},prevAll:function(i){return Se(i,"previousSibling")},nextUntil:function(i,o,f){return Se(i,"nextSibling",f)},prevUntil:function(i,o,f){return Se(i,"previousSibling",f)},siblings:function(i){return Xe((i.parentNode||{}).firstChild,i)},children:function(i){return Xe(i.firstChild)},contents:function(i){return i.contentDocument!=null&&a(i.contentDocument)?i.contentDocument:(M(i,"template")&&(i=i.content||i),p.merge([],i.childNodes))}},function(i,o){p.fn[i]=function(f,m){var v=p.map(this,o,f);return i.slice(-5)!=="Until"&&(m=f),m&&typeof m=="string"&&(v=p.filter(m,v)),this.length>1&&(Ke[i]||p.uniqueSort(v),Wt.test(i)&&v.reverse()),this.pushStack(v)}});var ft=/[^\x20\t\r\n\f]+/g;function gn(i){var o={};return p.each(i.match(ft)||[],function(f,m){o[m]=!0}),o}p.Callbacks=function(i){i=typeof i=="string"?gn(i):p.extend({},i);var o,f,m,v,_=[],w=[],O=-1,k=function(){for(v=v||i.once,m=o=!0;w.length;O=-1)for(f=w.shift();++O<_.length;)_[O].apply(f[0],f[1])===!1&&i.stopOnFalse&&(O=_.length,f=!1);i.memory||(f=!1),o=!1,v&&(f?_=[]:_="")},R={add:function(){return _&&(f&&!o&&(O=_.length-1,w.push(f)),(function q(z){p.each(z,function(H,te){T(te)?(!i.unique||!R.has(te))&&_.push(te):te&&te.length&&J(te)!=="string"&&q(te)})})(arguments),f&&!o&&k()),this},remove:function(){return p.each(arguments,function(q,z){for(var H;(H=p.inArray(z,_,H))>-1;)_.splice(H,1),H<=O&&O--}),this},has:function(q){return q?p.inArray(q,_)>-1:_.length>0},empty:function(){return _&&(_=[]),this},disable:function(){return v=w=[],_=f="",this},disabled:function(){return!_},lock:function(){return v=w=[],!f&&!o&&(_=f=""),this},locked:function(){return!!v},fireWith:function(q,z){return v||(z=z||[],z=[q,z.slice?z.slice():z],w.push(z),o||k()),this},fire:function(){return R.fireWith(this,arguments),this},fired:function(){return!!m}};return R};function _t(i){return i}function sn(i){throw i}function or(i,o,f,m){var v;try{i&&T(v=i.promise)?v.call(i).done(o).fail(f):i&&T(v=i.then)?v.call(i,o,f):o.apply(void 0,[i].slice(m))}catch(_){f.apply(void 0,[_])}}p.extend({Deferred:function(i){var o=[["notify","progress",p.Callbacks("memory"),p.Callbacks("memory"),2],["resolve","done",p.Callbacks("once memory"),p.Callbacks("once memory"),0,"resolved"],["reject","fail",p.Callbacks("once memory"),p.Callbacks("once memory"),1,"rejected"]],f="pending",m={state:function(){return f},always:function(){return v.done(arguments).fail(arguments),this},catch:function(_){return m.then(null,_)},pipe:function(){var _=arguments;return p.Deferred(function(w){p.each(o,function(O,k){var R=T(_[k[4]])&&_[k[4]];v[k[1]](function(){var q=R&&R.apply(this,arguments);q&&T(q.promise)?q.promise().progress(w.notify).done(w.resolve).fail(w.reject):w[k[0]+"With"](this,R?[q]:arguments)})}),_=null}).promise()},then:function(_,w,O){var k=0;function R(q,z,H,te){return function(){var Ce=this,Oe=arguments,Ee=function(){var Ye,Qt;if(!(q=k&&(H!==sn&&(Ce=void 0,Oe=[Ye]),z.rejectWith(Ce,Oe))}};q?Ge():(p.Deferred.getErrorHook?Ge.error=p.Deferred.getErrorHook():p.Deferred.getStackHook&&(Ge.error=p.Deferred.getStackHook()),n.setTimeout(Ge))}}return p.Deferred(function(q){o[0][3].add(R(0,q,T(O)?O:_t,q.notifyWith)),o[1][3].add(R(0,q,T(_)?_:_t)),o[2][3].add(R(0,q,T(w)?w:sn))}).promise()},promise:function(_){return _!=null?p.extend(_,m):m}},v={};return p.each(o,function(_,w){var O=w[2],k=w[5];m[w[1]]=O.add,k&&O.add(function(){f=k},o[3-_][2].disable,o[3-_][3].disable,o[0][2].lock,o[0][3].lock),O.add(w[3].fire),v[w[0]]=function(){return v[w[0]+"With"](this===v?void 0:this,arguments),this},v[w[0]+"With"]=O.fireWith}),m.promise(v),i&&i.call(v,v),v},when:function(i){var o=arguments.length,f=o,m=Array(f),v=s.call(arguments),_=p.Deferred(),w=function(O){return function(k){m[O]=this,v[O]=arguments.length>1?s.call(arguments):k,--o||_.resolveWith(m,v)}};if(o<=1&&(or(i,_.done(w(f)).resolve,_.reject,!o),_.state()==="pending"||T(v[f]&&v[f].then)))return _.then();for(;f--;)or(v[f],w(f),_.reject);return _.promise()}});var sr=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;p.Deferred.exceptionHook=function(i,o){n.console&&n.console.warn&&i&&sr.test(i.name)&&n.console.warn("jQuery.Deferred exception: "+i.message,i.stack,o)},p.readyException=function(i){n.setTimeout(function(){throw i})};var vn=p.Deferred();p.fn.ready=function(i){return vn.then(i).catch(function(o){p.readyException(o)}),this},p.extend({isReady:!1,readyWait:1,ready:function(i){(i===!0?--p.readyWait:p.isReady)||(p.isReady=!0,!(i!==!0&&--p.readyWait>0)&&vn.resolveWith(F,[p]))}}),p.ready.then=vn.then;function Jt(){F.removeEventListener("DOMContentLoaded",Jt),n.removeEventListener("load",Jt),p.ready()}F.readyState==="complete"||F.readyState!=="loading"&&!F.documentElement.doScroll?n.setTimeout(p.ready):(F.addEventListener("DOMContentLoaded",Jt),n.addEventListener("load",Jt));var dt=function(i,o,f,m,v,_,w){var O=0,k=i.length,R=f==null;if(J(f)==="object"){v=!0;for(O in f)dt(i,o,O,f[O],!0,_,w)}else if(m!==void 0&&(v=!0,T(m)||(w=!0),R&&(w?(o.call(i,m),o=null):(R=o,o=function(q,z,H){return R.call(p(q),H)})),o))for(;O1,null,!0)},removeData:function(i){return this.each(function(){qe.remove(this,i)})}}),p.extend({queue:function(i,o,f){var m;if(i)return o=(o||"fx")+"queue",m=de.get(i,o),f&&(!m||Array.isArray(f)?m=de.access(i,o,p.makeArray(f)):m.push(f)),m||[]},dequeue:function(i,o){o=o||"fx";var f=p.queue(i,o),m=f.length,v=f.shift(),_=p._queueHooks(i,o),w=function(){p.dequeue(i,o)};v==="inprogress"&&(v=f.shift(),m--),v&&(o==="fx"&&f.unshift("inprogress"),delete _.stop,v.call(i,w,_)),!m&&_&&_.empty.fire()},_queueHooks:function(i,o){var f=o+"queueHooks";return de.get(i,f)||de.access(i,f,{empty:p.Callbacks("once memory").add(function(){de.remove(i,[o+"queue",f])})})}}),p.fn.extend({queue:function(i,o){var f=2;return typeof i!="string"&&(o=i,i="fx",f--),arguments.length\x20\t\r\n\f]*)/i,D=/^$|^module$|\/(?:java|ecma)script/i;(function(){var i=F.createDocumentFragment(),o=i.appendChild(F.createElement("div")),f=F.createElement("input");f.setAttribute("type","radio"),f.setAttribute("checked","checked"),f.setAttribute("name","t"),o.appendChild(f),E.checkClone=o.cloneNode(!0).cloneNode(!0).lastChild.checked,o.innerHTML="",E.noCloneChecked=!!o.cloneNode(!0).lastChild.defaultValue,o.innerHTML="",E.option=!!o.lastChild})();var x={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};x.tbody=x.tfoot=x.colgroup=x.caption=x.thead,x.th=x.td,E.option||(x.optgroup=x.option=[1,""]);function P(i,o){var f;return typeof i.getElementsByTagName<"u"?f=i.getElementsByTagName(o||"*"):typeof i.querySelectorAll<"u"?f=i.querySelectorAll(o||"*"):f=[],o===void 0||o&&M(i,o)?p.merge([i],f):f}function Y(i,o){for(var f=0,m=i.length;f-1){v&&v.push(_);continue}if(R=Fe(_),w=P(z.appendChild(_),"script"),R&&Y(w),f)for(q=0;_=w[q++];)D.test(_.type||"")&&f.push(_)}return z}var xe=/^([^.]*)(?:\.(.+)|)/;function ce(){return!0}function Te(){return!1}function fe(i,o,f,m,v,_){var w,O;if(typeof o=="object"){typeof f!="string"&&(m=m||f,f=void 0);for(O in o)fe(i,O,f,m,o[O],_);return i}if(m==null&&v==null?(v=f,m=f=void 0):v==null&&(typeof f=="string"?(v=m,m=void 0):(v=m,m=f,f=void 0)),v===!1)v=Te;else if(!v)return i;return _===1&&(w=v,v=function(k){return p().off(k),w.apply(this,arguments)},v.guid=w.guid||(w.guid=p.guid++)),i.each(function(){p.event.add(this,o,v,m,f)})}p.event={global:{},add:function(i,o,f,m,v){var _,w,O,k,R,q,z,H,te,Ce,Oe,Ee=de.get(i);if(St(i))for(f.handler&&(_=f,f=_.handler,v=_.selector),v&&p.find.matchesSelector(ln,v),f.guid||(f.guid=p.guid++),(k=Ee.events)||(k=Ee.events=Object.create(null)),(w=Ee.handle)||(w=Ee.handle=function(Ge){return typeof p<"u"&&p.event.triggered!==Ge.type?p.event.dispatch.apply(i,arguments):void 0}),o=(o||"").match(ft)||[""],R=o.length;R--;)O=xe.exec(o[R])||[],te=Oe=O[1],Ce=(O[2]||"").split(".").sort(),te&&(z=p.event.special[te]||{},te=(v?z.delegateType:z.bindType)||te,z=p.event.special[te]||{},q=p.extend({type:te,origType:Oe,data:m,handler:f,guid:f.guid,selector:v,needsContext:v&&p.expr.match.needsContext.test(v),namespace:Ce.join(".")},_),(H=k[te])||(H=k[te]=[],H.delegateCount=0,(!z.setup||z.setup.call(i,m,Ce,w)===!1)&&i.addEventListener&&i.addEventListener(te,w)),z.add&&(z.add.call(i,q),q.handler.guid||(q.handler.guid=f.guid)),v?H.splice(H.delegateCount++,0,q):H.push(q),p.event.global[te]=!0)},remove:function(i,o,f,m,v){var _,w,O,k,R,q,z,H,te,Ce,Oe,Ee=de.hasData(i)&&de.get(i);if(!(!Ee||!(k=Ee.events))){for(o=(o||"").match(ft)||[""],R=o.length;R--;){if(O=xe.exec(o[R])||[],te=Oe=O[1],Ce=(O[2]||"").split(".").sort(),!te){for(te in k)p.event.remove(i,te+o[R],f,m,!0);continue}for(z=p.event.special[te]||{},te=(m?z.delegateType:z.bindType)||te,H=k[te]||[],O=O[2]&&new RegExp("(^|\\.)"+Ce.join("\\.(?:.*\\.|)")+"(\\.|$)"),w=_=H.length;_--;)q=H[_],(v||Oe===q.origType)&&(!f||f.guid===q.guid)&&(!O||O.test(q.namespace))&&(!m||m===q.selector||m==="**"&&q.selector)&&(H.splice(_,1),q.selector&&H.delegateCount--,z.remove&&z.remove.call(i,q));w&&!H.length&&((!z.teardown||z.teardown.call(i,Ce,Ee.handle)===!1)&&p.removeEvent(i,te,Ee.handle),delete k[te])}p.isEmptyObject(k)&&de.remove(i,"handle events")}},dispatch:function(i){var o,f,m,v,_,w,O=new Array(arguments.length),k=p.event.fix(i),R=(de.get(this,"events")||Object.create(null))[k.type]||[],q=p.event.special[k.type]||{};for(O[0]=k,o=1;o=1)){for(;R!==this;R=R.parentNode||this)if(R.nodeType===1&&!(i.type==="click"&&R.disabled===!0)){for(_=[],w={},f=0;f-1:p.find(v,this,null,[R]).length),w[v]&&_.push(m);_.length&&O.push({elem:R,handlers:_})}}return R=this,k\s*$/g;function Cn(i,o){return M(i,"table")&&M(o.nodeType!==11?o:o.firstChild,"tr")&&p(i).children("tbody")[0]||i}function Tn(i){return i.type=(i.getAttribute("type")!==null)+"/"+i.type,i}function xa(i){return(i.type||"").slice(0,5)==="true/"?i.type=i.type.slice(5):i.removeAttribute("type"),i}function ur(i,o){var f,m,v,_,w,O,k;if(o.nodeType===1){if(de.hasData(i)&&(_=de.get(i),k=_.events,k)){de.remove(o,"handle events");for(v in k)for(f=0,m=k[v].length;f1&&typeof te=="string"&&!E.checkClone&&kt.test(te))return i.each(function(Oe){var Ee=i.eq(Oe);Ce&&(o[0]=te.call(this,Oe,Ee.html())),Dn(Ee,o,f,m)});if(z&&(v=se(o,i[0].ownerDocument,!1,i,m),_=v.firstChild,v.childNodes.length===1&&(v=_),_||m)){for(w=p.map(P(v,"script"),Tn),O=w.length;q0&&Y(w,!k&&P(i,"script")),O},cleanData:function(i){for(var o,f,m,v=p.event.special,_=0;(f=i[_])!==void 0;_++)if(St(f)){if(o=f[de.expando]){if(o.events)for(m in o.events)v[m]?p.event.remove(f,m):p.removeEvent(f,m,o.handle);f[de.expando]=void 0}f[qe.expando]&&(f[qe.expando]=void 0)}}}),p.fn.extend({detach:function(i){return Ci(this,i,!0)},remove:function(i){return Ci(this,i)},text:function(i){return dt(this,function(o){return o===void 0?p.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=o)})},null,i,arguments.length)},append:function(){return Dn(this,arguments,function(i){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var o=Cn(this,i);o.appendChild(i)}})},prepend:function(){return Dn(this,arguments,function(i){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var o=Cn(this,i);o.insertBefore(i,o.firstChild)}})},before:function(){return Dn(this,arguments,function(i){this.parentNode&&this.parentNode.insertBefore(i,this)})},after:function(){return Dn(this,arguments,function(i){this.parentNode&&this.parentNode.insertBefore(i,this.nextSibling)})},empty:function(){for(var i,o=0;(i=this[o])!=null;o++)i.nodeType===1&&(p.cleanData(P(i,!1)),i.textContent="");return this},clone:function(i,o){return i=i??!1,o=o??i,this.map(function(){return p.clone(this,i,o)})},html:function(i){return dt(this,function(o){var f=this[0]||{},m=0,v=this.length;if(o===void 0&&f.nodeType===1)return f.innerHTML;if(typeof o=="string"&&!je.test(o)&&!x[(wi.exec(o)||["",""])[1].toLowerCase()]){o=p.htmlPrefilter(o);try{for(;m=0&&(k+=Math.max(0,Math.ceil(i["offset"+o[0].toUpperCase()+o.slice(1)]-_-k-O-.5))||0),k+R}function ws(i,o,f){var m=cr(i),v=!E.boxSizingReliable()||f,_=v&&p.css(i,"boxSizing",!1,m)==="border-box",w=_,O=qr(i,o,m),k="offset"+o[0].toUpperCase()+o.slice(1);if(Wr.test(O)){if(!f)return O;O="auto"}return(!E.boxSizingReliable()&&_||!E.reliableTrDimensions()&&M(i,"tr")||O==="auto"||!parseFloat(O)&&p.css(i,"display",!1,m)==="inline")&&i.getClientRects().length&&(_=p.css(i,"boxSizing",!1,m)==="border-box",w=k in i,w&&(O=i[k])),O=parseFloat(O)||0,O+ka(i,o,f||(_?"border":"content"),w,m,O)+"px"}p.extend({cssHooks:{opacity:{get:function(i,o){if(o){var f=qr(i,"opacity");return f===""?"1":f}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(i,o,f,m){if(!(!i||i.nodeType===3||i.nodeType===8||!i.style)){var v,_,w,O=Qe(o),k=Vr.test(o),R=i.style;if(k||(o=Aa(O)),w=p.cssHooks[o]||p.cssHooks[O],f!==void 0){if(_=typeof f,_==="string"&&(v=yn.exec(f))&&v[1]&&(f=yi(i,o,v),_="number"),f==null||f!==f)return;_==="number"&&!k&&(f+=v&&v[3]||(p.cssNumber[O]?"":"px")),!E.clearCloneStyle&&f===""&&o.indexOf("background")===0&&(R[o]="inherit"),(!w||!("set"in w)||(f=w.set(i,f,m))!==void 0)&&(k?R.setProperty(o,f):R[o]=f)}else return w&&"get"in w&&(v=w.get(i,!1,m))!==void 0?v:R[o]}},css:function(i,o,f,m){var v,_,w,O=Qe(o),k=Vr.test(o);return k||(o=Aa(O)),w=p.cssHooks[o]||p.cssHooks[O],w&&"get"in w&&(v=w.get(i,!0,f)),v===void 0&&(v=qr(i,o,m)),v==="normal"&&o in bs&&(v=bs[o]),f===""||f?(_=parseFloat(v),f===!0||isFinite(_)?_||0:v):v}}),p.each(["height","width"],function(i,o){p.cssHooks[o]={get:function(f,m,v){if(m)return wc.test(p.css(f,"display"))&&(!f.getClientRects().length||!f.getBoundingClientRect().width)?Ti(f,Cc,function(){return ws(f,o,v)}):ws(f,o,v)},set:function(f,m,v){var _,w=cr(f),O=!E.scrollboxSize()&&w.position==="absolute",k=O||v,R=k&&p.css(f,"boxSizing",!1,w)==="border-box",q=v?ka(f,o,v,R,w):0;return R&&O&&(q-=Math.ceil(f["offset"+o[0].toUpperCase()+o.slice(1)]-parseFloat(w[o])-ka(f,o,"border",!1,w)-.5)),q&&(_=yn.exec(m))&&(_[3]||"px")!=="px"&&(f.style[o]=m,m=p.css(f,o)),ys(f,m,q)}}}),p.cssHooks.marginLeft=ms(E.reliableMarginLeft,function(i,o){if(o)return(parseFloat(qr(i,"marginLeft"))||i.getBoundingClientRect().left-Ti(i,{marginLeft:0},function(){return i.getBoundingClientRect().left}))+"px"}),p.each({margin:"",padding:"",border:"Width"},function(i,o){p.cssHooks[i+o]={expand:function(f){for(var m=0,v={},_=typeof f=="string"?f.split(" "):[f];m<4;m++)v[i+Yt[m]+o]=_[m]||_[m-2]||_[0];return v}},i!=="margin"&&(p.cssHooks[i+o].set=ys)}),p.fn.extend({css:function(i,o){return dt(this,function(f,m,v){var _,w,O={},k=0;if(Array.isArray(m)){for(_=cr(f),w=m.length;k1)}});function ht(i,o,f,m,v){return new ht.prototype.init(i,o,f,m,v)}p.Tween=ht,ht.prototype={constructor:ht,init:function(i,o,f,m,v,_){this.elem=i,this.prop=f,this.easing=v||p.easing._default,this.options=o,this.start=this.now=this.cur(),this.end=m,this.unit=_||(p.cssNumber[f]?"":"px")},cur:function(){var i=ht.propHooks[this.prop];return i&&i.get?i.get(this):ht.propHooks._default.get(this)},run:function(i){var o,f=ht.propHooks[this.prop];return this.options.duration?this.pos=o=p.easing[this.easing](i,this.options.duration*i,0,1,this.options.duration):this.pos=o=i,this.now=(this.end-this.start)*o+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),f&&f.set?f.set(this):ht.propHooks._default.set(this),this}},ht.prototype.init.prototype=ht.prototype,ht.propHooks={_default:{get:function(i){var o;return i.elem.nodeType!==1||i.elem[i.prop]!=null&&i.elem.style[i.prop]==null?i.elem[i.prop]:(o=p.css(i.elem,i.prop,""),!o||o==="auto"?0:o)},set:function(i){p.fx.step[i.prop]?p.fx.step[i.prop](i):i.elem.nodeType===1&&(p.cssHooks[i.prop]||i.elem.style[Aa(i.prop)]!=null)?p.style(i.elem,i.prop,i.now+i.unit):i.elem[i.prop]=i.now}}},ht.propHooks.scrollTop=ht.propHooks.scrollLeft={set:function(i){i.elem.nodeType&&i.elem.parentNode&&(i.elem[i.prop]=i.now)}},p.easing={linear:function(i){return i},swing:function(i){return .5-Math.cos(i*Math.PI)/2},_default:"swing"},p.fx=ht.prototype.init,p.fx.step={};var fr,Di,Tc=/^(?:toggle|show|hide)$/,Dc=/queueHooks$/;function Na(){Di&&(F.hidden===!1&&n.requestAnimationFrame?n.requestAnimationFrame(Na):n.setTimeout(Na,p.fx.interval),p.fx.tick())}function Cs(){return n.setTimeout(function(){fr=void 0}),fr=Date.now()}function xi(i,o){var f,m=0,v={height:i};for(o=o?1:0;m<4;m+=2-o)f=Yt[m],v["margin"+f]=v["padding"+f]=i;return o&&(v.opacity=v.width=i),v}function Ts(i,o,f){for(var m,v=(Ut.tweeners[o]||[]).concat(Ut.tweeners["*"]),_=0,w=v.length;_1)},removeAttr:function(i){return this.each(function(){p.removeAttr(this,i)})}}),p.extend({attr:function(i,o,f){var m,v,_=i.nodeType;if(!(_===3||_===8||_===2)){if(typeof i.getAttribute>"u")return p.prop(i,o,f);if((_!==1||!p.isXMLDoc(i))&&(v=p.attrHooks[o.toLowerCase()]||(p.expr.match.bool.test(o)?Ds:void 0)),f!==void 0){if(f===null){p.removeAttr(i,o);return}return v&&"set"in v&&(m=v.set(i,f,o))!==void 0?m:(i.setAttribute(o,f+""),f)}return v&&"get"in v&&(m=v.get(i,o))!==null?m:(m=p.find.attr(i,o),m??void 0)}},attrHooks:{type:{set:function(i,o){if(!E.radioValue&&o==="radio"&&M(i,"input")){var f=i.value;return i.setAttribute("type",o),f&&(i.value=f),o}}}},removeAttr:function(i,o){var f,m=0,v=o&&o.match(ft);if(v&&i.nodeType===1)for(;f=v[m++];)i.removeAttribute(f)}}),Ds={set:function(i,o,f){return o===!1?p.removeAttr(i,f):i.setAttribute(f,f),f}},p.each(p.expr.match.bool.source.match(/\w+/g),function(i,o){var f=Yr[o]||p.find.attr;Yr[o]=function(m,v,_){var w,O,k=v.toLowerCase();return _||(O=Yr[k],Yr[k]=w,w=f(m,v,_)!=null?k:null,Yr[k]=O),w}});var Sc=/^(?:input|select|textarea|button)$/i,Ac=/^(?:a|area)$/i;p.fn.extend({prop:function(i,o){return dt(this,p.prop,i,o,arguments.length>1)},removeProp:function(i){return this.each(function(){delete this[p.propFix[i]||i]})}}),p.extend({prop:function(i,o,f){var m,v,_=i.nodeType;if(!(_===3||_===8||_===2))return(_!==1||!p.isXMLDoc(i))&&(o=p.propFix[o]||o,v=p.propHooks[o]),f!==void 0?v&&"set"in v&&(m=v.set(i,f,o))!==void 0?m:i[o]=f:v&&"get"in v&&(m=v.get(i,o))!==null?m:i[o]},propHooks:{tabIndex:{get:function(i){var o=p.find.attr(i,"tabindex");return o?parseInt(o,10):Sc.test(i.nodeName)||Ac.test(i.nodeName)&&i.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),E.optSelected||(p.propHooks.selected={get:function(i){var o=i.parentNode;return o&&o.parentNode&&o.parentNode.selectedIndex,null},set:function(i){var o=i.parentNode;o&&(o.selectedIndex,o.parentNode&&o.parentNode.selectedIndex)}}),p.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){p.propFix[this.toLowerCase()]=this});function Vn(i){var o=i.match(ft)||[];return o.join(" ")}function qn(i){return i.getAttribute&&i.getAttribute("class")||""}function Ia(i){return Array.isArray(i)?i:typeof i=="string"?i.match(ft)||[]:[]}p.fn.extend({addClass:function(i){var o,f,m,v,_,w;return T(i)?this.each(function(O){p(this).addClass(i.call(this,O,qn(this)))}):(o=Ia(i),o.length?this.each(function(){if(m=qn(this),f=this.nodeType===1&&" "+Vn(m)+" ",f){for(_=0;_-1;)f=f.replace(" "+v+" "," ");w=Vn(f),m!==w&&this.setAttribute("class",w)}}):this):this.attr("class","")},toggleClass:function(i,o){var f,m,v,_,w=typeof i,O=w==="string"||Array.isArray(i);return T(i)?this.each(function(k){p(this).toggleClass(i.call(this,k,qn(this),o),o)}):typeof o=="boolean"&&O?o?this.addClass(i):this.removeClass(i):(f=Ia(i),this.each(function(){if(O)for(_=p(this),v=0;v-1)return!0;return!1}});var kc=/\r/g;p.fn.extend({val:function(i){var o,f,m,v=this[0];return arguments.length?(m=T(i),this.each(function(_){var w;this.nodeType===1&&(m?w=i.call(this,_,p(this).val()):w=i,w==null?w="":typeof w=="number"?w+="":Array.isArray(w)&&(w=p.map(w,function(O){return O==null?"":O+""})),o=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()],(!o||!("set"in o)||o.set(this,w,"value")===void 0)&&(this.value=w))})):v?(o=p.valHooks[v.type]||p.valHooks[v.nodeName.toLowerCase()],o&&"get"in o&&(f=o.get(v,"value"))!==void 0?f:(f=v.value,typeof f=="string"?f.replace(kc,""):f??"")):void 0}}),p.extend({valHooks:{option:{get:function(i){var o=p.find.attr(i,"value");return o??Vn(p.text(i))}},select:{get:function(i){var o,f,m,v=i.options,_=i.selectedIndex,w=i.type==="select-one",O=w?null:[],k=w?_+1:v.length;for(_<0?m=k:m=w?_:0;m-1)&&(f=!0);return f||(i.selectedIndex=-1),_}}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]={set:function(i,o){if(Array.isArray(o))return i.checked=p.inArray(p(i).val(),o)>-1}},E.checkOn||(p.valHooks[this].get=function(i){return i.getAttribute("value")===null?"on":i.value})});var Ur=n.location,xs={guid:Date.now()},Oa=/\?/;p.parseXML=function(i){var o,f;if(!i||typeof i!="string")return null;try{o=new n.DOMParser().parseFromString(i,"text/xml")}catch{}return f=o&&o.getElementsByTagName("parsererror")[0],(!o||f)&&p.error("Invalid XML: "+(f?p.map(f.childNodes,function(m){return m.textContent}).join(` +`):i)),o};var Es=/^(?:focusinfocus|focusoutblur)$/,Ss=function(i){i.stopPropagation()};p.extend(p.event,{trigger:function(i,o,f,m){var v,_,w,O,k,R,q,z,H=[f||F],te=b.call(i,"type")?i.type:i,Ce=b.call(i,"namespace")?i.namespace.split("."):[];if(_=z=w=f=f||F,!(f.nodeType===3||f.nodeType===8)&&!Es.test(te+p.event.triggered)&&(te.indexOf(".")>-1&&(Ce=te.split("."),te=Ce.shift(),Ce.sort()),k=te.indexOf(":")<0&&"on"+te,i=i[p.expando]?i:new p.Event(te,typeof i=="object"&&i),i.isTrigger=m?2:3,i.namespace=Ce.join("."),i.rnamespace=i.namespace?new RegExp("(^|\\.)"+Ce.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,i.result=void 0,i.target||(i.target=f),o=o==null?[i]:p.makeArray(o,[i]),q=p.event.special[te]||{},!(!m&&q.trigger&&q.trigger.apply(f,o)===!1))){if(!m&&!q.noBubble&&!N(f)){for(O=q.delegateType||te,Es.test(O+te)||(_=_.parentNode);_;_=_.parentNode)H.push(_),w=_;w===(f.ownerDocument||F)&&H.push(w.defaultView||w.parentWindow||n)}for(v=0;(_=H[v++])&&!i.isPropagationStopped();)z=_,i.type=v>1?O:q.bindType||te,R=(de.get(_,"events")||Object.create(null))[i.type]&&de.get(_,"handle"),R&&R.apply(_,o),R=k&&_[k],R&&R.apply&&St(_)&&(i.result=R.apply(_,o),i.result===!1&&i.preventDefault());return i.type=te,!m&&!i.isDefaultPrevented()&&(!q._default||q._default.apply(H.pop(),o)===!1)&&St(f)&&k&&T(f[te])&&!N(f)&&(w=f[k],w&&(f[k]=null),p.event.triggered=te,i.isPropagationStopped()&&z.addEventListener(te,Ss),f[te](),i.isPropagationStopped()&&z.removeEventListener(te,Ss),p.event.triggered=void 0,w&&(f[k]=w)),i.result}},simulate:function(i,o,f){var m=p.extend(new p.Event,f,{type:i,isSimulated:!0});p.event.trigger(m,null,o)}}),p.fn.extend({trigger:function(i,o){return this.each(function(){p.event.trigger(i,o,this)})},triggerHandler:function(i,o){var f=this[0];if(f)return p.event.trigger(i,o,f,!0)}});var Nc=/\[\]$/,As=/\r?\n/g,Ic=/^(?:submit|button|image|reset|file)$/i,Oc=/^(?:input|select|textarea|keygen)/i;function Ma(i,o,f,m){var v;if(Array.isArray(o))p.each(o,function(_,w){f||Nc.test(i)?m(i,w):Ma(i+"["+(typeof w=="object"&&w!=null?_:"")+"]",w,f,m)});else if(!f&&J(o)==="object")for(v in o)Ma(i+"["+v+"]",o[v],f,m);else m(i,o)}p.param=function(i,o){var f,m=[],v=function(_,w){var O=T(w)?w():w;m[m.length]=encodeURIComponent(_)+"="+encodeURIComponent(O??"")};if(i==null)return"";if(Array.isArray(i)||i.jquery&&!p.isPlainObject(i))p.each(i,function(){v(this.name,this.value)});else for(f in i)Ma(f,i[f],o,v);return m.join("&")},p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var i=p.prop(this,"elements");return i?p.makeArray(i):this}).filter(function(){var i=this.type;return this.name&&!p(this).is(":disabled")&&Oc.test(this.nodeName)&&!Ic.test(i)&&(this.checked||!Wn.test(i))}).map(function(i,o){var f=p(this).val();return f==null?null:Array.isArray(f)?p.map(f,function(m){return{name:o.name,value:m.replace(As,`\r +`)}}):{name:o.name,value:f.replace(As,`\r +`)}}).get()}});var Mc=/%20/g,Lc=/#.*$/,Pc=/([?&])_=[^&]*/,Rc=/^(.*?):[ \t]*([^\r\n]*)$/mg,Fc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,jc=/^(?:GET|HEAD)$/,Hc=/^\/\//,ks={},La={},Ns="*/".concat("*"),Pa=F.createElement("a");Pa.href=Ur.href;function Is(i){return function(o,f){typeof o!="string"&&(f=o,o="*");var m,v=0,_=o.toLowerCase().match(ft)||[];if(T(f))for(;m=_[v++];)m[0]==="+"?(m=m.slice(1)||"*",(i[m]=i[m]||[]).unshift(f)):(i[m]=i[m]||[]).push(f)}}function Os(i,o,f,m){var v={},_=i===La;function w(O){var k;return v[O]=!0,p.each(i[O]||[],function(R,q){var z=q(o,f,m);if(typeof z=="string"&&!_&&!v[z])return o.dataTypes.unshift(z),w(z),!1;if(_)return!(k=z)}),k}return w(o.dataTypes[0])||!v["*"]&&w("*")}function Ra(i,o){var f,m,v=p.ajaxSettings.flatOptions||{};for(f in o)o[f]!==void 0&&((v[f]?i:m||(m={}))[f]=o[f]);return m&&p.extend(!0,i,m),i}function $c(i,o,f){for(var m,v,_,w,O=i.contents,k=i.dataTypes;k[0]==="*";)k.shift(),m===void 0&&(m=i.mimeType||o.getResponseHeader("Content-Type"));if(m){for(v in O)if(O[v]&&O[v].test(m)){k.unshift(v);break}}if(k[0]in f)_=k[0];else{for(v in f){if(!k[0]||i.converters[v+" "+k[0]]){_=v;break}w||(w=v)}_=_||w}if(_)return _!==k[0]&&k.unshift(_),f[_]}function Bc(i,o,f,m){var v,_,w,O,k,R={},q=i.dataTypes.slice();if(q[1])for(w in i.converters)R[w.toLowerCase()]=i.converters[w];for(_=q.shift();_;)if(i.responseFields[_]&&(f[i.responseFields[_]]=o),!k&&m&&i.dataFilter&&(o=i.dataFilter(o,i.dataType)),k=_,_=q.shift(),_){if(_==="*")_=k;else if(k!=="*"&&k!==_){if(w=R[k+" "+_]||R["* "+_],!w){for(v in R)if(O=v.split(" "),O[1]===_&&(w=R[k+" "+O[0]]||R["* "+O[0]],w)){w===!0?w=R[v]:R[v]!==!0&&(_=O[0],q.unshift(O[1]));break}}if(w!==!0)if(w&&i.throws)o=w(o);else try{o=w(o)}catch(z){return{state:"parsererror",error:w?z:"No conversion from "+k+" to "+_}}}}return{state:"success",data:o}}p.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ur.href,type:"GET",isLocal:Fc.test(Ur.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ns,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":p.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(i,o){return o?Ra(Ra(i,p.ajaxSettings),o):Ra(p.ajaxSettings,i)},ajaxPrefilter:Is(ks),ajaxTransport:Is(La),ajax:function(i,o){typeof i=="object"&&(o=i,i=void 0),o=o||{};var f,m,v,_,w,O,k,R,q,z,H=p.ajaxSetup({},o),te=H.context||H,Ce=H.context&&(te.nodeType||te.jquery)?p(te):p.event,Oe=p.Deferred(),Ee=p.Callbacks("once memory"),Ge=H.statusCode||{},Ye={},Qt={},Zt="canceled",Ie={readyState:0,getResponseHeader:function(Le){var We;if(k){if(!_)for(_={};We=Rc.exec(v);)_[We[1].toLowerCase()+" "]=(_[We[1].toLowerCase()+" "]||[]).concat(We[2]);We=_[Le.toLowerCase()+" "]}return We==null?null:We.join(", ")},getAllResponseHeaders:function(){return k?v:null},setRequestHeader:function(Le,We){return k==null&&(Le=Qt[Le.toLowerCase()]=Qt[Le.toLowerCase()]||Le,Ye[Le]=We),this},overrideMimeType:function(Le){return k==null&&(H.mimeType=Le),this},statusCode:function(Le){var We;if(Le)if(k)Ie.always(Le[Ie.status]);else for(We in Le)Ge[We]=[Ge[We],Le[We]];return this},abort:function(Le){var We=Le||Zt;return f&&f.abort(We),Yn(0,We),this}};if(Oe.promise(Ie),H.url=((i||H.url||Ur.href)+"").replace(Hc,Ur.protocol+"//"),H.type=o.method||o.type||H.method||H.type,H.dataTypes=(H.dataType||"*").toLowerCase().match(ft)||[""],H.crossDomain==null){O=F.createElement("a");try{O.href=H.url,O.href=O.href,H.crossDomain=Pa.protocol+"//"+Pa.host!=O.protocol+"//"+O.host}catch{H.crossDomain=!0}}if(H.data&&H.processData&&typeof H.data!="string"&&(H.data=p.param(H.data,H.traditional)),Os(ks,H,o,Ie),k)return Ie;R=p.event&&H.global,R&&p.active++===0&&p.event.trigger("ajaxStart"),H.type=H.type.toUpperCase(),H.hasContent=!jc.test(H.type),m=H.url.replace(Lc,""),H.hasContent?H.data&&H.processData&&(H.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(H.data=H.data.replace(Mc,"+")):(z=H.url.slice(m.length),H.data&&(H.processData||typeof H.data=="string")&&(m+=(Oa.test(m)?"&":"?")+H.data,delete H.data),H.cache===!1&&(m=m.replace(Pc,"$1"),z=(Oa.test(m)?"&":"?")+"_="+xs.guid+++z),H.url=m+z),H.ifModified&&(p.lastModified[m]&&Ie.setRequestHeader("If-Modified-Since",p.lastModified[m]),p.etag[m]&&Ie.setRequestHeader("If-None-Match",p.etag[m])),(H.data&&H.hasContent&&H.contentType!==!1||o.contentType)&&Ie.setRequestHeader("Content-Type",H.contentType),Ie.setRequestHeader("Accept",H.dataTypes[0]&&H.accepts[H.dataTypes[0]]?H.accepts[H.dataTypes[0]]+(H.dataTypes[0]!=="*"?", "+Ns+"; q=0.01":""):H.accepts["*"]);for(q in H.headers)Ie.setRequestHeader(q,H.headers[q]);if(H.beforeSend&&(H.beforeSend.call(te,Ie,H)===!1||k))return Ie.abort();if(Zt="abort",Ee.add(H.complete),Ie.done(H.success),Ie.fail(H.error),f=Os(La,H,o,Ie),!f)Yn(-1,"No Transport");else{if(Ie.readyState=1,R&&Ce.trigger("ajaxSend",[Ie,H]),k)return Ie;H.async&&H.timeout>0&&(w=n.setTimeout(function(){Ie.abort("timeout")},H.timeout));try{k=!1,f.send(Ye,Yn)}catch(Le){if(k)throw Le;Yn(-1,Le)}}function Yn(Le,We,Kr,ja){var en,Gr,tn,xn,En,Nt=We;k||(k=!0,w&&n.clearTimeout(w),f=void 0,v=ja||"",Ie.readyState=Le>0?4:0,en=Le>=200&&Le<300||Le===304,Kr&&(xn=$c(H,Ie,Kr)),!en&&p.inArray("script",H.dataTypes)>-1&&p.inArray("json",H.dataTypes)<0&&(H.converters["text script"]=function(){}),xn=Bc(H,xn,Ie,en),en?(H.ifModified&&(En=Ie.getResponseHeader("Last-Modified"),En&&(p.lastModified[m]=En),En=Ie.getResponseHeader("etag"),En&&(p.etag[m]=En)),Le===204||H.type==="HEAD"?Nt="nocontent":Le===304?Nt="notmodified":(Nt=xn.state,Gr=xn.data,tn=xn.error,en=!tn)):(tn=Nt,(Le||!Nt)&&(Nt="error",Le<0&&(Le=0))),Ie.status=Le,Ie.statusText=(We||Nt)+"",en?Oe.resolveWith(te,[Gr,Nt,Ie]):Oe.rejectWith(te,[Ie,Nt,tn]),Ie.statusCode(Ge),Ge=void 0,R&&Ce.trigger(en?"ajaxSuccess":"ajaxError",[Ie,H,en?Gr:tn]),Ee.fireWith(te,[Ie,Nt]),R&&(Ce.trigger("ajaxComplete",[Ie,H]),--p.active||p.event.trigger("ajaxStop")))}return Ie},getJSON:function(i,o,f){return p.get(i,o,f,"json")},getScript:function(i,o){return p.get(i,void 0,o,"script")}}),p.each(["get","post"],function(i,o){p[o]=function(f,m,v,_){return T(m)&&(_=_||v,v=m,m=void 0),p.ajax(p.extend({url:f,type:o,dataType:_,data:m,success:v},p.isPlainObject(f)&&f))}}),p.ajaxPrefilter(function(i){var o;for(o in i.headers)o.toLowerCase()==="content-type"&&(i.contentType=i.headers[o]||"")}),p._evalUrl=function(i,o,f){return p.ajax({url:i,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(m){p.globalEval(m,o,f)}})},p.fn.extend({wrapAll:function(i){var o;return this[0]&&(T(i)&&(i=i.call(this[0])),o=p(i,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&o.insertBefore(this[0]),o.map(function(){for(var f=this;f.firstElementChild;)f=f.firstElementChild;return f}).append(this)),this},wrapInner:function(i){return T(i)?this.each(function(o){p(this).wrapInner(i.call(this,o))}):this.each(function(){var o=p(this),f=o.contents();f.length?f.wrapAll(i):o.append(i)})},wrap:function(i){var o=T(i);return this.each(function(f){p(this).wrapAll(o?i.call(this,f):i)})},unwrap:function(i){return this.parent(i).not("body").each(function(){p(this).replaceWith(this.childNodes)}),this}}),p.expr.pseudos.hidden=function(i){return!p.expr.pseudos.visible(i)},p.expr.pseudos.visible=function(i){return!!(i.offsetWidth||i.offsetHeight||i.getClientRects().length)},p.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch{}};var Wc={0:200,1223:204},zr=p.ajaxSettings.xhr();E.cors=!!zr&&"withCredentials"in zr,E.ajax=zr=!!zr,p.ajaxTransport(function(i){var o,f;if(E.cors||zr&&!i.crossDomain)return{send:function(m,v){var _,w=i.xhr();if(w.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(_ in i.xhrFields)w[_]=i.xhrFields[_];i.mimeType&&w.overrideMimeType&&w.overrideMimeType(i.mimeType),!i.crossDomain&&!m["X-Requested-With"]&&(m["X-Requested-With"]="XMLHttpRequest");for(_ in m)w.setRequestHeader(_,m[_]);o=function(O){return function(){o&&(o=f=w.onload=w.onerror=w.onabort=w.ontimeout=w.onreadystatechange=null,O==="abort"?w.abort():O==="error"?typeof w.status!="number"?v(0,"error"):v(w.status,w.statusText):v(Wc[w.status]||w.status,w.statusText,(w.responseType||"text")!=="text"||typeof w.responseText!="string"?{binary:w.response}:{text:w.responseText},w.getAllResponseHeaders()))}},w.onload=o(),f=w.onerror=w.ontimeout=o("error"),w.onabort!==void 0?w.onabort=f:w.onreadystatechange=function(){w.readyState===4&&n.setTimeout(function(){o&&f()})},o=o("abort");try{w.send(i.hasContent&&i.data||null)}catch(O){if(o)throw O}},abort:function(){o&&o()}}}),p.ajaxPrefilter(function(i){i.crossDomain&&(i.contents.script=!1)}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(i){return p.globalEval(i),i}}}),p.ajaxPrefilter("script",function(i){i.cache===void 0&&(i.cache=!1),i.crossDomain&&(i.type="GET")}),p.ajaxTransport("script",function(i){if(i.crossDomain||i.scriptAttrs){var o,f;return{send:function(m,v){o=p(" \ No newline at end of file + \ No newline at end of file diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index 9551070e..251327e2 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -69,7 +69,7 @@
-
+
@@ -85,7 +85,7 @@
- +
- {{ html()->select('reproduction_machine_id', $reproductionMachines, $instance->reproduction_machine_id)->class('form-control form-control-sm') }} + {{ html()->select('reproduction_machine_id', $reproductionMachines, $instance->reproduction_machine_id)->class('form-control form-control-sm form-select') }} @if ($errors->has('reproduction_machine_id'))
{!! $errors->first('reproduction_machine_id') !!}
@endif @@ -117,7 +117,7 @@ {{ html()->label('Project', 'project_id')->class('form-control-label') }}
- {{ html()->select('project_id', $projects, $instance->project_id)->class('form-control form-control-sm') }} + {{ html()->select('project_id', $projects, $instance->project_id)->class('form-control form-control-sm form-select') }} @if ($errors->has('project_id'))
{!! $errors->first('project_id') !!}
@endif @@ -130,7 +130,7 @@ {{ html()->label('Department', 'department_id')->class('form-control-label') }}
- {{ html()->select('department_id', $departments, $instance->department_id)->class('form-control form-control-sm') }} + {{ html()->select('department_id', $departments, $instance->department_id)->class('form-control form-control-sm form-select') }} @if ($errors->has('department_id'))
{!! $errors->first('department_id') !!}
@endif diff --git a/resources/views/instances/_instances.blade.php b/resources/views/instances/_instances.blade.php index 693bdbf8..e00540cd 100644 --- a/resources/views/instances/_instances.blade.php +++ b/resources/views/instances/_instances.blade.php @@ -29,7 +29,7 @@