From 403d7d1d912e4d283be211c83848f2f60d30c941 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Thu, 15 May 2025 08:56:53 -0400 Subject: [PATCH 01/41] Primer commit... instalacion limpia. --- composer.lock | 8224 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8224 insertions(+) create mode 100644 composer.lock diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..baa173013 --- /dev/null +++ b/composer.lock @@ -0,0 +1,8224 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "6d580901de64f9d577d8c139cea61306", + "packages": [ + { + "name": "brick/math", + "version": "0.12.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-02-28T13:11:00+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8c784d071debd117328803d86b2097615b457500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2024-10-09T13:47:03+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-03-27T13:37:11+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-03-27T13:27:01+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.7.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2025-03-27T12:30:47+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2025-02-03T10:55:03+00:00" + }, + { + "name": "inertiajs/inertia-laravel", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/inertiajs/inertia-laravel.git", + "reference": "248e815cf8d41307cbfb735efaa514c118e2f3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/248e815cf8d41307cbfb735efaa514c118e2f3b4", + "reference": "248e815cf8d41307cbfb735efaa514c118e2f3b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": "^10.0|^11.0|^12.0", + "php": "^8.1.0", + "symfony/console": "^6.2|^7.0" + }, + "require-dev": { + "laravel/pint": "^1.16", + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^8.0|^9.2|^10.0", + "phpunit/phpunit": "^10.4|^11.5", + "roave/security-advisories": "dev-master" + }, + "suggest": { + "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Inertia\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./helpers.php" + ], + "psr-4": { + "Inertia\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Reinink", + "email": "jonathan@reinink.ca", + "homepage": "https://reinink.ca" + } + ], + "description": "The Laravel adapter for Inertia.js.", + "keywords": [ + "inertia", + "laravel" + ], + "support": { + "issues": "https://github.com/inertiajs/inertia-laravel/issues", + "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.2" + }, + "time": "2025-04-10T15:08:36+00:00" + }, + { + "name": "laravel/framework", + "version": "v12.14.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "84b142958d1638a7e89de94ce75c2821c601d3d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/84b142958d1638a7e89de94ce75c2821c601d3d7", + "reference": "84b142958d1638a7e89de94ce75c2821c601d3d7", + "shasum": "" + }, + "require": { + "brick/math": "^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.7", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", + "symfony/http-foundation": "^7.2.0", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "orchestra/testbench-core": "^10.0.0", + "pda/pheanstalk": "^5.0.6|^7.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", + "predis/predis": "^2.3|^3.0", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", + "predis/predis": "Required to use the predis connector (^2.3|^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "12.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2025-05-13T17:50:51+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.5" + }, + "time": "2025-02-11T13:34:40+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2025-03-19T13:51:03+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.10.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.10.1" + }, + "time": "2025-01-27T14:24:01+00:00" + }, + { + "name": "league/commonmark", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", + "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2025-05-05T12:20:28+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.29.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" + }, + "time": "2024-10-08T08:58:34+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" + }, + "time": "2024-08-09T21:24:39+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "81fb5145d2644324614cc532b28efd0215bda430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.5", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.5.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:18:47+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2025-03-24T10:02:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.9.1", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "ced71f79398ece168e24f7f7710462f462310d4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ced71f79398ece168e24f7f7710462f462310d4d", + "reference": "ced71f79398ece168e24f7f7710462f462310d4d", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-05-01T19:51:51+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.6", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "ce708655043c7050eb050df361c5e313cf708309" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", + "reference": "ce708655043c7050eb050df361c5e313cf708309", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.6" + }, + "time": "2025-03-30T21:06:30+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + }, + "time": "2024-12-30T11:07:19+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", + "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.2.6" + }, + "require-dev": { + "illuminate/console": "^11.44.7", + "laravel/pint": "^1.22.0", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.2", + "phpstan/phpstan": "^1.12.25", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.2.6", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2025-05-08T08:14:37+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.8", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" + }, + "time": "2025-03-16T03:05:19+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/console", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0e2e3f38c192e93e622e41ec37f4ca70cfedf218", + "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "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": "^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": "^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": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.2.6" + }, + "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-04-07T19:09:28+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/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-03T07:12:39+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "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": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.2.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.2.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-30T19:00:17+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "6023ec7607254c87c5e69fb3558255aca440d72b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6023ec7607254c87c5e69fb3558255aca440d72b", + "reference": "6023ec7607254c87c5e69fb3558255aca440d72b", + "shasum": "" + }, + "require": { + "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": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "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": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.2.6" + }, + "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-04-09T08:14:01+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9dec01e6094a063e738f8945ef69c0cfcf792ec", + "reference": "f9dec01e6094a063e738f8945ef69c0cfcf792ec", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^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": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "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": "^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": "^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": "^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": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.2.6" + }, + "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-05-02T09:04:03+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/998692469d6e698c6eadc7ef37a6530a9eabb356", + "reference": "998692469d6e698c6eadc7ef37a6530a9eabb356", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.2.6" + }, + "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-04-04T09:50:51+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/706e65c72d402539a072d0d6ad105fff6c161ef1", + "reference": "706e65c72d402539a072d0d6ad105fff6c161ef1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.2.6" + }, + "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-04-27T13:34:41+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/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-13T12:21:46+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "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": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.2.3" + }, + "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-01-17T10:56:55+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/string", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931", + "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "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": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.2.6" + }, + "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-04-20T20:18:16+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.2.6" + }, + "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-04-07T19:09:28+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+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": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9c46038cd4ed68952166cf7001b54eb539184ccb", + "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.2.6" + }, + "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-04-09T08:14:01+00:00" + }, + { + "name": "tightenco/ziggy", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/tighten/ziggy.git", + "reference": "d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c", + "reference": "d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": ">=9.0", + "php": ">=8.1" + }, + "require-dev": { + "laravel/folio": "^1.1", + "orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0", + "pestphp/pest": "^2.26|^3.0", + "pestphp/pest-plugin-laravel": "^2.4|^3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Tighten\\Ziggy\\ZiggyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Tighten\\Ziggy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Coulbourne", + "email": "daniel@tighten.co" + }, + { + "name": "Jake Bathman", + "email": "jake@tighten.co" + }, + { + "name": "Jacob Baker-Kretzmar", + "email": "jacob@tighten.co" + } + ], + "description": "Use your Laravel named routes in JavaScript.", + "homepage": "https://github.com/tighten/ziggy", + "keywords": [ + "Ziggy", + "javascript", + "laravel", + "routes" + ], + "support": { + "issues": "https://github.com/tighten/ziggy/issues", + "source": "https://github.com/tighten/ziggy/tree/v2.5.2" + }, + "time": "2025-02-27T15:43:52+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" + }, + "time": "2024-12-21T16:25:41+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.2", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-04-30T23:37:27+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2024-11-21T01:49:47+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.0" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-03-15T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "f31f4980f52be17c4667f3eafe034e6826787db2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/f31f4980f52be17c4667f3eafe034e6826787db2", + "reference": "f31f4980f52be17c4667f3eafe034e6826787db2", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0", + "illuminate/contracts": "^10.24|^11.0|^12.0", + "illuminate/log": "^10.24|^11.0|^12.0", + "illuminate/process": "^10.24|^11.0|^12.0", + "illuminate/support": "^10.24|^11.0|^12.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", + "phpstan/phpstan": "^1.10", + "symfony/var-dumper": "^6.3|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2025-01-28T15:15:15+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "941d1927c5ca420c22710e98420287169c7bcaf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/941d1927c5ca420c22710e98420287169c7bcaf7", + "reference": "941d1927c5ca420c22710e98420287169c7bcaf7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.75.0", + "illuminate/view": "^11.44.7", + "larastan/larastan": "^3.4.0", + "laravel-zero/framework": "^11.36.1", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.3.1", + "pestphp/pest": "^2.36.0" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2025-05-08T08:38:12+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "71a509b14b2621ce58574274a74290f933c687f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/71a509b14b2621ce58574274a74290f933c687f7", + "reference": "71a509b14b2621ce58574274a74290f933c687f7", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0", + "symfony/yaml": "^6.0|^7.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "phpstan/phpstan": "^1.10" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2025-05-13T13:34:34+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-04-29T12:36:36+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.8.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/4cf9f3b47afff38b139fb79ce54fc71799022ce8", + "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.0", + "nunomaduro/termwind": "^2.3.0", + "php": "^8.2.0", + "symfony/console": "^7.2.5" + }, + "conflict": { + "laravel/framework": "<11.44.2 || >=13.0.0", + "phpunit/phpunit": "<11.5.15 || >=13.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.3", + "larastan/larastan": "^3.2", + "laravel/framework": "^11.44.2 || ^12.6", + "laravel/pint": "^1.21.2", + "laravel/sail": "^1.41.0", + "laravel/sanctum": "^4.0.8", + "laravel/tinker": "^2.10.1", + "orchestra/testbench-core": "^9.12.0 || ^10.1", + "pestphp/pest": "^3.8.0", + "sebastian/environment": "^7.2.0 || ^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2025-04-03T14:33:09+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.4.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.2" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-25T13:26:39+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-27T05:02:59+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "e6bdea63ecb7a8287d2cdab25bdde3126e0cfe6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e6bdea63ecb7a8287d2cdab25bdde3126e0cfe6f", + "reference": "e6bdea63ecb7a8287d2cdab25bdde3126e0cfe6f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.9", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.1", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.2", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-05-11T06:39:52+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-07T06:57:01+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:54:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-12-05T09:17:50+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:10:34+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-18T13:35:50+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0feafffb843860624ddfd13478f481f4c3cd8b23", + "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.2.6" + }, + "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-04-04T10:10:11+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} From 05d907e6d3f0a4015b67007e19db4b9bcf1cc9ed Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Thu, 15 May 2025 16:09:23 -0400 Subject: [PATCH 02/41] Instalado paquete de Spatie laravel-permission. https://spatie.be/docs/laravel-permission/v6/introduction --- app/Models/User.php | 3 +- composer.json | 1 + composer.lock | 85 +++++++- config/permission.php | 202 ++++++++++++++++++ ..._05_15_200546_create_permission_tables.php | 136 ++++++++++++ 5 files changed, 425 insertions(+), 2 deletions(-) create mode 100644 config/permission.php create mode 100644 database/migrations/2025_05_15_200546_create_permission_tables.php diff --git a/app/Models/User.php b/app/Models/User.php index 749c7b77d..ac2ca9244 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -6,11 +6,12 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { /** @use HasFactory<\Database\Factories\UserFactory> */ - use HasFactory, Notifiable; + use HasFactory, Notifiable, HasRoles; /** * The attributes that are mass assignable. diff --git a/composer.json b/composer.json index b64639e9e..21aaa9d8c 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "inertiajs/inertia-laravel": "^2.0", "laravel/framework": "^12.0", "laravel/tinker": "^2.10.1", + "spatie/laravel-permission": "^6.18", "tightenco/ziggy": "^2.4" }, "require-dev": { diff --git a/composer.lock b/composer.lock index baa173013..cdd685927 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6d580901de64f9d577d8c139cea61306", + "content-hash": "b53f7d3b0324c0a9a1a1f0fb215906ea", "packages": [ { "name": "brick/math", @@ -3354,6 +3354,89 @@ ], "time": "2024-04-27T21:32:50+00:00" }, + { + "name": "spatie/laravel-permission", + "version": "6.18.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "3c05f04d12275dfbe462c8b4aae3290e586c2dde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/3c05f04d12275dfbe462c8b4aae3290e586c2dde", + "reference": "3c05f04d12275dfbe462c8b4aae3290e586c2dde", + "shasum": "" + }, + "require": { + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/passport": "^11.0|^12.0", + "laravel/pint": "^1.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", + "phpunit/phpunit": "^9.4|^10.1|^11.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Permission\\PermissionServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Permission\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Permission handling for Laravel 8.0 and up", + "homepage": "https://github.com/spatie/laravel-permission", + "keywords": [ + "acl", + "laravel", + "permission", + "permissions", + "rbac", + "roles", + "security", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/6.18.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-05-14T03:32:23+00:00" + }, { "name": "symfony/clock", "version": "v7.2.0", diff --git a/config/permission.php b/config/permission.php new file mode 100644 index 000000000..f39f6b5bf --- /dev/null +++ b/config/permission.php @@ -0,0 +1,202 @@ + [ + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * Eloquent model should be used to retrieve your permissions. Of course, it + * is often just the "Permission" model but you may use whatever you like. + * + * The model you want to use as a Permission model needs to implement the + * `Spatie\Permission\Contracts\Permission` contract. + */ + + 'permission' => Spatie\Permission\Models\Permission::class, + + /* + * When using the "HasRoles" trait from this package, we need to know which + * Eloquent model should be used to retrieve your roles. Of course, it + * is often just the "Role" model but you may use whatever you like. + * + * The model you want to use as a Role model needs to implement the + * `Spatie\Permission\Contracts\Role` contract. + */ + + 'role' => Spatie\Permission\Models\Role::class, + + ], + + 'table_names' => [ + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'roles' => 'roles', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your permissions. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'permissions' => 'permissions', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your models permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_permissions' => 'model_has_permissions', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your models roles. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_roles' => 'model_has_roles', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'role_has_permissions' => 'role_has_permissions', + ], + + 'column_names' => [ + /* + * Change this if you want to name the related pivots other than defaults + */ + 'role_pivot_key' => null, // default 'role_id', + 'permission_pivot_key' => null, // default 'permission_id', + + /* + * Change this if you want to name the related model primary key other than + * `model_id`. + * + * For example, this would be nice if your primary keys are all UUIDs. In + * that case, name this `model_uuid`. + */ + + 'model_morph_key' => 'model_id', + + /* + * Change this if you want to use the teams feature and your related model's + * foreign key is other than `team_id`. + */ + + 'team_foreign_key' => 'team_id', + ], + + /* + * When set to true, the method for checking permissions will be registered on the gate. + * Set this to false if you want to implement custom logic for checking permissions. + */ + + 'register_permission_check_method' => true, + + /* + * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered + * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated + * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it. + */ + 'register_octane_reset_listener' => false, + + /* + * Events will fire when a role or permission is assigned/unassigned: + * \Spatie\Permission\Events\RoleAttached + * \Spatie\Permission\Events\RoleDetached + * \Spatie\Permission\Events\PermissionAttached + * \Spatie\Permission\Events\PermissionDetached + * + * To enable, set to true, and then create listeners to watch these events. + */ + 'events_enabled' => false, + + /* + * Teams Feature. + * When set to true the package implements teams using the 'team_foreign_key'. + * If you want the migrations to register the 'team_foreign_key', you must + * set this to true before doing the migration. + * If you already did the migration then you must make a new migration to also + * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions' + * (view the latest version of this package's migration file) + */ + + 'teams' => false, + + /* + * The class to use to resolve the permissions team id + */ + 'team_resolver' => \Spatie\Permission\DefaultTeamResolver::class, + + /* + * Passport Client Credentials Grant + * When set to true the package will use Passports Client to check permissions + */ + + 'use_passport_client_credentials' => false, + + /* + * When set to true, the required permission names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. + */ + + 'display_permission_in_exception' => false, + + /* + * When set to true, the required role names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. + */ + + 'display_role_in_exception' => false, + + /* + * By default wildcard permission lookups are disabled. + * See documentation to understand supported syntax. + */ + + 'enable_wildcard_permission' => false, + + /* + * The class to use for interpreting wildcard permissions. + * If you need to modify delimiters, override the class and specify its name here. + */ + // 'wildcard_permission' => Spatie\Permission\WildcardPermission::class, + + /* Cache-specific settings */ + + 'cache' => [ + + /* + * By default all permissions are cached for 24 hours to speed up performance. + * When permissions or roles are updated the cache is flushed automatically. + */ + + 'expiration_time' => \DateInterval::createFromDateString('24 hours'), + + /* + * The cache key used to store all permissions. + */ + + 'key' => 'spatie.permission.cache', + + /* + * You may optionally indicate a specific cache driver to use for permission and + * role caching using any of the `store` drivers listed in the cache.php config + * file. Using 'default' here means to use the `default` set in cache.php. + */ + + 'store' => 'default', + ], +]; diff --git a/database/migrations/2025_05_15_200546_create_permission_tables.php b/database/migrations/2025_05_15_200546_create_permission_tables.php new file mode 100644 index 000000000..ce4d9d2d4 --- /dev/null +++ b/database/migrations/2025_05_15_200546_create_permission_tables.php @@ -0,0 +1,136 @@ +engine('InnoDB'); + $table->bigIncrements('id'); // permission id + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + + $table->unique(['name', 'guard_name']); + }); + + Schema::create($tableNames['roles'], static function (Blueprint $table) use ($teams, $columnNames) { + // $table->engine('InnoDB'); + $table->bigIncrements('id'); // role id + if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing + $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable(); + $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index'); + } + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + if ($teams || config('permission.testing')) { + $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']); + } else { + $table->unique(['name', 'guard_name']); + } + }); + + Schema::create($tableNames['model_has_permissions'], static function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) { + $table->unsignedBigInteger($pivotPermission); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } else { + $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } + + }); + + Schema::create($tableNames['model_has_roles'], static function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) { + $table->unsignedBigInteger($pivotRole); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } else { + $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } + }); + + Schema::create($tableNames['role_has_permissions'], static function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) { + $table->unsignedBigInteger($pivotPermission); + $table->unsignedBigInteger($pivotRole); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + + $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary'); + }); + + app('cache') + ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) + ->forget(config('permission.cache.key')); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $tableNames = config('permission.table_names'); + + if (empty($tableNames)) { + throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); + } + + Schema::drop($tableNames['role_has_permissions']); + Schema::drop($tableNames['model_has_roles']); + Schema::drop($tableNames['model_has_permissions']); + Schema::drop($tableNames['roles']); + Schema::drop($tableNames['permissions']); + } +}; From 365f08667e3b1a72d23aec8d879f3515e1b3a4fb Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Thu, 15 May 2025 18:55:54 -0400 Subject: [PATCH 03/41] =?UTF-8?q?Implementaci=C3=B3n=20de=20b=C3=BAsqueda?= =?UTF-8?q?=20de=20usuarios=20utilizando=20el=20paquete=20Spatie=20laravel?= =?UTF-8?q?-searchable.=20Se=20han=20agregado=20los=20controladores=20Sear?= =?UTF-8?q?chController=20y=20UserController,=20as=C3=AD=20como=20las=20vi?= =?UTF-8?q?stas=20correspondientes=20para=20la=20b=C3=BAsqueda=20y=20visua?= =?UTF-8?q?lizaci=C3=B3n=20de=20detalles=20de=20usuarios.=20Tambi=C3=A9n?= =?UTF-8?q?=20se=20ha=20actualizado=20composer.json=20para=20incluir=20la?= =?UTF-8?q?=20nueva=20dependencia.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/SearchController.php | 31 +++++++++ app/Http/Controllers/UserController.php | 16 +++++ app/Models/User.php | 20 +++++- composer.json | 1 + composer.lock | 68 ++++++++++++++++++- resources/js/pages/Search/Index.tsx | 58 ++++++++++++++++ resources/js/pages/Search/Results.tsx | 80 +++++++++++++++++++++++ resources/js/pages/Users/Show.tsx | 40 ++++++++++++ routes/web.php | 9 +++ 9 files changed, 321 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/SearchController.php create mode 100644 app/Http/Controllers/UserController.php create mode 100644 resources/js/pages/Search/Index.tsx create mode 100644 resources/js/pages/Search/Results.tsx create mode 100644 resources/js/pages/Users/Show.tsx diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php new file mode 100644 index 000000000..263dc3ad0 --- /dev/null +++ b/app/Http/Controllers/SearchController.php @@ -0,0 +1,31 @@ +input('query'); + + $searchResults = (new Search()) + ->registerModel(User::class, ['name', 'email']) + //->registerModel(BlogPost::class, 'title') + ->search($query); + + return Inertia::render('Search/Results', [ + 'results' => $searchResults->groupByType(), + 'query' => $query + ]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 000000000..e73b4e517 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,16 @@ + $user + ]); + } +} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index ac2ca9244..8344165c5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,8 +7,10 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasRoles; +use Spatie\Searchable\Searchable; +use Spatie\Searchable\SearchResult; -class User extends Authenticatable +class User extends Authenticatable implements Searchable { /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable, HasRoles; @@ -46,4 +48,20 @@ protected function casts(): array 'password' => 'hashed', ]; } + + /** + * Implementación del método requerido por la interfaz Searchable + * + * @return \Spatie\Searchable\SearchResult + */ + public function getSearchResult(): SearchResult + { + $url = route('users.show', $this->id); + + return new SearchResult( + $this, + $this->name, + $url + ); + } } diff --git a/composer.json b/composer.json index 21aaa9d8c..77ecff6c9 100644 --- a/composer.json +++ b/composer.json @@ -14,6 +14,7 @@ "laravel/framework": "^12.0", "laravel/tinker": "^2.10.1", "spatie/laravel-permission": "^6.18", + "spatie/laravel-searchable": "^1.13", "tightenco/ziggy": "^2.4" }, "require-dev": { diff --git a/composer.lock b/composer.lock index cdd685927..e49c4ced4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b53f7d3b0324c0a9a1a1f0fb215906ea", + "content-hash": "d10ce69677a714dc5f4a971aa187ec46", "packages": [ { "name": "brick/math", @@ -3437,6 +3437,72 @@ ], "time": "2025-05-14T03:32:23+00:00" }, + { + "name": "spatie/laravel-searchable", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-searchable.git", + "reference": "7821e4c72277133cf541ea181724af64b2b972c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-searchable/zipball/7821e4c72277133cf541ea181724af64b2b972c5", + "reference": "7821e4c72277133cf541ea181724af64b2b972c5", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "laravel/framework": "^8.78|^9.0|^10.0|^11.0|^12.0", + "php": "^7.3|^8.0" + }, + "require-dev": { + "larapack/dd": "^1.0", + "orchestra/testbench": "^6.27|^7.0|^8.0|^9.0|^10.0", + "phpunit/phpunit": "^9.3|^10.0|^11.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Searchable\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Vanderbist", + "email": "alex@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Pragmatically search through models and other sources", + "homepage": "https://github.com/spatie/laravel-searchable", + "keywords": [ + "laravel-searchable", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-searchable/issues", + "source": "https://github.com/spatie/laravel-searchable/tree/1.13.0" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + } + ], + "time": "2025-02-25T15:59:46+00:00" + }, { "name": "symfony/clock", "version": "v7.2.0", diff --git a/resources/js/pages/Search/Index.tsx b/resources/js/pages/Search/Index.tsx new file mode 100644 index 000000000..22784c816 --- /dev/null +++ b/resources/js/pages/Search/Index.tsx @@ -0,0 +1,58 @@ +import { Head, router } from '@inertiajs/react'; +import { useState } from 'react'; + +export default function SearchIndex() { + const [query, setQuery] = useState(''); + + const handleSearch = (e: React.FormEvent) => { + e.preventDefault(); + router.get(route('search.results'), { query }, { + preserveState: true, + preserveScroll: true, + }); + }; + + console.log("query: " + query) + return ( + <> + +
+
+
+
+

+ Búsqueda de Usuarios +

+
+
+ +
+ setQuery(e.target.value)} + className="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 block w-full sm:text-sm border-gray-300 rounded-md" + placeholder="Ingrese nombre o correo electrónico..." + /> +
+
+
+ +
+
+
+
+
+
+ + ); +} \ No newline at end of file diff --git a/resources/js/pages/Search/Results.tsx b/resources/js/pages/Search/Results.tsx new file mode 100644 index 000000000..64719576b --- /dev/null +++ b/resources/js/pages/Search/Results.tsx @@ -0,0 +1,80 @@ +import { Head, router } from '@inertiajs/react'; + +interface SearchResultItem { + title: string; + url: string; + searchable: { + id: number; + name: string; + email: string; + }; +} + +interface Props { + results: { + [key: string]: SearchResultItem[]; + }; + query: string; +} + +export default function SearchResults({ results, query }: Props) { + console.log("results formateado:", JSON.stringify(results, null, 2)); // Muestra el objeto con indentación de 2 espacios + console.log("query: " + query) + return ( + <> + +
+
+
+
+
+

+ Resultados de búsqueda para: "{query}" +

+ +
+ {Object.entries(results).map(([type, items]) => ( +
+

{type}

+ {items.length > 0 ? ( +
    + {items.map((result) => ( +
  • +
    +
    +

    + {result.title} +

    +

    + {result.searchable.email} +

    +
    + +
    +
  • + ))} +
+ ) : ( +

No se encontraron resultados.

+ )} +
+ ))} +
+
+
+
+ + ); +} \ No newline at end of file diff --git a/resources/js/pages/Users/Show.tsx b/resources/js/pages/Users/Show.tsx new file mode 100644 index 000000000..799c05166 --- /dev/null +++ b/resources/js/pages/Users/Show.tsx @@ -0,0 +1,40 @@ +import { Head } from '@inertiajs/react'; + +interface User { + id: number; + name: string; + email: string; + email_verified_at: string | null; +} + +interface Props { + user: User; +} + +export default function UserShow({ user }: Props) { + return ( + <> + +
+
+
+
+

+ Detalle de Usuario +

+
+ Nombre: {user.name} +
+
+ Email: {user.email} +
+
+ Verificación de correo: {user.email_verified_at ? 'Verificado' : 'No verificado'} +
+
+
+
+
+ + ); +} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 5e4cebdf6..3e5cd3b36 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,7 @@ name('dashboard'); }); +// Búsqueda pública +Route::get('/search', [SearchController::class, 'index'])->name('search.index'); // Original +Route::get('/search/results', [SearchController::class, 'search'])->name('search.results'); + +// Detalle de usuario +Route::get('/users/{user}', [UserController::class, 'show'])->name('users.show'); + require __DIR__.'/settings.php'; require __DIR__.'/auth.php'; From 7b84d459a910acbec67f9f22ed4f5f05082e78a5 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Thu, 15 May 2025 19:28:17 -0400 Subject: [PATCH 04/41] =?UTF-8?q?Implementaci=C3=B3n=20de=20controladores?= =?UTF-8?q?=20para=20gestionar=20Individuos,=20Casos=20Legales=20y=20Entid?= =?UTF-8?q?ades=20Legales.=20Se=20han=20creado=20las=20migraciones=20y=20s?= =?UTF-8?q?eeders=20correspondientes=20para=20las=20nuevas=20entidades,=20?= =?UTF-8?q?as=C3=AD=20como=20las=20vistas=20para=20mostrar=20detalles=20de?= =?UTF-8?q?=20cada=20uno.=20Adem=C3=A1s,=20se=20ha=20actualizado=20el=20co?= =?UTF-8?q?ntrolador=20de=20b=C3=BAsqueda=20para=20incluir=20nuevos=20mode?= =?UTF-8?q?los=20en=20los=20resultados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/IndividualController.php | 68 ++++++++++ app/Http/Controllers/LegalCaseController.php | 68 ++++++++++ .../Controllers/LegalEntityController.php | 68 ++++++++++ app/Http/Controllers/SearchController.php | 37 +++++- app/Models/CaseType.php | 23 ++++ app/Models/Individual.php | 60 +++++++++ app/Models/LegalCase.php | 56 +++++++++ app/Models/LegalEntity.php | 63 ++++++++++ ...5_05_15_230324_create_case_types_table.php | 30 +++++ ..._05_15_230406_create_legal_cases_table.php | 33 +++++ ..._05_15_230437_create_individuals_table.php | 50 ++++++++ ..._15_230508_create_legal_entities_table.php | 53 ++++++++ ...5_230545_create_case_individuals_table.php | 29 +++++ ...30618_create_case_legal_entities_table.php | 29 +++++ database/seeders/CaseTypeSeeder.php | 43 +++++++ database/seeders/IndividualSeeder.php | 103 +++++++++++++++ database/seeders/LegalCaseSeeder.php | 98 +++++++++++++++ database/seeders/LegalEntitySeeder.php | 92 ++++++++++++++ resources/js/pages/Individuals/Show.tsx | 78 ++++++++++++ resources/js/pages/LegalCases/Show.tsx | 85 +++++++++++++ resources/js/pages/LegalEntities/Show.tsx | 92 ++++++++++++++ resources/js/pages/Search/Results.tsx | 117 +++++++++++++----- routes/web.php | 12 ++ 23 files changed, 1352 insertions(+), 35 deletions(-) create mode 100644 app/Http/Controllers/IndividualController.php create mode 100644 app/Http/Controllers/LegalCaseController.php create mode 100644 app/Http/Controllers/LegalEntityController.php create mode 100644 app/Models/CaseType.php create mode 100644 app/Models/Individual.php create mode 100644 app/Models/LegalCase.php create mode 100644 app/Models/LegalEntity.php create mode 100644 database/migrations/2025_05_15_230324_create_case_types_table.php create mode 100644 database/migrations/2025_05_15_230406_create_legal_cases_table.php create mode 100644 database/migrations/2025_05_15_230437_create_individuals_table.php create mode 100644 database/migrations/2025_05_15_230508_create_legal_entities_table.php create mode 100644 database/migrations/2025_05_15_230545_create_case_individuals_table.php create mode 100644 database/migrations/2025_05_15_230618_create_case_legal_entities_table.php create mode 100644 database/seeders/CaseTypeSeeder.php create mode 100644 database/seeders/IndividualSeeder.php create mode 100644 database/seeders/LegalCaseSeeder.php create mode 100644 database/seeders/LegalEntitySeeder.php create mode 100644 resources/js/pages/Individuals/Show.tsx create mode 100644 resources/js/pages/LegalCases/Show.tsx create mode 100644 resources/js/pages/LegalEntities/Show.tsx diff --git a/app/Http/Controllers/IndividualController.php b/app/Http/Controllers/IndividualController.php new file mode 100644 index 000000000..a7303c9ef --- /dev/null +++ b/app/Http/Controllers/IndividualController.php @@ -0,0 +1,68 @@ + $individual + ]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/LegalCaseController.php b/app/Http/Controllers/LegalCaseController.php new file mode 100644 index 000000000..612553a68 --- /dev/null +++ b/app/Http/Controllers/LegalCaseController.php @@ -0,0 +1,68 @@ +findOrFail($id); + + return \Inertia\Inertia::render('LegalCases/Show', [ + 'legalCase' => $legalCase + ]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/LegalEntityController.php b/app/Http/Controllers/LegalEntityController.php new file mode 100644 index 000000000..831d14a2e --- /dev/null +++ b/app/Http/Controllers/LegalEntityController.php @@ -0,0 +1,68 @@ + $legalEntity + ]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 263dc3ad0..92e8de0f4 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers; +use App\Models\Individual; +use App\Models\LegalCase; +use App\Models\LegalEntity; use App\Models\User; use Illuminate\Http\Request; use Inertia\Inertia; @@ -19,8 +22,40 @@ public function search(Request $request) $query = $request->input('query'); $searchResults = (new Search()) + // Búsqueda en usuarios del sistema ->registerModel(User::class, ['name', 'email']) - //->registerModel(BlogPost::class, 'title') + + // Búsqueda en personas naturales + ->registerModel(Individual::class, [ + 'national_id', + 'passport', + 'first_name', + 'middle_name', + 'last_name', + 'second_last_name', + 'rif', + 'email_1', + 'email_2', + 'phone_number_1', + 'phone_number_2' + ]) + + // Búsqueda en personas jurídicas + ->registerModel(LegalEntity::class, [ + 'rif', + 'business_name', + 'trade_name', + 'registration_number', + 'email_1', + 'email_2', + 'phone_number_1', + 'phone_number_2', + 'website' + ]) + + // Búsqueda en expedientes + ->registerModel(LegalCase::class, ['code']) + ->search($query); return Inertia::render('Search/Results', [ diff --git a/app/Models/CaseType.php b/app/Models/CaseType.php new file mode 100644 index 000000000..0da3d2a52 --- /dev/null +++ b/app/Models/CaseType.php @@ -0,0 +1,23 @@ +hasMany(LegalCase::class); + } +} \ No newline at end of file diff --git a/app/Models/Individual.php b/app/Models/Individual.php new file mode 100644 index 000000000..fcc688dcf --- /dev/null +++ b/app/Models/Individual.php @@ -0,0 +1,60 @@ +first_name} {$this->middle_name} {$this->last_name} {$this->second_last_name}"); + + // URL para ver el detalle de esta persona + $url = route('individuals.show', $this->id); + + return new SearchResult( + $this, + $title, + $url + ); + } + + // Relaciones + public function legalCases() + { + return $this->belongsToMany(LegalCase::class, 'case_individuals'); + } +} \ No newline at end of file diff --git a/app/Models/LegalCase.php b/app/Models/LegalCase.php new file mode 100644 index 000000000..6267dfe5a --- /dev/null +++ b/app/Models/LegalCase.php @@ -0,0 +1,56 @@ +id); + + return new SearchResult( + $this, + "Expediente: {$this->code}", + $url + ); + } + + // Relaciones + public function caseType() + { + return $this->belongsTo(CaseType::class); + } + + public function individuals() + { + return $this->belongsToMany(Individual::class, 'case_individuals'); + } + + public function legalEntities() + { + return $this->belongsToMany(LegalEntity::class, 'case_legal_entities'); + } +} \ No newline at end of file diff --git a/app/Models/LegalEntity.php b/app/Models/LegalEntity.php new file mode 100644 index 000000000..a4675a123 --- /dev/null +++ b/app/Models/LegalEntity.php @@ -0,0 +1,63 @@ +business_name; + if ($this->trade_name) { + $title .= " ({$this->trade_name})"; + } + + // URL para ver el detalle de esta entidad + $url = route('legal-entities.show', $this->id); + + return new SearchResult( + $this, + $title, + $url + ); + } + + // Relaciones + public function legalRepresentative() + { + return $this->belongsTo(Individual::class, 'legal_representative_id'); + } + + public function legalCases() + { + return $this->belongsToMany(LegalCase::class, 'case_legal_entities'); + } +} \ No newline at end of file diff --git a/database/migrations/2025_05_15_230324_create_case_types_table.php b/database/migrations/2025_05_15_230324_create_case_types_table.php new file mode 100644 index 000000000..b3950315c --- /dev/null +++ b/database/migrations/2025_05_15_230324_create_case_types_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('name', 100); + $table->text('description')->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('case_types'); + } +}; diff --git a/database/migrations/2025_05_15_230406_create_legal_cases_table.php b/database/migrations/2025_05_15_230406_create_legal_cases_table.php new file mode 100644 index 000000000..15b45aa4f --- /dev/null +++ b/database/migrations/2025_05_15_230406_create_legal_cases_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('code', 50)->unique(); + $table->date('entry_date'); + $table->foreignId('case_type_id')->constrained()->onDelete('cascade'); + $table->date('sentence_date')->nullable(); + $table->date('closing_date')->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('legal_cases'); + } +}; diff --git a/database/migrations/2025_05_15_230437_create_individuals_table.php b/database/migrations/2025_05_15_230437_create_individuals_table.php new file mode 100644 index 000000000..136f36378 --- /dev/null +++ b/database/migrations/2025_05_15_230437_create_individuals_table.php @@ -0,0 +1,50 @@ +id(); + $table->string('national_id', 20)->unique()->comment('Cédula de Identidad venezolana'); + $table->string('passport', 30)->unique()->nullable()->comment('Número de pasaporte'); + $table->string('first_name', 100)->comment('Primer nombre del individuo'); + $table->string('middle_name', 100)->nullable()->comment('Segundo nombre del individuo'); + $table->string('last_name', 100)->comment('Primer apellido del individuo'); + $table->string('second_last_name', 100)->nullable()->comment('Segundo apellido del individuo'); + $table->date('birth_date')->nullable()->comment('Fecha de nacimiento'); + $table->enum('gender', ['male', 'female', 'other'])->nullable()->comment('Género'); + $table->enum('civil_status', ['single', 'married', 'divorced', 'widowed', 'cohabiting'])->nullable()->comment('Estado civil'); + $table->string('rif', 15)->unique()->nullable()->comment('Registro de Información Fiscal'); + $table->string('email_1', 255)->unique()->nullable()->comment('Primer correo electrónico'); + $table->string('email_2', 255)->unique()->nullable()->comment('Segundo correo electrónico'); + $table->string('phone_number_1', 20)->nullable()->comment('Primer número de teléfono'); + $table->string('phone_number_2', 20)->nullable()->comment('Segundo número de teléfono'); + $table->string('address_line_1', 255)->nullable()->comment('Primera línea de dirección'); + $table->string('address_line_2', 255)->nullable()->comment('Segunda línea de dirección'); + $table->string('city', 100)->nullable()->comment('Ciudad de residencia'); + $table->string('state', 100)->nullable()->comment('Estado de residencia'); + $table->string('country', 100)->default('Venezuela')->comment('País de residencia'); + $table->string('nationality', 100)->default('Venezolana')->comment('Nacionalidad'); + $table->string('occupation', 100)->nullable()->comment('Profesión u ocupación'); + $table->string('educational_level', 100)->nullable()->comment('Nivel educativo'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('individuals'); + } +}; diff --git a/database/migrations/2025_05_15_230508_create_legal_entities_table.php b/database/migrations/2025_05_15_230508_create_legal_entities_table.php new file mode 100644 index 000000000..b2124b9ac --- /dev/null +++ b/database/migrations/2025_05_15_230508_create_legal_entities_table.php @@ -0,0 +1,53 @@ +id(); + $table->string('rif', 15)->unique()->comment('Registro de Información Fiscal'); + $table->string('business_name', 255)->comment('Denominación comercial'); + $table->string('trade_name', 255)->nullable()->comment('Nombre comercial'); + $table->enum('legal_entity_type', [ + 'sociedad_anonima', + 'compania_anonima', + 'sociedad_de_responsabilidad_limitada', + 'cooperativa', + 'fundacion', + 'asociacion_civil', + 'otro' + ])->comment('Tipo de entidad legal'); + $table->string('registration_number', 50)->unique()->nullable()->comment('Número de registro mercantil'); + $table->date('registration_date')->nullable()->comment('Fecha de registro mercantil'); + $table->string('fiscal_address_line_1', 255)->comment('Primera línea de dirección fiscal'); + $table->string('fiscal_address_line_2', 255)->nullable()->comment('Segunda línea de dirección fiscal'); + $table->string('fiscal_city', 100)->comment('Ciudad de dirección fiscal'); + $table->string('fiscal_state', 100)->comment('Estado de dirección fiscal'); + $table->string('fiscal_country', 100)->default('Venezuela')->comment('País de dirección fiscal'); + $table->string('email_1', 255)->unique()->nullable()->comment('Primer correo electrónico'); + $table->string('email_2', 255)->unique()->nullable()->comment('Segundo correo electrónico'); + $table->string('phone_number_1', 20)->nullable()->comment('Primer número de teléfono'); + $table->string('phone_number_2', 20)->nullable()->comment('Segundo número de teléfono'); + $table->string('website', 255)->nullable()->comment('Sitio web'); + $table->foreignId('legal_representative_id')->nullable()->constrained('individuals')->nullOnDelete()->comment('Representante legal'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('legal_entities'); + } +}; diff --git a/database/migrations/2025_05_15_230545_create_case_individuals_table.php b/database/migrations/2025_05_15_230545_create_case_individuals_table.php new file mode 100644 index 000000000..49da91bd9 --- /dev/null +++ b/database/migrations/2025_05_15_230545_create_case_individuals_table.php @@ -0,0 +1,29 @@ +foreignId('legal_case_id')->constrained()->onDelete('cascade')->comment('ID del caso legal relacionado'); + $table->foreignId('individual_id')->constrained()->onDelete('cascade')->comment('ID del individuo relacionado'); + $table->primary(['legal_case_id', 'individual_id']); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('case_individuals'); + } +}; diff --git a/database/migrations/2025_05_15_230618_create_case_legal_entities_table.php b/database/migrations/2025_05_15_230618_create_case_legal_entities_table.php new file mode 100644 index 000000000..f318592b8 --- /dev/null +++ b/database/migrations/2025_05_15_230618_create_case_legal_entities_table.php @@ -0,0 +1,29 @@ +foreignId('legal_case_id')->constrained()->onDelete('cascade')->comment('ID del caso legal relacionado'); + $table->foreignId('legal_entity_id')->constrained()->onDelete('cascade')->comment('ID de la entidad legal relacionada'); + $table->primary(['legal_case_id', 'legal_entity_id']); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('case_legal_entities'); + } +}; diff --git a/database/seeders/CaseTypeSeeder.php b/database/seeders/CaseTypeSeeder.php new file mode 100644 index 000000000..d02242101 --- /dev/null +++ b/database/seeders/CaseTypeSeeder.php @@ -0,0 +1,43 @@ + 'Divorcio', + 'description' => 'Procedimiento legal para la disolución del vínculo matrimonial' + ], + [ + 'name' => 'Manutención', + 'description' => 'Casos relacionados con obligaciones de manutención a menores o dependientes' + ], + [ + 'name' => 'Título Supletorio', + 'description' => 'Procedimiento para obtener un título de propiedad cuando se carece del mismo' + ], + [ + 'name' => 'Demanda por Daños y Perjuicios', + 'description' => 'Reclamación por daños materiales o morales causados por un tercero' + ], + [ + 'name' => 'Partición de Herencia', + 'description' => 'Procedimiento para dividir los bienes dejados por una persona fallecida' + ] + ]; + + foreach ($caseTypes as $caseType) { + CaseType::create($caseType); + } + } +} diff --git a/database/seeders/IndividualSeeder.php b/database/seeders/IndividualSeeder.php new file mode 100644 index 000000000..7cae5acc8 --- /dev/null +++ b/database/seeders/IndividualSeeder.php @@ -0,0 +1,103 @@ + 'V-12345678', + 'first_name' => 'María', + 'middle_name' => 'José', + 'last_name' => 'Rodríguez', + 'second_last_name' => 'Gómez', + 'birth_date' => '1980-05-15', + 'gender' => 'female', + 'civil_status' => 'married', + 'rif' => 'V-123456789', + 'email_1' => 'maria.rodriguez@ejemplo.com', + 'phone_number_1' => '0414-1234567', + 'address_line_1' => 'Av. Francisco de Miranda', + 'city' => 'Caracas', + 'state' => 'Distrito Capital', + 'occupation' => 'Abogada' + ], + [ + 'national_id' => 'V-23456789', + 'first_name' => 'Carlos', + 'middle_name' => 'Eduardo', + 'last_name' => 'Pérez', + 'second_last_name' => 'Martínez', + 'birth_date' => '1975-10-22', + 'gender' => 'male', + 'civil_status' => 'divorced', + 'rif' => 'V-234567890', + 'email_1' => 'carlos.perez@ejemplo.com', + 'phone_number_1' => '0424-2345678', + 'address_line_1' => 'Urb. El Paraíso', + 'city' => 'Maracaibo', + 'state' => 'Zulia', + 'occupation' => 'Ingeniero' + ], + [ + 'national_id' => 'V-34567890', + 'first_name' => 'Ana', + 'last_name' => 'González', + 'second_last_name' => 'Fernández', + 'birth_date' => '1990-03-08', + 'gender' => 'female', + 'civil_status' => 'single', + 'email_1' => 'ana.gonzalez@ejemplo.com', + 'phone_number_1' => '0412-3456789', + 'address_line_1' => 'Calle Bolívar', + 'city' => 'Valencia', + 'state' => 'Carabobo', + 'occupation' => 'Médico' + ], + [ + 'national_id' => 'V-45678901', + 'first_name' => 'Luis', + 'middle_name' => 'Alberto', + 'last_name' => 'Ramírez', + 'birth_date' => '1985-07-30', + 'gender' => 'male', + 'civil_status' => 'married', + 'rif' => 'V-456789012', + 'email_1' => 'luis.ramirez@ejemplo.com', + 'phone_number_1' => '0416-4567890', + 'address_line_1' => 'Urb. Las Mercedes', + 'city' => 'Barquisimeto', + 'state' => 'Lara', + 'occupation' => 'Arquitecto' + ], + [ + 'national_id' => 'V-56789012', + 'first_name' => 'Pedro', + 'last_name' => 'Mendoza', + 'second_last_name' => 'Rivera', + 'birth_date' => '1978-12-10', + 'gender' => 'male', + 'civil_status' => 'widowed', + 'email_1' => 'pedro.mendoza@ejemplo.com', + 'phone_number_1' => '0426-5678901', + 'address_line_1' => 'Av. Libertador', + 'city' => 'Mérida', + 'state' => 'Mérida', + 'occupation' => 'Profesor' + ] + ]; + + foreach ($individuals as $individual) { + Individual::create($individual); + } + } +} diff --git a/database/seeders/LegalCaseSeeder.php b/database/seeders/LegalCaseSeeder.php new file mode 100644 index 000000000..fd55580b5 --- /dev/null +++ b/database/seeders/LegalCaseSeeder.php @@ -0,0 +1,98 @@ +isEmpty()) { + $this->command->info('Se requieren tipos de casos para crear expedientes. Por favor ejecute primero CaseTypeSeeder.'); + return; + } + + // Verificar que existen individuos + $individuals = Individual::all(); + if ($individuals->isEmpty()) { + $this->command->info('Se requieren individuos para asociar a los expedientes. Por favor ejecute primero IndividualSeeder.'); + return; + } + + // Verificar que existen entidades legales + $legalEntities = LegalEntity::all(); + if ($legalEntities->isEmpty()) { + $this->command->info('Se requieren entidades legales para asociar a los expedientes. Por favor ejecute primero LegalEntitySeeder.'); + return; + } + + // Crear algunos expedientes de ejemplo + $legalCases = [ + [ + 'code' => 'EXP-2023-001', + 'entry_date' => '2023-01-15', + 'case_type_id' => $caseTypes->where('name', 'Divorcio')->first()->id, + 'sentence_date' => '2023-06-20', + 'closing_date' => '2023-07-05' + ], + [ + 'code' => 'EXP-2023-002', + 'entry_date' => '2023-02-10', + 'case_type_id' => $caseTypes->where('name', 'Manutención')->first()->id, + 'sentence_date' => null, + 'closing_date' => null + ], + [ + 'code' => 'EXP-2023-003', + 'entry_date' => '2023-03-05', + 'case_type_id' => $caseTypes->where('name', 'Título Supletorio')->first()->id, + 'sentence_date' => '2023-09-15', + 'closing_date' => null + ], + [ + 'code' => 'EXP-2023-004', + 'entry_date' => '2023-04-20', + 'case_type_id' => $caseTypes->where('name', 'Demanda por Daños y Perjuicios')->first()->id, + 'sentence_date' => null, + 'closing_date' => null + ], + [ + 'code' => 'EXP-2023-005', + 'entry_date' => '2023-05-12', + 'case_type_id' => $caseTypes->where('name', 'Partición de Herencia')->first()->id, + 'sentence_date' => null, + 'closing_date' => null + ] + ]; + + foreach ($legalCases as $legalCaseData) { + // Crear caso legal + $legalCase = LegalCase::create($legalCaseData); + + // Asociar individuos (aleatorios) + $randomIndividuals = $individuals->random(rand(1, 3)); + foreach ($randomIndividuals as $individual) { + $legalCase->individuals()->attach($individual->id); + } + + // Asociar entidades legales (aleatorias, pueden no tener) + if (rand(0, 1)) { // 50% de probabilidad + $randomLegalEntities = $legalEntities->random(rand(1, 2)); + foreach ($randomLegalEntities as $legalEntity) { + $legalCase->legalEntities()->attach($legalEntity->id); + } + } + } + } +} diff --git a/database/seeders/LegalEntitySeeder.php b/database/seeders/LegalEntitySeeder.php new file mode 100644 index 000000000..257406add --- /dev/null +++ b/database/seeders/LegalEntitySeeder.php @@ -0,0 +1,92 @@ + 'J-29876543-2', + 'business_name' => 'Inversiones Caracas, C.A.', + 'trade_name' => 'InverCaracas', + 'legal_entity_type' => 'compania_anonima', + 'registration_number' => 'Tomo 45, Folio 78', + 'registration_date' => '2010-05-20', + 'fiscal_address_line_1' => 'Av. Libertador, Edificio Centro Empresarial, Piso 5', + 'fiscal_city' => 'Caracas', + 'fiscal_state' => 'Distrito Capital', + 'email_1' => 'info@invercaracas.com.ve', + 'phone_number_1' => '0212-9876543', + 'website' => 'www.invercaracas.com.ve' + ], + [ + 'rif' => 'J-30987654-3', + 'business_name' => 'Constructora Andes, S.R.L.', + 'trade_name' => 'CONANDES', + 'legal_entity_type' => 'sociedad_de_responsabilidad_limitada', + 'registration_number' => 'Tomo 32, Folio 56', + 'registration_date' => '2008-11-15', + 'fiscal_address_line_1' => 'Calle Sucre, Edificio Torres, Piso 3, Oficina 3-B', + 'fiscal_city' => 'Mérida', + 'fiscal_state' => 'Mérida', + 'email_1' => 'contacto@conandes.com.ve', + 'phone_number_1' => '0274-8765432', + 'website' => 'www.conandes.com.ve' + ], + [ + 'rif' => 'J-12098765-4', + 'business_name' => 'Distribuidora Zulia, C.A.', + 'trade_name' => 'DisZulia', + 'legal_entity_type' => 'compania_anonima', + 'registration_number' => 'Tomo 67, Folio 89', + 'registration_date' => '2015-03-10', + 'fiscal_address_line_1' => 'Av. 5 de Julio, Centro Comercial Las Mercedes, Local 12', + 'fiscal_city' => 'Maracaibo', + 'fiscal_state' => 'Zulia', + 'email_1' => 'ventas@diszulia.com.ve', + 'phone_number_1' => '0261-7654321', + 'website' => 'www.diszulia.com.ve' + ], + [ + 'rif' => 'J-45678901-5', + 'business_name' => 'Fundación Ayuda Social', + 'legal_entity_type' => 'fundacion', + 'registration_number' => 'Tomo 12, Folio 34', + 'registration_date' => '2012-09-05', + 'fiscal_address_line_1' => 'Urb. El Trigal, Calle Los Robles, Casa 45', + 'fiscal_city' => 'Valencia', + 'fiscal_state' => 'Carabobo', + 'email_1' => 'contacto@ayudasocial.org.ve', + 'phone_number_1' => '0241-6543210', + 'website' => 'www.ayudasocial.org.ve' + ], + [ + 'rif' => 'J-56789012-6', + 'business_name' => 'Cooperativa Agrícola El Sembrador', + 'trade_name' => 'CoopSembrador', + 'legal_entity_type' => 'cooperativa', + 'registration_number' => 'Tomo 23, Folio 45', + 'registration_date' => '2014-06-18', + 'fiscal_address_line_1' => 'Carretera Nacional, Sector La Morita, Km 5', + 'fiscal_city' => 'Barquisimeto', + 'fiscal_state' => 'Lara', + 'email_1' => 'info@coopsembrador.com.ve', + 'phone_number_1' => '0251-5432109', + 'website' => 'www.coopsembrador.com.ve' + ] + ]; + + foreach ($legalEntities as $legalEntity) { + LegalEntity::create($legalEntity); + } + } +} diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx new file mode 100644 index 000000000..69bcef708 --- /dev/null +++ b/resources/js/pages/Individuals/Show.tsx @@ -0,0 +1,78 @@ +import { Head } from '@inertiajs/react'; + +interface Individual { + id: number; + national_id: string; + passport?: string; + first_name: string; + middle_name?: string; + last_name: string; + second_last_name?: string; + email_1?: string; + phone_number_1?: string; +} + +interface Props { + individual: Individual; +} + +export default function IndividualShow({ individual }: Props) { + const fullName = `${individual.first_name} ${individual.middle_name || ''} ${individual.last_name} ${individual.second_last_name || ''}`.trim(); + + return ( + <> + +
+
+
+
+

