diff --git a/.editorconfig b/.editorconfig old mode 100644 new mode 100755 diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php old mode 100644 new mode 100755 diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php new file mode 100644 index 0000000..7aeb177 --- /dev/null +++ b/app/Http/Controllers/ProjectController.php @@ -0,0 +1,92 @@ +currentTeam; + $projects = $team->projects()->latest()->paginate(10); + return view('projects.index', compact('projects')); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('projects.create'); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $validated = $request->validate([ + 'title' => 'required|string|max:255', + ]); + + $project = Auth::user()->currentTeam->projects()->create($validated); + + return redirect()->route('projects.show', $project) + ->with('success', 'Project created successfully.'); + } + + /** + * Display the specified resource. + */ + public function show(Project $project) + { + Gate::authorize('view', $project); + return view('projects.show', compact('project')); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Project $project) + { + Gate::authorize('update', $project); + return view('projects.edit', compact('project')); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Project $project) + { + Gate::authorize('update', $project); + + $validated = $request->validate([ + 'title' => 'required|string|max:255', + ]); + + $project->update($validated); + + return redirect()->route('projects.show', $project) + ->with('success', 'Project updated successfully.'); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Project $project) + { + Gate::authorize('delete', $project); + + $project->delete(); + + return redirect()->route('projects.index') + ->with('success', 'Project deleted successfully.'); + } +} diff --git a/app/Http/Controllers/TeamController.php b/app/Http/Controllers/TeamController.php old mode 100644 new mode 100755 index e4eb513..5ebb308 --- a/app/Http/Controllers/TeamController.php +++ b/app/Http/Controllers/TeamController.php @@ -20,7 +20,7 @@ public function setCurrent(SetCurrentTeamRequest $request, Team $team) public function edit(Request $request) { return view('team.edit', [ - 'team' => $request->user()->currentTeam + 'team' => $request->user()->currentTeam, ]); } diff --git a/app/Http/Controllers/TeamInviteController.php b/app/Http/Controllers/TeamInviteController.php old mode 100644 new mode 100755 index ecfc211..fc44717 --- a/app/Http/Controllers/TeamInviteController.php +++ b/app/Http/Controllers/TeamInviteController.php @@ -16,7 +16,7 @@ public function store(TeamInviteStoreRequest $request, Team $team) { $invite = $team->invites()->create([ 'email' => $request->email, - 'token' => str()->random(30) + 'token' => str()->random(30), ]); Mail::to($request->email)->send(new TeamInvitation($invite)); diff --git a/app/Http/Controllers/TeamMemberController.php b/app/Http/Controllers/TeamMemberController.php old mode 100644 new mode 100755 index 7af94de..946d31b --- a/app/Http/Controllers/TeamMemberController.php +++ b/app/Http/Controllers/TeamMemberController.php @@ -6,7 +6,6 @@ use App\Http\Requests\TeamMemberUpdateRequest; use App\Models\Team; use App\Models\User; -use Illuminate\Http\Request; class TeamMemberController extends Controller { diff --git a/app/Http/Middleware/TeamsPermission.php b/app/Http/Middleware/TeamsPermission.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/SetCurrentTeamRequest.php b/app/Http/Requests/SetCurrentTeamRequest.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/TeamInviteDestroyRequest.php b/app/Http/Requests/TeamInviteDestroyRequest.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/TeamInviteStoreRequest.php b/app/Http/Requests/TeamInviteStoreRequest.php old mode 100644 new mode 100755 index db5d2ca..9a9ab33 --- a/app/Http/Requests/TeamInviteStoreRequest.php +++ b/app/Http/Requests/TeamInviteStoreRequest.php @@ -29,8 +29,8 @@ public function rules(): array 'email', 'max:255', Rule::unique(TeamInvite::class, 'email') - ->where('team_id', $this->team->id) - ] + ->where('team_id', $this->team->id), + ], ]; } } diff --git a/app/Http/Requests/TeamLeaveRequest.php b/app/Http/Requests/TeamLeaveRequest.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/TeamMemberDestroyRequest.php b/app/Http/Requests/TeamMemberDestroyRequest.php old mode 100644 new mode 100755 diff --git a/app/Http/Requests/TeamMemberUpdateRequest.php b/app/Http/Requests/TeamMemberUpdateRequest.php old mode 100644 new mode 100755 index 018a587..c2f79c2 --- a/app/Http/Requests/TeamMemberUpdateRequest.php +++ b/app/Http/Requests/TeamMemberUpdateRequest.php @@ -25,8 +25,8 @@ public function rules(): array return [ 'role' => [ 'nullable', - Rule::exists('roles', 'name') - ] + Rule::exists('roles', 'name'), + ], ]; } } diff --git a/app/Http/Requests/TeamUpdateRequest.php b/app/Http/Requests/TeamUpdateRequest.php old mode 100644 new mode 100755 diff --git a/app/Mail/TeamInvitation.php b/app/Mail/TeamInvitation.php old mode 100644 new mode 100755 index c95baa8..aae7abd --- a/app/Mail/TeamInvitation.php +++ b/app/Mail/TeamInvitation.php @@ -4,7 +4,6 @@ use App\Models\TeamInvite; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; @@ -35,7 +34,7 @@ public function __construct(public TeamInvite $teamInvite) public function envelope(): Envelope { return new Envelope( - subject: 'You have been invited to the ' . $this->teamInvite->team->name . ' team', + subject: 'You have been invited to the '.$this->teamInvite->team->name.' team', ); } diff --git a/app/Models/Project.php b/app/Models/Project.php old mode 100644 new mode 100755 index fa41086..775d09b --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -4,14 +4,57 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; +use App\Models\Team; +use App\Models\Task; class Project extends Model { /** @use HasFactory<\Database\Factories\ProjectFactory> */ use HasFactory; + protected $fillable = [ + 'title', + 'team_id', + 'completion_percentage', + ]; + + protected $casts = [ + 'completion_percentage' => 'decimal:2', + 'uuid' => 'string', + ]; + + protected static function boot() + { + parent::boot(); + + static::creating(function ($model) { + $model->uuid = Str::uuid(); + }); + } + + public function getRouteKeyName() + { + return 'uuid'; + } + public function team() { return $this->belongsTo(Team::class); } + + public function tasks() + { + return $this->hasMany(Task::class); + } + + public function updateCompletionPercentage() + { + $totalTasks = $this->tasks()->count(); + if ($totalTasks > 0) { + $completedTasks = $this->tasks()->where('completed', true)->count(); + $this->completion_percentage = ($completedTasks / $totalTasks) * 100; + $this->save(); + } + } } diff --git a/app/Models/Team.php b/app/Models/Team.php old mode 100644 new mode 100755 index 2895356..2313061 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -4,6 +4,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use App\Models\Project; +use App\Models\User; +use App\Models\TeamInvite; class Team extends Model { @@ -26,4 +29,5 @@ public function projects() { return $this->hasMany(Project::class); } + } diff --git a/app/Models/TeamInvite.php b/app/Models/TeamInvite.php old mode 100644 new mode 100755 diff --git a/app/Models/TeamUser.php b/app/Models/TeamUser.php old mode 100644 new mode 100755 diff --git a/app/Models/User.php b/app/Models/User.php old mode 100644 new mode 100755 index 4822c2c..d38fa3e --- a/app/Models/User.php +++ b/app/Models/User.php @@ -15,6 +15,7 @@ class User extends Authenticatable { /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; + use HasRoles; /** @@ -49,12 +50,14 @@ protected function casts(): array public function profilePhotoUrl() { - return 'https://gravatar.com/avatar/' . md5($this->email) . '?s=100'; + return 'https://gravatar.com/avatar/'.md5($this->email).'?s=100'; } public function teams() { - return $this->belongsToMany(Team::class); + return $this->belongsToMany(Team::class) + ->withPivot('role') + ->withTimestamps(); } public function currentTeam() @@ -73,4 +76,22 @@ public function projects() 'team_id' ); } + + public function belongsToTeam($team): bool + { + return $this->teams()->where('team_id', $team->id)->exists(); + } + + public function hasTeamPermission($team, string $permission): bool + { + if ($this->hasRole('admin')) { + return true; + } + + $teamUser = $this->teams() + ->where('team_id', $team->id) + ->first(); + + return $teamUser && $teamUser->pivot->role === 'admin'; + } } diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php old mode 100644 new mode 100755 diff --git a/app/Policies/ProjectPolicy.php b/app/Policies/ProjectPolicy.php new file mode 100644 index 0000000..44d107a --- /dev/null +++ b/app/Policies/ProjectPolicy.php @@ -0,0 +1,68 @@ +belongsToTeam($project->team); + } + + /** + * Determine whether the user can create models. + */ + public function create(User $user): bool + { + return true; + } + + /** + * Determine whether the user can update the model. + */ + public function update(User $user, Project $project): bool + { + return $user->belongsToTeam($project->team) && + $user->hasTeamPermission($project->team, 'update'); + } + + /** + * Determine whether the user can delete the model. + */ + public function delete(User $user, Project $project): bool + { + return $user->belongsToTeam($project->team) && + $user->hasTeamPermission($project->team, 'delete'); + } + + /** + * Determine whether the user can restore the model. + */ + public function restore(User $user, Project $project): bool + { + return false; + } + + /** + * Determine whether the user can permanently delete the model. + */ + public function forceDelete(User $user, Project $project): bool + { + return false; + } +} diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php old mode 100644 new mode 100755 index cba7770..24809d6 --- a/app/Policies/TeamPolicy.php +++ b/app/Policies/TeamPolicy.php @@ -14,7 +14,7 @@ public function setCurrent(User $user, Team $team) public function update(User $user, Team $team) { - if (!$user->teams->contains($team)) { + if (! $user->teams->contains($team)) { return false; } @@ -23,7 +23,7 @@ public function update(User $user, Team $team) public function leave(User $user, Team $team) { - if (!$user->teams->contains($team)) { + if (! $user->teams->contains($team)) { return false; } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php old mode 100644 new mode 100755 diff --git a/app/View/Components/AppLayout.php b/app/View/Components/AppLayout.php old mode 100644 new mode 100755 diff --git a/app/View/Components/GuestLayout.php b/app/View/Components/GuestLayout.php old mode 100644 new mode 100755 diff --git a/app/helpers.php b/app/helpers.php old mode 100644 new mode 100755 index f282233..0826996 --- a/app/helpers.php +++ b/app/helpers.php @@ -1,7 +1,8 @@ team(); } } diff --git a/bootstrap/app.php b/bootstrap/app.php old mode 100644 new mode 100755 diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore old mode 100644 new mode 100755 diff --git a/bootstrap/providers.php b/bootstrap/providers.php old mode 100644 new mode 100755 diff --git a/composer.json b/composer.json old mode 100644 new mode 100755 index 6ee159c..c463fee --- a/composer.json +++ b/composer.json @@ -7,20 +7,20 @@ "license": "MIT", "require": { "php": "^8.2", - "laravel/framework": "^11.31", - "laravel/tinker": "^2.9", - "spatie/laravel-permission": "^6.10" + "laravel/framework": "^11.33.2", + "laravel/tinker": "^2.10", + "spatie/laravel-permission": "^6.10.1" }, "require-dev": { - "barryvdh/laravel-debugbar": "^3.14", - "fakerphp/faker": "^1.23", - "laravel/breeze": "^2.2", - "laravel/pail": "^1.1", - "laravel/pint": "^1.13", - "laravel/sail": "^1.26", - "mockery/mockery": "^1.6", - "nunomaduro/collision": "^8.1", - "pestphp/pest": "^3.5", + "barryvdh/laravel-debugbar": "^3.14.9", + "fakerphp/faker": "^1.24", + "laravel/breeze": "^2.2.5", + "laravel/pail": "^1.2.1", + "laravel/pint": "^1.18.2", + "laravel/sail": "^1.38", + "mockery/mockery": "^1.6.12", + "nunomaduro/collision": "^8.5", + "pestphp/pest": "^3.5.1", "pestphp/pest-plugin-laravel": "^3.0" }, "autoload": { diff --git a/composer.lock b/composer.lock old mode 100644 new mode 100755 index 53404c3..746044b --- 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": "d9588640044d70bddfcc336a7772e2dd", + "content-hash": "d67e3c64287d371d543e961201cc9e7f", "packages": [ { "name": "brick/math", @@ -445,16 +445,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + "reference": "b115554301161fa21467629f1e1391c1936de517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", + "reference": "b115554301161fa21467629f1e1391c1936de517", "shasum": "" }, "require": { @@ -500,7 +500,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" }, "funding": [ { @@ -508,7 +508,7 @@ "type": "github" } ], - "time": "2023-10-06T06:47:41+00:00" + "time": "2024-12-27T00:36:43+00:00" }, { "name": "fruitcake/php-cors", @@ -1056,23 +1056,23 @@ }, { "name": "laravel/framework", - "version": "v11.33.2", + "version": "v11.36.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "6b9832751cf8eed18b3c73df5071f78f0682aa5d" + "reference": "df06f5163f4550641fdf349ebc04916a61135a64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/6b9832751cf8eed18b3c73df5071f78f0682aa5d", - "reference": "6b9832751cf8eed18b3c73df5071f78f0682aa5d", + "url": "https://api.github.com/repos/laravel/framework/zipball/df06f5163f4550641fdf349ebc04916a61135a64", + "reference": "df06f5163f4550641fdf349ebc04916a61135a64", "shasum": "" }, "require": { "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -1082,35 +1082,37 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "league/commonmark": "^2.6", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.2|^3.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", - "symfony/error-handler": "^7.0", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mailer": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0", - "symfony/routing": "^7.0", - "symfony/uid": "^7.0", - "symfony/var-dumper": "^7.0", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "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", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { "mockery/mockery": "1.6.8", @@ -1160,29 +1162,32 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.23", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "nyholm/psr7": "^1.2", "orchestra/testbench-core": "^9.6", - "pda/pheanstalk": "^5.0", + "pda/pheanstalk": "^5.0.6", + "php-http/discovery": "^1.15", "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.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" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", @@ -1196,16 +1201,16 @@ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "predis/predis": "Required to use the predis connector (^2.3).", "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).", @@ -1224,6 +1229,7 @@ }, "autoload": { "files": [ + "src/Illuminate/Collections/functions.php", "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", @@ -1261,7 +1267,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-19T22:47:13+00:00" + "time": "2024-12-17T22:32:08+00:00" }, { "name": "laravel/prompts", @@ -1324,16 +1330,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "0d8d3d8086984996df86596a86dea60398093a81" + "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", - "reference": "0d8d3d8086984996df86596a86dea60398093a81", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8", "shasum": "" }, "require": { @@ -1381,7 +1387,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-11-19T01:38:44+00:00" + "time": "2024-12-16T15:26:28+00:00" }, { "name": "laravel/tinker", @@ -1451,16 +1457,16 @@ }, { "name": "league/commonmark", - "version": "2.5.3", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + "reference": "d150f911e0079e90ae3c106734c93137c184f932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d150f911e0079e90ae3c106734c93137c184f932", + "reference": "d150f911e0079e90ae3c106734c93137c184f932", "shasum": "" }, "require": { @@ -1485,8 +1491,9 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -1496,7 +1503,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.6-dev" + "dev-main": "2.7-dev" } }, "autoload": { @@ -1553,7 +1560,7 @@ "type": "tidelift" } ], - "time": "2024-08-16T11:46:16+00:00" + "time": "2024-12-07T15:34:16+00:00" }, { "name": "league/config", @@ -1825,18 +1832,192 @@ ], "time": "2024-09-21T08:32:55+00:00" }, + { + "name": "league/uri", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "81fb5145d2644324614cc532b28efd0215bda430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.5", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "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", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "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" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "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" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:18:47+00:00" + }, { "name": "monolog/monolog", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "shasum": "" }, "require": { @@ -1914,7 +2095,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.1" }, "funding": [ { @@ -1926,20 +2107,20 @@ "type": "tidelift" } ], - "time": "2024-11-12T13:57:08+00:00" + "time": "2024-12-05T17:15:07+00:00" }, { "name": "nesbot/carbon", - "version": "3.8.2", + "version": "3.8.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" + "reference": "129700ed449b1f02d70272d2ac802357c8c30c58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", - "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/129700ed449b1f02d70272d2ac802357c8c30c58", + "reference": "129700ed449b1f02d70272d2ac802357c8c30c58", "shasum": "" }, "require": { @@ -1971,10 +2152,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1984,6 +2161,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -2032,7 +2213,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T17:46:48+00:00" + "time": "2024-12-27T09:25:35+00:00" }, { "name": "nette/schema", @@ -2242,31 +2423,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/42c84e4e8090766bbd6445d06cd6e57650626ea3", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.1.5" + "symfony/console": "^7.1.8" }, "require-dev": { - "illuminate/console": "^11.28.0", - "laravel/pint": "^1.18.1", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", "mockery/mockery": "^1.6.12", "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan": "^1.12.11", "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.5", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -2309,7 +2490,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -2325,7 +2506,7 @@ "type": "github" } ], - "time": "2024-10-15T16:15:16+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "phpoption/phpoption", @@ -2816,16 +2997,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.4", + "version": "v0.12.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "shasum": "" }, "require": { @@ -2852,12 +3033,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -2889,9 +3070,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" }, - "time": "2024-06-10T01:18:23+00:00" + "time": "2024-12-10T01:58:33+00:00" }, { "name": "ralouphie/getallheaders", @@ -3147,14 +3328,14 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "6.x-dev", - "dev-master": "6.x-dev" - }, "laravel": { "providers": [ "Spatie\\Permission\\PermissionServiceProvider" ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" } }, "autoload": { @@ -3203,16 +3384,16 @@ }, { "name": "symfony/clock", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d" + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", "shasum": "" }, "require": { @@ -3257,7 +3438,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.6" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { @@ -3273,20 +3454,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/console", - "version": "v7.1.8", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -3350,7 +3531,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.8" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -3366,20 +3547,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -3415,7 +3596,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.6" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -3431,20 +3612,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -3452,12 +3633,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3482,7 +3663,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -3498,20 +3679,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + "reference": "6150b89186573046167796fa5f3f76601d5145f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", + "reference": "6150b89186573046167796fa5f3f76601d5145f8", "shasum": "" }, "require": { @@ -3557,7 +3738,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.7" + "source": "https://github.com/symfony/error-handler/tree/v7.2.1" }, "funding": [ { @@ -3573,20 +3754,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -3637,7 +3818,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -3653,20 +3834,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -3675,12 +3856,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3713,7 +3894,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -3729,20 +3910,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { @@ -3777,7 +3958,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -3793,24 +3974,25 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112" + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4419ec69ccfc3f725a4de7c20e4e57626d10112", - "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, @@ -3854,7 +4036,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.8" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0" }, "funding": [ { @@ -3870,20 +4052,20 @@ "type": "tidelift" } ], - "time": "2024-11-09T09:16:45+00:00" + "time": "2024-11-13T18:58:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.8", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e" + "reference": "d8ae58eecae44c8e66833e76cc50a4ad3c002d97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", - "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d8ae58eecae44c8e66833e76cc50a4ad3c002d97", + "reference": "d8ae58eecae44c8e66833e76cc50a4ad3c002d97", "shasum": "" }, "require": { @@ -3912,7 +4094,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -3940,7 +4122,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -3968,7 +4150,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.8" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.1" }, "funding": [ { @@ -3984,20 +4166,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T14:25:32+00:00" + "time": "2024-12-11T12:09:10+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", "shasum": "" }, "require": { @@ -4006,7 +4188,7 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -4048,7 +4230,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.6" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -4064,20 +4246,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-25T15:21:05+00:00" }, { "name": "symfony/mime", - "version": "v7.1.6", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598" + "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598", + "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", "shasum": "" }, "require": { @@ -4132,7 +4314,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.6" + "source": "https://github.com/symfony/mime/tree/v7.2.1" }, "funding": [ { @@ -4148,7 +4330,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4176,8 +4358,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4252,8 +4434,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4331,8 +4513,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4413,8 +4595,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4497,8 +4679,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4571,8 +4753,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4651,8 +4833,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4733,8 +4915,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4788,16 +4970,16 @@ }, { "name": "symfony/process", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { @@ -4829,7 +5011,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.8" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -4845,20 +5027,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/routing", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { @@ -4910,7 +5092,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.6" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -4926,20 +5108,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -4952,12 +5134,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4993,7 +5175,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -5009,20 +5191,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -5080,7 +5262,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.8" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -5096,24 +5278,25 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:21+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -5174,7 +5357,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -5190,20 +5373,20 @@ "type": "tidelift" } ], - "time": "2024-09-28T12:35:13+00:00" + "time": "2024-11-12T20:47:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -5211,12 +5394,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5252,7 +5435,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -5268,20 +5451,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { @@ -5326,7 +5509,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.6" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -5342,20 +5525,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { @@ -5371,7 +5554,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -5409,7 +5592,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -5425,35 +5608,37 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:46:42+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -5476,9 +5661,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-12-08T13:03:43+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "vlucas/phpdotenv", @@ -5700,16 +5885,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.14.9", + "version": "v3.14.10", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "2e805a6bd4e1aa83774316bb062703c65d0691ef" + "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/2e805a6bd4e1aa83774316bb062703c65d0691ef", - "reference": "2e805a6bd4e1aa83774316bb062703c65d0691ef", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56b9bd235e3fe62e250124804009ce5bab97cc63", + "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63", "shasum": "" }, "require": { @@ -5768,7 +5953,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.9" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.10" }, "funding": [ { @@ -5780,20 +5965,20 @@ "type": "github" } ], - "time": "2024-11-25T14:51:20+00:00" + "time": "2024-12-23T10:10:42+00:00" }, { "name": "brianium/paratest", - "version": "v7.6.0", + "version": "v7.7.0", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "68ff89a8de47d086588e391a516d2a5b5fde6254" + "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/68ff89a8de47d086588e391a516d2a5b5fde6254", - "reference": "68ff89a8de47d086588e391a516d2a5b5fde6254", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4fb3f73bc5a4c3146bac2850af7dc72435a32daf", + "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf", "shasum": "" }, "require": { @@ -5802,26 +5987,26 @@ "ext-reflection": "*", "ext-simplexml": "*", "fidry/cpu-core-counter": "^1.2.0", - "jean85/pretty-package-versions": "^2.0.6", + "jean85/pretty-package-versions": "^2.1.0", "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "phpunit/php-code-coverage": "^11.0.7", + "phpunit/php-code-coverage": "^11.0.8", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-timer": "^7.0.1", - "phpunit/phpunit": "^11.4.1", + "phpunit/phpunit": "^11.5.1", "sebastian/environment": "^7.2.0", - "symfony/console": "^6.4.11 || ^7.1.5", - "symfony/process": "^6.4.8 || ^7.1.5" + "symfony/console": "^6.4.14 || ^7.2.1", + "symfony/process": "^6.4.14 || ^7.2.0" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^1.12.6", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "squizlabs/php_codesniffer": "^3.10.3", - "symfony/filesystem": "^6.4.9 || ^7.1.5" + "phpstan/phpstan": "^2.0.3", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpstan/phpstan-phpunit": "^2.0.1", + "phpstan/phpstan-strict-rules": "^2", + "squizlabs/php_codesniffer": "^3.11.1", + "symfony/filesystem": "^6.4.13 || ^7.2.0" }, "bin": [ "bin/paratest", @@ -5861,7 +6046,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.6.0" + "source": "https://github.com/paratestphp/paratest/tree/v7.7.0" }, "funding": [ { @@ -5873,33 +6058,31 @@ "type": "paypal" } ], - "time": "2024-10-15T12:38:31+00:00" + "time": "2024-12-11T14:50:44+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -5907,7 +6090,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5918,22 +6101,22 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "fakerphp/faker", - "version": "v1.24.0", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "a136842a532bac9ecd8a1c723852b09915d7db50" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/a136842a532bac9ecd8a1c723852b09915d7db50", - "reference": "a136842a532bac9ecd8a1c723852b09915d7db50", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -5981,9 +6164,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.24.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-11-07T15:11:20+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "fidry/cpu-core-counter", @@ -6229,16 +6412,16 @@ }, { "name": "laravel/breeze", - "version": "v2.2.5", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/laravel/breeze.git", - "reference": "e698f651ac55920fd2ee1336c3c6cdd2467ea784" + "reference": "d59702967b9ae21879df905d691a50132966c4ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/breeze/zipball/e698f651ac55920fd2ee1336c3c6cdd2467ea784", - "reference": "e698f651ac55920fd2ee1336c3c6cdd2467ea784", + "url": "https://api.github.com/repos/laravel/breeze/zipball/d59702967b9ae21879df905d691a50132966c4ff", + "reference": "d59702967b9ae21879df905d691a50132966c4ff", "shasum": "" }, "require": { @@ -6250,8 +6433,9 @@ "symfony/console": "^7.0" }, "require-dev": { - "orchestra/testbench": "^9.0", - "phpstan/phpstan": "^1.10" + "laravel/framework": "^11.0", + "orchestra/testbench-core": "^9.0", + "phpstan/phpstan": "^2.0" }, "type": "library", "extra": { @@ -6285,7 +6469,7 @@ "issues": "https://github.com/laravel/breeze/issues", "source": "https://github.com/laravel/breeze" }, - "time": "2024-11-12T14:56:47+00:00" + "time": "2024-12-14T21:21:42+00:00" }, { "name": "laravel/pail", @@ -6323,13 +6507,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - }, "laravel": { "providers": [ "Laravel\\Pail\\PailServiceProvider" ] + }, + "branch-alias": { + "dev-main": "1.x-dev" } }, "autoload": { @@ -6367,16 +6551,16 @@ }, { "name": "laravel/pint", - "version": "v1.18.2", + "version": "v1.18.3", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "f55daaf7eb6c2f49ddf6702fb42e3091c64d8a64" + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/f55daaf7eb6c2f49ddf6702fb42e3091c64d8a64", - "reference": "f55daaf7eb6c2f49ddf6702fb42e3091c64d8a64", + "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", "shasum": "" }, "require": { @@ -6387,13 +6571,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64.0", - "illuminate/view": "^10.48.20", - "larastan/larastan": "^2.9.8", + "friendsofphp/php-cs-fixer": "^3.65.0", + "illuminate/view": "^10.48.24", + "larastan/larastan": "^2.9.11", "laravel-zero/framework": "^10.4.0", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.35.1" + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" }, "bin": [ "builds/pint" @@ -6429,20 +6613,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-11-20T09:33:46+00:00" + "time": "2024-11-26T15:34:00+00:00" }, { "name": "laravel/sail", - "version": "v1.38.0", + "version": "v1.39.1", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "d17abae06661dd6c46d13627b1683a2924259145" + "reference": "1a3c7291bc88de983b66688919a4d298d68ddec7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/d17abae06661dd6c46d13627b1683a2924259145", - "reference": "d17abae06661dd6c46d13627b1683a2924259145", + "url": "https://api.github.com/repos/laravel/sail/zipball/1a3c7291bc88de983b66688919a4d298d68ddec7", + "reference": "1a3c7291bc88de983b66688919a4d298d68ddec7", "shasum": "" }, "require": { @@ -6492,20 +6676,20 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-11-11T20:16:51+00:00" + "time": "2024-11-27T15:42:28+00:00" }, { "name": "maximebf/debugbar", - "version": "v1.23.4", + "version": "v1.23.5", "source": { "type": "git", - "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "0815f47bdd867b816b4bf2ca1c7bd7f89e1527ca" + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0815f47bdd867b816b4bf2ca1c7bd7f89e1527ca", - "reference": "0815f47bdd867b816b4bf2ca1c7bd7f89e1527ca", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", + "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", "shasum": "" }, "require": { @@ -6557,10 +6741,10 @@ "debugbar" ], "support": { - "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.23.4" + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5" }, - "time": "2024-12-05T10:36:51+00:00" + "time": "2024-12-15T19:20:42+00:00" }, { "name": "mockery/mockery", @@ -6804,38 +6988,38 @@ }, { "name": "pestphp/pest", - "version": "v3.5.1", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "179d46ce97d52bcb3f791449ae94025c3f32e3e3" + "reference": "bf3178473dcaa53b0458f21dfdb271306ea62512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/179d46ce97d52bcb3f791449ae94025c3f32e3e3", - "reference": "179d46ce97d52bcb3f791449ae94025c3f32e3e3", + "url": "https://api.github.com/repos/pestphp/pest/zipball/bf3178473dcaa53b0458f21dfdb271306ea62512", + "reference": "bf3178473dcaa53b0458f21dfdb271306ea62512", "shasum": "" }, "require": { - "brianium/paratest": "^7.6.0", + "brianium/paratest": "^7.7.0", "nunomaduro/collision": "^8.5.0", - "nunomaduro/termwind": "^2.2.0", + "nunomaduro/termwind": "^2.3.0", "pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin-arch": "^3.0.0", "pestphp/pest-plugin-mutate": "^3.0.5", "php": "^8.2.0", - "phpunit/phpunit": "^11.4.3" + "phpunit/phpunit": "^11.5.1" }, "conflict": { "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">11.4.3", + "phpunit/phpunit": ">11.5.1", "sebastian/exporter": "<6.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^3.3.0", - "pestphp/pest-plugin-type-coverage": "^3.1.0", - "symfony/process": "^7.1.6" + "pestphp/pest-plugin-type-coverage": "^3.2.0", + "symfony/process": "^7.2.0" }, "bin": [ "bin/pest" @@ -6900,7 +7084,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.5.1" + "source": "https://github.com/pestphp/pest/tree/v3.7.1" }, "funding": [ { @@ -6912,7 +7096,7 @@ "type": "github" } ], - "time": "2024-10-31T16:12:45+00:00" + "time": "2024-12-12T11:52:01+00:00" }, { "name": "pestphp/pest-plugin", @@ -7080,15 +7264,15 @@ }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - }, "pest": { "plugins": [ "Pest\\Laravel\\Plugin" ] + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] } }, "autoload": { @@ -7373,16 +7557,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", "shasum": "" }, "require": { @@ -7431,9 +7615,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" }, - "time": "2024-11-12T11:25:25+00:00" + "time": "2024-12-07T09:39:29+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -7542,16 +7726,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.7", + "version": "11.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca" + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7f08030e8811582cc459871d28d6f5a1a4d35ca", - "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", "shasum": "" }, "require": { @@ -7570,7 +7754,7 @@ "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.4.1" + "phpunit/phpunit": "^11.5.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -7608,7 +7792,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" }, "funding": [ { @@ -7616,7 +7800,7 @@ "type": "github" } ], - "time": "2024-10-09T06:21:38+00:00" + "time": "2024-12-11T12:34:27+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7865,16 +8049,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.4.3", + "version": "11.5.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76" + "reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e8e8ed1854de5d36c088ec1833beae40d2dedd76", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2b94d4f2450b9869fa64a46fd8a6a41997aef56a", + "reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a", "shasum": "" }, "require": { @@ -7884,7 +8068,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", @@ -7895,14 +8079,15 @@ "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.1.1", + "sebastian/comparator": "^6.2.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", - "sebastian/exporter": "^6.1.3", + "sebastian/exporter": "^6.3.0", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.0", - "sebastian/version": "^5.0.2" + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -7913,7 +8098,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.4-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -7945,7 +8130,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.1" }, "funding": [ { @@ -7961,7 +8146,7 @@ "type": "tidelift" } ], - "time": "2024-10-28T13:07:50+00:00" + "time": "2024-12-11T10:52:48+00:00" }, { "name": "sebastian/cli-parser", @@ -8022,23 +8207,23 @@ }, { "name": "sebastian/code-unit", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268" + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { @@ -8067,7 +8252,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" }, "funding": [ { @@ -8075,7 +8260,7 @@ "type": "github" } ], - "time": "2024-07-03T04:44:28+00:00" + "time": "2024-12-12T09:59:06+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -8401,16 +8586,16 @@ }, { "name": "sebastian/exporter", - "version": "6.1.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { @@ -8419,7 +8604,7 @@ "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.2" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -8467,7 +8652,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -8475,7 +8660,7 @@ "type": "github" } ], - "time": "2024-07-03T04:56:19+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", @@ -8886,22 +9071,75 @@ ], "time": "2024-10-09T05:16:32+00:00" }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, { "name": "symfony/yaml", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" + "reference": "099581e99f557e9f16b43c5916c26380b54abb22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -8939,7 +9177,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.6" + "source": "https://github.com/symfony/yaml/tree/v7.2.0" }, "funding": [ { @@ -8955,7 +9193,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/config/app.php b/config/app.php old mode 100644 new mode 100755 diff --git a/config/auth.php b/config/auth.php old mode 100644 new mode 100755 diff --git a/config/cache.php b/config/cache.php old mode 100644 new mode 100755 diff --git a/config/database.php b/config/database.php old mode 100644 new mode 100755 diff --git a/config/filesystems.php b/config/filesystems.php old mode 100644 new mode 100755 diff --git a/config/logging.php b/config/logging.php old mode 100644 new mode 100755 diff --git a/config/mail.php b/config/mail.php old mode 100644 new mode 100755 diff --git a/config/permission.php b/config/permission.php old mode 100644 new mode 100755 diff --git a/config/queue.php b/config/queue.php old mode 100644 new mode 100755 diff --git a/config/services.php b/config/services.php old mode 100644 new mode 100755 diff --git a/config/session.php b/config/session.php old mode 100644 new mode 100755 diff --git a/database/.gitignore b/database/.gitignore old mode 100644 new mode 100755 diff --git a/database/factories/ProjectFactory.php b/database/factories/ProjectFactory.php old mode 100644 new mode 100755 index 3517150..8924f83 --- a/database/factories/ProjectFactory.php +++ b/database/factories/ProjectFactory.php @@ -17,7 +17,7 @@ class ProjectFactory extends Factory public function definition(): array { return [ - 'title' => fake()->sentence(3) + 'title' => fake()->sentence(3), ]; } } diff --git a/database/factories/TeamFactory.php b/database/factories/TeamFactory.php old mode 100644 new mode 100755 index dceb1ee..443d638 --- a/database/factories/TeamFactory.php +++ b/database/factories/TeamFactory.php @@ -17,7 +17,7 @@ class TeamFactory extends Factory public function definition(): array { return [ - 'name' => fake()->sentence(2) + 'name' => fake()->sentence(2), ]; } } diff --git a/database/factories/TeamInviteFactory.php b/database/factories/TeamInviteFactory.php old mode 100644 new mode 100755 index ec80c55..2283e19 --- a/database/factories/TeamInviteFactory.php +++ b/database/factories/TeamInviteFactory.php @@ -18,7 +18,7 @@ public function definition(): array { return [ 'email' => fake()->email, - 'token' => str()->random(30) + 'token' => str()->random(30), ]; } } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php old mode 100644 new mode 100755 diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php old mode 100644 new mode 100755 diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php old mode 100644 new mode 100755 diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php old mode 100644 new mode 100755 diff --git a/database/migrations/2024_11_21_101933_create_teams_table.php b/database/migrations/2024_11_21_101933_create_teams_table.php old mode 100644 new mode 100755 diff --git a/database/migrations/2024_11_21_102118_create_team_user_table.php b/database/migrations/2024_11_21_102118_create_team_user_table.php old mode 100644 new mode 100755 diff --git a/database/migrations/2024_11_21_105637_add_current_team_id_to_users_table.php b/database/migrations/2024_11_21_105637_add_current_team_id_to_users_table.php old mode 100644 new mode 100755 diff --git a/database/migrations/2024_11_21_124650_create_permission_tables.php b/database/migrations/2024_11_21_124650_create_permission_tables.php old mode 100644 new mode 100755 index 9c7044b..dcfb881 --- a/database/migrations/2024_11_21_124650_create_permission_tables.php +++ b/database/migrations/2024_11_21_124650_create_permission_tables.php @@ -1,8 +1,8 @@ id(); + $table->uuid('uuid')->unique(); $table->foreignId('team_id')->constrained(); $table->string('title'); + $table->decimal('completion_percentage', 5, 2)->default(0); $table->timestamps(); }); } diff --git a/database/migrations/2024_12_28_165600_add_role_to_team_user_table.php b/database/migrations/2024_12_28_165600_add_role_to_team_user_table.php new file mode 100644 index 0000000..6d257a9 --- /dev/null +++ b/database/migrations/2024_12_28_165600_add_role_to_team_user_table.php @@ -0,0 +1,28 @@ +string('role')->default('member')->after('team_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('team_user', function (Blueprint $table) { + $table->dropColumn('role'); + }); + } +}; diff --git a/database/seeders/AdminRoleSeeder.php b/database/seeders/AdminRoleSeeder.php old mode 100644 new mode 100755 index b12db28..cfcf31a --- a/database/seeders/AdminRoleSeeder.php +++ b/database/seeders/AdminRoleSeeder.php @@ -2,7 +2,6 @@ namespace Database\Seeders; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; use Spatie\Permission\Models\Permission; use Spatie\Permission\Models\Role; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php old mode 100644 new mode 100755 index d01a0ef..9bf57b2 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,7 +14,10 @@ class DatabaseSeeder extends Seeder public function run(): void { // User::factory(10)->create(); - + $this->call([ + AdminRoleSeeder::class, + MemberRoleSeeder::class, + ]); User::factory()->create([ 'name' => 'Test User', 'email' => 'test@example.com', diff --git a/database/seeders/MemberRoleSeeder.php b/database/seeders/MemberRoleSeeder.php old mode 100644 new mode 100755 index c7cf817..28c2421 --- a/database/seeders/MemberRoleSeeder.php +++ b/database/seeders/MemberRoleSeeder.php @@ -2,7 +2,6 @@ namespace Database\Seeders; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; use Spatie\Permission\Models\Permission; use Spatie\Permission\Models\Role; diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 index 2800e9d..d2f3726 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,10 @@ { - "name": "laravel-teams", + "name": "teams", "lockfileVersion": 3, "requires": true, "packages": { "": { + "name": "teams", "devDependencies": { "@tailwindcss/forms": "^0.5.2", "alpinejs": "^3.4.2", @@ -1727,9 +1728,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -1737,6 +1738,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, diff --git a/package.json b/package.json old mode 100644 new mode 100755 diff --git a/phpunit.xml b/phpunit.xml old mode 100644 new mode 100755 diff --git a/postcss.config.js b/postcss.config.js old mode 100644 new mode 100755 diff --git a/public/.htaccess b/public/.htaccess old mode 100644 new mode 100755 diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 diff --git a/public/index.php b/public/index.php old mode 100644 new mode 100755 diff --git a/public/robots.txt b/public/robots.txt old mode 100644 new mode 100755 diff --git a/resources/css/app.css b/resources/css/app.css old mode 100644 new mode 100755 diff --git a/resources/js/app.js b/resources/js/app.js old mode 100644 new mode 100755 diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js old mode 100644 new mode 100755 diff --git a/resources/views/auth/confirm-password.blade.php b/resources/views/auth/confirm-password.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/auth/verify-email.blade.php b/resources/views/auth/verify-email.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/application-logo.blade.php b/resources/views/components/application-logo.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/auth-session-status.blade.php b/resources/views/components/auth-session-status.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/danger-button.blade.php b/resources/views/components/danger-button.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/dropdown-link.blade.php b/resources/views/components/dropdown-link.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/dropdown.blade.php b/resources/views/components/dropdown.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/input-error.blade.php b/resources/views/components/input-error.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/input-label.blade.php b/resources/views/components/input-label.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/nav-link.blade.php b/resources/views/components/nav-link.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/notification.blade.php b/resources/views/components/notification.blade.php new file mode 100644 index 0000000..48414ba --- /dev/null +++ b/resources/views/components/notification.blade.php @@ -0,0 +1,16 @@ +@props(['type' => 'success']) + +
+ {{ $slot }} +
diff --git a/resources/views/components/primary-button.blade.php b/resources/views/components/primary-button.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/responsive-nav-link.blade.php b/resources/views/components/responsive-nav-link.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/secondary-button.blade.php b/resources/views/components/secondary-button.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/select-input.blade.php b/resources/views/components/select-input.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/team-invite-item.blade.php b/resources/views/components/team-invite-item.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/team-member-item.blade.php b/resources/views/components/team-member-item.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/components/text-input.blade.php b/resources/views/components/text-input.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/emails/team_invitation.blade.php b/resources/views/emails/team_invitation.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php old mode 100644 new mode 100755 index c5ff315..3d78705 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -8,9 +8,7 @@ {{ config('app.name', 'Laravel') }} - - - + @vite(['resources/css/app.css', 'resources/js/app.js']) diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php old mode 100644 new mode 100755 index 11feb47..a2e6ddd --- a/resources/views/layouts/guest.blade.php +++ b/resources/views/layouts/guest.blade.php @@ -1,30 +1,28 @@ - - - - + + + + - {{ config('app.name', 'Laravel') }} + {{ config('app.name', 'Laravel') }} - - - - - - @vite(['resources/css/app.css', 'resources/js/app.js']) - - -
-
- - - -
+ + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+
+ + + +
-
- {{ $slot }} -
+
+ {{ $slot }}
- +
+ diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php old mode 100644 new mode 100755 index e321efb..ece5dd3 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -15,6 +15,9 @@ {{ __('Dashboard') }} + + {{ __('Projects') }} +
@@ -100,6 +103,9 @@ {{ __('Dashboard') }} + + {{ __('Projects') }} + diff --git a/resources/views/profile/edit.blade.php b/resources/views/profile/edit.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/profile/partials/delete-user-form.blade.php b/resources/views/profile/partials/delete-user-form.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/profile/partials/update-password-form.blade.php b/resources/views/profile/partials/update-password-form.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/profile/partials/update-profile-information-form.blade.php b/resources/views/profile/partials/update-profile-information-form.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/projects/create.blade.php b/resources/views/projects/create.blade.php new file mode 100644 index 0000000..2545246 --- /dev/null +++ b/resources/views/projects/create.blade.php @@ -0,0 +1,32 @@ + + +

+ {{ __('Create Project') }} +

+
+ +
+
+
+
+
+ @csrf + +
+ + + +
+ + + +
+ {{ __('Create Project') }} + {{ __('Cancel') }} +
+
+
+
+
+
+
diff --git a/resources/views/projects/edit.blade.php b/resources/views/projects/edit.blade.php new file mode 100644 index 0000000..fb9fec8 --- /dev/null +++ b/resources/views/projects/edit.blade.php @@ -0,0 +1,43 @@ + + +

+ {{ __('Edit Project') }} +

+
+ +
+
+
+
+
+ @csrf + @method('PUT') + +
+ + + +
+ +
+ + + +
+ +
+ {{ __('Update Project') }} + {{ __('Cancel') }} +
+
+
+
+
+
+
diff --git a/resources/views/projects/index.blade.php b/resources/views/projects/index.blade.php new file mode 100644 index 0000000..a9e3b42 --- /dev/null +++ b/resources/views/projects/index.blade.php @@ -0,0 +1,116 @@ + + +
+

+ {{ __('Projects') }} +

+ + {{ __('New Project') }} + +
+
+ +
+
+ @if (session('success')) + + {{ session('success') }} + + @endif + +
+
+ @if($projects->isEmpty()) +

{{ __('No projects found.') }}

+ @else +
+ + + + + + + + + + + + @foreach($projects as $project) + + + + + + + + @endforeach + +
+ {{ __('Title') }} + + {{ __('Team') }} + + {{ __('Progress') }} + + {{ __('Created') }} + + {{ __('Actions') }} +
+ + +
{{ $project->team->name }}
+
+
+
+
+
+ {{ number_format($project->completion_percentage, 0) }}% +
+
+
+ {{ $project->created_at->diffForHumans() }} +
+
+
+ + + + + + + + @can('update', $project) + + + + + + @endcan + + @can('delete', $project) +
+ @csrf + @method('DELETE') + +
+ @endcan +
+
+
+
+ {{ $projects->links() }} +
+ @endif +
+
+
+
+
diff --git a/resources/views/projects/show.blade.php b/resources/views/projects/show.blade.php new file mode 100644 index 0000000..bfda0cc --- /dev/null +++ b/resources/views/projects/show.blade.php @@ -0,0 +1,61 @@ + + +
+

+ {{ $project->title }} +

+
+ @can('update', $project) + + {{ __('Edit') }} + + @endcan + @can('delete', $project) +
+ @csrf + @method('DELETE') + +
+ @endcan +
+
+
+ +
+
+ @if (session('success')) + + {{ session('success') }} + + @endif + +
+
+
+

{{ __('Description') }}

+

{{ $project->description }}

+
+ +
+

{{ __('Progress') }}

+
+
+
+
+ {{ number_format($project->completion_percentage, 0) }}% +
+
+ +
+

{{ __('Team') }}

+

{{ $project->team->name }}

+
+
+
+
+
+
diff --git a/resources/views/team/edit.blade.php b/resources/views/team/edit.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/team/partials/edit-team-form.blade.php b/resources/views/team/partials/edit-team-form.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/team/partials/team-members.blade.php b/resources/views/team/partials/team-members.blade.php old mode 100644 new mode 100755 diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php old mode 100644 new mode 100755 index 979e82a..2f83f96 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,176 +1,1044 @@ - - - - - Laravel - - - - - - - @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) - @vite(['resources/css/app.css', 'resources/js/app.js']) - @else - - @endif - - -
- Laravel background -
-
-
-
- -
- @if (Route::has('login')) - + + + + + Laravel + + + + + @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) + @else + + @endif + + +
+ Laravel background +
+
+
+
+ + +
+ @if (Route::has('login')) +
- -
-
- -
- Laravel documentation screenshot + -
-
-
- -
+
+ +
+ + + + + +
- -
+ -
-

