diff --git a/backend/composer.json b/backend/composer.json index 973a28b..6811188 100644 --- a/backend/composer.json +++ b/backend/composer.json @@ -14,21 +14,22 @@ "nelmio/api-doc-bundle": "^5.0", "phpdocumentor/reflection-docblock": "^5.6", "phpstan/phpdoc-parser": "^2.1", - "symfony/asset": "6.4.*", - "symfony/console": "6.4.*", - "symfony/dotenv": "6.4.*", + "prinsfrank/standards": "^3.12", + "symfony/asset": "7.2.*", + "symfony/console": "7.2.*", + "symfony/dotenv": "7.2.*", "symfony/flex": "^2", - "symfony/framework-bundle": "6.4.*", - "symfony/http-client": "6.4.*", + "symfony/framework-bundle": "7.2.*", + "symfony/http-client": "7.2.*", "symfony/monolog-bundle": "^3.10", - "symfony/property-access": "6.4.*", - "symfony/property-info": "6.4.*", - "symfony/runtime": "6.4.*", - "symfony/serializer": "6.4.*", - "symfony/twig-bundle": "6.4.*", - "symfony/uid": "6.4.*", - "symfony/validator": "6.4.*", - "symfony/yaml": "6.4.*" + "symfony/property-access": "7.2.*", + "symfony/property-info": "7.2.*", + "symfony/runtime": "7.2.*", + "symfony/serializer": "7.2.*", + "symfony/twig-bundle": "7.2.*", + "symfony/uid": "7.2.*", + "symfony/validator": "7.2.*", + "symfony/yaml": "7.2.*" }, "config": { "allow-plugins": { @@ -77,7 +78,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "6.4.*" + "require": "7.2.*" } }, "require-dev": { @@ -85,7 +86,7 @@ "phpstan/phpstan": "^2.1", "phpstan/phpstan-symfony": "^2.0", "symfony/maker-bundle": "^1.62", - "symfony/stopwatch": "6.4.*", - "symfony/web-profiler-bundle": "6.4.*" + "symfony/stopwatch": "7.2.*", + "symfony/web-profiler-bundle": "7.2.*" } } diff --git a/backend/composer.lock b/backend/composer.lock index faba828..f7eca15 100644 --- a/backend/composer.lock +++ b/backend/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": "7ec99e86c547c32beef698aea0e9e346", + "content-hash": "6f3001d69456526bf73d202e9b18a272", "packages": [ { "name": "doctrine/annotations", @@ -1706,6 +1706,111 @@ }, "time": "2025-02-19T13:28:12+00:00" }, + { + "name": "prinsfrank/enums", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/PrinsFrank/enums.git", + "reference": "3acfedf3fca35d6c6c134b45de489edff6306a2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrinsFrank/enums/zipball/3acfedf3fca35d6c6c134b45de489edff6306a2b", + "reference": "3acfedf3fca35d6c6c134b45de489edff6306a2b", + "shasum": "" + }, + "require": { + "php": "^8.1 || ^8.2 || ^8.3 || ^8.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.43", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "PrinsFrank\\Enums\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Adds missing strictly typed methods to work with enums", + "support": { + "issues": "https://github.com/PrinsFrank/enums/issues", + "source": "https://github.com/PrinsFrank/enums/tree/v1.4.1" + }, + "funding": [ + { + "url": "https://github.com/PrinsFrank", + "type": "github" + } + ], + "time": "2024-12-29T14:11:26+00:00" + }, + { + "name": "prinsfrank/standards", + "version": "v3.12.1", + "source": { + "type": "git", + "url": "https://github.com/PrinsFrank/standards.git", + "reference": "26a8eedbfa3492086937c8009ce6b832d6df2a1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrinsFrank/standards/zipball/26a8eedbfa3492086937c8009ce6b832d6df2a1f", + "reference": "26a8eedbfa3492086937c8009ce6b832d6df2a1f", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "ext-mbstring": "*", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "prinsfrank/enums": "^1.4" + }, + "require-dev": { + "composer/composer": "^2.3", + "dbrekelmans/bdi": "^1.0", + "ext-dom": "*", + "friendsofphp/php-cs-fixer": "^3.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^11.2.6", + "prinsfrank/transliteration": "^1.0", + "symfony/panther": "dev-main" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "PrinsFrank\\Standards\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A collection of standards as PHP Enums: ISO3166, ISO4217, ISO639...", + "support": { + "issues": "https://github.com/PrinsFrank/standards/issues", + "source": "https://github.com/PrinsFrank/standards/tree/v3.12.1" + }, + "funding": [ + { + "url": "https://github.com/PrinsFrank", + "type": "github" + } + ], + "time": "2025-03-31T18:45:12+00:00" + }, { "name": "psr/cache", "version": "3.0.0", @@ -1910,28 +2015,28 @@ }, { "name": "symfony/asset", - "version": "v6.4.13", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "2466c17d61d14539cddf77e57ebb9cc971185302" + "reference": "cb926cd59fefa1f9b4900b3695f0f846797ba5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/2466c17d61d14539cddf77e57ebb9cc971185302", - "reference": "2466c17d61d14539cddf77e57ebb9cc971185302", + "url": "https://api.github.com/repos/symfony/asset/zipball/cb926cd59fefa1f9b4900b3695f0f846797ba5c0", + "reference": "cb926cd59fefa1f9b4900b3695f0f846797ba5c0", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/http-foundation": "<5.4" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0" + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -1959,7 +2064,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.4.13" + "source": "https://github.com/symfony/asset/tree/v7.2.0" }, "funding": [ { @@ -1975,35 +2080,36 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/cache", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432" + "reference": "9131e3018872d2ebb6fe8a9a4d6631273513d42c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432", - "reference": "95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432", + "url": "https://api.github.com/repos/symfony/cache/zipball/9131e3018872d2ebb6fe8a9a4d6631273513d42c", + "reference": "9131e3018872d2ebb6fe8a9a4d6631273513d42c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.3.6|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -2012,15 +2118,16 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2055,7 +2162,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.20" + "source": "https://github.com/symfony/cache/tree/v7.2.5" }, "funding": [ { @@ -2071,7 +2178,7 @@ "type": "tidelift" } ], - "time": "2025-03-08T15:51:34+00:00" + "time": "2025-03-25T15:54:33+00:00" }, { "name": "symfony/cache-contracts", @@ -2151,34 +2258,34 @@ }, { "name": "symfony/config", - "version": "v6.4.14", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef" + "reference": "7716594aaae91d9141be080240172a92ecca4d44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef", + "url": "https://api.github.com/repos/symfony/config/zipball/7716594aaae91d9141be080240172a92ecca4d44", + "reference": "7716594aaae91d9141be080240172a92ecca4d44", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^7.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2206,7 +2313,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.14" + "source": "https://github.com/symfony/config/tree/v7.2.3" }, "funding": [ { @@ -2222,51 +2329,50 @@ "type": "tidelift" } ], - "time": "2024-11-04T11:33:53+00:00" + "time": "2025-01-22T12:07:01+00:00" }, { "name": "symfony/console", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36" + "reference": "e51498ea18570c062e7df29d05a7003585b19b88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2e4af9c952617cc3f9559ff706aee420a8464c36", - "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36", + "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88", + "reference": "e51498ea18570c062e7df29d05a7003585b19b88", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2300,7 +2406,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.20" + "source": "https://github.com/symfony/console/tree/v7.2.5" }, "funding": [ { @@ -2316,44 +2422,43 @@ "type": "tidelift" } ], - "time": "2025-03-03T17:16:38+00:00" + "time": "2025-03-12T08:11:12+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "c49796a9184a532843e78e50df9e55708b92543a" + "reference": "58ab71379f14a741755717cece2868bf41ed45d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c49796a9184a532843e78e50df9e55708b92543a", - "reference": "c49796a9184a532843e78e50df9e55708b92543a", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/58ab71379f14a741755717cece2868bf41ed45d8", + "reference": "58ab71379f14a741755717cece2868bf41ed45d8", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^3.5", "symfony/var-exporter": "^6.4.20|^7.2.5" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.3", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2381,7 +2486,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.20" + "source": "https://github.com/symfony/dependency-injection/tree/v7.2.5" }, "funding": [ { @@ -2397,7 +2502,7 @@ "type": "tidelift" } ], - "time": "2025-03-13T09:55:08+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2468,67 +2573,68 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "7205dbc642bac2ecbf108fadbf9a04aa08290a2a" + "reference": "f8a298bbb8eaca08d787bf4d4c74728f1cf98922" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7205dbc642bac2ecbf108fadbf9a04aa08290a2a", - "reference": "7205dbc642bac2ecbf108fadbf9a04aa08290a2a", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/f8a298bbb8eaca08d787bf4d4c74728f1cf98922", + "reference": "f8a298bbb8eaca08d787bf4d4c74728f1cf98922", "shasum": "" }, "require": { - "doctrine/event-manager": "^1.2|^2", - "doctrine/persistence": "^2.5|^3.1|^4", - "php": ">=8.1", + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "doctrine/dbal": "<2.13.1", + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", "doctrine/lexer": "<1.1", "doctrine/orm": "<2.15", - "symfony/cache": "<5.4", - "symfony/dependency-injection": "<6.2", - "symfony/form": "<5.4.38|>=6,<6.4.6|>=7,<7.0.6", - "symfony/http-foundation": "<6.3", - "symfony/http-kernel": "<6.2", - "symfony/lock": "<6.3", - "symfony/messenger": "<5.4", - "symfony/property-info": "<5.4", - "symfony/security-bundle": "<5.4", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", "symfony/security-core": "<6.4", "symfony/validator": "<6.4" }, "require-dev": { - "doctrine/collections": "^1.0|^2.0", + "doctrine/collections": "^1.8|^2.0", "doctrine/data-fixtures": "^1.1|^2", - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "doctrine/orm": "^2.15|^3", "psr/log": "^1|^2|^3", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.2|^7.0", - "symfony/doctrine-messenger": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4.38|^6.4.6|^7.0.6", - "symfony/http-kernel": "^6.3|^7.0", - "symfony/lock": "^6.3|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/proxy-manager-bridge": "^6.4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", "symfony/security-core": "^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "type": "symfony-bridge", "autoload": { @@ -2556,7 +2662,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.20" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.2.5" }, "funding": [ { @@ -2572,32 +2678,32 @@ "type": "tidelift" } ], - "time": "2025-02-28T20:55:44+00:00" + "time": "2025-03-25T15:54:33+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.16", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5" + "reference": "28347a897771d0c28e99b75166dd2689099f3045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5", - "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/28347a897771d0c28e99b75166dd2689099f3045", + "reference": "28347a897771d0c28e99b75166dd2689099f3045", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/console": "<5.4", - "symfony/process": "<5.4" + "symfony/console": "<6.4", + "symfony/process": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2630,7 +2736,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.16" + "source": "https://github.com/symfony/dotenv/tree/v7.2.0" }, "funding": [ { @@ -2646,26 +2752,26 @@ "type": "tidelift" } ], - "time": "2024-11-27T11:08:19+00:00" + "time": "2024-11-27T11:18:42+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031" + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031", - "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", @@ -2674,7 +2780,7 @@ "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -2705,7 +2811,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/v6.4.20" + "source": "https://github.com/symfony/error-handler/tree/v7.2.5" }, "funding": [ { @@ -2721,28 +2827,28 @@ "type": "tidelift" } ], - "time": "2025-03-01T13:00:38+00:00" + "time": "2025-03-03T07:12:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.13", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -2751,13 +2857,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2785,7 +2891,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/v6.4.13" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -2801,7 +2907,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2881,25 +2987,25 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2927,7 +3033,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -2943,27 +3049,27 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v6.4.17", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2991,7 +3097,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.17" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -3007,7 +3113,7 @@ "type": "tidelift" } ], - "time": "2024-12-29T13:51:37+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/flex", @@ -3079,108 +3185,109 @@ }, { "name": "symfony/framework-bundle", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce" + "reference": "c1c6ee8946491b698b067df2258e07918c25da02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce", - "reference": "51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c1c6ee8946491b698b067df2258e07918c25da02", + "reference": "c1c6ee8946491b698b067df2258e07918c25da02", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.4.12|^7.0", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^7.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.1|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^7.1", + "symfony/finder": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4", + "symfony/http-kernel": "^7.2", "symfony/polyfill-mbstring": "~1.0", "symfony/routing": "^6.4|^7.0" }, "conflict": { - "doctrine/annotations": "<1.13.1", "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/asset": "<5.4", + "symfony/asset": "<6.4", "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.3", - "symfony/console": "<5.4|>=7.0", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<6.3", - "symfony/lock": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<6.3", + "symfony/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", "symfony/mime": "<6.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4", - "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<5.4", - "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.4", - "symfony/stopwatch": "<5.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<7.2", + "symfony/serializer": "<7.2.5", + "symfony/stopwatch": "<6.4", "symfony/translation": "<6.4", - "symfony/twig-bridge": "<5.4", - "symfony/twig-bundle": "<5.4", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", "symfony/validator": "<6.4", "symfony/web-profiler-bundle": "<6.4", + "symfony/webhook": "<7.2", "symfony/workflow": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "seld/jsonlint": "^1.10", - "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/asset": "^6.4|^7.0", "symfony/asset-mapper": "^6.4|^7.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", "symfony/dom-crawler": "^6.4|^7.0", - "symfony/dotenv": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-client": "^6.3|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/mailer": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.3|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/mime": "^6.4|^7.0", - "symfony/notifier": "^5.4|^6.0|^7.0", + "symfony/notifier": "^6.4|^7.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", "symfony/scheduler": "^6.4.4|^7.0.4", - "symfony/security-bundle": "^5.4|^6.0|^7.0", - "symfony/semaphore": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/string": "^5.4|^6.0|^7.0", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^7.0", + "symfony/serializer": "^7.2.5", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", "symfony/translation": "^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/webhook": "^7.2", "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.10|^3.0.4" + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.12" }, "type": "symfony-bundle", "autoload": { @@ -3208,7 +3315,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.20" + "source": "https://github.com/symfony/framework-bundle/tree/v7.2.5" }, "funding": [ { @@ -3224,32 +3331,33 @@ "type": "tidelift" } ], - "time": "2025-03-23T16:46:24+00:00" + "time": "2025-03-24T12:37:32+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.19", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "3294a433fc9d12ae58128174896b5b1822c28dad" + "reference": "78981a2ffef6437ed92d4d7e2a86a82f256c6dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/3294a433fc9d12ae58128174896b5b1822c28dad", - "reference": "3294a433fc9d12ae58128174896b5b1822c28dad", + "url": "https://api.github.com/repos/symfony/http-client/zipball/78981a2ffef6437ed92d4d7e2a86a82f256c6dc6", + "reference": "78981a2ffef6437ed92d4d7e2a86a82f256c6dc6", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "amphp/amp": "<2.5", "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.3" + "symfony/http-foundation": "<6.4" }, "provide": { "php-http/async-client-implementation": "*", @@ -3258,19 +3366,20 @@ "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/amphp-http-client-meta": "^1.0|^2.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3301,7 +3410,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.19" + "source": "https://github.com/symfony/http-client/tree/v7.2.4" }, "funding": [ { @@ -3317,7 +3426,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T09:55:13+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/http-client-contracts", @@ -3399,36 +3508,37 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.18", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db" + "reference": "371272aeb6286f8135e028ca535f8e4d6f114126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/371272aeb6286f8135e028ca535f8e4d6f114126", + "reference": "371272aeb6286f8135e028ca535f8e4d6f114126", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { + "doctrine/dbal": "<3.6", "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3456,7 +3566,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.18" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.5" }, "funding": [ { @@ -3472,77 +3582,77 @@ "type": "tidelift" } ], - "time": "2025-01-09T15:48:56+00:00" + "time": "2025-03-25T15:54:33+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37" + "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6be6db31bc74693ce5516e1fd5e5ff1171005e37", - "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b1fe91bc1fa454a806d3f98db4ba826eb9941a54", + "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -3570,7 +3680,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/v6.4.20" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.5" }, "funding": [ { @@ -3586,42 +3696,41 @@ "type": "tidelift" } ], - "time": "2025-03-28T13:27:10+00:00" + "time": "2025-03-28T13:32:50+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v6.4.13", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452" + "reference": "bbae784f0456c5a87c89d7c1a3fcc9cbee976c1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9d14621e59f22c2b6d030d92d37ffe5ae1e60452", - "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/bbae784f0456c5a87c89d7c1a3fcc9cbee976c1d", + "reference": "bbae784f0456c5a87c89d7c1a3fcc9cbee976c1d", "shasum": "" }, "require": { - "monolog/monolog": "^1.25.1|^2|^3", - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0|^7.0", + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/http-kernel": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<5.4", - "symfony/http-foundation": "<5.4", - "symfony/security-core": "<5.4" + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/mailer": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "symfony-bridge", "autoload": { @@ -3649,7 +3758,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.13" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.2.0" }, "funding": [ { @@ -3665,7 +3774,7 @@ "type": "tidelift" } ], - "time": "2024-10-14T08:49:08+00:00" + "time": "2024-10-14T18:16:08+00:00" }, { "name": "symfony/monolog-bundle", @@ -3750,20 +3859,20 @@ }, { "name": "symfony/options-resolver", - "version": "v6.4.16", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "368128ad168f20e22c32159b9f761e456cec0c78" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78", - "reference": "368128ad168f20e22c32159b9f761e456cec0c78", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -3797,7 +3906,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.16" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -3813,7 +3922,7 @@ "type": "tidelift" } ], - "time": "2024-11-20T10:57:02+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -4287,25 +4396,24 @@ }, { "name": "symfony/property-access", - "version": "v6.4.18", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "80e0378f2f058b60d87dedc3c760caec882e992c" + "reference": "b28732e315d81fbec787f838034de7d6c9b2b902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/80e0378f2f058b60d87dedc3c760caec882e992c", - "reference": "80e0378f2f058b60d87dedc3c760caec882e992c", + "url": "https://api.github.com/repos/symfony/property-access/zipball/b28732e315d81fbec787f838034de7d6c9b2b902", + "reference": "b28732e315d81fbec787f838034de7d6c9b2b902", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/property-info": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" }, "require-dev": { - "symfony/cache": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4344,7 +4452,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.18" + "source": "https://github.com/symfony/property-access/tree/v7.2.3" }, "funding": [ { @@ -4360,41 +4468,40 @@ "type": "tidelift" } ], - "time": "2024-12-16T14:42:05+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/property-info", - "version": "v6.4.18", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e" + "reference": "f00fd9685ecdbabe82ca25c7b739ce7bba99302c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/94d18e5cc11a37fd92856d38b61d9cdf72536a1e", - "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e", + "url": "https://api.github.com/repos/symfony/property-info/zipball/f00fd9685ecdbabe82ca25c7b739ce7bba99302c", + "reference": "f00fd9685ecdbabe82ca25c7b739ce7bba99302c", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/string": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "~7.1.9|^7.2.2" }, "conflict": { - "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/cache": "<5.4", - "symfony/dependency-injection": "<5.4|>=6.0,<6.4", - "symfony/serializer": "<5.4" + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/serializer": "^5.4|^6.4|^7.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4430,7 +4537,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.18" + "source": "https://github.com/symfony/property-info/tree/v7.2.5" }, "funding": [ { @@ -4446,40 +4553,38 @@ "type": "tidelift" } ], - "time": "2025-01-21T10:52:27+00:00" + "time": "2025-03-06T16:27:19+00:00" }, { "name": "symfony/routing", - "version": "v6.4.18", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4513,7 +4618,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.18" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -4529,35 +4634,35 @@ "type": "tidelift" } ], - "time": "2025-01-09T08:51:02+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/runtime", - "version": "v6.4.14", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "4facd4174f45cd37c65860403412b67c7381136a" + "reference": "8e8d09bd69b7f6c0260dd3d58f37bd4fbdeab5ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/4facd4174f45cd37c65860403412b67c7381136a", - "reference": "4facd4174f45cd37c65860403412b67c7381136a", + "url": "https://api.github.com/repos/symfony/runtime/zipball/8e8d09bd69b7f6c0260dd3d58f37bd4fbdeab5ad", + "reference": "8e8d09bd69b7f6c0260dd3d58f37bd4fbdeab5ad", "shasum": "" }, "require": { "composer-plugin-api": "^1.0|^2.0", - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/dotenv": "<5.4" + "symfony/dotenv": "<6.4" }, "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", - "symfony/dotenv": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0" + "composer/composer": "^2.6", + "symfony/console": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" }, "type": "composer-plugin", "extra": { @@ -4592,7 +4697,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v6.4.14" + "source": "https://github.com/symfony/runtime/tree/v7.2.3" }, "funding": [ { @@ -4608,61 +4713,61 @@ "type": "tidelift" } ], - "time": "2024-11-05T16:39:55+00:00" + "time": "2024-12-29T21:39:47+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.19", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "a221b2f6066af304d760cff7a26f201b4fab4aef" + "reference": "d8b75b2c8144c29ac43b235738411f7cca6d584d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/a221b2f6066af304d760cff7a26f201b4fab4aef", - "reference": "a221b2f6066af304d760cff7a26f201b4fab4aef", + "url": "https://api.github.com/repos/symfony/serializer/zipball/d8b75b2c8144c29ac43b235738411f7cca6d584d", + "reference": "d8b75b2c8144c29ac43b235738411f7cca6d584d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<5.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4.24|>=6,<6.2.11", - "symfony/uid": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/uid": "<6.4", "symfony/validator": "<6.4", - "symfony/yaml": "<5.4" + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "seld/jsonlint": "^1.10", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.26|^6.3|^7.0", - "symfony/property-info": "^5.4.24|^6.2.11|^7.0", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^7.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4690,7 +4795,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.19" + "source": "https://github.com/symfony/serializer/tree/v7.2.5" }, "funding": [ { @@ -4706,7 +4811,7 @@ "type": "tidelift" } ], - "time": "2025-02-24T08:42:36+00:00" + "time": "2025-03-24T12:37:32+00:00" }, { "name": "symfony/service-contracts", @@ -4793,20 +4898,20 @@ }, { "name": "symfony/stopwatch", - "version": "v6.4.19", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c" + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c", - "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -4835,7 +4940,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.19" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.4" }, "funding": [ { @@ -4851,24 +4956,24 @@ "type": "tidelift" } ], - "time": "2025-02-21T10:06:30+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "symfony/string", - "version": "v6.4.15", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4878,11 +4983,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4921,7 +5027,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.15" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -4937,7 +5043,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:12+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation-contracts", @@ -5019,65 +5125,66 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "bb423dfaa51b6d88b1d64197ae695a0c8ac73778" + "reference": "b1942d5515b7f0a18e16fd668a04ea952db2b0f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bb423dfaa51b6d88b1d64197ae695a0c8ac73778", - "reference": "bb423dfaa51b6d88b1d64197ae695a0c8ac73778", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/b1942d5515b7f0a18e16fd668a04ea952db2b0f2", + "reference": "b1942d5515b7f0a18e16fd668a04ea952db2b0f2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^3.12" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.4", - "symfony/form": "<6.3", - "symfony/http-foundation": "<5.4", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.2", + "symfony/mime": "<6.4", "symfony/serializer": "<6.4", - "symfony/translation": "<5.4", - "symfony/workflow": "<5.4" + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.3|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/form": "^6.4.20|^7.2.5", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/security-http": "^5.4|^6.0|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", "symfony/serializer": "^6.4.3|^7.0.3", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.1|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", "twig/cssinliner-extra": "^2.12|^3", "twig/inky-extra": "^2.12|^3", "twig/markdown-extra": "^2.12|^3" @@ -5108,7 +5215,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.20" + "source": "https://github.com/symfony/twig-bridge/tree/v7.2.5" }, "funding": [ { @@ -5124,47 +5231,47 @@ "type": "tidelift" } ], - "time": "2025-03-28T13:08:36+00:00" + "time": "2025-03-28T13:15:09+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.13", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4" + "reference": "cd2be4563afaef5285bb6e0a06c5445e644a5c01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c3beeb5336aba1ea03c37e526968c2fde3ef25c4", - "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/cd2be4563afaef5285bb6e0a06c5445e644a5c01", + "reference": "cd2be4563afaef5285bb6e0a06c5445e644a5c01", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.1", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^6.2", - "symfony/twig-bridge": "^6.4", - "twig/twig": "^2.13|^3.0.4" + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.12" }, "conflict": { - "symfony/framework-bundle": "<5.4", - "symfony/translation": "<5.4" + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" }, "require-dev": { - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "symfony-bundle", "autoload": { @@ -5192,7 +5299,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.4.13" + "source": "https://github.com/symfony/twig-bundle/tree/v7.2.0" }, "funding": [ { @@ -5208,28 +5315,103 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-10-23T08:11:15+00:00" }, { - "name": "symfony/uid", - "version": "v6.4.13", + "name": "symfony/type-info", + "version": "v7.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007" + "url": "https://github.com/symfony/type-info.git", + "reference": "c4824a6b658294c828e609d3d8dbb4e87f6a375d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007", - "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007", + "url": "https://api.github.com/repos/symfony/type-info/zipball/c4824a6b658294c828e609d3d8dbb4e87f6a375d", + "reference": "c4824a6b658294c828e609d3d8dbb4e87f6a375d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "psr/container": "^1.1|^2.0" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.0|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-24T09:03:36+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", + "shasum": "" + }, + "require": { + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5266,7 +5448,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.13" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -5282,24 +5464,24 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/validator", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "9314555aceb8d8ce8abda81e1e47e439258d9309" + "reference": "d7edd7f44defbc4e0230512f929b5f4c067bb93e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/9314555aceb8d8ce8abda81e1e47e439258d9309", - "reference": "9314555aceb8d8ce8abda81e1e47e439258d9309", + "url": "https://api.github.com/repos/symfony/validator/zipball/d7edd7f44defbc4e0230512f929b5f4c067bb93e", + "reference": "d7edd7f44defbc4e0230512f929b5f4c067bb93e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", @@ -5307,34 +5489,34 @@ "symfony/translation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.13", "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<5.4", - "symfony/expression-language": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/intl": "<5.4", - "symfony/property-info": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.13|^2", "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5363,7 +5545,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.20" + "source": "https://github.com/symfony/validator/tree/v7.2.5" }, "funding": [ { @@ -5379,38 +5561,36 @@ "type": "tidelift" } ], - "time": "2025-03-14T14:22:58+00:00" + "time": "2025-03-21T15:05:21+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.18", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837" + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -5448,7 +5628,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.18" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" }, "funding": [ { @@ -5464,30 +5644,29 @@ "type": "tidelift" } ], - "time": "2025-01-17T11:26:11+00:00" + "time": "2025-01-17T11:39:41+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2" + "reference": "c37b301818bd7288715d40de634f05781b686ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/998df255e9e6a15a36ae35e9c6cd818c17cf92a2", - "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c37b301818bd7288715d40de634f05781b686ace", + "reference": "c37b301818bd7288715d40de634f05781b686ace", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.2" }, "require-dev": { "symfony/property-access": "^6.4|^7.0", "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5525,7 +5704,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.20" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.5" }, "funding": [ { @@ -5541,32 +5720,32 @@ "type": "tidelift" } ], - "time": "2025-03-13T09:55:08+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f" + "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/28ee818fce4a73ac1474346b94e4b966f665c53f", - "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912", + "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -5597,7 +5776,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.20" + "source": "https://github.com/symfony/yaml/tree/v7.2.5" }, "funding": [ { @@ -5613,7 +5792,7 @@ "type": "tidelift" } ], - "time": "2025-02-27T20:15:30+00:00" + "time": "2025-03-03T07:12:39+00:00" }, { "name": "twig/twig", @@ -5754,16 +5933,16 @@ }, { "name": "zircote/swagger-php", - "version": "5.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "a9b953c25f5bd11ea0542636936de04504496bd9" + "reference": "7a6544c60441ddb5959b91266b3a290dc28537ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/a9b953c25f5bd11ea0542636936de04504496bd9", - "reference": "a9b953c25f5bd11ea0542636936de04504496bd9", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/7a6544c60441ddb5959b91266b3a290dc28537ba", + "reference": "7a6544c60441ddb5959b91266b3a290dc28537ba", "shasum": "" }, "require": { @@ -5834,9 +6013,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/5.1.0" + "source": "https://github.com/zircote/swagger-php/tree/5.1.1" }, - "time": "2025-04-18T00:35:12+00:00" + "time": "2025-04-27T10:02:08+00:00" } ], "packages-dev": [ @@ -6011,16 +6190,16 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.12", + "version": "2.1.13", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c" + "reference": "e55e03e6d4ac49cd1240907e5b08e5cd378572a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/96dde49e967c0c22812bcfa7bda4ff82c09f3b0c", - "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e55e03e6d4ac49cd1240907e5b08e5cd378572a9", + "reference": "e55e03e6d4ac49cd1240907e5b08e5cd378572a9", "shasum": "" }, "require": { @@ -6065,7 +6244,7 @@ "type": "github" } ], - "time": "2025-04-16T13:19:18+00:00" + "time": "2025-04-27T12:28:25+00:00" }, { "name": "phpstan/phpstan-symfony", @@ -6140,21 +6319,21 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.62.1", + "version": "v1.63.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590" + "reference": "69478ab39bc303abfbe3293006a78b09a8512425" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/468ff2708200c95ebc0d85d3174b6c6711b8a590", - "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/69478ab39bc303abfbe3293006a78b09a8512425", + "reference": "69478ab39bc303abfbe3293006a78b09a8512425", "shasum": "" }, "require": { "doctrine/inflector": "^2.0", - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "php": ">=8.1", "symfony/config": "^6.4|^7.0", "symfony/console": "^6.4|^7.0", @@ -6212,7 +6391,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.62.1" + "source": "https://github.com/symfony/maker-bundle/tree/v1.63.0" }, "funding": [ { @@ -6228,24 +6407,24 @@ "type": "tidelift" } ], - "time": "2025-01-15T00:21:40+00:00" + "time": "2025-04-26T01:41:37+00:00" }, { "name": "symfony/process", - "version": "v6.4.20", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", - "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", + "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -6273,7 +6452,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.20" + "source": "https://github.com/symfony/process/tree/v7.2.5" }, "funding": [ { @@ -6289,42 +6468,42 @@ "type": "tidelift" } ], - "time": "2025-03-10T17:11:00+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.19", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "7d1026a8e950d416cb5148ae88ac23db5d264839" + "reference": "4ffde1c860a100533b02697d9aaf5f45759ec26a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/7d1026a8e950d416cb5148ae88ac23db5d264839", - "reference": "7d1026a8e950d416cb5148ae88ac23db5d264839", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4ffde1c860a100533b02697d9aaf5f45759ec26a", + "reference": "4ffde1c860a100533b02697d9aaf5f45759ec26a", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/config": "^5.4|^6.0|^7.0", + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", "symfony/framework-bundle": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/twig-bundle": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/routing": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "twig/twig": "^3.12" }, "conflict": { - "symfony/form": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/twig-bundle": ">=7.0" + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2" }, "require-dev": { - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "symfony-bundle", "autoload": { @@ -6355,7 +6534,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.19" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.2.4" }, "funding": [ { @@ -6371,7 +6550,7 @@ "type": "tidelift" } ], - "time": "2025-02-14T12:21:59+00:00" + "time": "2025-02-14T14:27:24+00:00" } ], "aliases": [], diff --git a/backend/src/Application/Controller/Event/GetEventsController.php b/backend/src/Application/Controller/Event/GetEventsController.php index c3a19a6..ec6f5fc 100644 --- a/backend/src/Application/Controller/Event/GetEventsController.php +++ b/backend/src/Application/Controller/Event/GetEventsController.php @@ -57,7 +57,7 @@ class GetEventsController extends AbstractController )] public function get(string $id): JsonResponse { - $events = $this->readEventsHandler->handle(new ReadEvents((int)$id)); + $events = $this->readEventsHandler->handle(new ReadEvents($id)); if (count($events) === 0) { return $this->json(['error' => 'Event not found'], Response::HTTP_NOT_FOUND); diff --git a/backend/src/Domain/Event/ReadEvents.php b/backend/src/Domain/Event/ReadEvents.php index 5dc2bd2..513f971 100644 --- a/backend/src/Domain/Event/ReadEvents.php +++ b/backend/src/Domain/Event/ReadEvents.php @@ -7,11 +7,11 @@ use App\Domain\Model\PersistedEvent; class ReadEvents { public function __construct( - private readonly ?int $id = null + private readonly ?string $id = null ) { } - public function id(): ?int + public function id(): ?string { return $this->id; } diff --git a/backend/src/Domain/Event/ReadEventsHandler.php b/backend/src/Domain/Event/ReadEventsHandler.php index b64ed4c..dbae555 100644 --- a/backend/src/Domain/Event/ReadEventsHandler.php +++ b/backend/src/Domain/Event/ReadEventsHandler.php @@ -17,6 +17,10 @@ class ReadEventsHandler */ public function handle(ReadEvents $readEvents): array { + if ($readEvents->id() !== null) { + return array_filter([$this->eventRepository->find($readEvents->id())], static fn (?PersistedEvent $event) => $event !== null); + } + return $this->eventRepository->findAll(); } } diff --git a/backend/src/Domain/Location/Model/Address.php b/backend/src/Domain/Location/Model/Address.php new file mode 100644 index 0000000..d1ef056 --- /dev/null +++ b/backend/src/Domain/Location/Model/Address.php @@ -0,0 +1,22 @@ += 100) { + throw new InvalidArgumentException('Address line cannot be longer than 100 characters'); + } + } + + public static function create(string $addressLine, string $city, string $countryAlpha2, ?string $zipCode = null): self + { + return new self($addressLine, City::create($city, $countryAlpha2, $zipCode)); + } +} \ No newline at end of file diff --git a/backend/src/Domain/Location/Model/City.php b/backend/src/Domain/Location/Model/City.php new file mode 100644 index 0000000..1bc9ec7 --- /dev/null +++ b/backend/src/Domain/Location/Model/City.php @@ -0,0 +1,23 @@ += 100) { + throw new InvalidArgumentException('City name cannot be longer than 100 characters'); + } + } + + public static function create(string $name, string $countryAlpha2, ?string $zipCode = null): self + { + return new self($name, new Country($countryAlpha2), $zipCode !== null ? new ZipCode($zipCode) : null); + } +} \ No newline at end of file diff --git a/backend/src/Domain/Location/Model/Country.php b/backend/src/Domain/Location/Model/Country.php new file mode 100644 index 0000000..58a419c --- /dev/null +++ b/backend/src/Domain/Location/Model/Country.php @@ -0,0 +1,11 @@ + $this->id; + set => $this->id = $value; + } + + #[ORM\Column(type: 'string', length: 100)] + public private(set) string $addressLine { + get => $this->addressLine; + set => $this->addressLine = $value; + } + + #[ORM\Column(type: 'string', length: 100)] + public private(set) string $city { + get => $this->city; + set => $this->city = $value; + } + + #[ORM\Column(type: 'string', length: 2)] + public private(set) string $countryAlpha2 { + get => $this->countryAlpha2; + set => $this->countryAlpha2 = $value; + } + + #[ORM\Column(type: 'string', length: 10, nullable: true)] + public private(set) ?string $zipCode = null { + get => $this->zipCode; + set => $this->zipCode = $value; + } + + public function __construct( + string $addressLine, + string $city, + string $countryAlpha2, + ?string $zipCode = null, + ) { + $this->addressLine = $addressLine; + $this->city = $city; + $this->countryAlpha2 = $countryAlpha2; + $this->zipCode = $zipCode; + } +} + diff --git a/backend/src/Domain/Location/Model/ZipCode.php b/backend/src/Domain/Location/Model/ZipCode.php new file mode 100644 index 0000000..bf2588d --- /dev/null +++ b/backend/src/Domain/Location/Model/ZipCode.php @@ -0,0 +1,16 @@ += 16) { + throw new InvalidArgumentException('Zip code cannot be longer than 16 characters'); + } + } +} \ No newline at end of file diff --git a/docker-compose.server.yml b/docker-compose.server.yml index 596751d..318c26e 100644 --- a/docker-compose.server.yml +++ b/docker-compose.server.yml @@ -16,7 +16,7 @@ services: - proxy postgres: - hostname: calendi-postgres + hostname: calendi-postgres.test image: postgres:15 environment: POSTGRES_USER: postgres diff --git a/frontend/src/App.css b/frontend/src/App.css index 0dea1bf..7368101 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -17,18 +17,18 @@ } .App-header { - background-color: #282c34; + background-color: var(--color-secondary); min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: calc(10px + 2vmin); - color: white; + color: var(--text-on-dark); } .App-link { - color: #61dafb; + color: var(--color-accent); } @keyframes App-logo-spin { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index b1fa03d..38df06c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -3,6 +3,7 @@ import { TabView } from './components/navigation/TabView'; import Home from './pages/home/Home'; import Profile from './pages/profile/Profile'; import EditEvent from './pages/edit-event/EditEvent'; +import EventDetails from './pages/event-details/EventDetails'; import { faCalendar, faUser } from '@fortawesome/free-solid-svg-icons'; import { faHome } from '@fortawesome/free-solid-svg-icons'; import { useUser } from './lib/context'; @@ -32,6 +33,7 @@ function App() { } /> + } /> } /> diff --git a/frontend/src/components/navigation/TabView.css b/frontend/src/components/navigation/TabView.css index d4d34a8..4554160 100644 --- a/frontend/src/components/navigation/TabView.css +++ b/frontend/src/components/navigation/TabView.css @@ -6,7 +6,7 @@ max-width: 100%; top: 0; left: 0; - background-color: #f8fafc; + background-color: var(--bg-primary); overflow-x: hidden; box-sizing: border-box; } @@ -24,10 +24,10 @@ .tab-bar { display: flex; - background-color: #ffffff; - border-top: 1px solid #e2e8f0; + background-color: var(--bg-primary); + border-top: 1px solid var(--border-light); margin-top: auto; - box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05); + box-shadow: 0 -2px 10px var(--shadow-color); border-radius: 16px 16px 0 0; padding: 5px 10px; position: fixed; @@ -45,7 +45,7 @@ background: none; border: none; cursor: pointer; - color: #64748b; + color: var(--color-slate); transition: all 0.3s ease; border-radius: 12px; margin: 0 4px; @@ -60,15 +60,15 @@ left: 50%; width: 0; height: 3px; - background-color: #3182ce; + background-color: var(--color-accent); transition: all 0.3s ease; transform: translateX(-50%); border-radius: 3px 3px 0 0; } .tab-bar-item:hover { - color: #334155; - background-color: #f1f5f9; + color: var(--text-secondary); + background-color: var(--state-hover); } .tab-bar-item:hover::after { @@ -76,9 +76,9 @@ } .tab-bar-item.active { - color: #3182ce; - background-color: #ebf8ff; - box-shadow: 0 2px 6px rgba(49, 130, 206, 0.15); + color: var(--color-secondary); + background-color: var(--state-active); + box-shadow: 0 2px 6px var(--shadow-color); transform: translateY(-2px); } @@ -115,8 +115,8 @@ flex-direction: column; justify-content: start; align-items: start; - background-color: #ffffff; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); + background-color: var(--bg-primary); + box-shadow: 0 5px 15px var(--shadow-color); width: 100%; max-width: 100%; box-sizing: border-box; diff --git a/frontend/src/components/ui/Calendar/Calendar.module.css b/frontend/src/components/ui/Calendar/Calendar.module.css index a429765..8d512f4 100644 --- a/frontend/src/components/ui/Calendar/Calendar.module.css +++ b/frontend/src/components/ui/Calendar/Calendar.module.css @@ -1,7 +1,7 @@ .calendar { - background-color: #fff; + background-color: var(--bg-primary); border-radius: 12px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + box-shadow: 0 4px 12px var(--shadow-color); overflow: hidden; width: 100%; max-width: 900px; @@ -23,15 +23,15 @@ align-items: center; justify-content: space-between; padding: 20px 24px; - border-bottom: 1px solid #f0f0f0; - background-color: #fff; + border-bottom: 1px solid var(--border-light); + background-color: var(--bg-primary); } .headerTitle { font-size: 20px; font-weight: 600; margin: 0; - color: #333; + color: var(--text-secondary); } .navButton { @@ -44,18 +44,18 @@ align-items: center; justify-content: center; cursor: pointer; - color: #666; + color: var(--color-slate); transition: background-color 0.2s, color 0.2s; } .navButton:hover { - background-color: #f5f5f5; - color: #333; + background-color: var(--state-hover); + color: var(--text-secondary); } .navButton:focus { outline: none; - box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.3); + box-shadow: 0 0 0 2px var(--state-focus); } /* Calendar grid styles */ @@ -71,8 +71,8 @@ text-align: center; font-size: 13px; font-weight: 600; - color: #777; - border-bottom: 1px solid #f0f0f0; + color: var(--color-slate); + border-bottom: 1px solid var(--border-light); } .day, .emptyDay { @@ -84,7 +84,7 @@ } .day:hover { - background-color: #f5f5f5; + background-color: var(--state-hover); } .dayNumber { @@ -93,7 +93,7 @@ left: 6px; font-size: 14px; font-weight: 500; - color: #444; + color: var(--text-primary); height: 24px; width: 24px; display: flex; @@ -103,12 +103,12 @@ } .today .dayNumber { - background-color: #4285f4; - color: white; + background-color: var(--color-secondary); + color: var(--text-on-dark); } .selectedDay { - background-color: rgba(66, 133, 244, 0.08); + background-color: var(--state-active); } .selectedDay .dayNumber { @@ -134,21 +134,21 @@ .moreEvents { font-size: 10px; - color: #777; + color: var(--color-slate); margin-top: 2px; } /* Events list styles */ .eventsList { padding: 16px; - border-left: 1px solid #f0f0f0; + border-left: 1px solid var(--border-light); flex: 1; max-height: 460px; overflow-y: auto; @media (max-width: 767px) { border-left: none; - border-top: 1px solid #f0f0f0; + border-top: 1px solid var(--border-light); } } @@ -156,13 +156,13 @@ font-size: 16px; font-weight: 600; margin: 0 0 16px; - color: #333; + color: var(--text-secondary); } .eventsListEmpty { padding: 20px; text-align: center; - color: #777; + color: var(--color-slate); font-style: italic; } @@ -175,26 +175,26 @@ .event { padding: 12px; border-radius: 8px; - background-color: #f8f9fa; - border-left: 4px solid #4285f4; + background-color: var(--state-hover); + border-left: 4px solid var(--event-default); cursor: pointer; transition: transform 0.1s, box-shadow 0.2s; } .event:hover { transform: translateY(-2px); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + box-shadow: 0 2px 8px var(--shadow-color); } .eventTime { font-size: 12px; font-weight: 500; - color: #666; + color: var(--color-slate); margin-bottom: 4px; } .eventTitle { font-size: 14px; font-weight: 500; - color: #333; + color: var(--text-primary); } \ No newline at end of file diff --git a/frontend/src/components/ui/Calendar/index.tsx b/frontend/src/components/ui/Calendar/index.tsx index 9b97c77..9a1f98e 100644 --- a/frontend/src/components/ui/Calendar/index.tsx +++ b/frontend/src/components/ui/Calendar/index.tsx @@ -1,4 +1,5 @@ import { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; import { CalendarHeader } from './CalendarHeader'; import { CalendarGrid } from './CalendarGrid'; import { CalendarEventsList } from './CalendarEventsList'; @@ -25,6 +26,7 @@ export const Calendar = ({ onEventClick, initialDate = new Date() }: CalendarProps) => { + const navigate = useNavigate(); const [currentDate, setCurrentDate] = useState(initialDate); const [selectedDate, setSelectedDate] = useState(null); const [daysInMonth, setDaysInMonth] = useState([]); @@ -64,6 +66,15 @@ export const Calendar = ({ } }; + const handleEventClick = (event: CalendarEvent) => { + if (onEventClick) { + onEventClick(event); + } else { + // Default behavior: navigate to event details + navigate(`/event/${event.id}`); + } + }; + const filteredEvents = selectedDate ? events.filter(event => formatDate(event.date) === formatDate(selectedDate)) : []; @@ -90,7 +101,7 @@ export const Calendar = ({ )} diff --git a/frontend/src/components/ui/EventDraftCard.css b/frontend/src/components/ui/EventDraftCard.css index 3976534..e79ec50 100644 --- a/frontend/src/components/ui/EventDraftCard.css +++ b/frontend/src/components/ui/EventDraftCard.css @@ -35,9 +35,9 @@ } .event-draft-card { - background-color: #ffffff; + background-color: var(--bg-primary); border-radius: 20px; - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2), 0 6px 12px rgba(0, 0, 0, 0.15); + box-shadow: 0 10px 30px var(--shadow-color), 0 6px 12px var(--shadow-color); width: 100%; max-width: 100%; padding: 24px; @@ -58,7 +58,7 @@ border: none; font-size: 22px; cursor: pointer; - color: #666; + color: var(--color-slate); width: 32px; height: 32px; display: flex; @@ -69,8 +69,8 @@ } .draft-close-button:hover { - background-color: #f0f0f0; - color: #000; + background-color: var(--state-hover); + color: var(--text-primary); } .draft-card-content { @@ -82,14 +82,14 @@ font-weight: 600; margin: 0 0 16px 0; line-height: 1.2; - color: #000000; + color: var(--text-primary); } .draft-description { font-size: 16px; line-height: 1.4; margin-bottom: 20px; - color: #333; + color: var(--text-secondary); white-space: pre-line; } @@ -104,7 +104,7 @@ .draft-time { display: flex; align-items: flex-start; - color: #555; + color: var(--color-slate); } .draft-label { @@ -116,8 +116,8 @@ .draft-all-day { display: inline-block; - background-color: #F2ADAD; - color: #000; + background-color: var(--color-accent); + color: var(--text-primary); padding: 4px 12px; border-radius: 6px; font-size: 14px; @@ -144,21 +144,21 @@ } .draft-save-button { - background-color: #F2ADAD; - color: #000000; + background-color: var(--color-accent); + color: var(--text-primary); } .draft-save-button:hover { - background-color: #f09e9e; + background-color: var(--color-mint); transform: translateY(-1px); } .draft-edit-button { - background-color: #e8f0fe; - color: #1a73e8; + background-color: var(--state-hover); + color: var(--color-secondary); } .draft-edit-button:hover { - background-color: #d2e3fc; + background-color: var(--state-active); transform: translateY(-1px); } \ No newline at end of file diff --git a/frontend/src/components/ui/LoadingOverlay.css b/frontend/src/components/ui/LoadingOverlay.css index 28e5682..df940dd 100644 --- a/frontend/src/components/ui/LoadingOverlay.css +++ b/frontend/src/components/ui/LoadingOverlay.css @@ -4,7 +4,7 @@ left: 0; right: 0; bottom: 0; - background-color: rgba(255, 255, 255, 0.9); + background-color: var(--overlay-dark); z-index: 1000; display: flex; justify-content: center; @@ -14,14 +14,14 @@ } .loading-overlay.transparent-background { - background-color: rgba(255, 255, 255, 0.5); + background-color: var(--overlay-light); } .loading-overlay-content { padding: 2rem; border-radius: 1rem; - background-color: white; - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); + background-color: var(--bg-primary); + box-shadow: 0 10px 25px var(--shadow-color); animation: scaleInOverlay 0.5s ease-in-out; } diff --git a/frontend/src/components/ui/LoadingSpinner.css b/frontend/src/components/ui/LoadingSpinner.css index ea839b6..33769a1 100644 --- a/frontend/src/components/ui/LoadingSpinner.css +++ b/frontend/src/components/ui/LoadingSpinner.css @@ -14,7 +14,7 @@ left: 0; right: 0; bottom: 0; - background-color: rgba(255, 255, 255, 0.9); + background-color: var(--overlay-dark); z-index: 1000; } @@ -26,7 +26,7 @@ } .loading-spinner { - color: #F2ADAD; + color: var(--color-accent); opacity: 0; transform: scale(0.9); animation: scaleIn 0.6s ease-out forwards 0.2s; @@ -47,7 +47,7 @@ .loading-spinner-message { margin-top: 1rem; font-size: 1.2rem; - color: #555; + color: var(--color-slate); font-weight: 500; opacity: 0; animation: slideUp 0.6s ease-out forwards 0.3s; diff --git a/frontend/src/index.css b/frontend/src/index.css index 7fda517..489b5eb 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,4 +1,5 @@ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); +@import './lib/utils/colors.css'; * { box-sizing: border-box; @@ -17,6 +18,8 @@ body { sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + color: var(--text-primary); + background-color: var(--bg-primary); } code { diff --git a/frontend/src/lib/utils/DateUtils.ts b/frontend/src/lib/utils/DateUtils.ts index 1cc8b61..28b03b6 100644 --- a/frontend/src/lib/utils/DateUtils.ts +++ b/frontend/src/lib/utils/DateUtils.ts @@ -86,4 +86,66 @@ export class DateUtils { result.setFullYear(result.getFullYear() + years); return result; } -} \ No newline at end of file +} + +/** + * Format a date to a human-readable date string (e.g., "Monday, January 1, 2023") + */ +export const formatDate = (date: Date): string => { + return date.toLocaleDateString(undefined, { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric' + }); +}; + +/** + * Format a date to a time string (e.g., "9:00 AM") + */ +export const formatTime = (date: Date): string => { + return date.toLocaleTimeString(undefined, { + hour: '2-digit', + minute: '2-digit' + }); +}; + +/** + * Format a date range for display + */ +export const formatDateRange = (start: Date, end: Date, allDay = false): string => { + // Same day + if (start.toDateString() === end.toDateString()) { + if (allDay) { + return formatDate(start); + } + return `${formatDate(start)}, ${formatTime(start)} - ${formatTime(end)}`; + } + + // Different days + if (allDay) { + return `${formatDate(start)} - ${formatDate(end)}`; + } + return `${formatDate(start)}, ${formatTime(start)} - ${formatDate(end)}, ${formatTime(end)}`; +}; + +/** + * Get a short formatted date (e.g., "Jan 1") + */ +export const formatShortDate = (date: Date): string => { + return date.toLocaleDateString(undefined, { + month: 'short', + day: 'numeric' + }); +}; + +/** + * Check if two dates are on the same day + */ +export const isSameDay = (date1: Date, date2: Date): boolean => { + return ( + date1.getFullYear() === date2.getFullYear() && + date1.getMonth() === date2.getMonth() && + date1.getDate() === date2.getDate() + ); +}; \ No newline at end of file diff --git a/frontend/src/lib/utils/colors.css b/frontend/src/lib/utils/colors.css new file mode 100644 index 0000000..33b460b --- /dev/null +++ b/frontend/src/lib/utils/colors.css @@ -0,0 +1,51 @@ +:root { + /* Color Palette */ + --color-dark: #222222; + --color-white: #FFFFFF; + --color-light: #F5F5F5; + --color-indigo: #4B4E6D; + --color-mint: #84DCC6; + --color-slate: #95A3B3; + + /* 60-30-10 Rule Application */ + --color-primary: var(--color-white); /* 60% - dominant */ + --color-secondary: var(--color-indigo); /* 30% - secondary */ + --color-accent: var(--color-mint); /* 10% - accent */ + + /* Text Colors */ + --text-primary: var(--color-dark); + --text-secondary: var(--color-indigo); + --text-on-dark: var(--color-white); + + /* Background Colors */ + --bg-primary: var(--color-white); + --bg-secondary: var(--color-slate); + --bg-tertiary: var(--color-indigo); + + /* Border and Shadow Colors */ + --border-light: rgba(34, 34, 34, 0.1); + --shadow-color: rgba(34, 34, 34, 0.08); + --shadow-accent: rgba(132, 220, 198, 0.3); + --shadow-accent-hover: rgba(132, 220, 198, 0.4); + + /* Overlay Colors */ + --overlay-background: rgba(255, 255, 255, 0.8); + --overlay-light: rgba(255, 255, 255, 0.5); + --overlay-dark: rgba(255, 255, 255, 0.9); + + /* State Colors */ + --state-hover: rgba(75, 78, 109, 0.08); + --state-active: rgba(75, 78, 109, 0.15); + --state-focus: rgba(132, 220, 198, 0.3); + + /* Calendar Event Colors */ + --event-default: var(--color-indigo); + --event-highlight: var(--color-mint); + --event-secondary: var(--color-slate); + + /* Feedback Colors */ + --color-error: #e53e3e; + --color-success: #38a169; + --color-warning: #d69e2e; + --color-info: #3182ce; +} \ No newline at end of file diff --git a/frontend/src/pages/edit-event/EditEvent.css b/frontend/src/pages/edit-event/EditEvent.css index de1c8b2..0e9b4fe 100644 --- a/frontend/src/pages/edit-event/EditEvent.css +++ b/frontend/src/pages/edit-event/EditEvent.css @@ -2,7 +2,7 @@ max-width: 800px; margin: 0 auto; padding: 2rem; - background-color: #ffffff; + background-color: var(--bg-primary); min-height: 100vh; } @@ -10,7 +10,7 @@ font-size: 1.8rem; font-weight: 600; margin-bottom: 2rem; - color: #000000; + color: var(--text-secondary); } .edit-event-form { @@ -28,7 +28,7 @@ .form-group label { font-weight: 500; font-size: 1rem; - color: #333; + color: var(--text-primary); } .form-group input[type="text"], @@ -36,10 +36,10 @@ .form-group input[type="date"], .form-group input[type="time"] { padding: 0.75rem; - border: 1px solid #ddd; + border: 1px solid var(--border-light); border-radius: 8px; font-size: 1rem; - background-color: #f9f9f9; + background-color: var(--bg-primary); transition: border-color 0.2s ease; } @@ -48,8 +48,8 @@ .form-group input[type="date"]:focus, .form-group input[type="time"]:focus { outline: none; - border-color: #F2ADAD; - box-shadow: 0 0 0 2px rgba(242, 173, 173, 0.2); + border-color: var(--color-accent); + box-shadow: 0 0 0 2px var(--state-focus); } .form-checkbox { @@ -61,7 +61,7 @@ .form-checkbox input[type="checkbox"] { width: 18px; height: 18px; - accent-color: #F2ADAD; + accent-color: var(--color-accent); } .form-row { @@ -91,22 +91,22 @@ } .save-button { - background-color: #F2ADAD; - color: #000000; + background-color: var(--color-accent); + color: var(--text-primary); } .save-button:hover { - background-color: #f09e9e; + background-color: var(--color-mint); transform: translateY(-1px); } .cancel-button { - background-color: #f0f0f0; - color: #555; + background-color: var(--state-hover); + color: var(--color-slate); } .cancel-button:hover { - background-color: #e5e5e5; + background-color: var(--state-active); transform: translateY(-1px); } diff --git a/frontend/src/pages/event-details/EventDetails.css b/frontend/src/pages/event-details/EventDetails.css new file mode 100644 index 0000000..14b0c66 --- /dev/null +++ b/frontend/src/pages/event-details/EventDetails.css @@ -0,0 +1,116 @@ +.event-details-container { + max-width: 800px; + margin: 0 auto; + padding: 20px; + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.event-details-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 24px; + padding-bottom: 16px; + border-bottom: 1px solid #f0f0f0; +} + +.event-details-title { + margin: 0; + font-size: 24px; + font-weight: 600; + color: #333; + text-align: center; + flex: 1; +} + +.back-button, .edit-button { + padding: 8px 16px; + border: none; + border-radius: 4px; + background-color: #f5f5f5; + color: #333; + font-weight: 500; + cursor: pointer; + transition: background-color 0.2s; +} + +.back-button:hover, .edit-button:hover { + background-color: #e0e0e0; +} + +.edit-button { + background-color: #4285f4; + color: white; +} + +.edit-button:hover { + background-color: #3367d6; +} + +.event-details-content { + padding: 16px 0; +} + +.event-details-time { + margin-bottom: 24px; + padding: 16px; + background-color: #f8f9fa; + border-radius: 8px; +} + +.event-date, .event-time, .event-all-day { + margin-bottom: 8px; + font-size: 16px; +} + +.event-all-day { + font-weight: 500; + color: #4285f4; +} + +.event-description { + margin-top: 24px; +} + +.event-description h3 { + font-size: 18px; + margin-bottom: 8px; + color: #333; +} + +.event-description p { + font-size: 16px; + line-height: 1.6; + color: #555; + white-space: pre-line; +} + +.event-details-error { + max-width: 600px; + margin: 100px auto; + padding: 24px; + text-align: center; + background-color: #fff; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.event-details-error p { + margin-bottom: 20px; + font-size: 18px; + color: #d93025; +} + +@media (max-width: 768px) { + .event-details-container { + border-radius: 0; + box-shadow: none; + padding: 16px; + } + + .event-details-title { + font-size: 20px; + } +} \ No newline at end of file diff --git a/frontend/src/pages/event-details/EventDetails.tsx b/frontend/src/pages/event-details/EventDetails.tsx new file mode 100644 index 0000000..38b226a --- /dev/null +++ b/frontend/src/pages/event-details/EventDetails.tsx @@ -0,0 +1,117 @@ +import React, { useState, useEffect } from 'react'; +import { useParams, useNavigate } from 'react-router-dom'; +import { getEvent, Event } from '../../lib/api/endpoints'; +import LoadingSpinner from '../../components/ui/LoadingSpinner'; +import { formatDate, formatTime } from '../../lib/utils/DateUtils'; +import './EventDetails.css'; + +const EventDetails: React.FC = () => { + const { id } = useParams<{ id: string }>(); + const navigate = useNavigate(); + const [event, setEvent] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const fetchEventDetails = async () => { + if (!id) { + setError('Event ID is missing'); + setLoading(false); + return; + } + + try { + setLoading(true); + const eventData = await getEvent(id); + setEvent(eventData); + setLoading(false); + } catch (err) { + setError('Failed to load event details'); + setLoading(false); + } + }; + + fetchEventDetails(); + }, [id]); + + const handleBack = () => { + navigate(-1); + }; + + const handleEdit = () => { + if (event) { + // Convert the Event to EventDraft format and store in session storage + const eventDraft = { + id: event.id, + title: event.title, + description: event.description || '', + start: event.start, + end: event.end || null, + allDay: event.allDay || false + }; + + // Store the draft data in sessionStorage for use on the edit page + sessionStorage.setItem('editingEventDraft', JSON.stringify(eventDraft)); + + // Navigate to the edit page + navigate(`/edit-event/${event.id}`); + } + }; + + if (loading) { + return ; + } + + if (error || !event) { + return ( + + {error || 'Event not found'} + + Back + + + ); + } + + const startDate = new Date(event.start); + const endDate = event.end ? new Date(event.end) : null; + + return ( + + + + Back + + {event.title} + + Edit + + + + + + + Date: {formatDate(startDate)} + + {event.allDay ? ( + All day + ) : ( + + Time: {formatTime(startDate)} + {endDate && ` - ${formatTime(endDate)}`} + + )} + + + {event.description && ( + + Description + {event.description} + + )} + + + ); +}; + +export default EventDetails; \ No newline at end of file diff --git a/frontend/src/pages/event-details/index.ts b/frontend/src/pages/event-details/index.ts new file mode 100644 index 0000000..9ed5952 --- /dev/null +++ b/frontend/src/pages/event-details/index.ts @@ -0,0 +1 @@ +export { default } from './EventDetails'; \ No newline at end of file diff --git a/frontend/src/pages/home/Home.css b/frontend/src/pages/home/Home.css index 58c5a4f..a5316fd 100644 --- a/frontend/src/pages/home/Home.css +++ b/frontend/src/pages/home/Home.css @@ -2,7 +2,7 @@ display: flex; flex-direction: column; padding: 1.25rem; - background-color: #ffffff; + background-color: var(--bg-primary); height: 100%; overflow-y: auto; overflow-x: hidden; @@ -23,7 +23,7 @@ .greeting { font-size: 2rem; font-weight: 600; - color: #000000; + color: var(--text-primary); line-height: 0.75em; font-family: 'Inter', sans-serif; margin: 0; @@ -33,21 +33,21 @@ width: 40px; height: 40px; border-radius: 50%; - background-color: #F2ADAD; - color: #000000; + background-color: var(--color-accent); + color: var(--text-primary); border: none; font-size: 24px; display: flex; align-items: center; justify-content: center; cursor: pointer; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 4px var(--shadow-color); transition: transform 0.2s, background-color 0.2s; } .add-button:hover { transform: scale(1.05); - background-color: #f09e9e; + background-color: var(--color-mint); } .add-button span { @@ -105,13 +105,13 @@ } .textbox-container { - background: white; + background: var(--bg-primary); border-radius: 8px; padding: 0; width: 100%; max-width: 90%; position: relative; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25); + box-shadow: 0 4px 20px var(--shadow-color); animation: slideDown 0.3s ease-out; } @@ -128,7 +128,7 @@ font-family: 'Inter', sans-serif; font-size: 20px; resize: none; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + box-shadow: 0 4px 12px var(--shadow-color); } .close-button { @@ -139,12 +139,12 @@ border: none; font-size: 24px; cursor: pointer; - color: #666; + color: var(--color-slate); z-index: 1001; } .close-button:hover { - color: #000; + color: var(--text-primary); } .events-section { @@ -155,7 +155,7 @@ font-size: 1.25rem; font-weight: 700; margin-bottom: 1rem; - color: #000000; + color: var(--text-secondary); font-family: 'Inter', sans-serif; line-height: 1.2em; } @@ -190,52 +190,54 @@ } .event-item { - background-color: #F2ADAD; + background-color: var(--color-light); border-radius: 0.5rem; padding: 1.125rem 1.25rem; - color: #000000; + color: var(--text-primary); cursor: pointer; - transition: transform 0.2s, box-shadow 0.2s; - box-shadow: 0 2px 8px rgba(242, 173, 173, 0.3); - display: flex; - flex-direction: column; - min-height: 80px; + transition: transform 0.2s, box-shadow 0.2s, border-left-width 0.2s; + box-shadow: 0 2px 8px var(--shadow-light); + border-left: 8px solid var(--color-accent); } .event-item:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(242, 173, 173, 0.4); + transform: translateY(-3px); + box-shadow: 0 4px 12px var(--shadow-color); + border-left-width: 12px; } .event-title { - font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem; - word-break: break-word; + font-size: 1rem; + line-height: 1.3; + color: var(--text-primary); } .event-time { - font-size: 0.875rem; - opacity: 0.9; + font-size: 0.85rem; + color: var(--text-primary); + opacity: 0.8; } .no-events { - color: #888; + text-align: center; + padding: 1.5rem; + color: var(--color-slate); font-style: italic; - padding: 1rem 0; + background-color: var(--state-hover); + border-radius: 0.5rem; } .loading, .error { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - font-size: 1.125rem; - color: #555; + text-align: center; + padding: 1.5rem; + color: var(--color-slate); + font-style: italic; } .error { - color: #F2ADAD; + color: var(--color-error, #e53e3e); } .draft-loading-overlay { @@ -244,37 +246,35 @@ left: 0; right: 0; bottom: 0; - background-color: rgba(255, 255, 255, 0.8); + background-color: var(--overlay-background); display: flex; - align-items: center; justify-content: center; - z-index: 2000; - backdrop-filter: blur(3px); + align-items: center; + z-index: 1000; } /* Responsive adjustments */ @media (max-width: 768px) { .greeting { - font-size: 1.75rem; + font-size: 1.5rem; + line-height: 1em; } .section-title { - font-size: 1.25rem; + font-size: 1.125rem; } .events-section { - margin-bottom: 2rem; - width: 100%; - max-width: 100%; + margin-bottom: 1.5rem; } .tomorrow-events { - flex-direction: column; + overflow-x: auto; + padding-bottom: 1rem; } .tomorrow-events .event-item { - width: 100%; - min-width: auto; + min-width: 230px; } } @@ -284,11 +284,11 @@ } .greeting { - font-size: 1.5rem; + font-size: 1.25rem; } .tomorrow-events .event-item { - width: 100%; + min-width: 200px; } .week-events { @@ -299,6 +299,6 @@ /* Ensure scrolling works properly within the TabView */ @media (max-height: 700px) { .home-container { - padding-bottom: 6.25rem; + padding-bottom: 5rem; } } \ No newline at end of file diff --git a/frontend/src/pages/home/Home.tsx b/frontend/src/pages/home/Home.tsx index 07ae23d..203f3a8 100644 --- a/frontend/src/pages/home/Home.tsx +++ b/frontend/src/pages/home/Home.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState, useRef, KeyboardEvent } from 'react'; -import { getEvents, Event, generateDraft, EventDraft, GenerateDraftRequest } from '../../lib/api/endpoints'; +import { getEvents, Event, generateDraft, EventDraft, GenerateDraftRequest, persistEvent, PersistEventRequest } from '../../lib/api/endpoints'; import LoadingSpinner from '../../components/ui/LoadingSpinner'; import EventDraftCard from '../../components/ui/EventDraftCard'; import { useUser } from '../../lib/context'; @@ -20,6 +20,7 @@ const Home: React.FC = () => { const [inputText, setInputText] = useState(''); const [isDraftLoading, setIsDraftLoading] = useState(false); const [eventDraft, setEventDraft] = useState(null); + const [isSaving, setIsSaving] = useState(false); const textInputRef = useRef(null); useEffect(() => { @@ -135,8 +136,43 @@ const Home: React.FC = () => { navigate(`/edit-event/${draft.id}`); }; + const saveEvent = async (draft: EventDraft) => { + try { + setIsSaving(true); + const request: PersistEventRequest = { draft }; + const savedEvent = await persistEvent(request); + + // Add the new event to the appropriate list + const eventDate = new Date(savedEvent.start); + eventDate.setHours(0, 0, 0, 0); + + const today = new Date(); + today.setHours(0, 0, 0, 0); + + const tomorrow = new Date(today); + tomorrow.setDate(tomorrow.getDate() + 1); + + const weekEnd = new Date(today); + weekEnd.setDate(weekEnd.getDate() + 7); + + if (eventDate.getTime() === today.getTime()) { + setTodayEvents(prev => [...prev, savedEvent]); + } else if (eventDate.getTime() === tomorrow.getTime()) { + setTomorrowEvents(prev => [...prev, savedEvent]); + } else if (eventDate > today && eventDate <= weekEnd) { + setWeekEvents(prev => [...prev, savedEvent]); + } + + setIsSaving(false); + handleDraftClose(); + } catch (err) { + setError('Failed to save event'); + setIsSaving(false); + } + }; + const EventItem = ({ event }: { event: Event }) => ( - + navigate(`/event/${event.id}`)}> {event.title} {new Date(event.start).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} @@ -156,9 +192,9 @@ const Home: React.FC = () => { return ( - {isDraftLoading && ( + {(isDraftLoading || isSaving) && ( - + )} @@ -167,19 +203,7 @@ const Home: React.FC = () => { draft={eventDraft} onClose={handleDraftClose} onEdit={handleEditDraft} - onSave={() => { - // For now we just close the card and log the data - const eventData = { - title: eventDraft.title, - description: eventDraft.description, - start: eventDraft.start || new Date().toISOString(), - end: eventDraft.end || new Date().toISOString(), - allDay: eventDraft.allDay - }; - console.log('Saving event:', eventData); - // Add actual implementation for saving the event - handleDraftClose(); - }} + onSave={() => saveEvent(eventDraft)} /> )} @@ -230,8 +254,8 @@ const Home: React.FC = () => { {isTextboxOpen && ( - - + + e.stopPropagation()}> ×
{error || 'Event not found'}
{event.description}