Detalle de Persona Natural

+ +
+

Información Personal

+
+
+ Nombre Completo: {fullName} +
+
+ Cédula: {individual.national_id} +
+ {individual.passport && ( +
+ Pasaporte: {individual.passport} +
+ )} +
+
+ +
+

Información de Contacto

+
+ {individual.email_1 && ( +
+ Email: {individual.email_1} +
+ )} + {individual.phone_number_1 && ( +
+ Teléfono: {individual.phone_number_1} +
+ )} +
+
+ + +
+
+
+
+ + ); +} \ No newline at end of file diff --git a/resources/js/pages/LegalCases/Show.tsx b/resources/js/pages/LegalCases/Show.tsx new file mode 100644 index 000000000..97ba688c2 --- /dev/null +++ b/resources/js/pages/LegalCases/Show.tsx @@ -0,0 +1,85 @@ +import { Head } from '@inertiajs/react'; + +interface CaseType { + id: number; + name: string; + description?: string; +} + +interface LegalCase { + id: number; + code: string; + entry_date: string; + sentence_date?: string; + closing_date?: string; + case_type: CaseType; +} + +interface Props { + legalCase: LegalCase; +} + +export default function LegalCaseShow({ legalCase }: Props) { + // Format dates for display + const formatDate = (dateString?: string) => { + if (!dateString) return 'N/A'; + const date = new Date(dateString); + return date.toLocaleDateString('es-ES', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }); + }; + + return ( + <> + +
+
+
+
+

Detalle del Expediente

+ +
+

Información General

+
+
+ Código de Expediente: {legalCase.code} +
+
+ Tipo de Caso: {legalCase.case_type.name} +
+
+ Fecha de Entrada: {formatDate(legalCase.entry_date)} +
+
+ Fecha de Sentencia: {formatDate(legalCase.sentence_date)} +
+
+ Fecha de Cierre: {formatDate(legalCase.closing_date)} +
+
+
+ + {legalCase.case_type.description && ( +
+

Descripción del Tipo de Caso

+

{legalCase.case_type.description}

+
+ )} + + +
+
+
+
+ + ); +} \ No newline at end of file diff --git a/resources/js/pages/LegalEntities/Show.tsx b/resources/js/pages/LegalEntities/Show.tsx new file mode 100644 index 000000000..f515ff190 --- /dev/null +++ b/resources/js/pages/LegalEntities/Show.tsx @@ -0,0 +1,92 @@ +import { Head } from '@inertiajs/react'; + +interface LegalEntity { + id: number; + rif: string; + business_name: string; + trade_name?: string; + legal_entity_type: string; + email_1?: string; + phone_number_1?: string; + website?: string; +} + +interface Props { + legalEntity: LegalEntity; +} + +export default function LegalEntityShow({ legalEntity }: Props) { + const displayName = legalEntity.trade_name + ? `${legalEntity.business_name} (${legalEntity.trade_name})` + : legalEntity.business_name; + + const entityTypeMap: {[key: string]: string} = { + 'sociedad_anonima': 'Sociedad Anónima', + 'compania_anonima': 'Compañía Anónima', + 'sociedad_de_responsabilidad_limitada': 'Sociedad de Responsabilidad Limitada', + 'cooperativa': 'Cooperativa', + 'fundacion': 'Fundación', + 'asociacion_civil': 'Asociación Civil', + 'otro': 'Otro' + }; + + return ( + <> + +
+
+
+
+

Detalle de Persona Jurídica

+ +
+

Información Empresarial

+
+
+ Razón Social: {displayName} +
+
+ RIF: {legalEntity.rif} +
+
+ Tipo de Entidad: {entityTypeMap[legalEntity.legal_entity_type] || legalEntity.legal_entity_type} +
+
+
+ +
+

Información de Contacto

+
+ {legalEntity.email_1 && ( +
+ Email: {legalEntity.email_1} +
+ )} + {legalEntity.phone_number_1 && ( +
+ Teléfono: {legalEntity.phone_number_1} +
+ )} + {legalEntity.website && ( +
+ Sitio Web: {legalEntity.website} +
+ )} +
+
+ + +
+
+
+
+ + ); +} \ No newline at end of file diff --git a/resources/js/pages/Search/Results.tsx b/resources/js/pages/Search/Results.tsx index 64719576b..db32e2b69 100644 --- a/resources/js/pages/Search/Results.tsx +++ b/resources/js/pages/Search/Results.tsx @@ -5,8 +5,18 @@ interface SearchResultItem { url: string; searchable: { id: number; - name: string; - email: string; + // Campos de User + name?: string; + email?: string; + // Campos de Individual + national_id?: string; + first_name?: string; + last_name?: string; + // Campos de LegalEntity + rif?: string; + business_name?: string; + // Campos de LegalCase + code?: string; }; } @@ -20,6 +30,34 @@ interface Props { export default function SearchResults({ results, query }: Props) { console.log("results formateado:", JSON.stringify(results, null, 2)); // Muestra el objeto con indentación de 2 espacios console.log("query: " + query) + + // Función para obtener la información secundaria según el tipo de resultado + const getSecondaryInfo = (result: SearchResultItem, type: string): string => { + const { searchable } = result; + + // Usuarios + if (type.includes('User')) { + return searchable.email || ''; + } + + // Personas naturales + if (type.includes('Individual')) { + return `Cédula: ${searchable.national_id || 'N/A'}`; + } + + // Personas jurídicas + if (type.includes('LegalEntity')) { + return `RIF: ${searchable.rif || 'N/A'}`; + } + + // Expedientes judiciales + if (type.includes('LegalCase')) { + return `Código: ${searchable.code || 'N/A'}`; + } + + return ''; + }; + return ( <> @@ -38,39 +76,50 @@ export default function SearchResults({ results, query }: Props) { Nueva búsqueda - {Object.entries(results).map(([type, items]) => ( -
-

{type}

- {items.length > 0 ? ( -
    - {items.map((result) => ( -
  • -
    -
    -

    - {result.title} -

    -

    - {result.searchable.email} -

    -
    -
    - - Ver detalles - + {Object.entries(results).length > 0 ? ( + Object.entries(results).map(([type, items]) => ( +
    +

    + {type.includes('User') && 'Usuarios'} + {type.includes('Individual') && 'Personas Naturales'} + {type.includes('LegalEntity') && 'Personas Jurídicas'} + {type.includes('LegalCase') && 'Expedientes Judiciales'} + {!type.includes('User') && !type.includes('Individual') && + !type.includes('LegalEntity') && !type.includes('LegalCase') && type} +

    + {items.length > 0 ? ( +
      + {items.map((result) => ( +
    • +
      +
      +

      + {result.title} +

      +

      + {getSecondaryInfo(result, type)} +

      +
      +
      -
    -
  • - ))} -
- ) : ( -

No se encontraron resultados.

- )} -
- ))} + + ))} + + ) : ( +

No se encontraron resultados.

+ )} + + )) + ) : ( +

No se encontraron resultados para tu búsqueda.

+ )} diff --git a/routes/web.php b/routes/web.php index 3e5cd3b36..6f37f162b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,8 @@ name('users.show'); +// Detalle de individuo +Route::get('/individuals/{individual}', [IndividualController::class, 'show'])->name('individuals.show'); + +// Detalle de entidad legal +Route::get('/legal-entities/{legalEntity}', [LegalEntityController::class, 'show'])->name('legal-entities.show'); + +// Detalle de caso legal +Route::get('/legal-cases/{legalCase}', [LegalCaseController::class, 'show'])->name('legal-cases.show'); + require __DIR__.'/settings.php'; require __DIR__.'/auth.php'; From c5a5f25829183c264bb277b39102db55847f4c96 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Fri, 16 May 2025 19:22:42 -0400 Subject: [PATCH 05/41] =?UTF-8?q?Actualizaci=C3=B3n=20del=20controlador=20?= =?UTF-8?q?de=20b=C3=BAsqueda=20para=20eliminar=20la=20b=C3=BAsqueda=20de?= =?UTF-8?q?=20usuarios=20y=20agregar=20un=20nuevo=20formulario=20de=20b?= =?UTF-8?q?=C3=BAsqueda=20en=20la=20interfaz.=20Se=20han=20a=C3=B1adido=20?= =?UTF-8?q?enlaces=20de=20navegaci=C3=B3n=20y=20se=20ha=20mejorado=20la=20?= =?UTF-8?q?presentaci=C3=B3n=20de=20los=20resultados=20de=20b=C3=BAsqueda,?= =?UTF-8?q?=20incluyendo=20un=20nuevo=20dise=C3=B1o=20y=20funcionalidad=20?= =?UTF-8?q?para=20mostrar=20detalles=20de=20los=20resultados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/SearchController.php | 2 - resources/js/components/app-sidebar.tsx | 7 +- resources/js/pages/Search/Index.tsx | 83 ++++++------ resources/js/pages/Search/Results.tsx | 151 +++++++++++----------- 4 files changed, 120 insertions(+), 123 deletions(-) diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 92e8de0f4..ef5b89b57 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -22,8 +22,6 @@ public function search(Request $request) $query = $request->input('query'); $searchResults = (new Search()) - // Búsqueda en usuarios del sistema - ->registerModel(User::class, ['name', 'email']) // Búsqueda en personas naturales ->registerModel(Individual::class, [ diff --git a/resources/js/components/app-sidebar.tsx b/resources/js/components/app-sidebar.tsx index c51767276..250a74366 100644 --- a/resources/js/components/app-sidebar.tsx +++ b/resources/js/components/app-sidebar.tsx @@ -4,7 +4,7 @@ import { NavUser } from '@/components/nav-user'; import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar'; import { type NavItem } from '@/types'; import { Link } from '@inertiajs/react'; -import { BookOpen, Folder, LayoutGrid } from 'lucide-react'; +import { BookOpen, Folder, LayoutGrid, Search } from 'lucide-react'; import AppLogo from './app-logo'; const mainNavItems: NavItem[] = [ @@ -13,6 +13,11 @@ const mainNavItems: NavItem[] = [ href: '/dashboard', icon: LayoutGrid, }, + { + title: 'Search', + href: '/search', + icon: Search, + }, ]; const footerNavItems: NavItem[] = [ diff --git a/resources/js/pages/Search/Index.tsx b/resources/js/pages/Search/Index.tsx index 22784c816..9856e1c00 100644 --- a/resources/js/pages/Search/Index.tsx +++ b/resources/js/pages/Search/Index.tsx @@ -1,58 +1,57 @@ +import HeadingSmall from '@/components/heading-small'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import AppLayout from '@/layouts/app-layout'; +import { type BreadcrumbItem } from '@/types'; import { Head, router } from '@inertiajs/react'; import { useState } from 'react'; +const breadcrumbs: BreadcrumbItem[] = [ + { + title: 'Search', + href: '/search', + }, +]; + export default function SearchIndex() { const [query, setQuery] = useState(''); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); - router.get(route('search.results'), { query }, { - preserveState: true, - preserveScroll: true, - }); + router.get( + route('search.results'), + { query }, + { + preserveState: true, + preserveScroll: true, + }, + ); }; - console.log("query: " + query) return ( - <> + -
-
-
-
-

