diff --git a/.env.example b/.env.example index 755a9d6ce..57b0803e8 100644 --- a/.env.example +++ b/.env.example @@ -6,12 +6,12 @@ APP_URL=http://localhost BACKPACK_THEME=backpack.theme-tabler # MySQL Database Connection -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=homestead -DB_USERNAME=homestead -DB_PASSWORD=secret +#DB_CONNECTION=mysql +#DB_HOST=127.0.0.1 +#DB_PORT=3306 +#DB_DATABASE=homestead +#DB_USERNAME=homestead +#DB_PASSWORD=secret # PostgreSQL Database Connection #DB_CONNECTION=pgsql @@ -22,9 +22,9 @@ DB_PASSWORD=secret #DB_PASSWORD= # SQLite Database Connection -# You might also need to run 'touch storage/app/database.sqlite` to create the db -#DB_CONNECTION=sqlite -#DB_DATABASE=../storage/app/database.sqlite +# You might also need to run 'touch storage/app/database.sqlite` to create the db if the file does not exist. +DB_CONNECTION=sqlite +DB_DATABASE=./storage/app/database.sqlite CACHE_DRIVER=file SESSION_DRIVER=file diff --git a/.gitignore b/.gitignore index 952767f93..775a8883f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ Homestead.json /.vscode /packages /_volumes +/public/basset diff --git a/app/Console/Commands/RefreshDb.php b/app/Console/Commands/RefreshDb.php index cc44f19c1..227481b36 100644 --- a/app/Console/Commands/RefreshDb.php +++ b/app/Console/Commands/RefreshDb.php @@ -39,10 +39,12 @@ public function __construct() */ public function handle() { + Artisan::call('down'); Log::warning('Cleanup time. Refreshing the database.'); Artisan::call('db:wipe --force'); Artisan::call('migrate --force'); Artisan::call('db:seed --force'); Artisan::call('backup:clean'); + Artisan::call('up'); } } diff --git a/app/Http/Controllers/Admin/AdminPageController.php b/app/Http/Controllers/Admin/AdminPageController.php new file mode 100644 index 000000000..414603368 --- /dev/null +++ b/app/Http/Controllers/Admin/AdminPageController.php @@ -0,0 +1,19 @@ + 'New in v7', + 'description' => 'Discover the new features and improvements in Backpack v7.', + ]); + } +} diff --git a/app/Http/Controllers/Admin/CaveCrudController.php b/app/Http/Controllers/Admin/CaveCrudController.php index b7b791e2c..66b84a1a0 100644 --- a/app/Http/Controllers/Admin/CaveCrudController.php +++ b/app/Http/Controllers/Admin/CaveCrudController.php @@ -18,6 +18,7 @@ class CaveCrudController extends CrudController use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; + use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; } /** * Configure the CrudPanel object. Apply settings to all operations. @@ -147,4 +148,15 @@ public static function getMonsterSubfields() return $subfields; } + + public function ajaxUpload() + { + if (app('env') === 'production') { + return response()->json(['errors' => [ + 'message' => 'Uploads are disabled in production.', + ]], 500); + } + + return $this->traitAjaxUpload(); + } } diff --git a/app/Http/Controllers/Admin/DummyCrudController.php b/app/Http/Controllers/Admin/DummyCrudController.php index 64c0a5f7d..771e8b1ec 100644 --- a/app/Http/Controllers/Admin/DummyCrudController.php +++ b/app/Http/Controllers/Admin/DummyCrudController.php @@ -21,6 +21,7 @@ class DummyCrudController extends CrudController use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation; + use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; } public function setup() { @@ -186,4 +187,15 @@ protected function groups() return $groups; } + + public function ajaxUpload() + { + if (app('env') === 'production') { + return response()->json(['errors' => [ + 'message' => 'Uploads are disabled in production.', + ]], 500); + } + + return $this->traitAjaxUpload(); + } } diff --git a/app/Http/Controllers/Admin/FluentMonsterCrudController.php b/app/Http/Controllers/Admin/FluentMonsterCrudController.php index 15e0e2c18..e29660c2d 100644 --- a/app/Http/Controllers/Admin/FluentMonsterCrudController.php +++ b/app/Http/Controllers/Admin/FluentMonsterCrudController.php @@ -443,12 +443,6 @@ protected function setupCreateOperation() ->type('summernote') ->label('Summernote editor') ->tab('Big texts'); - - CRUD::field('wysiwyg') - ->type('ckeditor') - ->label('CKEditor - also called the WYSIWYG field') - ->tab('Big texts'); - CRUD::field('tinymce') ->type('tinymce') ->label('TinyMCE') diff --git a/app/Http/Controllers/Admin/IconCrudController.php b/app/Http/Controllers/Admin/IconCrudController.php index b57e94f9f..c9b5da12f 100644 --- a/app/Http/Controllers/Admin/IconCrudController.php +++ b/app/Http/Controllers/Admin/IconCrudController.php @@ -25,6 +25,20 @@ public function setup() protected function setupListOperation() { $this->crud->addColumns(['name', 'icon']); + + $this->crud->addFilter([ + 'type' => 'date_range', + 'name' => 'created_at', + 'label' => 'Created At', + ], null, function ($value) { + $value = json_decode($value, true); + + // if the filter is active + if ($value) { + $this->crud->addClause('where', 'created_at', '>=', $value['from']); + $this->crud->addClause('where', 'created_at', '<=', $value['to']); + } + }); } protected function setupCreateOperation() diff --git a/app/Http/Controllers/Admin/MonsterCrudController.php b/app/Http/Controllers/Admin/MonsterCrudController.php index 84fca39c9..445dcae89 100644 --- a/app/Http/Controllers/Admin/MonsterCrudController.php +++ b/app/Http/Controllers/Admin/MonsterCrudController.php @@ -5,6 +5,7 @@ use App\Http\Requests\MonsterRequest as StoreRequest; // VALIDATION: change the requests to match your own file names if you need form validation use Backpack\CRUD\app\Http\Controllers\CrudController; +use Backpack\CRUD\app\Library\Widget; use Illuminate\Support\Collection; class MonsterCrudController extends CrudController @@ -12,11 +13,13 @@ class MonsterCrudController extends CrudController use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; + use \Backpack\DataformModal\Http\Controllers\Operations\CreateInModalOperation; + use \Backpack\DataformModal\Http\Controllers\Operations\UpdateInModalOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation; - use \Backpack\Pro\Http\Controllers\Operations\DropzoneOperation { dropzoneUpload as traitDropzone; } - use \App\Http\Controllers\Admin\Operations\SMSOperation; //Custom Form Operation Example + use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; } + use Operations\SMSOperation; //Custom Form Operation Example use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation; use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation; @@ -131,10 +134,10 @@ public function setupListOperation() 'element' => 'span', 'class' => function ($crud, $column, $entry, $related_key) { if ($column['text'] == 'Yes') { - return 'badge rounded-pill bg-success'; + return 'badge rounded-pill bg-success text-white'; } - return 'badge rounded-pill bg-danger'; + return 'badge rounded-pill bg-danger text-white'; }, ], ], @@ -279,6 +282,53 @@ public function setupListOperation() public function setupShowOperation() { + // add a widget + Widget::add([ + 'type' => 'datatable', + 'controller' => 'App\Http\Controllers\Admin\IconCrudController', + 'name' => 'icon_crud', + 'section' => 'after_content', + 'content' => [ + 'header' => 'Icons for this monster', + ], + 'wrapper' => ['class'=> 'mb-3'], + ]); + + Widget::add([ + 'type' => 'datatable', + 'controller' => 'App\Http\Controllers\Admin\ProductCrudController', + 'name' => 'products_datatable', + 'section' => 'after_content', + 'content' => [ + 'header' => 'Products for this monster', + ], + 'wrapper' => ['class'=> 'mb-3'], + 'configure' => function ($crud, $entry = null) { + // Customize which columns to show + $crud->removeAllColumns(); + $crud->addColumn(['name' => 'name', 'label' => 'Product Name']); + $crud->addColumn(['name' => 'price', 'label' => 'Price']); + + // Get the current monster's products + if ($entry) { + $productIds = $entry->products->pluck('id')->toArray(); + if (count($productIds) > 0) { + // Configure the controller to only show products related to this monster + $crud->addClause('whereIn', 'id', $productIds); + } else { + // Force an empty result when there are no products + $crud->addClause('where', 'id', 0); // This will match no products + } + + // Remove buttons that aren't needed for this embedded view + + // Disable features that aren't needed + $crud->denyAccess(['create', 'update', 'delete']); + $crud->disableResponsiveTable(); + } + }, + ]); + $this->crud->setOperationSetting('tabsEnabled', true); $this->setupListOperation(); @@ -320,13 +370,6 @@ public function setupShowOperation() 'tab' => 'WYSIWYG Editors', ]); - $this->crud->addColumn([ - 'name' => 'wysiwyg', - 'type' => 'wysiwyg', - 'label' => 'Wysiwyg'.backpack_pro_badge(), - 'tab' => 'WYSIWYG Editors', - ]); - $this->crud->addColumn([ 'name' => 'features', 'label' => 'Features'.backpack_pro_badge(), @@ -1703,10 +1746,11 @@ public static function getFieldsArrayForWysiwygEditorsTab() 'tab' => 'WYSIWYG Editors', ], [ // Summernote - 'name' => 'summernote', - 'label' => 'Summernote editor'.backpack_free_badge(), - 'type' => 'summernote', - 'tab' => 'WYSIWYG Editors', + 'name' => 'summernote', + 'label' => 'Summernote editor'.backpack_free_badge(), + 'type' => 'summernote', + 'tab' => 'WYSIWYG Editors', + 'withFiles' => true, ], [ // CKEditor 'name' => 'ckeditor', @@ -1720,12 +1764,6 @@ public static function getFieldsArrayForWysiwygEditorsTab() 'type' => 'tinymce', 'tab' => 'WYSIWYG Editors', ], - [ // Wysiwyg - 'name' => 'wysiwyg', - 'label' => 'Wysiwyg'.backpack_pro_badge(), - 'type' => 'wysiwyg', - 'tab' => 'WYSIWYG Editors', - ], ]; } @@ -1837,15 +1875,17 @@ public static function getFieldsArrayForMiscellaneousTab() ]; } - public function dropzoneUpload() + public function ajaxUpload() { if (app('env') === 'production') { return response()->json(['errors' => [ - 'dropzone' => ['Uploads are disabled in production'], + 'dropzone' => ['Uploads are disabled in production'], + 'easymde' => ['Uploads are disabled in production'], + 'summernote' => ['Uploads are disabled in production'], ], ], 500); } - return $this->traitDropzone(); + return $this->traitAjaxUpload(); } } diff --git a/app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php b/app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php index 945d3219d..e32b5704d 100644 --- a/app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php +++ b/app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php @@ -5,6 +5,7 @@ use App\Http\Requests\InvoiceRequest; use Backpack\CRUD\app\Http\Controllers\CrudController; use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD; +use Backpack\CRUD\app\Library\Widget; /** * Class InvoiceCrudController. @@ -14,12 +15,14 @@ class InvoiceCrudController extends CrudController { use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; + // use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation; + // use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation; use \Backpack\Pro\Http\Controllers\Operations\TrashOperation; use \Backpack\Pro\Http\Controllers\Operations\CustomViewOperation; + use \Backpack\DataformModal\Http\Controllers\Operations\CreateInModalOperation; + use \Backpack\DataformModal\Http\Controllers\Operations\UpdateInModalOperation; /** * Configure the CrudPanel object. Apply settings to all operations. @@ -53,19 +56,32 @@ public function setupLast5YearsView() protected function setupListOperation() { CRUD::addColumn([ - 'name' => 'owner', - 'label' => 'Owner', - 'linkTo' => [ - 'route' => 'owner.show', - 'target' => '_blank', - ], + 'name' => 'info', + 'type' => 'view', + 'view' => 'crud::chips.invoice', ]); - CRUD::column('series'); - CRUD::column('number'); CRUD::column('issuance_date'); CRUD::column('due_date'); CRUD::column('total'); + CRUD::filter('series') + ->type('dropdown') + ->values(\App\Models\PetShop\Invoice::select('series')->distinct()->pluck('series', 'series')->toArray()) + ->label('Series') + ->placeholder('Search by series') + ->whenActive(function ($value) { + CRUD::addClause('where', 'series', '=', $value); + }); + + CRUD::filter('issuance_date') + ->type('date_range') + ->label('Issuance Date') + ->placeholder('Search by issuance date') + ->whenActive(function ($value) { + $dates = json_decode($value); + CRUD::addClause('whereBetween', 'issuance_date', [$dates->from, $dates->to]); + }); + $this->runCustomViews(); } @@ -130,6 +146,17 @@ protected function setupShowOperation() $this->autoSetupShowOperation(); CRUD::column('total'); + + // get the owner with important relationships + $owner = CRUD::getCurrentEntry()->owner()->with('avatar', 'invoices')->first(); + + // add a chip widget for the owner + Widget::add() + ->to('after_content') + ->type('chip') + ->view('crud::chips.owner') + ->title('Owner') + ->entry($owner); } public function fetchOwner() diff --git a/app/Http/Controllers/Admin/PetShop/OwnerCrudController.php b/app/Http/Controllers/Admin/PetShop/OwnerCrudController.php index dca5e7bfa..a6560468b 100644 --- a/app/Http/Controllers/Admin/PetShop/OwnerCrudController.php +++ b/app/Http/Controllers/Admin/PetShop/OwnerCrudController.php @@ -5,6 +5,7 @@ use App\Http\Requests\OwnerRequest; use Backpack\CRUD\app\Http\Controllers\CrudController; use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD; +use Backpack\CRUD\app\Library\Widget; /** * Class OwnerCrudController. @@ -47,8 +48,8 @@ public function setup() */ protected function setupListOperation() { - CRUD::column('name'); - CRUD::column('avatar.url')->type('image')->label('Avatar'); + CRUD::column('name')->size(6); + CRUD::column('avatar.url')->type('image')->label('Avatar')->size(6); CRUD::column('pets')->label('Pets')->linkTo('pet.show'); CRUD::column('invoices')->linkTo('invoice.show'); CRUD::column('badges')->label('Badges')->linkTo('badge.show'); @@ -99,4 +100,47 @@ protected function setupUpdateOperation() { $this->setupCreateOperation(); } + + protected function setupShowOperation() + { + $this->setupListOperation(); + + Widget::add([ + 'type' => 'datatable', + 'controller' => 'App\Http\Controllers\Admin\PetShop\PetCrudController', + 'name' => 'pets_crud', + 'section' => 'after_content', + 'wrapper' => ['class' => 'mt-3'], + 'content' => [ + 'header' => 'Pets for this owner', + // COULD-DO: maybe add support for a subheader? + // 'subheader' => 'This is a list of all pets owned by this owner.', + ], + 'setup' => function ($crud, $parent) { + // change some column attributes just inside this instance + $crud->column('skills')->label('Pet skills'); + $crud->column('passport.number')->label('Passport Number'); + + // only show the pets of this owner (owner is an n-n relationship) + $crud->addClause('whereHas', 'owners', function ($query) use ($parent) { + $query->where('id', $parent->id); + }); + }, + ]); + Widget::add([ + 'type' => 'datatable', + 'controller' => 'App\Http\Controllers\Admin\PetShop\InvoiceCrudController', + 'name' => 'invoices_crud', + 'section' => 'after_content', + 'wrapper' => ['class' => 'mt-3'], + 'content' => [ + 'header' => 'Invoices for this owner', + ], + // MUST-DO: How the fuck do I make this only show related pets?!?! + 'setup' => function ($crud, $parent) { + // only show the pets of this owner (owner is an n-n relationship) + $crud->addClause('where', 'owner_id', $parent->id); + }, + ]); + } } diff --git a/app/Http/Controllers/Admin/PetShop/PetCrudController.php b/app/Http/Controllers/Admin/PetShop/PetCrudController.php index af61e0081..c6b2db696 100644 --- a/app/Http/Controllers/Admin/PetShop/PetCrudController.php +++ b/app/Http/Controllers/Admin/PetShop/PetCrudController.php @@ -54,6 +54,19 @@ protected function setupListOperation() CRUD::column('avatar.url')->type('image')->label('Avatar'); CRUD::addButtonFromView('top', 'passports', 'passports'); + + CRUD::filter('skills') + ->type('select2_multiple') + ->values(function () { + return \App\Models\Petshop\Skill::all()->keyBy('id')->pluck('name', 'id')->toArray(); + }) + ->whenActive(function ($values) { + $values = json_decode($values, true); + + $this->crud->addClause('whereHas', 'skills', function ($query) use ($values) { + $query->whereIn('id', $values); + }); + }); } /** diff --git a/app/Http/Controllers/Admin/ProductCrudController.php b/app/Http/Controllers/Admin/ProductCrudController.php index 1de33f8ed..ce6acbee4 100644 --- a/app/Http/Controllers/Admin/ProductCrudController.php +++ b/app/Http/Controllers/Admin/ProductCrudController.php @@ -17,7 +17,7 @@ class ProductCrudController extends CrudController use \Backpack\CRUD\app\Http\Controllers\Operations\BulkDeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\BulkCloneOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\InlineCreateOperation; - use \Backpack\Pro\Http\Controllers\Operations\DropzoneOperation { dropzoneUpload as traitDropzoneUpload; } + use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; } public function setup() { @@ -91,10 +91,10 @@ protected function setupCreateOperation() 'tab' => 'Texts', ]); - CRUD::addField([ // Wysiwyg + CRUD::addField([ // summernote 'name' => 'details', 'label' => 'Details', - 'type' => 'wysiwyg', + 'type' => 'summernote', 'tab' => 'Texts', ]); @@ -292,7 +292,7 @@ protected function setupUpdateOperation() $this->setupCreateOperation(); } - public function dropzoneUpload() + public function ajaxUpload() { if (app('env') === 'production') { return response()->json(['errors' => [ @@ -301,6 +301,6 @@ public function dropzoneUpload() ], 500); } - return $this->traitDropzoneUpload(); + return $this->traitAjaxUpload(); } } diff --git a/app/Http/Controllers/Admin/StoryCrudController.php b/app/Http/Controllers/Admin/StoryCrudController.php index 95de5bbbd..1c9b8ebeb 100644 --- a/app/Http/Controllers/Admin/StoryCrudController.php +++ b/app/Http/Controllers/Admin/StoryCrudController.php @@ -18,6 +18,7 @@ class StoryCrudController extends CrudController use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; + use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; } /** * Configure the CrudPanel object. Apply settings to all operations. @@ -80,4 +81,15 @@ public static function getMonsterSubfields() { return CaveCrudController::getMonsterSubfields(); } + + public function ajaxUpload() + { + if (app('env') === 'production') { + return response()->json(['errors' => [ + 'message' => 'This operation is not available in production.', + ]], 500); + } + + return $this->traitAjaxUpload(); + } } diff --git a/app/Http/Middleware/Theme.php b/app/Http/Middleware/Theme.php index 2fe54a8e2..2bd9024ad 100644 --- a/app/Http/Middleware/Theme.php +++ b/app/Http/Middleware/Theme.php @@ -18,6 +18,17 @@ public function handle($request, Closure $next): mixed // Set layout if exist in session — only for Tabler if (Session::get('backpack.ui.view_namespace') === 'backpack.theme-tabler::') { Config::set('backpack.theme-tabler.layout', Session::get('backpack.theme-tabler.layout') ?? config('backpack.theme-tabler.layout')); + + // Set styles if exist in session — only for Tabler + $sessionStyles = Session::get('backpack.theme-tabler.styles'); + if ($sessionStyles !== null && !empty($sessionStyles)) { + Config::set('backpack.theme-tabler.styles', $sessionStyles); + } + } + + // Set HTML direction if exists in session + if (Session::has('backpack.ui.html_direction')) { + Config::set('backpack.ui.html_direction', Session::get('backpack.ui.html_direction')); } return $next($request); diff --git a/app/Http/Requests/CaveRequest.php b/app/Http/Requests/CaveRequest.php index 3e8099a38..6292cfe84 100644 --- a/app/Http/Requests/CaveRequest.php +++ b/app/Http/Requests/CaveRequest.php @@ -25,8 +25,9 @@ public function authorize() public function rules() { return [ - 'name' => 'required|string', - 'monster.*.text' => 'required|string', + 'name' => 'required|string', + 'monster.*.text' => 'required|string', + 'monster.*.status' => 'required', ]; } @@ -50,7 +51,8 @@ public function attributes() public function messages() { return [ - // + 'monster.*.text.required' => 'The "Monster > Text" field is required.', + 'monster.*.status.required' => 'The "Monster > Status" field is required.', ]; } } diff --git a/app/Http/Requests/DummyRequest.php b/app/Http/Requests/DummyRequest.php index af0ad305b..7395cfe9d 100644 --- a/app/Http/Requests/DummyRequest.php +++ b/app/Http/Requests/DummyRequest.php @@ -52,7 +52,9 @@ public function attributes() public function messages() { return [ - // + 'simple.*.text.required' => 'The "Simple > Text" field is required.', + 'simple.*.text.min' => 'The "Simple > Text" field must be at least :min characters long.', + 'simple.*.email.required' => 'The "Simple > Email" field is required.', ]; } } diff --git a/app/Http/Requests/StoryRequest.php b/app/Http/Requests/StoryRequest.php index 43bf2e981..fe98bfce6 100644 --- a/app/Http/Requests/StoryRequest.php +++ b/app/Http/Requests/StoryRequest.php @@ -25,8 +25,9 @@ public function authorize() public function rules() { return [ - 'name' => 'required|string', - 'monsters.*.text' => 'required|string', + 'name' => 'required|string', + 'monsters.*.text' => 'required|string', + 'monsters.*.status' => 'required', ]; } @@ -50,7 +51,8 @@ public function attributes() public function messages() { return [ - // + 'monsters.*.text.required' => 'The "Monsters > Text" field is required.', + 'monsters.*.status.required' => 'The "Monsters > Status" field is required.', ]; } } diff --git a/app/PageTemplates.php b/app/PageTemplates.php index 694af28b3..9884e0292 100644 --- a/app/PageTemplates.php +++ b/app/PageTemplates.php @@ -54,7 +54,7 @@ private function services() $this->crud->addField([ 'name' => 'content', 'label' => 'Content', - 'type' => 'wysiwyg', + 'type' => 'summernote', 'placeholder' => 'Your content here', ]); } @@ -64,7 +64,7 @@ private function about_us() $this->crud->addField([ 'name' => 'content', 'label' => 'Content', - 'type' => 'wysiwyg', + 'type' => 'summernote', 'placeholder' => 'Your content here', ]); } diff --git a/app/helpers.php b/app/helpers.php index 986f8c6d8..04a7f5812 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -10,7 +10,7 @@ */ function backpack_pro_badge(string $string = 'PRO') { - return ''.$string.''; + return ''.$string.''; } } @@ -24,7 +24,7 @@ function backpack_pro_badge(string $string = 'PRO') */ function backpack_new_badge(string $string = 'NEW') { - return ''.$string.''; + return ''.$string.''; } } @@ -38,6 +38,6 @@ function backpack_new_badge(string $string = 'NEW') */ function backpack_free_badge(string $string = 'FREE') { - return ''.$string.''; + return ''.$string.''; } } diff --git a/composer.json b/composer.json index 90db349b8..50fed3d39 100644 --- a/composer.json +++ b/composer.json @@ -1,32 +1,40 @@ { "name": "backpack/demo", "description": "A Laravel + Backpack installation to show off most features.", - "keywords": ["backpack", "laravel", "backpack for laravel", "admin panel", "crud"], + "keywords": [ + "backpack", + "laravel", + "backpack for laravel", + "admin panel", + "crud" + ], "license": "proprietary", "type": "project", "require": { "php": "^8.2", - "laravel/framework": "^11.0", - "backpack/activity-log": "^2.0.3", - "backpack/backupmanager": "^5.0", - "backpack/calendar-operation": "^1.0", - "backpack/crud": "^6.7", - "backpack/editable-columns": "^3.0", - "backpack/filemanager": "^3.0", - "backpack/language-switcher": "^2.0", - "backpack/logmanager": "^5.0", - "backpack/medialibrary-uploaders": "^1.0", - "backpack/menucrud": "^4.0", - "backpack/newscrud": "^5.0", - "backpack/pagemanager": "^3.0", - "backpack/permissionmanager": "^7.0", - "backpack/pro": "^2.0", - "backpack/revise-operation": "^2.0", - "backpack/settings": "^3.1", - "backpack/theme-coreuiv2": "^1.0", - "backpack/theme-coreuiv4": "^1.0", - "backpack/theme-tabler": "^1.0", - "backpack/translation-manager": "^1.0", + "laravel/framework": "^12.0", + "backpack/crud": "^7.0", + "backpack/pro": "^3.0", + "backpack/medialibrary-uploaders": "^2.0", + "backpack/ckeditor-field": "^1.0", + "backpack/tinymce-field": "^1.0", + "backpack/activity-log": "^2.1", + "backpack/backupmanager": "^5.1", + "backpack/calendar-operation": "^1.1", + "backpack/editable-columns": "^3.1", + "backpack/filemanager": "^4.0", + "backpack/language-switcher": "^2.1", + "backpack/logmanager": "^5.1", + "backpack/menucrud": "^4.1", + "backpack/newscrud": "^5.2", + "backpack/pagemanager": "^3.4", + "backpack/permissionmanager": "^7.3", + "backpack/revise-operation": "^2.1", + "backpack/settings": "^3.2", + "backpack/theme-coreuiv2": "^2.0", + "backpack/theme-coreuiv4": "^1.2", + "backpack/theme-tabler": "^2.0", + "backpack/translation-manager": "^1.1", "consoletvs/charts": "6.*", "intervention/image": "^2.3", "laravel/legacy-factories": "^1.0", @@ -35,15 +43,16 @@ "mews/purifier": "^3.4", "spatie/laravel-ignition": "^2.0", "spatie/laravel-translatable": "^6.0", - "backpack/pan-panel": "^1.0" + "backpack/pan-panel": "^1.1", + "backpack/dataform-modal": "^1.0" }, "require-dev": { "fakerphp/faker": "~1.4", "mockery/mockery": "1.6.*", - "phpunit/phpunit" : "^11", + "phpunit/phpunit": "^11", "symfony/css-selector": "^7", "symfony/dom-crawler": "^7", - "backpack/generators": "^4.0", + "backpack/generators": "^4.1", "barryvdh/laravel-debugbar": "^3.2" }, "repositories": [ @@ -74,10 +83,12 @@ ], "post-install-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postInstall", - "php artisan storage:link -q" + "php artisan storage:link -q", + "@php artisan basset:cache" ], "post-update-cmd": [ - "Illuminate\\Foundation\\ComposerScripts::postUpdate" + "Illuminate\\Foundation\\ComposerScripts::postUpdate", + "@php artisan basset:cache" ], "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", diff --git a/composer.lock b/composer.lock index bfa115611..645a2baaf 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "86e5bec7f0a125c9e8da66ee12eb7e8c", + "content-hash": "0ec919c6038e5fd0318c26e646fce7c1", "packages": [ { "name": "aws/aws-crt-php", @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.359.11", + "version": "3.362.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "c04a8b3c40bca26da591a8ff14bcc390d26c1644" + "reference": "f29a49b74d5ee771f13432e16d58651de91f7e79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c04a8b3c40bca26da591a8ff14bcc390d26c1644", - "reference": "c04a8b3c40bca26da591a8ff14bcc390d26c1644", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/f29a49b74d5ee771f13432e16d58651de91f7e79", + "reference": "f29a49b74d5ee771f13432e16d58651de91f7e79", "shasum": "" }, "require": { @@ -153,31 +153,31 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.359.11" + "source": "https://github.com/aws/aws-sdk-php/tree/3.362.1" }, - "time": "2025-11-12T19:18:02+00:00" + "time": "2025-11-20T19:10:40+00:00" }, { "name": "backpack/activity-log", - "version": "2.0.7", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/activity-log.git", - "reference": "c705834ac7cac6dd865dcf88a659372e3476a1c1" + "reference": "4b95d7cd64b9b21c0c86f41dde7a030eb107b445" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/activity-log/zipball/c705834ac7cac6dd865dcf88a659372e3476a1c1", - "reference": "c705834ac7cac6dd865dcf88a659372e3476a1c1", + "url": "https://api.github.com/repos/Laravel-Backpack/activity-log/zipball/4b95d7cd64b9b21c0c86f41dde7a030eb107b445", + "reference": "4b95d7cd64b9b21c0c86f41dde7a030eb107b445", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^6.0|^7.0", "spatie/laravel-activitylog": "^4.7" }, "require-dev": { - "orchestra/testbench": "~5|~6", - "phpunit/phpunit": "~9.0" + "orchestra/testbench": "^5|^6|^7|^8|^9|^10|^11|^12", + "phpunit/phpunit": "^9.0|^10.0|^11.0|^12.0" }, "type": "library", "extra": { @@ -219,26 +219,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/activity-log/issues", - "source": "https://github.com/Laravel-Backpack/activity-log/tree/2.0.7" + "source": "https://github.com/Laravel-Backpack/activity-log/tree/2.1.0" }, - "time": "2025-04-28T09:35:16+00:00" + "time": "2025-11-19T07:25:12+00:00" }, { "name": "backpack/backupmanager", - "version": "v5.0.6", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/BackupManager.git", - "reference": "025e6d685bc602a78b6096498d4e22db86e2fa90" + "reference": "cb0d7c4ece7f9d593eaff3b7af932390e3c5ad1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/BackupManager/zipball/025e6d685bc602a78b6096498d4e22db86e2fa90", - "reference": "025e6d685bc602a78b6096498d4e22db86e2fa90", + "url": "https://api.github.com/repos/Laravel-Backpack/BackupManager/zipball/cb0d7c4ece7f9d593eaff3b7af932390e3c5ad1a", + "reference": "cb0d7c4ece7f9d593eaff3b7af932390e3c5ad1a", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^6.0|^7.0", "spatie/laravel-backup": "^8.0|^9.0" }, "require-dev": { @@ -275,29 +275,28 @@ "backpack", "backup", "backupmanager", - "dick", "laravel", "tabacitu", "updivision" ], "support": { "issues": "https://github.com/Laravel-Backpack/BackupManager/issues", - "source": "https://github.com/Laravel-Backpack/BackupManager/tree/v5.0.6" + "source": "https://github.com/Laravel-Backpack/BackupManager/tree/v5.1.0" }, - "time": "2025-02-24T16:05:32+00:00" + "time": "2025-11-19T07:28:14+00:00" }, { "name": "backpack/basset", - "version": "1.3.9", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/basset.git", - "reference": "f0efeec1f243780170c4c91aacbbce326096939a" + "reference": "1efadaf5e2352a4b6b21e8799a8e1b9029707da1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/basset/zipball/f0efeec1f243780170c4c91aacbbce326096939a", - "reference": "f0efeec1f243780170c4c91aacbbce326096939a", + "url": "https://api.github.com/repos/Laravel-Backpack/basset/zipball/1efadaf5e2352a4b6b21e8799a8e1b9029707da1", + "reference": "1efadaf5e2352a4b6b21e8799a8e1b9029707da1", "shasum": "" }, "require": { @@ -356,31 +355,31 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/basset/issues", - "source": "https://github.com/Laravel-Backpack/basset/tree/1.3.9" + "source": "https://github.com/Laravel-Backpack/basset/tree/2.0.0" }, - "time": "2025-04-13T09:19:04+00:00" + "time": "2025-11-21T07:27:01+00:00" }, { "name": "backpack/calendar-operation", - "version": "1.0.12", + "version": "1.1.0", "source": { "type": "git", "url": "git@github.com:Laravel-Backpack/calendar-operation.git", - "reference": "42caf462743e14c98f07875f9ff66064a7f98d4e" + "reference": "5d8b1a731d6a26a304ff1c680383bfc98bb54f2c" }, "dist": { "type": "zip", - "url": "https://repo.backpackforlaravel.com/dist/backpack/calendar-operation/backpack-calendar-operation-42caf462743e14c98f07875f9ff66064a7f98d4e-zip-426564.zip", - "reference": "42caf462743e14c98f07875f9ff66064a7f98d4e", - "shasum": "329264242236ae6fc9f0b196a54f4e93b036d41c" + "url": "https://repo.backpackforlaravel.com/dist/backpack/calendar-operation/backpack-calendar-operation-5d8b1a731d6a26a304ff1c680383bfc98bb54f2c-zip-51f7e1.zip", + "reference": "5d8b1a731d6a26a304ff1c680383bfc98bb54f2c", + "shasum": "e08a4600ee8498d3caf47825c15cf545878952b8" }, "require": { - "backpack/crud": "^6.5" + "backpack/crud": "^6.5|^7.0" }, "require-dev": { "larastan/larastan": "^2.8", - "orchestra/testbench": "^8.21", - "phpunit/phpunit": "~10" + "orchestra/testbench": "^8.21|^9|^10", + "phpunit/phpunit": "^10|^11" }, "type": "library", "extra": { @@ -433,36 +432,81 @@ "Laravel" ], "support": { - "source": "https://github.com/Laravel-Backpack/calendar-operation/tree/1.0.12", + "source": "https://github.com/Laravel-Backpack/calendar-operation/tree/1.1.0", "issues": "https://github.com/Laravel-Backpack/calendar-operation/issues" }, - "time": "2024-12-26T15:10:45+00:00" + "time": "2025-11-19T12:10:12+00:00" + }, + { + "name": "backpack/ckeditor-field", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Backpack/ckeditor-field.git", + "reference": "434c16e1d1cf0839386d9b4e80c587dc57e22e49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Backpack/ckeditor-field/zipball/434c16e1d1cf0839386d9b4e80c587dc57e22e49", + "reference": "434c16e1d1cf0839386d9b4e80c587dc57e22e49", + "shasum": "" + }, + "require": { + "backpack/crud": "^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Backpack\\CkeditorField\\BackpackCkeditorFieldProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Backpack\\CkeditorField\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "CKEditor field for Backpack", + "keywords": [ + "backpack", + "laravel" + ], + "support": { + "issues": "https://github.com/Laravel-Backpack/ckeditor-field/issues", + "source": "https://github.com/Laravel-Backpack/ckeditor-field/tree/1.0.0" + }, + "time": "2025-11-19T12:01:01+00:00" }, { "name": "backpack/crud", - "version": "6.8.7", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/CRUD.git", - "reference": "9d6c2badc387dbd3293b6c276ca6285ba5054e2e" + "reference": "9abc482607aaaefcd6ee2455bc0a6e603cc1b69f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/9d6c2badc387dbd3293b6c276ca6285ba5054e2e", - "reference": "9d6c2badc387dbd3293b6c276ca6285ba5054e2e", + "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/9abc482607aaaefcd6ee2455bc0a6e603cc1b69f", + "reference": "9abc482607aaaefcd6ee2455bc0a6e603cc1b69f", "shasum": "" }, "require": { - "backpack/basset": "^1.1.1|^1.3.2", + "backpack/basset": "^2.0.", "creativeorange/gravatar": "^1.0", - "doctrine/dbal": "^3.0|^4.0", + "doctrine/dbal": "^4.0", "guzzlehttp/guzzle": "^7.0", - "laravel/framework": "^10.0|^11.0|^12", + "laravel/framework": "^12", "prologue/alerts": "^1.0" }, "require-dev": { - "orchestra/testbench": "^8.0|^9.0|^10.0", - "phpunit/phpunit": "^10.0|^9.0|^11.0", + "orchestra/testbench": "^10.0", + "phpunit/phpunit": "^11.0", "spatie/laravel-translatable": "^6.0" }, "suggest": { @@ -528,30 +572,91 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/CRUD/issues", - "source": "https://github.com/Laravel-Backpack/CRUD/tree/6.8.7" + "source": "https://github.com/Laravel-Backpack/CRUD/tree/7.0.0" }, - "time": "2025-10-10T15:17:46+00:00" + "time": "2025-11-21T13:29:48+00:00" + }, + { + "name": "backpack/dataform-modal", + "version": "1.0.1", + "source": { + "type": "git", + "url": "git@github.com:Laravel-Backpack/dataform-modal.git", + "reference": "66cefcb04f541bc5100c331fee24130a91e01ff7" + }, + "dist": { + "type": "zip", + "url": "https://repo.backpackforlaravel.com/dist/backpack/dataform-modal/backpack-dataform-modal-66cefcb04f541bc5100c331fee24130a91e01ff7-zip-a41bbe.zip", + "reference": "66cefcb04f541bc5100c331fee24130a91e01ff7", + "shasum": "c29a4a1306de69832b26a80eb22b349a7d2f774e" + }, + "require": { + "backpack/crud": "^7.0.0-beta" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Backpack\\DataformModal\\BackpackDataformModalProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Backpack\\DataformModal\\": "src/" + } + }, + "license": [ + "Proprietary" + ], + "authors": [ + { + "name": "Cristian Tabacitu", + "email": "cristian.tabacitu@backpackforlaravel.com", + "homepage": "https://backpackforlaravel.com" + }, + { + "name": "Pedro Martins", + "email": "pedro.martins@backpackforlaravel.com", + "homepage": "https://backpackforlaravel.com" + } + ], + "description": "Dataform modal for Backpack", + "homepage": "https://github.com/laravel-backpack/dataform-modal", + "keywords": [ + "Backpack", + "Backpack Addon", + "Backpack for Laravel", + "DataForm Modal", + "Laravel", + "Modal" + ], + "support": { + "source": "https://github.com/Laravel-Backpack/dataform-modal/tree/1.0.1", + "issues": "https://github.com/Laravel-Backpack/dataform-modal/issues" + }, + "time": "2025-11-19T05:22:40+00:00" }, { "name": "backpack/editable-columns", - "version": "3.0.11", + "version": "3.1.0", "source": { "type": "git", "url": "git@github.com:Laravel-Backpack/editable-columns.git", - "reference": "8adddb801c15871abc466bc59dbc2234664c8fab" + "reference": "fd14b63a1fc0e0caf51c769a32cbf730832a7e77" }, "dist": { "type": "zip", - "url": "https://repo.backpackforlaravel.com/dist/backpack/editable-columns/backpack-editable-columns-8adddb801c15871abc466bc59dbc2234664c8fab-zip-1f6c5d.zip", - "reference": "8adddb801c15871abc466bc59dbc2234664c8fab", - "shasum": "611325b066ce5c76e340bd42619dca972fb3fe4d" + "url": "https://repo.backpackforlaravel.com/dist/backpack/editable-columns/backpack-editable-columns-fd14b63a1fc0e0caf51c769a32cbf730832a7e77-zip-54a11b.zip", + "reference": "fd14b63a1fc0e0caf51c769a32cbf730832a7e77", + "shasum": "e9f09b6d2495424824ebb5ddd09b0e659d84b75e" }, "require": { - "backpack/crud": "^6.0" + "backpack/crud": "^7.0" }, "require-dev": { - "orchestra/testbench": "~5|~6", - "phpunit/phpunit": "~9.0" + "orchestra/testbench": "^5|^6|^7|^8|^9|^10", + "phpunit/phpunit": "^9.0|^10.0|^11.0" }, "type": "library", "extra": { @@ -596,33 +701,33 @@ "Laravel" ], "support": { - "source": "https://github.com/Laravel-Backpack/editable-columns/tree/3.0.11", + "source": "https://github.com/Laravel-Backpack/editable-columns/tree/3.1.0", "issues": "https://github.com/Laravel-Backpack/editable-columns/issues" }, - "time": "2024-11-22T14:47:51+00:00" + "time": "2025-11-19T12:18:15+00:00" }, { "name": "backpack/filemanager", - "version": "3.0.10", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/FileManager.git", - "reference": "25b5c97084b8a2af67d822c376066e4f4fdb8e85" + "reference": "bcf6c2df66c5c9a06c318056de9a4310d3f25672" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/FileManager/zipball/25b5c97084b8a2af67d822c376066e4f4fdb8e85", - "reference": "25b5c97084b8a2af67d822c376066e4f4fdb8e85", + "url": "https://api.github.com/repos/Laravel-Backpack/FileManager/zipball/bcf6c2df66c5c9a06c318056de9a4310d3f25672", + "reference": "bcf6c2df66c5c9a06c318056de9a4310d3f25672", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^7.0", "barryvdh/laravel-elfinder": "^0.5.2" }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^8", - "phpunit/phpunit": "^10.0" + "orchestra/testbench": "^8|^9|^10|^11", + "phpunit/phpunit": "^10.0|^11.0" }, "type": "library", "extra": { @@ -656,26 +761,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/FileManager/issues", - "source": "https://github.com/Laravel-Backpack/FileManager/tree/3.0.10" + "source": "https://github.com/Laravel-Backpack/FileManager/tree/4.0.0" }, - "time": "2024-11-18T13:11:07+00:00" + "time": "2025-11-20T12:14:06+00:00" }, { "name": "backpack/language-switcher", - "version": "2.0.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/language-switcher.git", - "reference": "8ec99a55a27c38f7b54ac0f58628d481911d7d86" + "reference": "e9471cc6aef9144830e656d4f87754746969fd4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/language-switcher/zipball/8ec99a55a27c38f7b54ac0f58628d481911d7d86", - "reference": "8ec99a55a27c38f7b54ac0f58628d481911d7d86", + "url": "https://api.github.com/repos/Laravel-Backpack/language-switcher/zipball/e9471cc6aef9144830e656d4f87754746969fd4b", + "reference": "e9471cc6aef9144830e656d4f87754746969fd4b", "shasum": "" }, "require": { - "backpack/crud": "^6.7", + "backpack/crud": "^6.0|^7.0", "outhebox/blade-flags": "^1.2" }, "require-dev": { @@ -722,26 +827,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/language-switcher/issues", - "source": "https://github.com/Laravel-Backpack/language-switcher/tree/2.0.1" + "source": "https://github.com/Laravel-Backpack/language-switcher/tree/2.1.0" }, - "time": "2025-03-10T13:24:04+00:00" + "time": "2025-11-19T12:27:12+00:00" }, { "name": "backpack/logmanager", - "version": "5.0.3", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/LogManager.git", - "reference": "76420b8d6e61d6a6aeb8a57d1e4022e14d6bd168" + "reference": "59650cc174d7ea2add1163da5eae5c22bfd63e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/LogManager/zipball/76420b8d6e61d6a6aeb8a57d1e4022e14d6bd168", - "reference": "76420b8d6e61d6a6aeb8a57d1e4022e14d6bd168", + "url": "https://api.github.com/repos/Laravel-Backpack/LogManager/zipball/59650cc174d7ea2add1163da5eae5c22bfd63e0c", + "reference": "59650cc174d7ea2add1163da5eae5c22bfd63e0c", "shasum": "" }, "require": { - "backpack/crud": "^6.0" + "backpack/crud": "^6.0|^7.0" }, "type": "library", "extra": { @@ -779,31 +884,32 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/LogManager/issues", - "source": "https://github.com/Laravel-Backpack/LogManager/tree/5.0.3" + "source": "https://github.com/Laravel-Backpack/LogManager/tree/5.1.0" }, - "time": "2025-05-19T09:34:44+00:00" + "time": "2025-11-19T07:19:24+00:00" }, { "name": "backpack/medialibrary-uploaders", - "version": "1.2.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/medialibrary-uploaders.git", - "reference": "267e1a26d03b7272e8d0c6fd963adf59ecad79ae" + "reference": "0c214a1256cf8879895e34abb9c1bd4a1910d927" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/medialibrary-uploaders/zipball/267e1a26d03b7272e8d0c6fd963adf59ecad79ae", - "reference": "267e1a26d03b7272e8d0c6fd963adf59ecad79ae", + "url": "https://api.github.com/repos/Laravel-Backpack/medialibrary-uploaders/zipball/0c214a1256cf8879895e34abb9c1bd4a1910d927", + "reference": "0c214a1256cf8879895e34abb9c1bd4a1910d927", "shasum": "" }, "require": { - "backpack/crud": "^6.0", - "spatie/laravel-medialibrary": "^10.7|^11.3" + "backpack/crud": "^7.0", + "spatie/laravel-medialibrary": "^10.7||^11.3" }, "require-dev": { - "orchestra/testbench": "~6|^8.0", - "phpunit/phpunit": "^9.0|^10.0" + "orchestra/testbench": "^10.0", + "phpunit/phpunit": "^11.0", + "spatie/laravel-translatable": "^6.0" }, "type": "library", "extra": { @@ -840,26 +946,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/medialibrary-uploaders/issues", - "source": "https://github.com/Laravel-Backpack/medialibrary-uploaders/tree/1.2.1" + "source": "https://github.com/Laravel-Backpack/medialibrary-uploaders/tree/2.0.0" }, - "time": "2024-10-04T15:12:40+00:00" + "time": "2025-11-19T16:55:14+00:00" }, { "name": "backpack/menucrud", - "version": "v4.0.2", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/MenuCRUD.git", - "reference": "0a47da951119d93019ff86d15e9629b2640e7f6c" + "reference": "944bb95d30869ae3bcf83231975f7414c8a51dc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/MenuCRUD/zipball/0a47da951119d93019ff86d15e9629b2640e7f6c", - "reference": "0a47da951119d93019ff86d15e9629b2640e7f6c", + "url": "https://api.github.com/repos/Laravel-Backpack/MenuCRUD/zipball/944bb95d30869ae3bcf83231975f7414c8a51dc7", + "reference": "944bb95d30869ae3bcf83231975f7414c8a51dc7", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^6.0|^7.0", "backpack/pagemanager": "^3.2" }, "require-dev": { @@ -902,28 +1008,28 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/MenuCRUD/issues", - "source": "https://github.com/Laravel-Backpack/MenuCRUD/tree/v4.0.2" + "source": "https://github.com/Laravel-Backpack/MenuCRUD/tree/v4.1.0" }, - "time": "2024-09-04T14:00:13+00:00" + "time": "2025-11-19T07:16:17+00:00" }, { "name": "backpack/newscrud", - "version": "5.1.1", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/NewsCRUD.git", - "reference": "f573b0cc082d2f56767fbdd273d7d73ea740def3" + "reference": "088ac339c59f674ed486e235a8014ed6dde5d026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/NewsCRUD/zipball/f573b0cc082d2f56767fbdd273d7d73ea740def3", - "reference": "f573b0cc082d2f56767fbdd273d7d73ea740def3", + "url": "https://api.github.com/repos/Laravel-Backpack/NewsCRUD/zipball/088ac339c59f674ed486e235a8014ed6dde5d026", + "reference": "088ac339c59f674ed486e235a8014ed6dde5d026", "shasum": "" }, "require": { - "backpack/crud": "^6.0", - "backpack/pro": "^2.0", - "cviebrock/eloquent-sluggable": "^12.0||^11.0||^10.0" + "backpack/crud": "^6.0|^7.0", + "backpack/pro": "^2.0|^3.0", + "cviebrock/eloquent-sluggable": "^10.0|^11.0|^12.0" }, "require-dev": { "phpunit/phpunit": "^11.0||^10.0||^9.0||^7.0", @@ -966,26 +1072,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/NewsCRUD/issues", - "source": "https://github.com/Laravel-Backpack/NewsCRUD/tree/5.1.1" + "source": "https://github.com/Laravel-Backpack/NewsCRUD/tree/5.2.0" }, - "time": "2025-03-05T11:10:52+00:00" + "time": "2025-11-19T07:07:28+00:00" }, { "name": "backpack/pagemanager", - "version": "3.3.4", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/PageManager.git", - "reference": "f9e737b61197ccf73e5accd179fc113b5296f26e" + "reference": "ab9a85a94fde60cbb5a8ae65da6a2229c2a44f15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/PageManager/zipball/f9e737b61197ccf73e5accd179fc113b5296f26e", - "reference": "f9e737b61197ccf73e5accd179fc113b5296f26e", + "url": "https://api.github.com/repos/Laravel-Backpack/PageManager/zipball/ab9a85a94fde60cbb5a8ae65da6a2229c2a44f15", + "reference": "ab9a85a94fde60cbb5a8ae65da6a2229c2a44f15", "shasum": "" }, "require": { - "backpack/crud": "^4.0||^5.0||^6.0", + "backpack/crud": "^4.0||^5.0||^6.0||^7.0", "cviebrock/eloquent-sluggable": "^12.0||^11.0||^10.0||^9.0||^8.0||^7.0||^6.0||4.8" }, "require-dev": { @@ -1038,26 +1144,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/PageManager/issues", - "source": "https://github.com/Laravel-Backpack/PageManager/tree/3.3.4" + "source": "https://github.com/Laravel-Backpack/PageManager/tree/3.4.0" }, - "time": "2025-09-16T09:13:48+00:00" + "time": "2025-11-19T07:14:27+00:00" }, { "name": "backpack/pan-panel", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/pan-panel.git", - "reference": "53b976280a0a9e49f6e251aedbec38413257be28" + "reference": "f8c2dae81c79d6d364382eb96a2929fc1c2764e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/pan-panel/zipball/53b976280a0a9e49f6e251aedbec38413257be28", - "reference": "53b976280a0a9e49f6e251aedbec38413257be28", + "url": "https://api.github.com/repos/Laravel-Backpack/pan-panel/zipball/f8c2dae81c79d6d364382eb96a2929fc1c2764e1", + "reference": "f8c2dae81c79d6d364382eb96a2929fc1c2764e1", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^6.0|^7.0", "panphp/pan": "^0.1.7" }, "type": "library", @@ -1085,26 +1191,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/pan-panel/issues", - "source": "https://github.com/Laravel-Backpack/pan-panel/tree/1.0.1" + "source": "https://github.com/Laravel-Backpack/pan-panel/tree/1.1.0" }, - "time": "2024-10-31T18:45:54+00:00" + "time": "2025-11-19T06:02:31+00:00" }, { "name": "backpack/permissionmanager", - "version": "7.2.2", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/PermissionManager.git", - "reference": "311d65b3378ac0610b29bf39d0d664ee5d761863" + "reference": "74fd7f7c31ebf08d2dee7940d8fbebff99c69a7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/PermissionManager/zipball/311d65b3378ac0610b29bf39d0d664ee5d761863", - "reference": "311d65b3378ac0610b29bf39d0d664ee5d761863", + "url": "https://api.github.com/repos/Laravel-Backpack/PermissionManager/zipball/74fd7f7c31ebf08d2dee7940d8fbebff99c69a7a", + "reference": "74fd7f7c31ebf08d2dee7940d8fbebff99c69a7a", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^6.0||^7.0", "spatie/laravel-permission": "^6.4||^5.0||^4.0||^3.0" }, "type": "library", @@ -1155,30 +1261,32 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/PermissionManager/issues", - "source": "https://github.com/Laravel-Backpack/PermissionManager/tree/7.2.2" + "source": "https://github.com/Laravel-Backpack/PermissionManager/tree/7.3.0" }, - "time": "2025-09-16T09:15:02+00:00" + "time": "2025-11-19T14:58:17+00:00" }, { "name": "backpack/pro", - "version": "2.2.36", + "version": "3.0.0", "source": { "type": "git", "url": "git@github.com:Laravel-Backpack/PRO.git", - "reference": "186e2a2af10e3825cc34e014b07f9d8254a13104" + "reference": "82aeb52e1f76ab65aa3535d12e2cc4b32cd8065a" }, "dist": { "type": "zip", - "url": "https://repo.backpackforlaravel.com/dist/backpack/pro/backpack-pro-186e2a2af10e3825cc34e014b07f9d8254a13104-zip-c97a25.zip", - "reference": "186e2a2af10e3825cc34e014b07f9d8254a13104", - "shasum": "0b985c0821698379ccbdbaad79128ec4130cfb5a" + "url": "https://repo.backpackforlaravel.com/dist/backpack/pro/backpack-pro-82aeb52e1f76ab65aa3535d12e2cc4b32cd8065a-zip-d344fa.zip", + "reference": "82aeb52e1f76ab65aa3535d12e2cc4b32cd8065a", + "shasum": "30a9412773f58440a7642aead659150d704b8a26" }, "require": { - "backpack/crud": "^6.0.1" + "backpack/crud": "^7.0" }, "require-dev": { - "orchestra/testbench": "~5|~6", - "phpunit/phpunit": "~9.0" + "backpack/medialibrary-uploaders": "dev-next as 1.0", + "orchestra/testbench": "^8.0|^9.0|^10.0", + "phpunit/phpunit": "^10.0|^11.0", + "spatie/laravel-translatable": "^6.0" }, "type": "library", "extra": { @@ -1195,7 +1303,9 @@ }, "autoload-dev": { "psr-4": { - "Backpack\\Pro\\Tests\\": "tests" + "Backpack\\Pro\\Tests\\": "tests", + "Backpack\\CRUD\\Tests\\": "vendor/backpack/crud/tests", + "Backpack\\MediaLibraryUploaders\\Tests\\": "vendor/backpack/medialibrary-uploaders/tests" } }, "scripts": { @@ -1223,27 +1333,27 @@ "Pro" ], "support": { - "source": "https://github.com/Laravel-Backpack/PRO/tree/2.2.36", + "source": "https://github.com/Laravel-Backpack/PRO/tree/3.0.0", "issues": "https://github.com/Laravel-Backpack/PRO/issues" }, - "time": "2025-08-25T14:21:54+00:00" + "time": "2025-11-20T22:10:24+00:00" }, { "name": "backpack/revise-operation", - "version": "2.0.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/revise-operation.git", - "reference": "9262bf239733dd19ccd550bd12e6408819f3404d" + "reference": "b09cfa4ecf9cf60be6defdb1423fcadc71163c16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/revise-operation/zipball/9262bf239733dd19ccd550bd12e6408819f3404d", - "reference": "9262bf239733dd19ccd550bd12e6408819f3404d", + "url": "https://api.github.com/repos/Laravel-Backpack/revise-operation/zipball/b09cfa4ecf9cf60be6defdb1423fcadc71163c16", + "reference": "b09cfa4ecf9cf60be6defdb1423fcadc71163c16", "shasum": "" }, "require": { - "backpack/crud": "^6.0", + "backpack/crud": "^6.0|^7.0", "venturecraft/revisionable": "1.*" }, "type": "library", @@ -1288,26 +1398,26 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/revise-operation/issues", - "source": "https://github.com/Laravel-Backpack/revise-operation/tree/2.0.1" + "source": "https://github.com/Laravel-Backpack/revise-operation/tree/2.1.0" }, - "time": "2025-02-20T11:12:33+00:00" + "time": "2025-11-19T06:14:36+00:00" }, { "name": "backpack/settings", - "version": "3.1.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/Settings.git", - "reference": "4e2d60f14fea96769ed46d1a7926e03d320570fa" + "reference": "433455866c72dacd9c6ecba4d19c19e087002e95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/Settings/zipball/4e2d60f14fea96769ed46d1a7926e03d320570fa", - "reference": "4e2d60f14fea96769ed46d1a7926e03d320570fa", + "url": "https://api.github.com/repos/Laravel-Backpack/Settings/zipball/433455866c72dacd9c6ecba4d19c19e087002e95", + "reference": "433455866c72dacd9c6ecba4d19c19e087002e95", "shasum": "" }, "require": { - "backpack/crud": "^4.0|^5.0|^6.0" + "backpack/crud": "^4.0|^5.0|^6.0|^7.0" }, "require-dev": { "phpunit/phpunit": "^11.0|^10.0|^9.0|^7.0", @@ -1356,30 +1466,30 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/Settings/issues", - "source": "https://github.com/Laravel-Backpack/Settings/tree/3.1.3" + "source": "https://github.com/Laravel-Backpack/Settings/tree/3.2.0" }, - "time": "2025-09-16T09:03:27+00:00" + "time": "2025-11-19T06:10:19+00:00" }, { "name": "backpack/theme-coreuiv2", - "version": "1.2.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/theme-coreuiv2.git", - "reference": "7140e4d3423b658f925185cb18f844e1edee69d6" + "reference": "e3b27b31e00e3e660c653f399be3e23dd61aacc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/theme-coreuiv2/zipball/7140e4d3423b658f925185cb18f844e1edee69d6", - "reference": "7140e4d3423b658f925185cb18f844e1edee69d6", + "url": "https://api.github.com/repos/Laravel-Backpack/theme-coreuiv2/zipball/e3b27b31e00e3e660c653f399be3e23dd61aacc9", + "reference": "e3b27b31e00e3e660c653f399be3e23dd61aacc9", "shasum": "" }, "require": { - "backpack/crud": "^6.2.1" + "backpack/crud": "^7.0" }, "require-dev": { - "orchestra/testbench": "~5|~6", - "phpunit/phpunit": "~9.0" + "orchestra/testbench": "^8||^9||^10||^11", + "phpunit/phpunit": "^10.0|^11.0" }, "type": "library", "extra": { @@ -1416,30 +1526,30 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/theme-coreuiv2/issues", - "source": "https://github.com/Laravel-Backpack/theme-coreuiv2/tree/1.2.8" + "source": "https://github.com/Laravel-Backpack/theme-coreuiv2/tree/2.0.0" }, - "time": "2025-04-01T18:25:58+00:00" + "time": "2025-11-20T12:21:35+00:00" }, { "name": "backpack/theme-coreuiv4", - "version": "1.1.6", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/theme-coreuiv4.git", - "reference": "8da4facc75e2a1e23516d73a85c2b67add259b8d" + "reference": "87b028e484083c7db1dd597aaa8a13a58131d719" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/theme-coreuiv4/zipball/8da4facc75e2a1e23516d73a85c2b67add259b8d", - "reference": "8da4facc75e2a1e23516d73a85c2b67add259b8d", + "url": "https://api.github.com/repos/Laravel-Backpack/theme-coreuiv4/zipball/87b028e484083c7db1dd597aaa8a13a58131d719", + "reference": "87b028e484083c7db1dd597aaa8a13a58131d719", "shasum": "" }, "require": { - "backpack/crud": "^6.2.1" + "backpack/crud": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "~5|~6", - "phpunit/phpunit": "~9.0" + "orchestra/testbench": "^8||^9||^10||^11", + "phpunit/phpunit": "^10.0|^11.0" }, "type": "library", "extra": { @@ -1486,30 +1596,30 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/theme-coreuiv4/issues", - "source": "https://github.com/Laravel-Backpack/theme-coreuiv4/tree/1.1.6" + "source": "https://github.com/Laravel-Backpack/theme-coreuiv4/tree/1.2.0" }, - "time": "2025-04-01T18:25:00+00:00" + "time": "2025-11-19T12:43:57+00:00" }, { "name": "backpack/theme-tabler", - "version": "1.2.18", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/theme-tabler.git", - "reference": "d262931f4ef16a54a3c33cbdeacefd3a17b56ea9" + "reference": "cad096012c02bdca202c86257d48825008e2fd09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/theme-tabler/zipball/d262931f4ef16a54a3c33cbdeacefd3a17b56ea9", - "reference": "d262931f4ef16a54a3c33cbdeacefd3a17b56ea9", + "url": "https://api.github.com/repos/Laravel-Backpack/theme-tabler/zipball/cad096012c02bdca202c86257d48825008e2fd09", + "reference": "cad096012c02bdca202c86257d48825008e2fd09", "shasum": "" }, "require": { - "backpack/crud": "^6.2.1" + "backpack/crud": "^7.0" }, "require-dev": { - "orchestra/testbench": "~5|~6", - "phpunit/phpunit": "~9.0" + "orchestra/testbench": "^8||^9||^10||^11", + "phpunit/phpunit": "^10.0|^11.0" }, "type": "library", "extra": { @@ -1559,26 +1669,68 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/theme-tabler/issues", - "source": "https://github.com/Laravel-Backpack/theme-tabler/tree/1.2.18" + "source": "https://github.com/Laravel-Backpack/theme-tabler/tree/2.0.0" }, - "time": "2025-04-01T18:24:02+00:00" + "time": "2025-11-20T15:45:39+00:00" + }, + { + "name": "backpack/tinymce-field", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Backpack/tinymce-field.git", + "reference": "2ef71c15468c201543f7ab2eb46d3f9a0b3f66cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Backpack/tinymce-field/zipball/2ef71c15468c201543f7ab2eb46d3f9a0b3f66cf", + "reference": "2ef71c15468c201543f7ab2eb46d3f9a0b3f66cf", + "shasum": "" + }, + "require": { + "backpack/crud": "^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Backpack\\TinyMCEField\\BackpackTinyMCEFieldProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Backpack\\TinyMCEField\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "description": "TinyMCE field for Backpack", + "keywords": [ + "backpack", + "laravel" + ], + "support": { + "issues": "https://github.com/Laravel-Backpack/tinymce-field/issues", + "source": "https://github.com/Laravel-Backpack/tinymce-field/tree/1.0.0" + }, + "time": "2025-11-19T12:04:36+00:00" }, { "name": "backpack/translation-manager", - "version": "1.0.7", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/translation-manager.git", - "reference": "33fc5a9de3216e7535cedac1ae1456079807427f" + "reference": "ff1bbba23169e8387310891cb3529b69faaa7989" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/translation-manager/zipball/33fc5a9de3216e7535cedac1ae1456079807427f", - "reference": "33fc5a9de3216e7535cedac1ae1456079807427f", + "url": "https://api.github.com/repos/Laravel-Backpack/translation-manager/zipball/ff1bbba23169e8387310891cb3529b69faaa7989", + "reference": "ff1bbba23169e8387310891cb3529b69faaa7989", "shasum": "" }, "require": { - "backpack/crud": "^6.7", + "backpack/crud": "^6.7|^7.0", "calebporzio/sushi": "^2.4", "outhebox/blade-flags": "^1.2", "spatie/laravel-translation-loader": "^2.8" @@ -1628,9 +1780,9 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/translation-manager/issues", - "source": "https://github.com/Laravel-Backpack/translation-manager/tree/1.0.7" + "source": "https://github.com/Laravel-Backpack/translation-manager/tree/1.1.0" }, - "time": "2025-03-10T10:48:28+00:00" + "time": "2025-11-19T06:07:26+00:00" }, { "name": "balping/json-raw-encoder", @@ -2345,29 +2497,32 @@ }, { "name": "cviebrock/eloquent-sluggable", - "version": "11.0.1", + "version": "12.0.0", "source": { "type": "git", "url": "https://github.com/cviebrock/eloquent-sluggable.git", - "reference": "a4281cf0284a21efc1031a065b112ddd6c826eea" + "reference": "50d0c8a508cb5d6193ff6668518930ba8ec8ef24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/a4281cf0284a21efc1031a065b112ddd6c826eea", - "reference": "a4281cf0284a21efc1031a065b112ddd6c826eea", + "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/50d0c8a508cb5d6193ff6668518930ba8ec8ef24", + "reference": "50d0c8a508cb5d6193ff6668518930ba8ec8ef24", "shasum": "" }, "require": { "cocur/slugify": "^4.3", - "illuminate/config": "^11.0", - "illuminate/database": "^11.0", - "illuminate/support": "^11.0", + "illuminate/config": "^12.0", + "illuminate/database": "^12.0", + "illuminate/support": "^12.0", "php": "^8.2" }, "require-dev": { + "friendsofphp/php-cs-fixer": "^3.65", + "larastan/larastan": "^3.0", "mockery/mockery": "^1.4.4", - "orchestra/testbench": "^9.0", - "pestphp/pest": "^2.28" + "orchestra/testbench": "^10.0", + "pestphp/pest": "^3.7", + "phpstan/phpstan": "^2.0" }, "type": "library", "extra": { @@ -2375,9 +2530,6 @@ "providers": [ "Cviebrock\\EloquentSluggable\\ServiceProvider" ] - }, - "branch-alias": { - "dev-master": "11.0.x-dev" } }, "autoload": { @@ -2401,13 +2553,12 @@ "eloquent", "eloquent-sluggable", "laravel", - "lumen", "slug", "sluggable" ], "support": { "issues": "https://github.com/cviebrock/eloquent-sluggable/issues", - "source": "https://github.com/cviebrock/eloquent-sluggable/tree/11.0.1" + "source": "https://github.com/cviebrock/eloquent-sluggable/tree/12.0.0" }, "funding": [ { @@ -2415,7 +2566,7 @@ "type": "github" } ], - "time": "2024-11-29T01:32:17+00:00" + "time": "2025-02-26T22:53:32+00:00" }, { "name": "dflydev/dot-access-data", @@ -3635,20 +3786,20 @@ }, { "name": "laravel/framework", - "version": "v11.46.1", + "version": "v12.39.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "5fd457f807570a962a53b403b1346efe4cc80bb8" + "reference": "1a6176129ef28eaf42b6b4a6250025120c3d8dac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/5fd457f807570a962a53b403b1346efe4cc80bb8", - "reference": "5fd457f807570a962a53b403b1346efe4cc80bb8", + "url": "https://api.github.com/repos/laravel/framework/zipball/1a6176129ef28eaf42b6b4a6250025120c3d8dac", + "reference": "1a6176129ef28eaf42b6b4a6250025120c3d8dac", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12|^0.13|^0.14", + "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", @@ -3663,32 +3814,34 @@ "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", "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" @@ -3720,6 +3873,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", @@ -3752,17 +3906,18 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.16.1", - "pda/pheanstalk": "^5.0.6", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^10.7.0", + "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", - "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" + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", + "predis/predis": "^2.3|^3.0", + "resend/resend-php": "^0.10.0|^1.0", + "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).", @@ -3777,7 +3932,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).", @@ -3788,22 +3943,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)." + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.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": { @@ -3846,7 +4001,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-09-30T14:51:32+00:00" + "time": "2025-11-18T15:16:10+00:00" }, { "name": "laravel/legacy-factories", @@ -4524,33 +4679,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "f625804987a0a9112d954f9209d91fec52182344" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/f625804987a0a9112d954f9209d91fec52182344", + "reference": "f625804987a0a9112d954f9209d91fec52182344", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.6", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", "league/uri-components": "Needed to easily manipulate URI objects components", + "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -4578,6 +4738,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -4590,9 +4751,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -4602,7 +4765,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.6.0" }, "funding": [ { @@ -4610,26 +4773,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2025-11-18T12:17:23+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "ccbfb51c0445298e7e0b7f4481b942f589665368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/ccbfb51c0445298e7e0b7f4481b942f589665368", + "reference": "ccbfb51c0445298e7e0b7f4481b942f589665368", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -4637,6 +4799,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -4661,7 +4824,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -4686,7 +4849,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.6.0" }, "funding": [ { @@ -4694,7 +4857,7 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2025-11-18T12:17:23+00:00" }, { "name": "maennchen/zipstream-php", @@ -5340,31 +5503,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.3.2", + "version": "v2.3.3", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "eb61920a53057a7debd718a5b89c2178032b52c0" + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/eb61920a53057a7debd718a5b89c2178032b52c0", - "reference": "eb61920a53057a7debd718a5b89c2178032b52c0", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.3.4" + "symfony/console": "^7.3.6" }, "require-dev": { "illuminate/console": "^11.46.1", "laravel/pint": "^1.25.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.4", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3", "phpstan/phpstan": "^1.12.32", "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.3.4", + "symfony/var-dumper": "^7.3.5", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -5407,7 +5570,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.2" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3" }, "funding": [ { @@ -5423,7 +5586,7 @@ "type": "github" } ], - "time": "2025-10-18T11:10:27+00:00" + "time": "2025-11-20T02:34:59+00:00" }, { "name": "outhebox/blade-flags", @@ -7228,16 +7391,16 @@ }, { "name": "spatie/laravel-medialibrary", - "version": "11.17.4", + "version": "11.17.5", "source": { "type": "git", "url": "https://github.com/spatie/laravel-medialibrary.git", - "reference": "b6f8d70862b02058904dd7674820ea2cc0cf65d2" + "reference": "eef29bbc701d786f2f6233ca4c40deb61282ac36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/b6f8d70862b02058904dd7674820ea2cc0cf65d2", - "reference": "b6f8d70862b02058904dd7674820ea2cc0cf65d2", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/eef29bbc701d786f2f6233ca4c40deb61282ac36", + "reference": "eef29bbc701d786f2f6233ca4c40deb61282ac36", "shasum": "" }, "require": { @@ -7322,7 +7485,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-medialibrary/issues", - "source": "https://github.com/spatie/laravel-medialibrary/tree/11.17.4" + "source": "https://github.com/spatie/laravel-medialibrary/tree/11.17.5" }, "funding": [ { @@ -7334,7 +7497,7 @@ "type": "github" } ], - "time": "2025-11-12T14:19:45+00:00" + "time": "2025-11-13T11:36:18+00:00" }, { "name": "spatie/laravel-package-tools", @@ -9415,6 +9578,166 @@ ], "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.33.0", @@ -10449,20 +10772,20 @@ "packages-dev": [ { "name": "backpack/generators", - "version": "v4.0.7", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/Generators.git", - "reference": "cd193adfe75573ff59033e473bbb2e2574a05f61" + "reference": "b126a5b38035a1fb5ef803dff3c776311f9f2222" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/Generators/zipball/cd193adfe75573ff59033e473bbb2e2574a05f61", - "reference": "cd193adfe75573ff59033e473bbb2e2574a05f61", + "url": "https://api.github.com/repos/Laravel-Backpack/Generators/zipball/b126a5b38035a1fb5ef803dff3c776311f9f2222", + "reference": "b126a5b38035a1fb5ef803dff3c776311f9f2222", "shasum": "" }, "require": { - "backpack/crud": "^6.0" + "backpack/crud": "^7.0" }, "type": "library", "extra": { @@ -10509,30 +10832,30 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/Generators/issues", - "source": "https://github.com/Laravel-Backpack/Generators/tree/v4.0.7" + "source": "https://github.com/Laravel-Backpack/Generators/tree/v4.1.0" }, - "time": "2024-10-15T10:41:40+00:00" + "time": "2025-11-19T06:32:49+00:00" }, { "name": "barryvdh/laravel-debugbar", - "version": "v3.16.0", + "version": "v3.16.1", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23" + "reference": "21b2c6fce05453efd4bceb34f9fddaa1cdb44090" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/f265cf5e38577d42311f1a90d619bcd3740bea23", - "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/21b2c6fce05453efd4bceb34f9fddaa1cdb44090", + "reference": "21b2c6fce05453efd4bceb34f9fddaa1cdb44090", "shasum": "" }, "require": { - "illuminate/routing": "^9|^10|^11|^12", - "illuminate/session": "^9|^10|^11|^12", - "illuminate/support": "^9|^10|^11|^12", + "illuminate/routing": "^10|^11|^12", + "illuminate/session": "^10|^11|^12", + "illuminate/support": "^10|^11|^12", "php": "^8.1", - "php-debugbar/php-debugbar": "~2.2.0", + "php-debugbar/php-debugbar": "^2.2.4", "symfony/finder": "^6|^7" }, "require-dev": { @@ -10584,7 +10907,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.0" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.1" }, "funding": [ { @@ -10596,7 +10919,7 @@ "type": "github" } ], - "time": "2025-07-14T11:56:43+00:00" + "time": "2025-11-19T08:31:25+00:00" }, { "name": "fakerphp/faker", @@ -12668,16 +12991,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -12706,7 +13029,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -12714,7 +13037,7 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], @@ -12726,5 +13049,5 @@ "php": "^8.2" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/config/backpack/theme-tabler.php b/config/backpack/theme-tabler.php new file mode 100644 index 000000000..7ef981ca5 --- /dev/null +++ b/config/backpack/theme-tabler.php @@ -0,0 +1,178 @@ + 'horizontal', + + /** + * Pick a login page layout. + * Possible values: default, illustration, cover. + */ + 'auth_layout' => 'default', // default, illustration, cover + + /** + * Here you can easily load your own extra css styles. + * Note: if you want to customize the style to create your own custom skin colors: + * - make a copy of the file "vendor/backpack/theme-tabler/resources/assets/css/colors.css" into your project + * - adjust colors variables as you wish + * - replace "base_path('vendor/backpack/theme-tabler/resources/assets/css/backpack-color-palette.css')," with the path to the file created above + * - boom! + */ + 'styles' => [ + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/backpack-color-palette.css'), + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/glass.css'), + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/vertical-lines-background.css'), + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/pinstripe-background.css'), + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/paper-background.css'), + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/dotted-background.css'), + base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/fuzzy-background.css'), + ], + + /** + * 2nd Layer of customization. + * + * If you need to further customize the way your panel looks, + * these options will help you achieve that. + */ + 'options' => [ + /** + * The available color modes. + */ + 'colorModes' => [ + 'system' => 'la-desktop', + 'light' => 'la-sun', + 'dark' => 'la-moon', + ], + + /** + * The color mode used by default. + */ + 'defaultColorMode' => 'system', // system, light, dark + + /** + * When true, a switch is displayed to let admins choose their favorite theme mode. + * When false, the theme will only use the "defaultColorMode" set above. + * In case "defaultColorMode" is null, system is the default. + */ + 'showColorModeSwitcher' => true, + + /** + * Fix the top-header component (present in "vertical_transparent") and the menu when the layout type is set as "horizontal". + * This value is skipped when the layout type is horizontal-overlap, using false as default. + */ + 'useStickyHeader' => false, + + /** + * When true, the content area will take the whole screen width. + */ + 'useFluidContainers' => true, + + /** + * When true, the sidebar content for vertical layouts will not scroll with the rest of the content. + */ + 'sidebarFixed' => false, + + /** + * When true, horizontal layouts will display the classic top bar on top to free some space when multiple nav items are used. + */ + 'doubleTopBarInHorizontalLayouts' => false, + + /** + * When true, the password input will have a toggle button to show/hide the password. + */ + 'showPasswordVisibilityToggler' => false, + ], + + /** + * 3rd Layer of customization. + * + * In case the first two steps were not enough, here you have full control over + * the classes that make up the look of your panel. + */ + 'classes' => [ + /** + * Use this to pass classes to the HTML element, on all pages. + */ + 'body' => null, + + /** + * For background colors use: + * bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info, bg-blue, bg-light-blue, + * bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white. + * + * For links to be visible on different background colors use: "navbar-dark", "navbar-light". + */ + 'topHeader' => null, + + /** + * Applies only for Vertical Menu Layout + * For standard sidebar look (transparent): + * - Remove "navbar-dark/light" + * - Remove "navbar-light/dark" from 'classes.topHeader' and instead use "bg-light" + * You can also add a background class like bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, + * bg-info, bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan. + */ + 'sidebar' => null, + + /** + * Used in the top container menu when the layout is of horizontal type. + */ + 'menuHorizontalContainer' => null, + + /** + * Used in the top menu content when the layout is of horizontal type. + */ + 'menuHorizontalContent' => null, + + /** + * Make transparent with footer-transparent. + * Hide it with d-none. + * + * Change background color with bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info, + * bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white. + */ + 'footer' => null, + + /** + * Use this to pass classes to the table displayed in List Operation + * It defaults to: "table table-striped table-hover nowrap rounded card-table table-vcenter card-table shadow-xs border-xs". + */ + 'table' => null, + + /** + * Use this to pass classes to the table wrapper component displayed in List Operation. + */ + 'tableWrapper' => null, + ], + +/** + * 4th Layer of customization. + * + * Alright, if nothing so far met your need, then you still have an easy way to build + * a custom layout using the already existing components of this theme. + * + * 1. Create a new blade file in resources/views/layouts/your-custom-layout.blade.php + * 2. Replace the value of layout on this file with "your-custom-layout" + * 3. Customize the blade and place components such as sidebar, header, top-bar, where you need them! + */ +]; diff --git a/config/backup.php b/config/backup.php index 108c64c40..ecfa24ffb 100644 --- a/config/backup.php +++ b/config/backup.php @@ -122,6 +122,31 @@ 'database_dump_file_extension' => '', 'destination' => [ + /* + * The compression algorithm to be used for creating the zip archive. + * + * If backing up only database, you may choose gzip compression for db dump and no compression at zip. + * + * Some common algorithms are listed below: + * ZipArchive::CM_STORE (no compression at all; set 0 as compression level) + * ZipArchive::CM_DEFAULT + * ZipArchive::CM_DEFLATE + * ZipArchive::CM_BZIP2 + * ZipArchive::CM_XZ + * + * For more check https://www.php.net/manual/zip.constants.php and confirm it's supported by your system. + */ + 'compression_method' => ZipArchive::CM_DEFAULT, + + /* + * The compression level corresponding to the used algorithm; an integer between 0 and 9. + * + * Check supported levels for the chosen algorithm, usually 1 means the fastest and weakest compression, + * while 9 the slowest and strongest one. + * + * Setting of 0 for some algorithms may switch to the strongest compression. + */ + 'compression_level' => 9, /* * The filename prefix used for the backup zip file. @@ -167,19 +192,19 @@ 'notifications' => [ 'notifications' => [ - \Spatie\Backup\Notifications\Notifications\BackupHasFailedNotification::class => [], - \Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFoundNotification::class => [], - \Spatie\Backup\Notifications\Notifications\CleanupHasFailedNotification::class => [], - \Spatie\Backup\Notifications\Notifications\BackupWasSuccessfulNotification::class => [], - \Spatie\Backup\Notifications\Notifications\HealthyBackupWasFoundNotification::class => [], - \Spatie\Backup\Notifications\Notifications\CleanupWasSuccessfulNotification::class => [], + Spatie\Backup\Notifications\Notifications\BackupHasFailedNotification::class => [], + Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFoundNotification::class => [], + Spatie\Backup\Notifications\Notifications\CleanupHasFailedNotification::class => [], + Spatie\Backup\Notifications\Notifications\BackupWasSuccessfulNotification::class => [], + Spatie\Backup\Notifications\Notifications\HealthyBackupWasFoundNotification::class => [], + Spatie\Backup\Notifications\Notifications\CleanupWasSuccessfulNotification::class => [], ], /* * Here you can specify the notifiable to which the notifications should be sent. The default * notifiable will use the variables specified in this config file. */ - 'notifiable' => \Spatie\Backup\Notifications\Notifiable::class, + 'notifiable' => Spatie\Backup\Notifications\Notifiable::class, 'mail' => [ 'to' => 'your@example.com', @@ -207,9 +232,9 @@ 'discord' => [ 'webhook_url' => '', - 'username' => null, + 'username' => '', - 'avatar_url' => null, + 'avatar_url' => '', ], ], @@ -223,8 +248,8 @@ 'name' => env('APP_NAME', 'laravel-backup'), 'disks' => ['local'], 'health_checks' => [ - \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1, - \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000, + Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1, + Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000, ], ], @@ -250,7 +275,7 @@ * No matter how you configure it the default strategy will never * delete the newest backup. */ - 'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class, + 'strategy' => Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class, 'default_strategy' => [ diff --git a/database/seeders/PermissionManagerTablesSeeder.php b/database/seeders/PermissionManagerTablesSeeder.php index dc7a2b9e6..fcbf4153f 100644 --- a/database/seeders/PermissionManagerTablesSeeder.php +++ b/database/seeders/PermissionManagerTablesSeeder.php @@ -28,6 +28,46 @@ class PermissionManagerTablesSeeder extends Seeder 'backups' => [1], ]; + /** + * Disable foreign key checks based on database driver. + */ + protected function disableForeignKeyChecks() + { + $driver = DB::getDriverName(); + + switch ($driver) { + case 'mysql': + DB::statement('SET FOREIGN_KEY_CHECKS=0;'); + break; + case 'sqlite': + DB::statement('PRAGMA foreign_keys=OFF;'); + break; + case 'pgsql': + // PostgreSQL doesn't have a global setting, would need to defer constraints + break; + } + } + + /** + * Enable foreign key checks based on database driver. + */ + protected function enableForeignKeyChecks() + { + $driver = DB::getDriverName(); + + switch ($driver) { + case 'mysql': + DB::statement('SET FOREIGN_KEY_CHECKS=1;'); + break; + case 'sqlite': + DB::statement('PRAGMA foreign_keys=ON;'); + break; + case 'pgsql': + // PostgreSQL doesn't have a global setting, would need to defer constraints + break; + } + } + /** * Run the database seeds. * @@ -35,14 +75,14 @@ class PermissionManagerTablesSeeder extends Seeder */ public function run() { - DB::statement('SET FOREIGN_KEY_CHECKS=0;'); + $this->disableForeignKeyChecks(); DB::table(Config::get('permission.table_names.model_has_roles'))->truncate(); DB::table(Config::get('permission.table_names.role_has_permissions'))->truncate(); Permission::truncate(); Role::truncate(); - DB::statement('SET FOREIGN_KEY_CHECKS=1;'); + $this->enableForeignKeyChecks(); foreach ($this->roles as $role) { Role::create(['name' => $role, 'guard_name' => 'web']); diff --git a/public/.htaccess b/public/.htaccess index 903f6392c..aaa0d2ca9 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,20 +1,25 @@ - Options -MultiViews + Options -MultiViews -Indexes RewriteEngine On + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # 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 - RewriteRule ^(.*)/$ /$1 [L,R=301] + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] - # Handle Front Controller... + # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] - - # Handle Authorization Header - RewriteCond %{HTTP:Authorization} . - RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - + \ No newline at end of file diff --git a/public/screenshots/login_teaser.jpg b/public/screenshots/login_teaser.jpg new file mode 100644 index 000000000..756a648ab Binary files /dev/null and b/public/screenshots/login_teaser.jpg differ diff --git a/public/screenshots/tabler_horizontal_dark_layout.jpg b/public/screenshots/tabler_horizontal_dark_layout.jpg new file mode 100644 index 000000000..338b6cdaa Binary files /dev/null and b/public/screenshots/tabler_horizontal_dark_layout.jpg differ diff --git a/public/screenshots/tabler_horizontal_layout.jpg b/public/screenshots/tabler_horizontal_layout.jpg new file mode 100644 index 000000000..cc1e53b77 Binary files /dev/null and b/public/screenshots/tabler_horizontal_layout.jpg differ diff --git a/public/screenshots/tabler_horizontal_overlap_layout.jpg b/public/screenshots/tabler_horizontal_overlap_layout.jpg new file mode 100644 index 000000000..c932ae3b0 Binary files /dev/null and b/public/screenshots/tabler_horizontal_overlap_layout.jpg differ diff --git a/public/screenshots/tabler_right_vertical_dark_layout.jpg b/public/screenshots/tabler_right_vertical_dark_layout.jpg new file mode 100644 index 000000000..9b1ce2032 Binary files /dev/null and b/public/screenshots/tabler_right_vertical_dark_layout.jpg differ diff --git a/public/screenshots/tabler_right_vertical_layout.jpg b/public/screenshots/tabler_right_vertical_layout.jpg new file mode 100644 index 000000000..e14201897 Binary files /dev/null and b/public/screenshots/tabler_right_vertical_layout.jpg differ diff --git a/public/screenshots/tabler_right_vertical_transparent_layout.jpg b/public/screenshots/tabler_right_vertical_transparent_layout.jpg new file mode 100644 index 000000000..f59464c13 Binary files /dev/null and b/public/screenshots/tabler_right_vertical_transparent_layout.jpg differ diff --git a/public/screenshots/tabler_vertical_dark_layout.jpg b/public/screenshots/tabler_vertical_dark_layout.jpg new file mode 100644 index 000000000..759cf2d8b Binary files /dev/null and b/public/screenshots/tabler_vertical_dark_layout.jpg differ diff --git a/public/screenshots/tabler_vertical_layout.jpg b/public/screenshots/tabler_vertical_layout.jpg new file mode 100644 index 000000000..24d969cf0 Binary files /dev/null and b/public/screenshots/tabler_vertical_layout.jpg differ diff --git a/public/screenshots/tabler_vertical_transparent_layout.jpg b/public/screenshots/tabler_vertical_transparent_layout.jpg new file mode 100644 index 000000000..3dcee67dd Binary files /dev/null and b/public/screenshots/tabler_vertical_transparent_layout.jpg differ diff --git a/public/screenshots/theme-coreuiv2.jpg b/public/screenshots/theme-coreuiv2.jpg new file mode 100644 index 000000000..6182fc605 Binary files /dev/null and b/public/screenshots/theme-coreuiv2.jpg differ diff --git a/public/screenshots/theme-coreuiv4.jpg b/public/screenshots/theme-coreuiv4.jpg new file mode 100644 index 000000000..8e14800a5 Binary files /dev/null and b/public/screenshots/theme-coreuiv4.jpg differ diff --git a/public/screenshots/theme-tabler.jpg b/public/screenshots/theme-tabler.jpg new file mode 100644 index 000000000..4574d8798 Binary files /dev/null and b/public/screenshots/theme-tabler.jpg differ diff --git a/resources/views/admin/new-in-v7.blade.php b/resources/views/admin/new-in-v7.blade.php new file mode 100644 index 000000000..d702a27c8 --- /dev/null +++ b/resources/views/admin/new-in-v7.blade.php @@ -0,0 +1,146 @@ +@extends(backpack_view('blank')) + +@php + // Add the form widget to the 'after_content' section of the widgets array + $widgets['after_content'][] = [ + 'type' => 'div', + 'class' => 'row', + 'content' => [ // widgets + [ + 'type' => 'dataform', + 'wrapper' => [ + 'class' => 'col-md-12 mt-3', + ], + 'controller' => \App\Http\Controllers\Admin\PetShop\SkillCrudController::class, + 'formOperation' => 'update', + 'entry' => \App\Models\PetShop\Skill::find(1), + 'content' => [ + 'header' => 'Edit Skill (TODO: move this to the right place on page)', // optional + 'body' => 'This form should make it easy to update an existing skill.