Laravel News

+ + +
-

- Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. -

-
+ +
+ + + + + + + +
- -
- -
-
- - - - - -
+
+

Laravel News

-
-

Vibrant Ecosystem

+

+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +

+
-

- Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, Envoyer, and Herd help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. -

-
+ + + + +
+
+ + + + + +
+ +
+

Vibrant Ecosystem

+ +

+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, Envoyer, and Herd help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +

-
+
+ -
- Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) -
-
+
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
- +
+ diff --git a/routes/auth.php b/routes/auth.php old mode 100644 new mode 100755 diff --git a/routes/console.php b/routes/console.php old mode 100644 new mode 100755 diff --git a/routes/web.php b/routes/web.php old mode 100644 new mode 100755 index e6e7133..30ff4d2 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Http\Controllers\DashboardController; use App\Http\Controllers\ProfileController; +use App\Http\Controllers\ProjectController; use App\Http\Controllers\TeamController; use App\Http\Controllers\TeamInviteController; use App\Http\Controllers\TeamMemberController; @@ -46,6 +47,10 @@ Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + + Route::middleware(['auth', 'verified'])->group(function () { + Route::resource('projects', ProjectController::class); + }); }); require __DIR__.'/auth.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore old mode 100644 new mode 100755 diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore old mode 100644 new mode 100755 diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore old mode 100644 new mode 100755 diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore old mode 100644 new mode 100755 diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore old mode 100644 new mode 100755 diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore old mode 100644 new mode 100755 diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore old mode 100644 new mode 100755 diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore old mode 100644 new mode 100755 diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore old mode 100644 new mode 100755 diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore old mode 100644 new mode 100755 diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore old mode 100644 new mode 100755 diff --git a/tailwind.config.js b/tailwind.config.js old mode 100644 new mode 100755 index c29eb1a..eeaefb1 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -12,7 +12,13 @@ export default { theme: { extend: { fontFamily: { - sans: ['Figtree', ...defaultTheme.fontFamily.sans], + sans: [ + '"Inter var", sans-serif', + { + fontFeatureSettings: '"cv11", "ss01"', + fontVariationSettings: '"opsz" 32' + }, + ], }, }, }, diff --git a/tests/Feature/Controllers/TeamControllerTest.php b/tests/Feature/Controllers/TeamControllerTest.php old mode 100644 new mode 100755 index 4b9c89f..9afe8af --- a/tests/Feature/Controllers/TeamControllerTest.php +++ b/tests/Feature/Controllers/TeamControllerTest.php @@ -3,7 +3,7 @@ use App\Http\Middleware\TeamsPermission; use App\Models\Team; use App\Models\User; -use http\Env\Request; + use function Pest\Laravel\actingAs; it('switches the current team for the user', function () { @@ -37,7 +37,7 @@ actingAs($user) ->patch(route('team.update', $user->currentTeam), [ - 'name' => $name = 'A new team name' + 'name' => $name = 'A new team name', ]) ->assertRedirect(); @@ -50,7 +50,7 @@ actingAs($user) ->patch(route('team.update', $anotherUser->currentTeam), [ - 'name' => 'A new team name' + 'name' => 'A new team name', ]) ->assertForbidden(); }); @@ -67,7 +67,7 @@ actingAs($user) ->withoutMiddleware(TeamsPermission::class) ->patch(route('team.update', $anotherTeam), [ - 'name' => 'A new team name' + 'name' => 'A new team name', ]) ->assertForbidden(); }); diff --git a/tests/Feature/Controllers/TeamInviteControllerTest.php b/tests/Feature/Controllers/TeamInviteControllerTest.php old mode 100644 new mode 100755 index 68ba892..5eda212 --- a/tests/Feature/Controllers/TeamInviteControllerTest.php +++ b/tests/Feature/Controllers/TeamInviteControllerTest.php @@ -8,12 +8,13 @@ use Illuminate\Routing\Middleware\ValidateSignature; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; + use function Pest\Laravel\actingAs; use function Pest\Laravel\assertDatabaseHas; use function Pest\Laravel\assertDatabaseMissing; afterEach(function () { - Str::createRandomStringsNormally(); + Str::createRandomStringsNormally(); }); it('creates an invite', function () { @@ -25,19 +26,19 @@ actingAs($user) ->post(route('team.invites.store', $user->currentTeam), [ - 'email' => $email = 'mabel@codecourse.com' + 'email' => $email = 'mabel@codecourse.com', ]) ->assertRedirect(); Mail::assertSent(TeamInvitation::class, function (TeamInvitation $mail) use ($email) { - return $mail->hasTo($email) && + return $mail->hasTo($email) && $mail->teamInvite->token === 'abc'; }); assertDatabaseHas('team_invites', [ 'team_id' => $user->currentTeam->id, 'email' => $email, - 'token' => 'abc' + 'token' => 'abc', ]); }); @@ -54,7 +55,7 @@ actingAs($user) ->post(route('team.invites.store', $user->currentTeam), [ - 'email' => 'abc' + 'email' => 'abc', ]) ->assertSessionHasErrors('email'); }); @@ -64,12 +65,12 @@ TeamInvite::factory()->create([ 'team_id' => $user->currentTeam->id, - 'email' => $email = 'mabel@codecourse.com' + 'email' => $email = 'mabel@codecourse.com', ]); actingAs($user) ->post(route('team.invites.store', $user->currentTeam), [ - 'email' => $email + 'email' => $email, ]) ->assertInvalid(); }); @@ -80,12 +81,12 @@ TeamInvite::factory() ->for(Team::factory()) ->create([ - 'email' => $email = 'mabel@codecourse.com' + 'email' => $email = 'mabel@codecourse.com', ]); actingAs($user) ->post(route('team.invites.store', $user->currentTeam), [ - 'email' => $email + 'email' => $email, ]) ->assertValid(); }); @@ -102,7 +103,7 @@ actingAs($user) ->withoutMiddleware(TeamsPermission::class) ->post(route('team.invites.store', $anotherTeam), [ - 'email' => 'mabel@codecourse.com' + 'email' => 'mabel@codecourse.com', ]) ->assertForbidden(); }); @@ -111,7 +112,7 @@ $user = User::factory()->create(); $invite = TeamInvite::factory()->create([ - 'team_id' => $user->currentTeam->id + 'team_id' => $user->currentTeam->id, ]); actingAs($user) @@ -133,7 +134,7 @@ ); $invite = TeamInvite::factory()->create([ - 'team_id' => $anotherTeam->id + 'team_id' => $anotherTeam->id, ]); setPermissionsTeamId($anotherTeam); @@ -152,7 +153,7 @@ $acceptingUser = User::factory()->create(); actingAs($acceptingUser) - ->get('/team/invites/accept?token=' . $invite->token) + ->get('/team/invites/accept?token='.$invite->token) ->assertForbidden(); }); @@ -165,7 +166,7 @@ actingAs($acceptingUser) ->withoutMiddleware(ValidateSignature::class) - ->get('/team/invites/accept?token=' . $invite->token) + ->get('/team/invites/accept?token='.$invite->token) ->assertRedirect('/dashboard'); expect($acceptingUser->teams->contains($invite->team))->toBeTrue() diff --git a/tests/Feature/Controllers/TeamMemberControllerTest.php b/tests/Feature/Controllers/TeamMemberControllerTest.php old mode 100644 new mode 100755 index 1010601..8713257 --- a/tests/Feature/Controllers/TeamMemberControllerTest.php +++ b/tests/Feature/Controllers/TeamMemberControllerTest.php @@ -2,6 +2,7 @@ use App\Http\Middleware\TeamsPermission; use App\Models\User; + use function Pest\Laravel\actingAs; it('can remove a member from the team', function () { @@ -62,7 +63,7 @@ actingAs($user) ->patch(route('team.members.update', [$user->currentTeam, $member]), [ - 'role' => 'team admin' + 'role' => 'team admin', ]) ->assertRedirect(); @@ -103,7 +104,7 @@ actingAs($anotherUser) ->withoutMiddleware(TeamsPermission::class) ->patch(route('team.members.update', [$user->currentTeam, $user]), [ - 'role' => 'team member' + 'role' => 'team member', ]) ->assertForbidden(); }); @@ -114,7 +115,7 @@ actingAs($user) ->patch(route('team.members.update', [$user->currentTeam, $anotherUser]), [ - 'role' => 'team member' + 'role' => 'team member', ]) ->assertForbidden(); }); @@ -131,7 +132,7 @@ actingAs($user) ->patch(route('team.members.update', [$user->currentTeam, $member]), [ - 'role' => 'some wrong role' + 'role' => 'some wrong role', ]) ->assertInvalid() ->assertSessionHasErrors(['role']); diff --git a/tests/Feature/Middleware/TeamsPermissionsTest.php b/tests/Feature/Middleware/TeamsPermissionsTest.php old mode 100644 new mode 100755 index 369bb48..1653363 --- a/tests/Feature/Middleware/TeamsPermissionsTest.php +++ b/tests/Feature/Middleware/TeamsPermissionsTest.php @@ -1,6 +1,7 @@ create([ - 'name' => 'Alex' + 'name' => 'Alex', ]); expect($user->teams) @@ -26,7 +27,7 @@ it('sets the current team to the personal team', function () { $user = User::factory()->create([ - 'name' => 'Alex' + 'name' => 'Alex', ]); expect($user->current_team_id) diff --git a/tests/Feature/Request/TeamRequestTest.php b/tests/Feature/Request/TeamRequestTest.php old mode 100644 new mode 100755 index 12b8432..b94d806 --- a/tests/Feature/Request/TeamRequestTest.php +++ b/tests/Feature/Request/TeamRequestTest.php @@ -2,7 +2,6 @@ use App\Models\Team; use App\Models\User; -use function Pest\Laravel\actingAs; it('can access the current team through the request', function () { $user = User::factory()->create(); diff --git a/tests/Pest.php b/tests/Pest.php old mode 100644 new mode 100755 index 41513c6..278e376 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -20,7 +20,7 @@ ->beforeEach(function () { $this->seed([ AdminRoleSeeder::class, - MemberRoleSeeder::class + MemberRoleSeeder::class, ]); }); diff --git a/tests/TestCase.php b/tests/TestCase.php old mode 100644 new mode 100755 diff --git a/tests/Unit/.gitkeep b/tests/Unit/.gitkeep old mode 100644 new mode 100755 diff --git a/vite.config.js b/vite.config.js old mode 100644 new mode 100755