- Búsqueda de Usuarios -

-
-
- -
- setQuery(e.target.value)} - className="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 block w-full sm:text-sm border-gray-300 rounded-md" - placeholder="Ingrese nombre o correo electrónico..." - /> -
-
-
- -
-
+
+
+ +
+ setQuery(e.target.value)} + placeholder="Escriba un patron de busqueda..." + /> +
+
-
+
- + ); -} \ No newline at end of file +} diff --git a/resources/js/pages/Search/Results.tsx b/resources/js/pages/Search/Results.tsx index db32e2b69..daeefe591 100644 --- a/resources/js/pages/Search/Results.tsx +++ b/resources/js/pages/Search/Results.tsx @@ -1,5 +1,19 @@ +import { Button } from '@/components/ui/button'; +import AppLayout from '@/layouts/app-layout'; +import { BreadcrumbItem } from '@/types'; import { Head, router } from '@inertiajs/react'; +const breadcrumbs: BreadcrumbItem[] = [ + { + title: 'Search', + href: '/search', + }, + { + title: 'Results', + href: '/results', + }, +]; + interface SearchResultItem { title: string; url: string; @@ -28,102 +42,83 @@ interface Props { } export default function SearchResults({ results, query }: Props) { - console.log("results formateado:", JSON.stringify(results, null, 2)); // Muestra el objeto con indentación de 2 espacios - console.log("query: " + query) + console.log('results formateado:', JSON.stringify(results, null, 2)); // Muestra el objeto con indentación de 2 espacios + console.log('query: ' + query); // Función para obtener la información secundaria según el tipo de resultado const getSecondaryInfo = (result: SearchResultItem, type: string): string => { const { searchable } = result; - - // Usuarios - if (type.includes('User')) { - return searchable.email || ''; - } - + // Personas naturales - if (type.includes('Individual')) { - return `Cédula: ${searchable.national_id || 'N/A'}`; + if (type.includes('individuals')) { + return `ID: ${searchable.national_id || 'N/A'}`; } - + // Personas jurídicas - if (type.includes('LegalEntity')) { + if (type.includes('legal_entities')) { return `RIF: ${searchable.rif || 'N/A'}`; } - + // Expedientes judiciales - if (type.includes('LegalCase')) { + if (type.includes('legal_cases')) { return `Código: ${searchable.code || 'N/A'}`; } - + return ''; }; return ( - <> + -
-
-
-
-
-

- Resultados de búsqueda para: "{query}" -

- -
- {Object.entries(results).length > 0 ? ( - Object.entries(results).map(([type, items]) => ( -
-

- {type.includes('User') && 'Usuarios'} - {type.includes('Individual') && 'Personas Naturales'} - {type.includes('LegalEntity') && 'Personas Jurídicas'} - {type.includes('LegalCase') && 'Expedientes Judiciales'} - {!type.includes('User') && !type.includes('Individual') && - !type.includes('LegalEntity') && !type.includes('LegalCase') && type} -

- {items.length > 0 ? ( -
    - {items.map((result) => ( -
  • -
    -
    -

    - {result.title} -

    -

    - {getSecondaryInfo(result, type)} -

    -
    - -
    -
  • - ))} -
- ) : ( -

No se encontraron resultados.

- )} -
- )) - ) : ( -

No se encontraron resultados para tu búsqueda.

- )} -
+
+
+
+

Resultados de búsqueda para: "{query}"

+
+ {Object.entries(results).length > 0 ? ( + Object.entries(results).map(([type, items]) => ( +
+

+ {type.includes('individuals') && 'Resultados de Personas Naturales'} + {type.includes('legal_entities') && 'Resultados de Personas Jurídicas'} + {type.includes('legal_cases') && 'Resultados de Expedientes Judiciales'} + {!type.includes('individuals') && !type.includes('legal_entities') && !type.includes('legal_cases') && type} +

+ {items.length > 0 ? ( +
    + {items.map((result) => ( +
  • +
    +
    +

    {result.title}

    +

    {getSecondaryInfo(result, type)}

    +
    + +
    +
  • + ))} +
+ ) : ( +

No se encontraron resultados.

+ )} +
+ )) + ) : ( +

No se encontraron resultados para tu búsqueda.

+ )}
- + ); -} \ No newline at end of file +} From 04e05662b41a58290f623159b4ff25fe135a17c1 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 00:26:33 -0400 Subject: [PATCH 06/41] Primera aproximacion para ver los detalles de expediente y sus actores relacionados (Personas naturales y Entidades Legales) --- app/Http/Controllers/IndividualController.php | 2 +- app/Http/Controllers/LegalCaseController.php | 2 +- .../Controllers/LegalEntityController.php | 2 +- database/seeders/CaseRelationsSeeder.php | 75 ++++++ database/seeders/DatabaseSeeder.php | 10 + resources/js/lib/utils.ts | 12 + resources/js/pages/Individuals/Show.tsx | 180 ++++++++++--- resources/js/pages/LegalCases/Show.tsx | 239 ++++++++++++++---- resources/js/pages/LegalEntities/Show.tsx | 182 +++++++++---- 9 files changed, 567 insertions(+), 137 deletions(-) create mode 100644 database/seeders/CaseRelationsSeeder.php diff --git a/app/Http/Controllers/IndividualController.php b/app/Http/Controllers/IndividualController.php index a7303c9ef..76a595580 100644 --- a/app/Http/Controllers/IndividualController.php +++ b/app/Http/Controllers/IndividualController.php @@ -35,7 +35,7 @@ public function store(Request $request) */ public function show(string $id) { - $individual = \App\Models\Individual::findOrFail($id); + $individual = \App\Models\Individual::with(['legalCases.caseType'])->findOrFail($id); return \Inertia\Inertia::render('Individuals/Show', [ 'individual' => $individual diff --git a/app/Http/Controllers/LegalCaseController.php b/app/Http/Controllers/LegalCaseController.php index 612553a68..77585900a 100644 --- a/app/Http/Controllers/LegalCaseController.php +++ b/app/Http/Controllers/LegalCaseController.php @@ -35,7 +35,7 @@ public function store(Request $request) */ public function show(string $id) { - $legalCase = \App\Models\LegalCase::with(['caseType'])->findOrFail($id); + $legalCase = \App\Models\LegalCase::with(['caseType', 'individuals', 'legalEntities'])->findOrFail($id); return \Inertia\Inertia::render('LegalCases/Show', [ 'legalCase' => $legalCase diff --git a/app/Http/Controllers/LegalEntityController.php b/app/Http/Controllers/LegalEntityController.php index 831d14a2e..de5de3fe4 100644 --- a/app/Http/Controllers/LegalEntityController.php +++ b/app/Http/Controllers/LegalEntityController.php @@ -35,7 +35,7 @@ public function store(Request $request) */ public function show(string $id) { - $legalEntity = \App\Models\LegalEntity::findOrFail($id); + $legalEntity = \App\Models\LegalEntity::with(['legalCases.caseType'])->findOrFail($id); return \Inertia\Inertia::render('LegalEntities/Show', [ 'legalEntity' => $legalEntity diff --git a/database/seeders/CaseRelationsSeeder.php b/database/seeders/CaseRelationsSeeder.php new file mode 100644 index 000000000..4423564f2 --- /dev/null +++ b/database/seeders/CaseRelationsSeeder.php @@ -0,0 +1,75 @@ +isEmpty() || $individuals->isEmpty() || $legalEntities->isEmpty()) { + $this->command->info('Se requiere que existan expedientes, individuos y entidades legales. Por favor ejecute los seeders correspondientes primero.'); + return; + } + + // Para cada individuo, asignar al menos un expediente si no tiene ninguno + foreach ($individuals as $individual) { + if ($individual->legalCases()->count() === 0) { + // Asignar 1-3 expedientes aleatorios + $randomCases = $legalCases->random(rand(1, 3)); + foreach ($randomCases as $case) { + // Evitar duplicados + if (!$individual->legalCases->contains($case->id)) { + $individual->legalCases()->attach($case->id); + } + } + } + } + + // Para cada entidad legal, asignar al menos un expediente si no tiene ninguno + foreach ($legalEntities as $entity) { + if ($entity->legalCases()->count() === 0) { + // Asignar 1-2 expedientes aleatorios + $randomCases = $legalCases->random(rand(1, 2)); + foreach ($randomCases as $case) { + // Evitar duplicados + if (!$entity->legalCases->contains($case->id)) { + $entity->legalCases()->attach($case->id); + } + } + } + } + + // Para cada expediente, asegurar que tiene al menos un individuo y una entidad legal relacionada + foreach ($legalCases as $case) { + // Si no tiene individuos asociados, asociar al menos uno + if ($case->individuals()->count() === 0) { + $randomIndividuals = $individuals->random(rand(1, 3)); + foreach ($randomIndividuals as $individual) { + $case->individuals()->attach($individual->id); + } + } + + // Si no tiene entidades legales asociadas, asociar al menos una + if ($case->legalEntities()->count() === 0) { + $randomEntities = $legalEntities->random(rand(1, 2)); + foreach ($randomEntities as $entity) { + $case->legalEntities()->attach($entity->id); + } + } + } + } +} \ No newline at end of file diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index d01a0ef2f..3abb32e18 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -19,5 +19,15 @@ public function run(): void 'name' => 'Test User', 'email' => 'test@example.com', ]); + + // Ejecutar los seeders en orden adecuado para mantener las relaciones + $this->call([ + CaseTypeSeeder::class, + IndividualSeeder::class, + LegalEntitySeeder::class, + LegalCaseSeeder::class, + // Crear un seeder para las relaciones entre expedientes, individuos y entidades legales + CaseRelationsSeeder::class, + ]); } } diff --git a/resources/js/lib/utils.ts b/resources/js/lib/utils.ts index dd53ea892..f4701ec28 100644 --- a/resources/js/lib/utils.ts +++ b/resources/js/lib/utils.ts @@ -4,3 +4,15 @@ import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } + +// Función para formatear fechas +export function formatDate(dateString?: string): string { + if (!dateString) return 'N/A'; + + const date = new Date(dateString); + return date.toLocaleDateString('es-ES', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }); +} diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index 69bcef708..c11cd46b9 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -1,4 +1,27 @@ -import { Head } from '@inertiajs/react'; +import { Head, router } from '@inertiajs/react'; +import AppLayout from '@/layouts/app-layout'; +import { type BreadcrumbItem } from '@/types'; +import { Button } from '@/components/ui/button'; +import { formatDate } from '@/lib/utils'; + +interface CaseType { + id: number; + name: string; + description?: string; +} + +interface LegalCase { + id: number; + code: string; + entry_date: string; + sentence_date?: string; + closing_date?: string; + case_type: CaseType; + pivot?: { + individual_id: number; + legal_case_id: number; + }; +} interface Individual { id: number; @@ -10,6 +33,7 @@ interface Individual { second_last_name?: string; email_1?: string; phone_number_1?: string; + legal_cases: LegalCase[]; } interface Props { @@ -19,60 +43,132 @@ interface Props { export default function IndividualShow({ individual }: Props) { const fullName = `${individual.first_name} ${individual.middle_name || ''} ${individual.last_name} ${individual.second_last_name || ''}`.trim(); + const breadcrumbs: BreadcrumbItem[] = [ + { + title: 'Búsqueda', + href: route('search.index'), + }, + { + title: 'Resultados', + href: route('search.results'), + }, + { + title: fullName, + href: route('individuals.show', individual.id), + }, + ]; + return ( - <> + -
-
-
-
-

Detalle de Persona Natural

- -
-

Información Personal

-
+
+
+
+

Detalle de Persona Natural

+ +
+

Información Personal

+
+
+ Nombre Completo: {fullName} +
+
+ Cédula: {individual.national_id} +
+ {individual.passport && (
- Nombre Completo: {fullName} + Pasaporte: {individual.passport}
+ )} +
+
+ +
+

Información de Contacto

+
+ {individual.email_1 && (
- Cédula: {individual.national_id} + Email: {individual.email_1}
- {individual.passport && ( -
- Pasaporte: {individual.passport} -
- )} -
+ )} + {individual.phone_number_1 && ( +
+ Teléfono: {individual.phone_number_1} +
+ )}
+
-
-

Información de Contacto

-
- {individual.email_1 && ( -
- Email: {individual.email_1} -
- )} - {individual.phone_number_1 && ( -
- Teléfono: {individual.phone_number_1} -
- )} + {/* Sección de expedientes relacionados */} +
+

Expedientes Relacionados

+ {individual.legal_cases && individual.legal_cases.length > 0 ? ( +
+ + + + + + + + + + + + {individual.legal_cases.map((legalCase) => ( + + + + + + + + ))} + +
+ Código + + Tipo de Caso + + Fecha de Entrada + + Estado + + Acciones +
+ {legalCase.code} + + {legalCase.case_type.name} + + {formatDate(legalCase.entry_date)} + + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + + +
-
+ ) : ( +

No hay expedientes relacionados con esta persona.

+ )} +
- +
+
- + ); } \ No newline at end of file diff --git a/resources/js/pages/LegalCases/Show.tsx b/resources/js/pages/LegalCases/Show.tsx index 97ba688c2..33ee1ae96 100644 --- a/resources/js/pages/LegalCases/Show.tsx +++ b/resources/js/pages/LegalCases/Show.tsx @@ -1,4 +1,8 @@ -import { Head } from '@inertiajs/react'; +import { Head, router } from '@inertiajs/react'; +import AppLayout from '@/layouts/app-layout'; +import { type BreadcrumbItem } from '@/types'; +import { Button } from '@/components/ui/button'; +import { formatDate } from '@/lib/utils'; interface CaseType { id: number; @@ -6,6 +10,30 @@ interface CaseType { description?: string; } +interface Individual { + id: number; + national_id: string; + first_name: string; + middle_name?: string; + last_name: string; + second_last_name?: string; + pivot?: { + individual_id: number; + legal_case_id: number; + }; +} + +interface LegalEntity { + id: number; + rif: string; + business_name: string; + trade_name?: string; + pivot?: { + legal_entity_id: number; + legal_case_id: number; + }; +} + interface LegalCase { id: number; code: string; @@ -13,6 +41,8 @@ interface LegalCase { sentence_date?: string; closing_date?: string; case_type: CaseType; + individuals: Individual[]; + legal_entities: LegalEntity[]; } interface Props { @@ -20,66 +50,177 @@ interface Props { } export default function LegalCaseShow({ legalCase }: Props) { - // Format dates for display - const formatDate = (dateString?: string) => { - if (!dateString) return 'N/A'; - const date = new Date(dateString); - return date.toLocaleDateString('es-ES', { - day: '2-digit', - month: '2-digit', - year: 'numeric' - }); + const breadcrumbs: BreadcrumbItem[] = [ + { + title: 'Búsqueda', + href: route('search.index'), + }, + { + title: 'Resultados', + href: route('search.results'), + }, + { + title: `Expediente: ${legalCase.code}`, + href: route('legal-cases.show', legalCase.id), + }, + ]; + + // Función para obtener el nombre completo de un individuo + const getFullName = (individual: Individual): string => { + return `${individual.first_name} ${individual.middle_name || ''} ${individual.last_name} ${individual.second_last_name || ''}`.trim(); + }; + + // Función para obtener el nombre de la entidad legal + const getEntityName = (entity: LegalEntity): string => { + return entity.trade_name + ? `${entity.business_name} (${entity.trade_name})` + : entity.business_name; }; return ( - <> + -
-
-
-
-

Detalle del Expediente

- -
-

Información General

-
-
- Código de Expediente: {legalCase.code} -
-
- Tipo de Caso: {legalCase.case_type.name} -
-
- Fecha de Entrada: {formatDate(legalCase.entry_date)} -
-
- Fecha de Sentencia: {formatDate(legalCase.sentence_date)} -
-
- Fecha de Cierre: {formatDate(legalCase.closing_date)} -
+
+
+
+

Detalle del Expediente

+ +
+

Información General

+
+
+ Código de Expediente: {legalCase.code} +
+
+ Tipo de Caso: {legalCase.case_type.name} +
+
+ Fecha de Entrada: {formatDate(legalCase.entry_date)} +
+
+ Fecha de Sentencia: {formatDate(legalCase.sentence_date)} +
+
+ Fecha de Cierre: {formatDate(legalCase.closing_date)} +
+
+ Estado: {legalCase.closing_date ? 'Cerrado' : 'Activo'}
- - {legalCase.case_type.description && ( -
-

Descripción del Tipo de Caso

-

{legalCase.case_type.description}

+
+ + {legalCase.case_type.description && ( +
+

Descripción del Tipo de Caso

+

{legalCase.case_type.description}

+
+ )} + + {/* Sección de personas naturales relacionadas */} +
+

Personas Naturales Relacionadas

+ {legalCase.individuals && legalCase.individuals.length > 0 ? ( +
+ + + + + + + + + + {legalCase.individuals.map((individual) => ( + + + + + + ))} + +
+ Nombre + + Cédula + + Acciones +
+ {getFullName(individual)} + + {individual.national_id} + + +
+ ) : ( +

No hay personas naturales relacionadas con este expediente.

)} +
- + {/* Sección de personas jurídicas relacionadas */} +
+

Personas Jurídicas Relacionadas

+ {legalCase.legal_entities && legalCase.legal_entities.length > 0 ? ( +
+ + + + + + + + + + {legalCase.legal_entities.map((entity) => ( + + + + + + ))} + +
+ Razón Social + + RIF + + Acciones +
+ {getEntityName(entity)} + + {entity.rif} + + +
+
+ ) : ( +

No hay personas jurídicas relacionadas con este expediente.

+ )} +
+ +
+
- + ); } \ No newline at end of file diff --git a/resources/js/pages/LegalEntities/Show.tsx b/resources/js/pages/LegalEntities/Show.tsx index f515ff190..fa26ba97e 100644 --- a/resources/js/pages/LegalEntities/Show.tsx +++ b/resources/js/pages/LegalEntities/Show.tsx @@ -1,4 +1,27 @@ -import { Head } from '@inertiajs/react'; +import { Head, router } from '@inertiajs/react'; +import AppLayout from '@/layouts/app-layout'; +import { type BreadcrumbItem } from '@/types'; +import { Button } from '@/components/ui/button'; +import { formatDate } from '@/lib/utils'; + +interface CaseType { + id: number; + name: string; + description?: string; +} + +interface LegalCase { + id: number; + code: string; + entry_date: string; + sentence_date?: string; + closing_date?: string; + case_type: CaseType; + pivot?: { + legal_entity_id: number; + legal_case_id: number; + }; +} interface LegalEntity { id: number; @@ -9,6 +32,7 @@ interface LegalEntity { email_1?: string; phone_number_1?: string; website?: string; + legal_cases: LegalCase[]; } interface Props { @@ -30,63 +54,135 @@ export default function LegalEntityShow({ legalEntity }: Props) { 'otro': 'Otro' }; + const breadcrumbs: BreadcrumbItem[] = [ + { + title: 'Búsqueda', + href: route('search.index'), + }, + { + title: 'Resultados', + href: route('search.results'), + }, + { + title: legalEntity.business_name, + href: route('legal-entities.show', legalEntity.id), + }, + ]; + return ( - <> + -
-
-
-
-

Detalle de Persona Jurídica

- -
-

Información Empresarial

-
+
+
+
+

Detalle de Persona Jurídica

+ +
+

Información Empresarial

+
+
+ Razón Social: {displayName} +
+
+ RIF: {legalEntity.rif} +
+
+ Tipo de Entidad: {entityTypeMap[legalEntity.legal_entity_type] || legalEntity.legal_entity_type} +
+
+
+ +
+

Información de Contacto

+
+ {legalEntity.email_1 && (
- Razón Social: {displayName} + Email: {legalEntity.email_1}
+ )} + {legalEntity.phone_number_1 && (
- RIF: {legalEntity.rif} + Teléfono: {legalEntity.phone_number_1}
+ )} + {legalEntity.website && (
- Tipo de Entidad: {entityTypeMap[legalEntity.legal_entity_type] || legalEntity.legal_entity_type} + Sitio Web: {legalEntity.website}
-
+ )}
+
-
-

Información de Contacto

-
- {legalEntity.email_1 && ( -
- Email: {legalEntity.email_1} -
- )} - {legalEntity.phone_number_1 && ( -
- Teléfono: {legalEntity.phone_number_1} -
- )} - {legalEntity.website && ( -
- Sitio Web: {legalEntity.website} -
- )} + {/* Sección de expedientes relacionados */} +
+

Expedientes Relacionados

+ {legalEntity.legal_cases && legalEntity.legal_cases.length > 0 ? ( +
+ + + + + + + + + + + + {legalEntity.legal_cases.map((legalCase) => ( + + + + + + + + ))} + +
+ Código + + Tipo de Caso + + Fecha de Entrada + + Estado + + Acciones +
+ {legalCase.code} + + {legalCase.case_type.name} + + {formatDate(legalCase.entry_date)} + + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + + +
-
+ ) : ( +

No hay expedientes relacionados con esta entidad.

+ )} +
- +
+
- + ); } \ No newline at end of file From 37d6850ddfac32a5a7a06fb656f22ecb241ac0b2 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 13:54:43 -0400 Subject: [PATCH 07/41] =?UTF-8?q?Implementaci=C3=B3n=20de=20registro=20de?= =?UTF-8?q?=20roles=20en=20el=20controlador=20de=20casos=20legales=20y=20a?= =?UTF-8?q?ctualizaci=C3=B3n=20de=20relaciones=20en=20modelos.=20Se=20han?= =?UTF-8?q?=20a=C3=B1adido=20campos=20de=20rol=20en=20las=20relaciones=20d?= =?UTF-8?q?e=20individuos=20y=20entidades=20legales,=20as=C3=AD=20como=20m?= =?UTF-8?q?ejoras=20en=20la=20visualizaci=C3=B3n=20de=20partes=20relaciona?= =?UTF-8?q?das=20en=20la=20interfaz.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/LegalCaseController.php | 18 ++ app/Models/Individual.php | 4 +- app/Models/LegalCase.php | 8 +- app/Models/LegalEntity.php | 4 +- ...001_add_role_to_case_individuals_table.php | 28 +++ ..._add_role_to_case_legal_entities_table.php | 28 +++ database/seeders/AssignCaseRolesSeeder.php | 107 ++++++++++ resources/js/pages/Individuals/Show.tsx | 6 + resources/js/pages/LegalCases/Show.tsx | 192 ++++++++++-------- resources/js/pages/LegalEntities/Show.tsx | 6 + 10 files changed, 309 insertions(+), 92 deletions(-) create mode 100644 database/migrations/2023_10_01_000001_add_role_to_case_individuals_table.php create mode 100644 database/migrations/2023_10_01_000002_add_role_to_case_legal_entities_table.php create mode 100644 database/seeders/AssignCaseRolesSeeder.php diff --git a/app/Http/Controllers/LegalCaseController.php b/app/Http/Controllers/LegalCaseController.php index 77585900a..9db51c40c 100644 --- a/app/Http/Controllers/LegalCaseController.php +++ b/app/Http/Controllers/LegalCaseController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class LegalCaseController extends Controller { @@ -37,6 +38,23 @@ public function show(string $id) { $legalCase = \App\Models\LegalCase::with(['caseType', 'individuals', 'legalEntities'])->findOrFail($id); + // Depurar los datos de roles + Log::debug('Individuos con roles:', $legalCase->individuals->map(function($individual) { + return [ + 'id' => $individual->id, + 'name' => $individual->first_name . ' ' . $individual->last_name, + 'role' => $individual->pivot->role ?? 'Sin rol definido' + ]; + })->toArray()); + + Log::debug('Entidades con roles:', $legalCase->legalEntities->map(function($entity) { + return [ + 'id' => $entity->id, + 'name' => $entity->business_name, + 'role' => $entity->pivot->role ?? 'Sin rol definido' + ]; + })->toArray()); + return \Inertia\Inertia::render('LegalCases/Show', [ 'legalCase' => $legalCase ]); diff --git a/app/Models/Individual.php b/app/Models/Individual.php index fcc688dcf..c4c113be7 100644 --- a/app/Models/Individual.php +++ b/app/Models/Individual.php @@ -55,6 +55,8 @@ public function getSearchResult(): SearchResult // Relaciones public function legalCases() { - return $this->belongsToMany(LegalCase::class, 'case_individuals'); + return $this->belongsToMany(LegalCase::class, 'case_individuals') + ->withPivot('role') + ->withTimestamps(); } } \ No newline at end of file diff --git a/app/Models/LegalCase.php b/app/Models/LegalCase.php index 6267dfe5a..007f9c847 100644 --- a/app/Models/LegalCase.php +++ b/app/Models/LegalCase.php @@ -46,11 +46,15 @@ public function caseType() public function individuals() { - return $this->belongsToMany(Individual::class, 'case_individuals'); + return $this->belongsToMany(Individual::class, 'case_individuals') + ->withPivot('role') + ->withTimestamps(); } public function legalEntities() { - return $this->belongsToMany(LegalEntity::class, 'case_legal_entities'); + return $this->belongsToMany(LegalEntity::class, 'case_legal_entities') + ->withPivot('role') + ->withTimestamps(); } } \ No newline at end of file diff --git a/app/Models/LegalEntity.php b/app/Models/LegalEntity.php index a4675a123..85f5aa3da 100644 --- a/app/Models/LegalEntity.php +++ b/app/Models/LegalEntity.php @@ -58,6 +58,8 @@ public function legalRepresentative() public function legalCases() { - return $this->belongsToMany(LegalCase::class, 'case_legal_entities'); + return $this->belongsToMany(LegalCase::class, 'case_legal_entities') + ->withPivot('role') + ->withTimestamps(); } } \ No newline at end of file diff --git a/database/migrations/2023_10_01_000001_add_role_to_case_individuals_table.php b/database/migrations/2023_10_01_000001_add_role_to_case_individuals_table.php new file mode 100644 index 000000000..9010b70c1 --- /dev/null +++ b/database/migrations/2023_10_01_000001_add_role_to_case_individuals_table.php @@ -0,0 +1,28 @@ +string('role')->nullable()->after('legal_case_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('case_individuals', function (Blueprint $table) { + $table->dropColumn('role'); + }); + } +}; \ No newline at end of file diff --git a/database/migrations/2023_10_01_000002_add_role_to_case_legal_entities_table.php b/database/migrations/2023_10_01_000002_add_role_to_case_legal_entities_table.php new file mode 100644 index 000000000..7b1620446 --- /dev/null +++ b/database/migrations/2023_10_01_000002_add_role_to_case_legal_entities_table.php @@ -0,0 +1,28 @@ +string('role')->nullable()->after('legal_case_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('case_legal_entities', function (Blueprint $table) { + $table->dropColumn('role'); + }); + } +}; \ No newline at end of file diff --git a/database/seeders/AssignCaseRolesSeeder.php b/database/seeders/AssignCaseRolesSeeder.php new file mode 100644 index 000000000..4873611c5 --- /dev/null +++ b/database/seeders/AssignCaseRolesSeeder.php @@ -0,0 +1,107 @@ +command->error('Las tablas case_individuals o case_legal_entities no existen.'); + return; + } + + // Verificar que existan relaciones para asignar roles + $caseIndividualsCount = DB::table('case_individuals')->count(); + $caseLegalEntitiesCount = DB::table('case_legal_entities')->count(); + + if ($caseIndividualsCount === 0 && $caseLegalEntitiesCount === 0) { + $this->command->error('No existen relaciones en las tablas de case_individuals o case_legal_entities para asignar roles.'); + return; + } + + $this->command->info('Asignando roles a personas naturales relacionadas con expedientes...'); + + // Obtener todos los individuos relacionados con casos + $caseIndividuals = DB::table('case_individuals')->get(); + + // Agrupar por caso para asignar roles específicos por caso + $caseIndividualsGrouped = $caseIndividuals->groupBy('legal_case_id'); + + foreach ($caseIndividualsGrouped as $legalCaseId => $individuals) { + $count = 0; + + foreach ($individuals as $individual) { + $role = $this->assignRoleForIndividual($count); + + DB::table('case_individuals') + ->where('individual_id', $individual->individual_id) + ->where('legal_case_id', $individual->legal_case_id) + ->update(['role' => $role]); + + $count++; + } + } + + $this->command->info('Asignando roles a personas jurídicas relacionadas con expedientes...'); + + // Obtener todas las entidades legales relacionadas con casos + $caseLegalEntities = DB::table('case_legal_entities')->get(); + + // Agrupar por caso para asignar roles específicos por caso + $caseLegalEntitiesGrouped = $caseLegalEntities->groupBy('legal_case_id'); + + foreach ($caseLegalEntitiesGrouped as $legalCaseId => $entities) { + $count = 0; + + foreach ($entities as $entity) { + $role = $this->assignRoleForLegalEntity($count); + + DB::table('case_legal_entities') + ->where('legal_entity_id', $entity->legal_entity_id) + ->where('legal_case_id', $entity->legal_case_id) + ->update(['role' => $role]); + + $count++; + } + } + + $this->command->info('Roles asignados correctamente.'); + } + + /** + * Asigna un rol específico a un individuo basado en su posición en el caso + */ + private function assignRoleForIndividual(int $position): string + { + return match($position) { + 0 => 'Juez', + 1 => 'Solicitante', + 2 => 'Abogado de Solicitante', + 3 => 'Demandado', + 4 => 'Abogado de Demandado', + default => 'Testigo', + }; + } + + /** + * Asigna un rol específico a una entidad legal basado en su posición en el caso + */ + private function assignRoleForLegalEntity(int $position): string + { + return match($position) { + 0 => 'Demandado', + 1 => 'Solicitante', + default => 'Parte interesada', + }; + } +} diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index c11cd46b9..60197a432 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -116,6 +116,9 @@ export default function IndividualShow({ individual }: Props) { Fecha de Entrada + + Fecha de Sentencia + Estado @@ -136,6 +139,9 @@ export default function IndividualShow({ individual }: Props) { {formatDate(legalCase.entry_date)} + + {formatDate(legalCase.sentence_date)} + {legalCase.closing_date ? 'Cerrado' : 'Activo'} diff --git a/resources/js/pages/LegalCases/Show.tsx b/resources/js/pages/LegalCases/Show.tsx index 33ee1ae96..be98819d5 100644 --- a/resources/js/pages/LegalCases/Show.tsx +++ b/resources/js/pages/LegalCases/Show.tsx @@ -20,6 +20,7 @@ interface Individual { pivot?: { individual_id: number; legal_case_id: number; + role?: string; }; } @@ -31,6 +32,7 @@ interface LegalEntity { pivot?: { legal_entity_id: number; legal_case_id: number; + role?: string; }; } @@ -77,6 +79,65 @@ export default function LegalCaseShow({ legalCase }: Props) { : entity.business_name; }; + // Debug de los datos recibidos + console.log("Datos del expediente:", legalCase); + console.log("Individuos:", legalCase.individuals); + console.log("Entidades legales:", legalCase.legal_entities); + + // Combinar todas las partes y agruparlas por rol + const getAllParties = () => { + const parties: {[key: string]: Array<{id: number, name: string, identifier: string, type: 'individual' | 'entity', entityObj: Individual | LegalEntity}>} = {}; + + // Procesar individuos + legalCase.individuals.forEach(individual => { + console.log("Individual:", individual.first_name, "Pivot:", individual.pivot, "Role:", individual.pivot?.role); + const role = individual.pivot?.role || 'Sin rol asignado'; + if (!parties[role]) { + parties[role] = []; + } + parties[role].push({ + id: individual.id, + name: getFullName(individual), + identifier: individual.national_id, + type: 'individual', + entityObj: individual + }); + }); + + // Procesar entidades legales + legalCase.legal_entities.forEach(entity => { + console.log("Entidad:", entity.business_name, "Pivot:", entity.pivot, "Role:", entity.pivot?.role); + const role = entity.pivot?.role || 'Sin rol asignado'; + if (!parties[role]) { + parties[role] = []; + } + parties[role].push({ + id: entity.id, + name: getEntityName(entity), + identifier: entity.rif, + type: 'entity', + entityObj: entity + }); + }); + + return parties; + }; + + // Obtener todas las partes agrupadas por rol + const partiesByRole = getAllParties(); + console.log("Partes por rol:", partiesByRole); + + // Orden de roles para mostrar en la interfaz + const roleOrder = [ + 'Juez', + 'Solicitante', + 'Abogado de Solicitante', + 'Demandado', + 'Abogado de Demandado', + 'Testigo', + 'Sin rol asignado' + ]; + return ( @@ -116,97 +177,52 @@ export default function LegalCaseShow({ legalCase }: Props) {
)} - {/* Sección de personas naturales relacionadas */} -
-

Personas Naturales Relacionadas

- {legalCase.individuals && legalCase.individuals.length > 0 ? ( -
- - - - - - - - - - {legalCase.individuals.map((individual) => ( - - - - - - ))} - -
- Nombre - - Cédula - - Acciones -
- {getFullName(individual)} - - {individual.national_id} - - -
-
- ) : ( -

No hay personas naturales relacionadas con este expediente.

- )} -
- - {/* Sección de personas jurídicas relacionadas */} + {/* Sección única para todas las partes relacionadas */}
-

Personas Jurídicas Relacionadas

- {legalCase.legal_entities && legalCase.legal_entities.length > 0 ? ( -
- - - - - - - - - - {legalCase.legal_entities.map((entity) => ( - - - - - - ))} - -
- Razón Social - - RIF - - Acciones -
- {getEntityName(entity)} - - {entity.rif} - - -
+

Partes Relacionadas

+ + {Object.keys(partiesByRole).length > 0 ? ( +
+ {roleOrder.map(role => { + // Solo mostrar roles que tengan partes asignadas + if (!partiesByRole[role] || partiesByRole[role].length === 0) return null; + + return ( +
+
+ {role} +
+
+ {partiesByRole[role].map(party => ( +
+
+

{party.name}

+

+ {party.type === 'individual' ? 'Cédula:' : 'RIF:'} {party.identifier} +

+
+
+ +
+
+ ))} +
+
+ ); + })}
) : ( -

No hay personas jurídicas relacionadas con este expediente.

+

No hay partes relacionadas con este expediente.

)}
diff --git a/resources/js/pages/LegalEntities/Show.tsx b/resources/js/pages/LegalEntities/Show.tsx index fa26ba97e..e425d9825 100644 --- a/resources/js/pages/LegalEntities/Show.tsx +++ b/resources/js/pages/LegalEntities/Show.tsx @@ -130,6 +130,9 @@ export default function LegalEntityShow({ legalEntity }: Props) { Fecha de Entrada + + Fecha de Sentencia + Estado @@ -150,6 +153,9 @@ export default function LegalEntityShow({ legalEntity }: Props) { {formatDate(legalCase.entry_date)} + + {formatDate(legalCase.sentence_date)} + {legalCase.closing_date ? 'Cerrado' : 'Activo'} From 66744dfc669d1af44b632b2aad887933c628f4b4 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 14:44:50 -0400 Subject: [PATCH 08/41] =?UTF-8?q?Mejoras=20en=20la=20presentaci=C3=B3n=20d?= =?UTF-8?q?e=20detalles=20de=20Individuos,=20Casos=20Legales=20y=20Entidad?= =?UTF-8?q?es=20Legales.=20Se=20han=20a=C3=B1adido=20estilos=20de=20tarjet?= =?UTF-8?q?a=20para=20secciones=20de=20informaci=C3=B3n=20personal,=20de?= =?UTF-8?q?=20contacto=20y=20expedientes=20relacionados,=20mejorando=20la?= =?UTF-8?q?=20usabilidad=20y=20la=20est=C3=A9tica=20de=20la=20interfaz.=20?= =?UTF-8?q?Adem=C3=A1s,=20se=20ha=20incluido=20un=20campo=20de=20rol=20en?= =?UTF-8?q?=20las=20relaciones=20de=20los=20modelos=20correspondientes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/pages/Individuals/Show.tsx | 184 +++++++++++---------- resources/js/pages/LegalCases/Show.tsx | 58 ++++--- resources/js/pages/LegalEntities/Show.tsx | 186 ++++++++++++---------- 3 files changed, 241 insertions(+), 187 deletions(-) diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index 60197a432..f98bcc85b 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -20,6 +20,7 @@ interface LegalCase { pivot?: { individual_id: number; legal_case_id: number; + role?: string; }; } @@ -66,101 +67,122 @@ export default function IndividualShow({ individual }: Props) {

Detalle de Persona Natural

-
-

Información Personal

-
-
- Nombre Completo: {fullName} -
-
- Cédula: {individual.national_id} -
- {individual.passport && ( -
- Pasaporte: {individual.passport} -
- )} + {/* Información Personal - Ahora con estilo de tarjeta */} +
+
+ Información Personal
-
- -
-

Información de Contacto

-
- {individual.email_1 && ( +
+
- Email: {individual.email_1} + Nombre Completo: {fullName}
- )} - {individual.phone_number_1 && (
- Teléfono: {individual.phone_number_1} + Cédula: {individual.national_id}
- )} + {individual.passport && ( +
+ Pasaporte: {individual.passport} +
+ )} +
- {/* Sección de expedientes relacionados */} + {/* Información de Contacto - Ahora con estilo de tarjeta */} +
+
+ Información de Contacto +
+
+
+ {individual.email_1 && ( +
+ Email: {individual.email_1} +
+ )} + {individual.phone_number_1 && ( +
+ Teléfono: {individual.phone_number_1} +
+ )} + {!individual.email_1 && !individual.phone_number_1 && ( +
+

No hay información de contacto disponible

+
+ )} +
+
+
+ + {/* Expedientes Relacionados - Ahora con estilo de tarjeta */}

Expedientes Relacionados

{individual.legal_cases && individual.legal_cases.length > 0 ? ( -
- - - - - - - - - - - - - {individual.legal_cases.map((legalCase) => ( - - - - - - - +
+
+
- Código - - Tipo de Caso - - Fecha de Entrada - - Fecha de Sentencia - - Estado - - Acciones -
- {legalCase.code} - - {legalCase.case_type.name} - - {formatDate(legalCase.entry_date)} - - {formatDate(legalCase.sentence_date)} - - {legalCase.closing_date ? 'Cerrado' : 'Activo'} - - -
+ + + + + + + + - ))} - -
+ Código + + Tipo de Caso + + Fecha de Entrada + + Fecha de Sentencia + + Estado + + Acciones +
+ + + {individual.legal_cases.map((legalCase) => ( + + + {legalCase.code} + + + {legalCase.case_type.name} + + + {formatDate(legalCase.entry_date)} + + + {formatDate(legalCase.sentence_date)} + + + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + + + + + + ))} + + +
) : ( -

No hay expedientes relacionados con esta persona.

+
+
+ No hay expedientes relacionados con esta persona. +
+
)}
diff --git a/resources/js/pages/LegalCases/Show.tsx b/resources/js/pages/LegalCases/Show.tsx index be98819d5..19276003a 100644 --- a/resources/js/pages/LegalCases/Show.tsx +++ b/resources/js/pages/LegalCases/Show.tsx @@ -146,38 +146,48 @@ export default function LegalCaseShow({ legalCase }: Props) {

Detalle del Expediente

-
-

Información General

-
-
- Código de Expediente: {legalCase.code} -
-
- Tipo de Caso: {legalCase.case_type.name} -
-
- Fecha de Entrada: {formatDate(legalCase.entry_date)} -
-
- Fecha de Sentencia: {formatDate(legalCase.sentence_date)} -
-
- Fecha de Cierre: {formatDate(legalCase.closing_date)} -
-
- Estado: {legalCase.closing_date ? 'Cerrado' : 'Activo'} + {/* Sección de Información General - Ahora con estilo de tarjeta */} +
+
+ Información General +
+
+
+
+ Código de Expediente: {legalCase.code} +
+
+ Tipo de Caso: {legalCase.case_type.name} +
+
+ Fecha de Entrada: {formatDate(legalCase.entry_date)} +
+
+ Fecha de Sentencia: {formatDate(legalCase.sentence_date)} +
+
+ Fecha de Cierre: {formatDate(legalCase.closing_date)} +
+
+ Estado: {legalCase.closing_date ? 'Cerrado' : 'Activo'} +
+ {/* Sección de Descripción del Tipo de Caso - Ahora con estilo de tarjeta */} {legalCase.case_type.description && ( -
-

Descripción del Tipo de Caso

-

{legalCase.case_type.description}

+
+
+ Descripción del Tipo de Caso +
+
+

{legalCase.case_type.description}

+
)} - {/* Sección única para todas las partes relacionadas */} + {/* Sección única para todas las partes relacionadas - Ya tiene estilo de tarjeta */}

Partes Relacionadas

diff --git a/resources/js/pages/LegalEntities/Show.tsx b/resources/js/pages/LegalEntities/Show.tsx index e425d9825..65aedff69 100644 --- a/resources/js/pages/LegalEntities/Show.tsx +++ b/resources/js/pages/LegalEntities/Show.tsx @@ -20,6 +20,7 @@ interface LegalCase { pivot?: { legal_entity_id: number; legal_case_id: number; + role?: string; }; } @@ -77,104 +78,125 @@ export default function LegalEntityShow({ legalEntity }: Props) {

Detalle de Persona Jurídica

-
-

Información Empresarial

-
-
- Razón Social: {displayName} -
-
- RIF: {legalEntity.rif} -
-
- Tipo de Entidad: {entityTypeMap[legalEntity.legal_entity_type] || legalEntity.legal_entity_type} -
+ {/* Información Empresarial - Ahora con estilo de tarjeta */} +
+
+ Información Empresarial
-
- -
-

Información de Contacto

-
- {legalEntity.email_1 && ( +
+
- Email: {legalEntity.email_1} + Razón Social: {displayName}
- )} - {legalEntity.phone_number_1 && (
- Teléfono: {legalEntity.phone_number_1} + RIF: {legalEntity.rif}
- )} - {legalEntity.website && (
- Sitio Web: {legalEntity.website} + Tipo de Entidad: {entityTypeMap[legalEntity.legal_entity_type] || legalEntity.legal_entity_type}
- )} +
- {/* Sección de expedientes relacionados */} + {/* Información de Contacto - Ahora con estilo de tarjeta */} +
+
+ Información de Contacto +
+
+
+ {legalEntity.email_1 && ( +
+ Email: {legalEntity.email_1} +
+ )} + {legalEntity.phone_number_1 && ( +
+ Teléfono: {legalEntity.phone_number_1} +
+ )} + {legalEntity.website && ( +
+ Sitio Web: {legalEntity.website} +
+ )} + {!legalEntity.email_1 && !legalEntity.phone_number_1 && !legalEntity.website && ( +
+

No hay información de contacto disponible

+
+ )} +
+
+
+ + {/* Expedientes Relacionados - Ahora con estilo de tarjeta */}

Expedientes Relacionados

{legalEntity.legal_cases && legalEntity.legal_cases.length > 0 ? ( -
- - - - - - - - - - - - - {legalEntity.legal_cases.map((legalCase) => ( - - - - - - - +
+
+
- Código - - Tipo de Caso - - Fecha de Entrada - - Fecha de Sentencia - - Estado - - Acciones -
- {legalCase.code} - - {legalCase.case_type.name} - - {formatDate(legalCase.entry_date)} - - {formatDate(legalCase.sentence_date)} - - {legalCase.closing_date ? 'Cerrado' : 'Activo'} - - -
+ + + + + + + + - ))} - -
+ Código + + Tipo de Caso + + Fecha de Entrada + + Fecha de Sentencia + + Estado + + Acciones +
+ + + {legalEntity.legal_cases.map((legalCase) => ( + + + {legalCase.code} + + + {legalCase.case_type.name} + + + {formatDate(legalCase.entry_date)} + + + {formatDate(legalCase.sentence_date)} + + + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + + + + + + ))} + + +
) : ( -

No hay expedientes relacionados con esta entidad.

+
+
+ No hay expedientes relacionados con esta entidad. +
+
)}
From 9e259b9fe486e168d44cd21fbe872d2898d497cd Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 14:59:10 -0400 Subject: [PATCH 09/41] =?UTF-8?q?Mejoras=20en=20la=20interfaz=20de=20b?= =?UTF-8?q?=C3=BAsqueda=20y=20resultados.=20Se=20ha=20actualizado=20el=20d?= =?UTF-8?q?ise=C3=B1o=20del=20formulario=20de=20b=C3=BAsqueda=20y=20se=20h?= =?UTF-8?q?an=20a=C3=B1adido=20iconos=20representativos=20en=20los=20resul?= =?UTF-8?q?tados,=20mejorando=20la=20usabilidad=20y=20la=20presentaci?= =?UTF-8?q?=C3=B3n=20visual.=20Adem=C3=A1s,=20se=20ha=20implementado=20una?= =?UTF-8?q?=20funci=C3=B3n=20para=20mostrar=20iconos=20seg=C3=BAn=20el=20t?= =?UTF-8?q?ipo=20de=20resultado,=20facilitando=20la=20identificaci=C3=B3n?= =?UTF-8?q?=20de=20elementos=20en=20la=20lista=20de=20resultados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/pages/Individuals/Show.tsx | 32 +++-- resources/js/pages/LegalCases/Show.tsx | 58 +++++++-- resources/js/pages/LegalEntities/Show.tsx | 37 ++++-- resources/js/pages/Search/Index.tsx | 71 ++++++++--- resources/js/pages/Search/Results.tsx | 144 +++++++++++++++------- 5 files changed, 244 insertions(+), 98 deletions(-) diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index f98bcc85b..bba877a8f 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -3,6 +3,7 @@ import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Button } from '@/components/ui/button'; import { formatDate } from '@/lib/utils'; +import { User, Fingerprint, Contact, FileText, Mail, Phone, FileQuestion } from 'lucide-react'; interface CaseType { id: number; @@ -65,11 +66,15 @@ export default function IndividualShow({ individual }: Props) {
-

Detalle de Persona Natural

+
+ +

Detalle de Persona Natural

+
{/* Información Personal - Ahora con estilo de tarjeta */}
-
+
+ Información Personal
@@ -91,19 +96,22 @@ export default function IndividualShow({ individual }: Props) { {/* Información de Contacto - Ahora con estilo de tarjeta */}
-
+
+ Información de Contacto
{individual.email_1 && ( -
- Email: {individual.email_1} +
+ + Email: {individual.email_1}
)} {individual.phone_number_1 && ( -
- Teléfono: {individual.phone_number_1} +
+ + Teléfono: {individual.phone_number_1}
)} {!individual.email_1 && !individual.phone_number_1 && ( @@ -117,7 +125,10 @@ export default function IndividualShow({ individual }: Props) { {/* Expedientes Relacionados - Ahora con estilo de tarjeta */}
-

Expedientes Relacionados

+
+ +

Expedientes Relacionados

+
{individual.legal_cases && individual.legal_cases.length > 0 ? (
@@ -148,7 +159,10 @@ export default function IndividualShow({ individual }: Props) { {individual.legal_cases.map((legalCase) => ( - {legalCase.code} +
+ + {legalCase.code} +
{legalCase.case_type.name} diff --git a/resources/js/pages/LegalCases/Show.tsx b/resources/js/pages/LegalCases/Show.tsx index 19276003a..1fb196c07 100644 --- a/resources/js/pages/LegalCases/Show.tsx +++ b/resources/js/pages/LegalCases/Show.tsx @@ -3,6 +3,7 @@ import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Button } from '@/components/ui/button'; import { formatDate } from '@/lib/utils'; +import { FileText, Info, FileQuestion, Users, Gavel, UserCheck, ScrollText, Building, UserCog, Eye } from 'lucide-react'; interface CaseType { id: number; @@ -138,17 +139,41 @@ export default function LegalCaseShow({ legalCase }: Props) { 'Sin rol asignado' ]; + // Función para obtener el icono según el rol + const getRoleIcon = (role: string) => { + switch(role) { + case 'Juez': + return ; + case 'Solicitante': + return ; + case 'Abogado de Solicitante': + return ; + case 'Demandado': + return ; + case 'Abogado de Demandado': + return ; + case 'Testigo': + return ; + default: + return ; + } + }; + return (
-

Detalle del Expediente

+
+ +

Detalle del Expediente

+
{/* Sección de Información General - Ahora con estilo de tarjeta */}
-
+
+ Información General
@@ -178,7 +203,8 @@ export default function LegalCaseShow({ legalCase }: Props) { {/* Sección de Descripción del Tipo de Caso - Ahora con estilo de tarjeta */} {legalCase.case_type.description && (
-
+
+ Descripción del Tipo de Caso
@@ -189,7 +215,10 @@ export default function LegalCaseShow({ legalCase }: Props) { {/* Sección única para todas las partes relacionadas - Ya tiene estilo de tarjeta */}
-

Partes Relacionadas

+
+ +

Partes Relacionadas

+
{Object.keys(partiesByRole).length > 0 ? (
@@ -199,17 +228,24 @@ export default function LegalCaseShow({ legalCase }: Props) { return (
-
- {role} +
+ {getRoleIcon(role)} + {role}
{partiesByRole[role].map(party => (
-
-

{party.name}

-

- {party.type === 'individual' ? 'Cédula:' : 'RIF:'} {party.identifier} -

+
+ {party.type === 'individual' ? + : + + } +
+

{party.name}

+

+ {party.type === 'individual' ? 'Cédula:' : 'RIF:'} {party.identifier} +

+
+ +
+

Sistema de Búsqueda

+ +
+
+
+ Formulario de Búsqueda
- +
+

+ Busque por código de expediente, cédula o nombres de participantes, RIF o razón social de entidades. +

+ +
+
+ setQuery(e.target.value)} + placeholder="Escriba un patrón de búsqueda..." + className="pl-10 py-6 text-lg" + /> + +
+ +
+ +
+
+
+
+ +
+ Ingrese términos específicos para obtener resultados más precisos. +
diff --git a/resources/js/pages/Search/Results.tsx b/resources/js/pages/Search/Results.tsx index daeefe591..0baa08169 100644 --- a/resources/js/pages/Search/Results.tsx +++ b/resources/js/pages/Search/Results.tsx @@ -2,14 +2,15 @@ import { Button } from '@/components/ui/button'; import AppLayout from '@/layouts/app-layout'; import { BreadcrumbItem } from '@/types'; import { Head, router } from '@inertiajs/react'; +import { Search, ArrowLeft, User, Building2, FileText } from 'lucide-react'; const breadcrumbs: BreadcrumbItem[] = [ { - title: 'Search', + title: 'Búsqueda', href: '/search', }, { - title: 'Results', + title: 'Resultados', href: '/results', }, ]; @@ -67,56 +68,105 @@ export default function SearchResults({ results, query }: Props) { return ''; }; + // Función para obtener el icono según el tipo de resultado + const getIcon = (type: string) => { + if (type.includes('individuals')) { + return ; + } + if (type.includes('legal_entities')) { + return ; + } + if (type.includes('legal_cases')) { + return ; + } + return null; + }; + return ( -
-
-
-

Resultados de búsqueda para: "{query}"

- -
- {Object.entries(results).length > 0 ? ( - Object.entries(results).map(([type, items]) => ( -
-

- {type.includes('individuals') && 'Resultados de Personas Naturales'} - {type.includes('legal_entities') && 'Resultados de Personas Jurídicas'} - {type.includes('legal_cases') && 'Resultados de Expedientes Judiciales'} - {!type.includes('individuals') && !type.includes('legal_entities') && !type.includes('legal_cases') && type} -

- {items.length > 0 ? ( -
    - {items.map((result) => ( -
  • -
    -
    -

    {result.title}

    -

    {getSecondaryInfo(result, type)}

    +
    +
    +
    +
    +
    + +

    Resultados de búsqueda

    +
    + +
    + +
    +
    + Criterio de búsqueda +
    +
    +

    + Término buscado: "{query}" +

    +
    +
    + + {Object.entries(results).length > 0 ? ( + Object.entries(results).map(([type, items]) => ( +
    +
    + {getIcon(type)} + + {type.includes('individuals') && 'Personas Naturales'} + {type.includes('legal_entities') && 'Personas Jurídicas'} + {type.includes('legal_cases') && 'Expedientes Judiciales'} + {!type.includes('individuals') && !type.includes('legal_entities') && !type.includes('legal_cases') && type} + + + ({items.length} {items.length === 1 ? 'resultado' : 'resultados'}) + +
    + {items.length > 0 ? ( +
      + {items.map((result) => ( +
    • +
      +
      +

      {result.title}

      +

      {getSecondaryInfo(result, type)}

      +
      +
      - -
    -
  • - ))} -
- ) : ( -

No se encontraron resultados.

- )} + + ))} + + ) : ( +
+ No se encontraron resultados. +
+ )} +
+ )) + ) : ( +
+
+ Sin resultados +
+
+ No se encontraron resultados para tu búsqueda. Intenta con otros términos o revisa la ortografía. +
- )) - ) : ( -

No se encontraron resultados para tu búsqueda.

- )} + )} +
From f3b6912b6ddd6c5f5fc81e40091b590e4bfb9669 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 15:11:14 -0400 Subject: [PATCH 10/41] =?UTF-8?q?Actualizaci=C3=B3n=20del=20dise=C3=B1o=20?= =?UTF-8?q?de=20la=20secci=C3=B3n=20de=20expedientes=20relacionados=20en?= =?UTF-8?q?=20las=20vistas=20de=20Individuos=20y=20Entidades=20Legales.=20?= =?UTF-8?q?Se=20ha=20implementado=20un=20dise=C3=B1o=20responsivo=20que=20?= =?UTF-8?q?alterna=20entre=20vista=20de=20tabla=20y=20tarjetas,=20mejorand?= =?UTF-8?q?o=20la=20usabilidad=20en=20dispositivos=20m=C3=B3viles=20y=20pa?= =?UTF-8?q?ntallas=20grandes.=20Adem=C3=A1s,=20se=20han=20a=C3=B1adido=20n?= =?UTF-8?q?uevos=20iconos=20para=20enriquecer=20la=20presentaci=C3=B3n=20v?= =?UTF-8?q?isual.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/pages/Individuals/Show.tsx | 182 ++++++++++++++-------- resources/js/pages/LegalEntities/Show.tsx | 182 ++++++++++++++-------- 2 files changed, 242 insertions(+), 122 deletions(-) diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index bba877a8f..672c72db9 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -3,7 +3,7 @@ import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Button } from '@/components/ui/button'; import { formatDate } from '@/lib/utils'; -import { User, Fingerprint, Contact, FileText, Mail, Phone, FileQuestion } from 'lucide-react'; +import { User, Fingerprint, Contact, FileText, Mail, Phone, FileQuestion, Calendar, CheckCircle, AlertCircle } from 'lucide-react'; interface CaseType { id: number; @@ -123,74 +123,134 @@ export default function IndividualShow({ individual }: Props) {
- {/* Expedientes Relacionados - Ahora con estilo de tarjeta */} + {/* Expedientes Relacionados - Con diseño responsivo (tabla/tarjetas) */}

Expedientes Relacionados

{individual.legal_cases && individual.legal_cases.length > 0 ? ( -
-
- - - - - - - - - - - - - {individual.legal_cases.map((legalCase) => ( - - - - - - - + <> + {/* Vista de tabla para pantallas medianas y grandes */} +
+
+
- Código - - Tipo de Caso - - Fecha de Entrada - - Fecha de Sentencia - - Estado - - Acciones -
-
- - {legalCase.code} -
-
- {legalCase.case_type.name} - - {formatDate(legalCase.entry_date)} - - {formatDate(legalCase.sentence_date)} - - {legalCase.closing_date ? 'Cerrado' : 'Activo'} - - -
+ + + + + + + + - ))} - -
+ Código + + Tipo de Caso + + Fecha de Entrada + + Fecha de Sentencia + + Estado + + Acciones +
+ + + {individual.legal_cases.map((legalCase) => ( + + +
+ + {legalCase.code} +
+ + + {legalCase.case_type.name} + + + {formatDate(legalCase.entry_date)} + + + {formatDate(legalCase.sentence_date)} + + + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + + + + + + ))} + + +
-
+ + {/* Vista de tarjetas para dispositivos móviles */} +
+ {individual.legal_cases.map((legalCase) => ( +
+
+
+ + {legalCase.code} +
+ + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + +
+
+
+
Tipo de Caso
+
{legalCase.case_type.name}
+
+
+
+
Fecha de Entrada
+
+ + {formatDate(legalCase.entry_date)} +
+
+
+
Fecha de Sentencia
+
+ {legalCase.sentence_date ? ( + <> + + {formatDate(legalCase.sentence_date)} + + ) : ( + <> + + Pendiente + + )} +
+
+
+
+ +
+
+
+ ))} +
+ ) : (
diff --git a/resources/js/pages/LegalEntities/Show.tsx b/resources/js/pages/LegalEntities/Show.tsx index c88d1a3ba..1ee4fac59 100644 --- a/resources/js/pages/LegalEntities/Show.tsx +++ b/resources/js/pages/LegalEntities/Show.tsx @@ -3,7 +3,7 @@ import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Button } from '@/components/ui/button'; import { formatDate } from '@/lib/utils'; -import { Building2, Mail, Phone, Briefcase, Contact, FileText, Globe, FileQuestion } from 'lucide-react'; +import { Building2, Mail, Phone, Briefcase, Contact, FileText, Globe, FileQuestion, Calendar, CheckCircle, AlertCircle } from 'lucide-react'; interface CaseType { id: number; @@ -138,74 +138,134 @@ export default function LegalEntityShow({ legalEntity }: Props) {
- {/* Expedientes Relacionados - Ahora con estilo de tarjeta */} + {/* Expedientes Relacionados - Con diseño responsivo (tabla/tarjetas) */}

Expedientes Relacionados

{legalEntity.legal_cases && legalEntity.legal_cases.length > 0 ? ( -
-
- - - - - - - - - - - - - {legalEntity.legal_cases.map((legalCase) => ( - - - - - - - + <> + {/* Vista de tabla para pantallas medianas y grandes */} +
+
+
- Código - - Tipo de Caso - - Fecha de Entrada - - Fecha de Sentencia - - Estado - - Acciones -
-
- - {legalCase.code} -
-
- {legalCase.case_type.name} - - {formatDate(legalCase.entry_date)} - - {formatDate(legalCase.sentence_date)} - - {legalCase.closing_date ? 'Cerrado' : 'Activo'} - - -
+ + + + + + + + - ))} - -
+ Código + + Tipo de Caso + + Fecha de Entrada + + Fecha de Sentencia + + Estado + + Acciones +
+ + + {legalEntity.legal_cases.map((legalCase) => ( + + +
+ + {legalCase.code} +
+ + + {legalCase.case_type.name} + + + {formatDate(legalCase.entry_date)} + + + {formatDate(legalCase.sentence_date)} + + + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + + + + + + ))} + + +
-
+ + {/* Vista de tarjetas para dispositivos móviles */} +
+ {legalEntity.legal_cases.map((legalCase) => ( +
+
+
+ + {legalCase.code} +
+ + {legalCase.closing_date ? 'Cerrado' : 'Activo'} + +
+
+
+
Tipo de Caso
+
{legalCase.case_type.name}
+
+
+
+
Fecha de Entrada
+
+ + {formatDate(legalCase.entry_date)} +
+
+
+
Fecha de Sentencia
+
+ {legalCase.sentence_date ? ( + <> + + {formatDate(legalCase.sentence_date)} + + ) : ( + <> + + Pendiente + + )} +
+
+
+
+ +
+
+
+ ))} +
+ ) : (
From ec274c1e918504bb83d81a0b78c660b4e99e4087 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 15:20:11 -0400 Subject: [PATCH 11/41] =?UTF-8?q?Adici=C3=B3n=20del=20campo=20de=20rol=20e?= =?UTF-8?q?n=20las=20vistas=20de=20detalles=20de=20Individuos=20y=20Entida?= =?UTF-8?q?des=20Legales.=20Se=20ha=20incorporado=20el=20icono=20UserCog?= =?UTF-8?q?=20y=20se=20ha=20mejorado=20la=20presentaci=C3=B3n=20visual=20a?= =?UTF-8?q?l=20mostrar=20el=20rol=20asignado=20en=20los=20expedientes,=20o?= =?UTF-8?q?ptimizando=20la=20usabilidad=20y=20la=20claridad=20de=20la=20in?= =?UTF-8?q?formaci=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/pages/Individuals/Show.tsx | 20 +++++++++++++++++++- resources/js/pages/LegalEntities/Show.tsx | 20 +++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index 672c72db9..fee39c739 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -3,7 +3,7 @@ import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Button } from '@/components/ui/button'; import { formatDate } from '@/lib/utils'; -import { User, Fingerprint, Contact, FileText, Mail, Phone, FileQuestion, Calendar, CheckCircle, AlertCircle } from 'lucide-react'; +import { User, Fingerprint, Contact, FileText, Mail, Phone, FileQuestion, Calendar, CheckCircle, AlertCircle, UserCog } from 'lucide-react'; interface CaseType { id: number; @@ -143,6 +143,9 @@ export default function IndividualShow({ individual }: Props) { Tipo de Caso + + Rol + Fecha de Entrada @@ -169,6 +172,14 @@ export default function IndividualShow({ individual }: Props) { {legalCase.case_type.name} + +
+ + + {legalCase.pivot?.role || 'Sin rol asignado'} + +
+ {formatDate(legalCase.entry_date)} @@ -208,6 +219,13 @@ export default function IndividualShow({ individual }: Props) {
+
+ +
+
Rol en el Expediente
+
{legalCase.pivot?.role || 'Sin rol asignado'}
+
+
Tipo de Caso
{legalCase.case_type.name}
diff --git a/resources/js/pages/LegalEntities/Show.tsx b/resources/js/pages/LegalEntities/Show.tsx index 1ee4fac59..31f52427b 100644 --- a/resources/js/pages/LegalEntities/Show.tsx +++ b/resources/js/pages/LegalEntities/Show.tsx @@ -3,7 +3,7 @@ import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Button } from '@/components/ui/button'; import { formatDate } from '@/lib/utils'; -import { Building2, Mail, Phone, Briefcase, Contact, FileText, Globe, FileQuestion, Calendar, CheckCircle, AlertCircle } from 'lucide-react'; +import { Building2, Mail, Phone, Briefcase, Contact, FileText, Globe, FileQuestion, Calendar, CheckCircle, AlertCircle, UserCog } from 'lucide-react'; interface CaseType { id: number; @@ -158,6 +158,9 @@ export default function LegalEntityShow({ legalEntity }: Props) { Tipo de Caso + + Rol + Fecha de Entrada @@ -184,6 +187,14 @@ export default function LegalEntityShow({ legalEntity }: Props) { {legalCase.case_type.name} + +
+ + + {legalCase.pivot?.role || 'Sin rol asignado'} + +
+ {formatDate(legalCase.entry_date)} @@ -223,6 +234,13 @@ export default function LegalEntityShow({ legalEntity }: Props) {
+
+ +
+
Rol en el Expediente
+
{legalCase.pivot?.role || 'Sin rol asignado'}
+
+
Tipo de Caso
{legalCase.case_type.name}
From 5d31ead29f8e96fdd5aff8059a6b57fd6033bab2 Mon Sep 17 00:00:00 2001 From: Vioscar Rivero Date: Sat, 17 May 2025 16:06:04 -0400 Subject: [PATCH 12/41] =?UTF-8?q?Mejoras=20en=20la=20presentaci=C3=B3n=20d?= =?UTF-8?q?e=20detalles=20en=20las=20vistas=20de=20Individuos,=20Casos=20L?= =?UTF-8?q?egales=20y=20Entidades=20Legales.=20Se=20ha=20actualizado=20el?= =?UTF-8?q?=20dise=C3=B1o=20de=20los=20encabezados=20para=20que=20sean=20m?= =?UTF-8?q?=C3=A1s=20prominentes=20y=20se=20ha=20a=C3=B1adido=20el=20atrib?= =?UTF-8?q?uto=20'aria-hidden'=20a=20los=20iconos,=20mejorando=20la=20acce?= =?UTF-8?q?sibilidad=20y=20la=20est=C3=A9tica=20de=20la=20interfaz.=20Adem?= =?UTF-8?q?=C3=A1s,=20se=20ha=20optimizado=20el=20dise=C3=B1o=20responsivo?= =?UTF-8?q?=20de=20las=20secciones=20de=20informaci=C3=B3n=20y=20expedient?= =?UTF-8?q?es=20relacionados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/pages/Individuals/Show.tsx | 12 +++---- resources/js/pages/LegalCases/Show.tsx | 41 ++++++++++++----------- resources/js/pages/LegalEntities/Show.tsx | 12 +++---- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/resources/js/pages/Individuals/Show.tsx b/resources/js/pages/Individuals/Show.tsx index fee39c739..e986c78a0 100644 --- a/resources/js/pages/Individuals/Show.tsx +++ b/resources/js/pages/Individuals/Show.tsx @@ -66,9 +66,8 @@ export default function IndividualShow({ individual }: Props) {
-
- -

Detalle de Persona Natural

+
+

DETALLE DE PERSONA NATURAL

{/* Información Personal - Ahora con estilo de tarjeta */} @@ -125,9 +124,8 @@ export default function IndividualShow({ individual }: Props) { {/* Expedientes Relacionados - Con diseño responsivo (tabla/tarjetas) */}
-
- -

Expedientes Relacionados

+
+

EXPEDIENTES RELACIONADOS

{individual.legal_cases && individual.legal_cases.length > 0 ? ( <> @@ -278,7 +276,7 @@ export default function IndividualShow({ individual }: Props) { )}
-
+