', // optional + ], + ] + ] + ]; + + $widgets['after_content'][] = [ + 'type' => 'view', + 'view' => 'backpack.theme-tabler::inc.commercial', + 'wrapper' => [ + 'class' => 'mt-3', + ], + ]; +@endphp + +@section('content') + + +
+
+
Views
+

Chips

+

Include more information about an Eloquent model, in a small space. Hover over the headings + to understand more about the examples.

+
+
+
+ + See docs + +
+
+
+ +@include('admin.partials.chip-examples') + + +
+
+
Components
+

Datagrid

+

Show the most important info about an Eloquent entry, anywhere you want.

+
+
+
+ + See docs + +
+
+
+ +@include('admin.partials.datagrid-examples') + + +
+
+
Components
+

Datalist

+

Show the most important info about an Eloquent entry, anywhere you want.

+
+
+
+ + See docs + +
+
+
+ +@include('admin.partials.datalist-examples') + + +
+
+
Components
+

Datatable

+

Include your complex datatable, anywhere you want.

+
+
+
+ + See docs + +
+
+
+ +@include('admin.partials.datatable-examples') + + +
+
+
Components
+

Dataform

+

Show a form for an Eloquent entry, anywhere you want.

+
+
+
+ + See docs + +
+
+
+ + +@include('admin.partials.dataform-examples') + + +
+
+
Components
+

Dataform Modal

+

Show a form for an Eloquent entry, in a modal.

+
+
+
+ + See docs + +
+
+
+ +@include('admin.partials.dataform-modal-examples') + +@endsection diff --git a/resources/views/admin/partials/chip-examples.blade.php b/resources/views/admin/partials/chip-examples.blade.php new file mode 100644 index 000000000..4d2e16015 --- /dev/null +++ b/resources/views/admin/partials/chip-examples.blade.php @@ -0,0 +1,250 @@ +@php + $user = \App\User::inRandomOrder()->first(); + $invoices = \App\Models\PetShop\Invoice::inRandomOrder()->take(3)->get(); + $products = \App\Models\Product::inRandomOrder()->take(3)->get(); + $owners = \App\Models\PetShop\Owner::inRandomOrder()->take(3)->get(); +@endphp + +
+ +
+ +
+
+ + {{-- Example of General chip for a person, with hardcoded complete data --}} + @include('crud::chips.general', [ + 'heading' => [ + 'content' => 'John Doe', + 'href' => 'https://google.com', + 'target' => '_blank', + 'title' => 'Example of a chip without URL', + ], + 'image' => [ + 'content' => asset('uploads/person1.jpg'), + 'element' => 'a', + 'href' => 'https://chatgpt.com', + 'target' => '_blank', + 'title' => 'Image can have its own URL, but why?! Falls back to the one in the heading', + ], + 'details' => [ + [ + 'icon' => 'la la-hashtag', + 'content' => '8AH13A7', + 'url' => 'mailto:john.doe@example.com', + 'title' => 'Click to email', + ], + [ + 'icon' => 'la la-envelope', + 'content' => 'john.doe@example.com', + 'url' => 'mailto:john.doe@example.com', + 'title' => 'Click to email', + ], + [ + 'icon' => 'la la-phone', + 'content' => '+1 (555) 123-4567', + 'url' => 'tel:+15551234567', + 'title' => 'Click to call', + ] + ] + ]) + +
+
+ +
+ +
+ +
+
+ + {{-- Example of General chip for a person, with hardcoded data, missing URL and image --}} + @include('crud::chips.general', [ + 'heading' => [ + 'content' => 'Adam Mancinello', + 'title' => 'Example of a chip without URL or image', + 'element' => 'span', // can be a span, a div, or an anchor + ], + 'details' => [ + [ + 'icon' => 'la la-hashtag', + 'content' => '8AH13A7', + 'url' => 'mailto:adam.mancinello@example.com', + 'title' => 'Click to email', + ], + [ + 'icon' => 'la la-envelope', + 'content' => 'adam.mancinello@example.com', + 'url' => 'mailto:adam.mancinello@example.com', + 'title' => 'Click to email', + ], + [ + 'icon' => 'la la-phone', + 'content' => '+1 (555) 123-4567', + 'url' => 'tel:+15551234567', + 'title' => 'Click to call', + ] + ] + ]) + +
+
+ +
+ + +
+ +
+
+ + {{-- Example of General chip for a person, with data from Eloquent model --}} + @include('crud::chips.general', [ + 'heading' => [ + 'content' => $user->name, + 'href' => backpack_url('user/'.$user->id.'/show'), + 'title' => 'Click to preview', + ], + 'image' => [ + 'content' => backpack_avatar_url($user), // doesn't work well with dummy data + 'element' => 'a', + 'href' => backpack_url('user/'.$user->id.'/show'), + 'title' => 'Because of dummy data, this image is not available, but it would show a profile image', + ], + 'details' => [ + [ + 'icon' => 'la la-hashtag', + 'content' => $user->id, + 'url' => backpack_url('user/'.$user->id.'/show'), + 'title' => 'Click to preview', + ], + [ + 'icon' => 'la la-envelope', + 'content' => $user->email, + 'url' => 'mailto:'.$user->email, + 'title' => 'Click to email', + ], + [ + 'icon' => 'la la-calendar', + 'content' => $user->created_at->format('F j, Y'), + 'title' => 'Created at '.$user->created_at, + ] + ] + ]) + +
+
+ +
+ +
+ +
+
+

Works well for people - in this demo, the most obvious example is pet owners:

+
+
+ +
+ + @foreach ($owners as $owner) + +
+ +
+
+ + {{-- Example of General chip for a person, with data from Eloquent model --}} + @include('crud::chips.owner', ['entry' => $owner]) + +
+
+ +
+ + @endforeach +
+ +
+
+

But it's particularly useful for entities where the name alone can't identify an entity, eg. Invoice:

+
+
+ + +
+ + @foreach ($invoices as $invoice) + +
+ +
+
+ + {{-- Example of General chip for a person, with data from Eloquent model --}} + @include('crud::chips.invoice', ['entry' => $invoice]) + +
+
+ +
+ + @endforeach +
+ + +
+
+

Or entities that can sometimes have duplicated names, like Products:

+
+
+ +
+ + @foreach ($products as $product) + +
+ +
+
+ + {{-- Example of General chip for a person, with data from Eloquent model --}} + @include('crud::chips.general', [ + 'heading' => [ + 'content' => $product->name, + 'href' => backpack_url('product/'.$product->id.'/show'), + 'title' => 'Click to preview', + ], + 'details' => [ + [ + 'icon' => 'la la-dollar', + 'content' => $product->price, + 'title' => 'Priced at $'.$product->price, + ], + [ + 'icon' => 'la la-tag', + 'content' => $product->category->name, + 'url' => backpack_url('category/'.$product->category->id.'/show'), + 'title' => 'Product category: '.$product->category->name, + ], + [ + 'icon' => 'la la-tag', + 'content' => $product->status, + 'title' => 'Product status: '.$product->status->value, + ], + [ + 'icon' => 'la la-traffic-light', + 'content' => $product->condition, + 'title' => 'Production condition: '.$product->condition, + ] + ] + ]) + +
+
+ +
+ + @endforeach +
diff --git a/resources/views/admin/partials/dataform-examples.blade.php b/resources/views/admin/partials/dataform-examples.blade.php new file mode 100644 index 000000000..f0638e516 --- /dev/null +++ b/resources/views/admin/partials/dataform-examples.blade.php @@ -0,0 +1,90 @@ +
+
+
+
+

+ Create Invoice + + +

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

+ Quick Add Tag (With Extra Field) + + +

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

+ Quick Edit Tag +

+
+
+ + + +
+
+
+ +
diff --git a/resources/views/admin/partials/dataform-modal-examples.blade.php b/resources/views/admin/partials/dataform-modal-examples.blade.php new file mode 100644 index 000000000..03903b23a --- /dev/null +++ b/resources/views/admin/partials/dataform-modal-examples.blade.php @@ -0,0 +1,69 @@ +
+
+
+
+

+ Quickly Add/Edit Invoices + + Showing latest invoices in a custom table, with buttons to create or edit an invoice in a modal form. +

+
+ + @php + $newestInvoices = \App\Models\Petshop\Invoice::orderBy('updated_at')->take(5)->get(); + @endphp + +
+ + + + + + + + + + + + @foreach ($newestInvoices as $invoice) + + + + + + + + + @endforeach + +
ActionsInvoiceCustomerTotalCreated
+ Edit + + + + + + {{ $invoice->series.' '.$invoice->number }} + + {{ $invoice->owner->name }}${{ number_format($invoice->total, 0) }}{{ $invoice->created_at->diffForHumans() }}
+
+ +

+ Didn't find what you're looking for? + + + Create a new invoice + +

+ + + +
+
+
+
diff --git a/resources/views/admin/partials/datagrid-examples.blade.php b/resources/views/admin/partials/datagrid-examples.blade.php new file mode 100644 index 000000000..773dbce64 --- /dev/null +++ b/resources/views/admin/partials/datagrid-examples.blade.php @@ -0,0 +1,131 @@ +
+ +
+
+
+

+ Random Pet + + +

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

+ Random Owner + + +

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

+ First User + + +

+ +
+
+ +
+
+
+
diff --git a/resources/views/admin/partials/datalist-examples.blade.php b/resources/views/admin/partials/datalist-examples.blade.php new file mode 100644 index 000000000..f25f4bfd2 --- /dev/null +++ b/resources/views/admin/partials/datalist-examples.blade.php @@ -0,0 +1,133 @@ +
+ +
+
+
+

+ Random Pet + + +

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

+ Random Owner + + +

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

+ First User + + +

+ +
+
+ +
+
+
+
diff --git a/resources/views/admin/partials/datatable-examples.blade.php b/resources/views/admin/partials/datatable-examples.blade.php new file mode 100644 index 000000000..1270d6a2b --- /dev/null +++ b/resources/views/admin/partials/datatable-examples.blade.php @@ -0,0 +1,41 @@ +
+
+
+
+

+ Invoices + Showing all invoices in the DB, pulling the entire setup from InvoiceCrudController. +

+ +
+
+ + + +
+
+
+
diff --git a/resources/views/vendor/backpack/crud/chips/invoice.blade.php b/resources/views/vendor/backpack/crud/chips/invoice.blade.php new file mode 100644 index 000000000..da3345372 --- /dev/null +++ b/resources/views/vendor/backpack/crud/chips/invoice.blade.php @@ -0,0 +1,22 @@ +@include('crud::chips.general', [ + 'heading' => [ + 'content' => 'Invoice '.$entry->series.' '.$entry->number.' - '.$entry->owner->name, + 'href' => backpack_url('pet-shop/invoice/'.$entry->id.'/show'), + ], + 'details' => [ + [ + 'icon' => 'la la-dollar', + 'content' => $entry->total, + 'title' => 'Total invoice amount $'.$entry->total, + ], + [ + 'icon' => 'la la-tags', + 'content' => $entry->items->count().' items', + ], + [ + 'icon' => 'la la-calendar', + 'content' => $entry->issuance_date->format('F j, Y'), + 'title' => 'Issuance date: '.$entry->issuance_date, + ] + ] +]) diff --git a/resources/views/vendor/backpack/crud/chips/owner.blade.php b/resources/views/vendor/backpack/crud/chips/owner.blade.php new file mode 100644 index 000000000..eca85bc99 --- /dev/null +++ b/resources/views/vendor/backpack/crud/chips/owner.blade.php @@ -0,0 +1,30 @@ +@php + $last_purchase = $entry->invoices()->orderBy('issuance_date', 'DESC')->first()->issuance_date; +@endphp + +@include('crud::chips.general', [ + 'heading' => [ + 'content' => $entry->name, + 'href' => backpack_url('pet-shop/owner/'.$entry->id.'/show'), + ], + 'image' => [ + 'content' => asset($entry->avatar->url), + ], + 'details' => [ + [ + 'icon' => 'la la-dog', + 'content' => $entry->pets->count().' pets', + 'title' => 'Number of pets: '.$entry->pets->count(), + ], + [ + 'icon' => 'la la-shopping-cart', + 'content' => $entry->invoices->count(). ' purchases', + 'title' => 'Number of purchases: '.$entry->invoices->count(), + ], + [ + 'icon' => 'la la-calendar', + 'content' => $last_purchase->format('F j, Y'), + 'title' => 'Last purchase: '.$last_purchase, + ] + ] +]) diff --git a/resources/views/vendor/backpack/theme-coreuiv2/dashboard.blade.php b/resources/views/vendor/backpack/theme-coreuiv2/dashboard.blade.php index 72bc894de..bad2e42cf 100644 --- a/resources/views/vendor/backpack/theme-coreuiv2/dashboard.blade.php +++ b/resources/views/vendor/backpack/theme-coreuiv2/dashboard.blade.php @@ -236,6 +236,23 @@ @endphp @section('content') +
+
+
+
+ + + +
+
+
+
+ {{-- In case widgets have been added to a 'content' group, show those widgets. --}} @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('group', 'content')->toArray() ]) @endsection diff --git a/resources/views/vendor/backpack/theme-coreuiv2/inc/topbar_right_content.blade.php b/resources/views/vendor/backpack/theme-coreuiv2/inc/topbar_right_content.blade.php index 94f88bfe0..72bb093e7 100644 --- a/resources/views/vendor/backpack/theme-coreuiv2/inc/topbar_right_content.blade.php +++ b/resources/views/vendor/backpack/theme-coreuiv2/inc/topbar_right_content.blade.php @@ -1,138 +1,44 @@ -@include('backpack.language-switcher::language-switcher') +@push('after_scripts') + +@endpush + +@include('backpack.language-switcher::language-switcher') diff --git a/resources/views/vendor/backpack/theme-coreuiv4/dashboard.blade.php b/resources/views/vendor/backpack/theme-coreuiv4/dashboard.blade.php index baf4f702c..86390e92c 100644 --- a/resources/views/vendor/backpack/theme-coreuiv4/dashboard.blade.php +++ b/resources/views/vendor/backpack/theme-coreuiv4/dashboard.blade.php @@ -236,6 +236,23 @@ @endphp @section('content') +
+
+
+
+ + + +
+
+
+
+ {{-- In case widgets have been added to a 'content' group, show those widgets. --}} @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('group', 'content')->toArray() ]) @endsection diff --git a/resources/views/vendor/backpack/theme-coreuiv4/inc/topbar_right_content.blade.php b/resources/views/vendor/backpack/theme-coreuiv4/inc/topbar_right_content.blade.php index 76c7018cb..1786c160c 100644 --- a/resources/views/vendor/backpack/theme-coreuiv4/inc/topbar_right_content.blade.php +++ b/resources/views/vendor/backpack/theme-coreuiv4/inc/topbar_right_content.blade.php @@ -1,136 +1,44 @@ -@include('backpack.language-switcher::language-switcher') +@push('after_scripts') + +@endpush + +@include('backpack.language-switcher::language-switcher') diff --git a/resources/views/vendor/backpack/theme-tabler/dashboard.blade.php b/resources/views/vendor/backpack/theme-tabler/dashboard.blade.php index 2952fb5cd..7f6eeb79a 100644 --- a/resources/views/vendor/backpack/theme-tabler/dashboard.blade.php +++ b/resources/views/vendor/backpack/theme-tabler/dashboard.blade.php @@ -35,7 +35,7 @@ // notice we use Widget::make() to add widgets as content (not in a group) Widget::make() ->type('progress') - ->class('card mb-3') + ->class('card mb-1') ->statusBorder('start') // start|top|bottom ->accentColor('success') // primary|secondary|warning|danger|info ->ribbon(['top', 'la-user']) // ['top|right|bottom'] @@ -48,7 +48,7 @@ // but we need to use onlyHere() or remove() at the end Widget::add() ->type('progress') - ->class('card mb-3') + ->class('card mb-1') ->statusBorder('start') // start|top|bottom ->accentColor('danger') // primary|secondary|warning|danger|info ->ribbon(['top', 'la-bell']) // ['top|right|bottom'] @@ -63,7 +63,7 @@ Widget::make() ->group('hidden') ->type('progress') - ->class('card mb-3') + ->class('card mb-1') ->statusBorder('start') // start|top|bottom ->accentColor('info') // primary|secondary|warning|danger|info ->ribbon(['top', 'la-star']) // ['top|right|bottom'] @@ -76,7 +76,7 @@ // if you prefer defining your widgets as arrays Widget::make([ 'type' => 'progress', - 'class'=> 'card mb-3', + 'class'=> 'card mb-1', 'statusBorder' => 'start', // start|top|bottom 'accentColor' => 'warning', // primary|secondary|warning|danger|info 'ribbon' => ['top', 'la-lock'], // ['top|right|left|bottom', 'la-xxx'] @@ -151,7 +151,7 @@ 'close_button' => true, // show close button or not ]; - $widgets['before_content'][] = [ + $widgets['after_content'][] = [ 'type' => 'div', 'class' => 'row', 'content' => [ // widgets @@ -186,7 +186,7 @@ [ 'type' => 'chart', - 'wrapperClass' => 'col-md-4 mb-3', + 'wrapperClass' => 'col-md-4 mt-3 mb-3', // 'class' => 'col-md-6', 'controller' => \App\Http\Controllers\Admin\Charts\Pies\ChartjsPieController::class, 'content' => [ @@ -196,7 +196,7 @@ ], [ 'type' => 'chart', - 'wrapperClass' => 'col-md-4 mb-3', + 'wrapperClass' => 'col-md-4 mt-3 mb-3', // 'class' => 'col-md-6', 'controller' => \App\Http\Controllers\Admin\Charts\Pies\EchartsPieController::class, 'content' => [ @@ -206,7 +206,7 @@ ], [ 'type' => 'chart', - 'wrapperClass' => 'col-md-4 mb-3', + 'wrapperClass' => 'col-md-4 mt-3 mb-3', // 'class' => 'col-md-6', 'controller' => \App\Http\Controllers\Admin\Charts\Pies\HighchartsPieController::class, 'content' => [ @@ -263,14 +263,13 @@ 'header' => 'Line Chart - Frappe', // optional // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.

', // optional ] - ], - - + ] ] ]; @endphp @section('content') + {{-- In case widgets have been added to a 'content' group, show those widgets. --}} @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('group', 'content')->toArray() ]) @endsection diff --git a/resources/views/vendor/backpack/theme-tabler/inc/commercial.blade.php b/resources/views/vendor/backpack/theme-tabler/inc/commercial.blade.php new file mode 100644 index 000000000..8bd5d1b90 --- /dev/null +++ b/resources/views/vendor/backpack/theme-tabler/inc/commercial.blade.php @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
Help us polish Backpack v7 public beta
+

If you find any problems, let us know in a discussion on Github.

+
+ +
+
+
+
+
diff --git a/resources/views/vendor/backpack/theme-tabler/inc/topbar_right_content.blade.php b/resources/views/vendor/backpack/theme-tabler/inc/topbar_right_content.blade.php index f19ac46a5..bd1bf335f 100644 --- a/resources/views/vendor/backpack/theme-tabler/inc/topbar_right_content.blade.php +++ b/resources/views/vendor/backpack/theme-tabler/inc/topbar_right_content.blade.php @@ -1,6 +1,6 @@ @@ -16,171 +16,270 @@