diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 0c1850b..38f0f4a 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -12,8 +12,7 @@ $rules = [ '@Symfony' => true, '@Symfony:risky' => true, - '@PHP81Migration' => true, - '@PHP80Migration:risky' => true, + '@autoPHPMigration:risky' => true, // overwrite some Symfony rules 'braces_position' => [ diff --git a/README.md b/README.md index 9007c0b..848a52f 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Then you will need to build the assets with `npm run build` or `npm run dev`. Th 2. Run SQL from `install.sql`. 3. Configure the event information in `app/Config/local.neon` as described in the [configuration documentation](docs/configuration.md). Do not forget to set up admin password and database credentials in either `app/Config/local.neon` or `app/Config/private.neon`. 4. Make `temp` and `log` directories writeable. -5. Change e-mail templates in `app/Templates/Mail`. +5. Change e-mail templates in `app/Presenters/templates/Mail`. 6. The entry point of the application is in the `www` directory, configure your web server accordingly. ## Thanks diff --git a/app/Components/BootstrapRadioList.php b/app/Components/BootstrapRadioList.php index 30d04c8..307ca4a 100644 --- a/app/Components/BootstrapRadioList.php +++ b/app/Components/BootstrapRadioList.php @@ -12,8 +12,7 @@ * Because Bs5FormRenderer only gets us so far. */ final class BootstrapRadioList extends Controls\RadioList { - /** @var bool */ - public $generateId = true; + public bool $generateId = true; public function getControl(): Html { if ($this->hasErrors()) { diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php index 749fb14..a5f8e23 100644 --- a/app/Components/Helpers.php +++ b/app/Components/Helpers.php @@ -12,10 +12,12 @@ use Stringable; /** - * Nette forms helper modified to work better with Bootstrap styles. + * A subset of `Nette\Forms\Helpers` modified to work better with Bootstrap styles. */ -class Helpers extends Nette\Forms\Helpers { +final class Helpers { /** + * The difference from `Nette\Forms\Helpers` is that we move `label` tag after the `input` tag, instead of having the former wrap the latter. + * * @param array $inputAttrs * @param array $labelAttrs * @param Html|Stringable|null $wrapper @@ -24,7 +26,7 @@ public static function createInputList( array $items, ?array $inputAttrs = null, ?array $labelAttrs = null, - $wrapper = null + $wrapper = null, ): string { [$inputAttrs, $inputTag] = self::prepareAttrs($inputAttrs, 'input'); [$labelAttrs, $labelTag] = self::prepareAttrs($labelAttrs, 'label'); @@ -44,7 +46,7 @@ public static function createInputList( $input->value = $value; $res .= ($res === '' && $wrapperEnd === '' ? '' : $wrapper) - . $inputTag . $input->attributes() . (Html::$xhtml ? ' />' : '>') + . $inputTag . $input->attributes() . '>' . $labelTag . $label->attributes() . '>' . ($caption instanceof Nette\HtmlStringable ? $caption : htmlspecialchars((string) $caption, \ENT_NOQUOTES, 'UTF-8')) . '' @@ -55,6 +57,8 @@ public static function createInputList( } /** + * This is copied as is from `Nette\Forms\Helpers` since we cannot access it from here. + * * @param array $attrs * * @return array{array>, string} @@ -66,7 +70,7 @@ private static function prepareAttrs(?array $attrs, string $name): array { $p = substr($k, 0, -1); unset($attrs[$k], $attrs[$p]); if ($k[-1] === '?') { - $dynamic[$p] = array_fill_keys((array) $v, true); + $dynamic[$p] = array_fill_keys((array) $v, value: true); } elseif (\is_array($v) && $v) { $dynamic[$p] = $v; } else { diff --git a/app/Config/common.neon b/app/Config/common.neon index d7e5356..13666ad 100644 --- a/app/Config/common.neon +++ b/app/Config/common.neon @@ -15,8 +15,7 @@ parameters: application: errorPresenter: Error - mapping: - *: App\*Module\Presenters\*Presenter + mapping: App\*Module\Presenters\*Presenter di: export: @@ -31,7 +30,7 @@ latte: strictTypes: true strictParsing: true extensions: - - App\Templates\Accessory\LatteExtension + - App\Presenters\Accessory\LatteExtension session: autoStart: yes @@ -60,17 +59,17 @@ orm: services: - App\Helpers\EmailFactory(%appDir%) - - App\Helpers\Parameters(%parameters%) + - App\Helpers\Parameters(@container::getParameters()) - App\Helpers\SpaydQrGenerator - App\Model\Configuration\Entries::from(%entries%) - App\Model\TeamManager(%adminPassword%) - App\Forms\FormFactory - App\Forms\TeamFormFactory - App\Router\RouterFactory::createRouter - - App\Templates\Filters\CategoryFormatFilter - - App\Templates\Filters\CurrencyExchangeFilter - - App\Templates\Filters\PriceFilter - - App\Templates\Filters\WrapInParagraphsFilter + - App\Presenters\Accessory\Filters\CategoryFormatFilter + - App\Presenters\Accessory\Filters\CurrencyExchangeFilter + - App\Presenters\Accessory\Filters\PriceFilter + - App\Presenters\Accessory\Filters\WrapInParagraphsFilter exchange: Money\Exchange\FixedExchange([]) translation: diff --git a/app/Exporters/CsvExporter.php b/app/Exporters/CsvExporter.php index bbc25f7..586b1fb 100644 --- a/app/Exporters/CsvExporter.php +++ b/app/Exporters/CsvExporter.php @@ -10,7 +10,7 @@ use App\Model\Configuration\Fields; use App\Model\Orm\Person\Person; use App\Model\Orm\Team\Team; -use App\Templates\Filters\CategoryFormatFilter; +use App\Presenters\Accessory\Filters\CategoryFormatFilter; use Nextras\Orm\Collection\ICollection; use SplFileObject; diff --git a/app/Exporters/MeosExporter.php b/app/Exporters/MeosExporter.php index f1b475c..660c100 100644 --- a/app/Exporters/MeosExporter.php +++ b/app/Exporters/MeosExporter.php @@ -5,7 +5,7 @@ namespace App\Exporters; use App\Model\Orm\Team\Team; -use App\Templates\Filters\CategoryFormatFilter; +use App\Presenters\Accessory\Filters\CategoryFormatFilter; use Nette\Utils\Strings; use Nextras\Orm\Collection\ICollection; use SplFileObject; diff --git a/app/Helpers/EmailFactory.php b/app/Helpers/EmailFactory.php index 4f58785..d4e124c 100644 --- a/app/Helpers/EmailFactory.php +++ b/app/Helpers/EmailFactory.php @@ -17,8 +17,11 @@ public function __construct( ) { } + /** + * @param non-empty-string $mailHtml + */ public function create(string $mailHtml): string { - $css = @file_get_contents($this->appDir . '/Templates/Mail/style.css'); + $css = @file_get_contents($this->appDir . '/Presenters/templates/Mail/style.css'); \assert($css !== false, 'E-mail stylesheet must be readable'); $domDocument = CssInliner::fromHtml($mailHtml) ->inlineCss($css) diff --git a/app/Helpers/NeonIntlLoader.php b/app/Helpers/NeonIntlLoader.php index e38fcdb..149db39 100644 --- a/app/Helpers/NeonIntlLoader.php +++ b/app/Helpers/NeonIntlLoader.php @@ -11,7 +11,7 @@ final class NeonIntlLoader extends Translation\Loaders\Neon { public function load( mixed $resource, string $locale, - string $domain = 'messages' + string $domain = 'messages', ): MessageCatalogue { return parent::load($resource, $locale, $domain . '+intl-icu'); } diff --git a/app/Locale/Translated.php b/app/Locale/Translated.php index 6f4b552..d2ff8ea 100644 --- a/app/Locale/Translated.php +++ b/app/Locale/Translated.php @@ -7,6 +7,14 @@ namespace App\Locale; -interface Translated { - public function getMessage(string $locale): string; +use Exception; +use Stringable; + +abstract class Translated implements Stringable { + abstract public function getMessage(string $locale): string; + + public function __toString(): string { + // We rely on custom Translator to call getMessage instead. + throw new Exception(__CLASS__ . ' should not be Stringified'); + } } diff --git a/app/Locale/Translator.php b/app/Locale/Translator.php index 469e571..0be261c 100644 --- a/app/Locale/Translator.php +++ b/app/Locale/Translator.php @@ -12,7 +12,7 @@ class Translator extends ContributeTranslator { public function translate( $message, - ...$parameters + ...$parameters, ): string { if ($message instanceof Translated) { return $message->getMessage($this->getLocale()); diff --git a/app/Model/Configuration/Category.php b/app/Model/Configuration/Category.php index e4e1865..2c4e775 100644 --- a/app/Model/Configuration/Category.php +++ b/app/Model/Configuration/Category.php @@ -38,7 +38,7 @@ public static function from( string $key, array $category, Fees $parentFees, - DateTimeInterface $eventDate + DateTimeInterface $eventDate, ): self { $fees = Fees::from($category['fees'] ?? [], $parentFees); if ($fees->person === null) { diff --git a/app/Model/Configuration/Helpers.php b/app/Model/Configuration/Helpers.php index a301cc5..678e811 100644 --- a/app/Model/Configuration/Helpers.php +++ b/app/Model/Configuration/Helpers.php @@ -32,7 +32,7 @@ public static function parseTranslatable(string $context, mixed $translatable, a if (\is_array($translatable)) { self::checkAllLocalesPresent($context, $translatable, $allLocales); - return new class($translatable) implements Translated { + return new class($translatable) extends Translated { public function __construct( private readonly array $translatable, ) { diff --git a/app/Templates/Filters/CategoryFormatFilter.php b/app/Presenters/Accessory/Filters/CategoryFormatFilter.php similarity index 91% rename from app/Templates/Filters/CategoryFormatFilter.php rename to app/Presenters/Accessory/Filters/CategoryFormatFilter.php index 1f19032..fb44d80 100644 --- a/app/Templates/Filters/CategoryFormatFilter.php +++ b/app/Presenters/Accessory/Filters/CategoryFormatFilter.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Templates\Filters; +namespace App\Presenters\Accessory\Filters; use App\Model\Configuration\Entries; use App\Model\Orm\Team\Team; diff --git a/app/Templates/Filters/CurrencyExchangeFilter.php b/app/Presenters/Accessory/Filters/CurrencyExchangeFilter.php similarity index 93% rename from app/Templates/Filters/CurrencyExchangeFilter.php rename to app/Presenters/Accessory/Filters/CurrencyExchangeFilter.php index 0fa0e42..bff697a 100644 --- a/app/Templates/Filters/CurrencyExchangeFilter.php +++ b/app/Presenters/Accessory/Filters/CurrencyExchangeFilter.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Templates\Filters; +namespace App\Presenters\Accessory\Filters; use Money\Converter; use Money\Currencies\ISOCurrencies; diff --git a/app/Templates/Filters/PriceFilter.php b/app/Presenters/Accessory/Filters/PriceFilter.php similarity index 93% rename from app/Templates/Filters/PriceFilter.php rename to app/Presenters/Accessory/Filters/PriceFilter.php index adf5e05..36b37d2 100644 --- a/app/Templates/Filters/PriceFilter.php +++ b/app/Presenters/Accessory/Filters/PriceFilter.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Templates\Filters; +namespace App\Presenters\Accessory\Filters; use Contributte\Translation\Translator; use Money\Currencies\ISOCurrencies; diff --git a/app/Templates/Filters/WrapInParagraphsFilter.php b/app/Presenters/Accessory/Filters/WrapInParagraphsFilter.php similarity index 85% rename from app/Templates/Filters/WrapInParagraphsFilter.php rename to app/Presenters/Accessory/Filters/WrapInParagraphsFilter.php index 2030b11..713100b 100644 --- a/app/Templates/Filters/WrapInParagraphsFilter.php +++ b/app/Presenters/Accessory/Filters/WrapInParagraphsFilter.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Templates\Filters; +namespace App\Presenters\Accessory\Filters; final class WrapInParagraphsFilter { /** diff --git a/app/Templates/Accessory/LatteExtension.php b/app/Presenters/Accessory/LatteExtension.php similarity index 91% rename from app/Templates/Accessory/LatteExtension.php rename to app/Presenters/Accessory/LatteExtension.php index b41cd8a..278e294 100644 --- a/app/Templates/Accessory/LatteExtension.php +++ b/app/Presenters/Accessory/LatteExtension.php @@ -2,9 +2,8 @@ declare(strict_types=1); -namespace App\Templates\Accessory; +namespace App\Presenters\Accessory; -use App\Templates\Filters; use Latte\Extension; final class LatteExtension extends Extension { diff --git a/app/Presenters/BasePresenter.php b/app/Presenters/BasePresenter.php index 86d9f26..4e18974 100644 --- a/app/Presenters/BasePresenter.php +++ b/app/Presenters/BasePresenter.php @@ -41,32 +41,4 @@ protected function startup(): void { throw new Nette\InvalidStateException('Missing siteTitle argument'); } } - - /** - * Formats layout template file names. - * - * @return string[] - */ - public function formatLayoutTemplateFiles(): array { - $list = array_map( - fn(string $path): string => str_replace('/templates/', '/Templates/', $path), - parent::formatLayoutTemplateFiles(), - ); - - return $list; - } - - /** - * Formats view template file names. - * - * @return string[] - */ - public function formatTemplateFiles(): array { - $list = array_map( - fn(string $path): string => str_replace('/templates/', '/Templates/', $path), - parent::formatTemplateFiles(), - ); - - return $list; - } } diff --git a/app/Presenters/CommunicationPresenter.php b/app/Presenters/CommunicationPresenter.php index 3f81e8a..a787c7a 100644 --- a/app/Presenters/CommunicationPresenter.php +++ b/app/Presenters/CommunicationPresenter.php @@ -148,7 +148,7 @@ private function composeFormPreview(SubmitButton $button): void { foreach ($teams as $id => $team) { \assert($team !== null); // For PHPStan. $grant = $this->tokens->createForTeam($team); - $this->template->previewMessage = $this->renderMessageBody( + $this->template->previewMessage = $this->_renderMessageBody( team: $team, subject: $values['subject'], grant: $grant, @@ -231,7 +231,7 @@ private function composeFormEnqueue(SubmitButton $button): void { \assert($team !== null); // For PHPStan. $grant = $this->tokens->createForTeam($team); - $body = $this->renderMessageBody( + $body = $this->_renderMessageBody( team: $team, subject: $subject, grant: $grant, @@ -275,11 +275,10 @@ private function composeFormEnqueue(SubmitButton $button): void { } } - private function renderMessageBody(Team $team, string $subject, string $grant, string $body): string { + private function _renderMessageBody(Team $team, string $subject, string $grant, string $body): string { $latte = $this->latteFactory->create(); - $appDir = $this->parameters->getAppDir(); - $layout = file_get_contents($appDir . '/Templates/Mail/@layout.latte'); + $layout = file_get_contents(__DIR__ . '/templates/Mail/@layout.latte'); \assert(\is_string($layout)); $latte->setLoader(new Latte\Loaders\StringLoader([ @@ -291,7 +290,7 @@ private function renderMessageBody(Team $team, string $subject, string $grant, s $messageHtml = $latte->renderToString( 'message.latte', - new App\Templates\Mail\Message( + new templates\Mail\Message( // Define variables for use in the e-mail template. accountNumber: $this->parameters->accountNumber, accountNumberIban: $this->parameters->accountNumberIban !== null ? $this->parameters->accountNumberIban->asString() : null, @@ -314,6 +313,8 @@ private function renderMessageBody(Team $team, string $subject, string $grant, s ), ); + \assert($messageHtml !== ''); + // Inline styles into the e-mail $messageHtml = $this->emailFactory->create($messageHtml); @@ -385,8 +386,6 @@ public function actionSend(): void { throw new ForbiddenRequestException(); } - $appDir = $this->parameters->getAppDir(); - $total = null; $count = 0; try { @@ -399,7 +398,9 @@ public function actionSend(): void { foreach ($messages as $message) { // Inline styles into the e-mail - $mailHtml = $this->emailFactory->create($message->body); + $mailHtml = $message->body; + \assert($mailHtml !== ''); + $mailHtml = $this->emailFactory->create($mailHtml); $mail = new Nette\Mail\Message(); $firstMemberAddress = iterator_to_array($message->team->persons)[0]->email; diff --git a/app/Presenters/Error4xxPresenter.php b/app/Presenters/Error4xxPresenter.php index c62e577..e397e93 100644 --- a/app/Presenters/Error4xxPresenter.php +++ b/app/Presenters/Error4xxPresenter.php @@ -22,9 +22,9 @@ protected function checkHttpMethod(): void { public function renderDefault(Nette\Application\BadRequestException $exception): void { // renders the appropriate error template based on the HTTP status code $code = $exception->getCode(); - $file = is_file($file = __DIR__ . "/../Templates/Error/$code.latte") + $file = is_file($file = __DIR__ . "/templates/Error/$code.latte") ? $file - : __DIR__ . '/../Templates/Error/4xx.latte'; + : __DIR__ . '/templates/Error/4xx.latte'; $this->template->httpCode = $code; $this->template->setFile($file); } diff --git a/app/Presenters/ErrorAccessPresenter.php b/app/Presenters/ErrorAccessPresenter.php index 48a87c0..1637048 100644 --- a/app/Presenters/ErrorAccessPresenter.php +++ b/app/Presenters/ErrorAccessPresenter.php @@ -33,7 +33,7 @@ public function renderDefault(LimitedAccessException $exception): void { $this->template->errorType = $errorType; - $file = __DIR__ . '/../Templates/Error/access.latte'; + $file = __DIR__ . '/templates/Error/access.latte'; $this->template->setFile($file); } } diff --git a/app/Presenters/ErrorPresenter.php b/app/Presenters/ErrorPresenter.php index 893dde9..6f09af5 100644 --- a/app/Presenters/ErrorPresenter.php +++ b/app/Presenters/ErrorPresenter.php @@ -42,7 +42,7 @@ public function run(Nette\Application\Request $request): Nette\Application\Respo return new Responses\CallbackResponse(function(Http\IRequest $httpRequest, Http\IResponse $httpResponse): void { if (preg_match('#^text/html(?:;|$)#', (string) $httpResponse->getHeader('Content-Type')) === 1) { - require __DIR__ . '/../Templates/Error/500.phtml'; + require __DIR__ . '/templates/Error/500.phtml'; } }); } diff --git a/app/Presenters/TeamPresenter.php b/app/Presenters/TeamPresenter.php index a705113..45e6ce3 100644 --- a/app/Presenters/TeamPresenter.php +++ b/app/Presenters/TeamPresenter.php @@ -58,7 +58,7 @@ final class TeamPresenter extends BasePresenter { public App\Model\Orm\ItemReservation\ItemReservationRepository $itemReservations; #[Inject] - public App\Templates\Filters\CategoryFormatFilter $categoryFormatter; + public Accessory\Filters\CategoryFormatFilter $categoryFormatter; #[Inject] public App\Forms\FormFactory $formFactory; @@ -630,7 +630,7 @@ private function processTeamForm(Controls\SubmitButton $button): void { $appDir = $this->parameters->getAppDir(); - $baseMailTemplateLocalizedPath = $appDir . '/Templates/Mail/verification.' . $this->locale . '.latte'; + $baseMailTemplateLocalizedPath = __DIR__ . '/templates/Mail/verification.' . $this->locale . '.latte'; // If the override templates exist in the config directory, // let’s use them. @@ -642,7 +642,7 @@ private function processTeamForm(Controls\SubmitButton $button): void { } // If not, let’s use the built-in templates. - $baseMailTemplatePath = file_exists($baseMailTemplateLocalizedPath) ? $baseMailTemplateLocalizedPath : $appDir . '/Templates/Mail/verification.latte'; + $baseMailTemplatePath = file_exists($baseMailTemplateLocalizedPath) ? $baseMailTemplateLocalizedPath : __DIR__ . '/templates/Mail/verification.latte'; if ($mailTemplatePath === null) { $mailTemplatePath = $baseMailTemplatePath; } else { @@ -691,7 +691,9 @@ private function processTeamForm(Controls\SubmitButton $button): void { ) : null; // Inline styles into the e-mail - $mailHtml = $this->emailFactory->create((string) $mtemplate); + $mailHtml = (string) $mtemplate; + \assert($mailHtml !== ''); + $mailHtml = $this->emailFactory->create($mailHtml); $mail = new Message(); $mail diff --git a/app/Templates/@layout.latte b/app/Presenters/templates/@layout.latte similarity index 100% rename from app/Templates/@layout.latte rename to app/Presenters/templates/@layout.latte diff --git a/app/Templates/Communication/compose.latte b/app/Presenters/templates/Communication/compose.latte similarity index 100% rename from app/Templates/Communication/compose.latte rename to app/Presenters/templates/Communication/compose.latte diff --git a/app/Templates/Communication/list.latte b/app/Presenters/templates/Communication/list.latte similarity index 100% rename from app/Templates/Communication/list.latte rename to app/Presenters/templates/Communication/list.latte diff --git a/app/Templates/Communication/view.latte b/app/Presenters/templates/Communication/view.latte similarity index 100% rename from app/Templates/Communication/view.latte rename to app/Presenters/templates/Communication/view.latte diff --git a/app/Templates/Error/403.latte b/app/Presenters/templates/Error/403.latte similarity index 100% rename from app/Templates/Error/403.latte rename to app/Presenters/templates/Error/403.latte diff --git a/app/Templates/Error/404.latte b/app/Presenters/templates/Error/404.latte similarity index 100% rename from app/Templates/Error/404.latte rename to app/Presenters/templates/Error/404.latte diff --git a/app/Templates/Error/410.latte b/app/Presenters/templates/Error/410.latte similarity index 100% rename from app/Templates/Error/410.latte rename to app/Presenters/templates/Error/410.latte diff --git a/app/Templates/Error/4xx.latte b/app/Presenters/templates/Error/4xx.latte similarity index 100% rename from app/Templates/Error/4xx.latte rename to app/Presenters/templates/Error/4xx.latte diff --git a/app/Templates/Error/500.phtml b/app/Presenters/templates/Error/500.phtml similarity index 100% rename from app/Templates/Error/500.phtml rename to app/Presenters/templates/Error/500.phtml diff --git a/app/Templates/Error/503.phtml b/app/Presenters/templates/Error/503.phtml similarity index 100% rename from app/Templates/Error/503.phtml rename to app/Presenters/templates/Error/503.phtml diff --git a/app/Templates/Error/access.latte b/app/Presenters/templates/Error/access.latte similarity index 100% rename from app/Templates/Error/access.latte rename to app/Presenters/templates/Error/access.latte diff --git a/app/Templates/Homepage/default.latte b/app/Presenters/templates/Homepage/default.latte similarity index 100% rename from app/Templates/Homepage/default.latte rename to app/Presenters/templates/Homepage/default.latte diff --git a/app/Templates/Invoice/show.latte b/app/Presenters/templates/Invoice/show.latte similarity index 100% rename from app/Templates/Invoice/show.latte rename to app/Presenters/templates/Invoice/show.latte diff --git a/app/Templates/Mail/@layout.latte b/app/Presenters/templates/Mail/@layout.latte similarity index 100% rename from app/Templates/Mail/@layout.latte rename to app/Presenters/templates/Mail/@layout.latte diff --git a/app/Templates/Mail/Message.php b/app/Presenters/templates/Mail/Message.php similarity index 93% rename from app/Templates/Mail/Message.php rename to app/Presenters/templates/Mail/Message.php index e5cb35f..0b73d45 100644 --- a/app/Templates/Mail/Message.php +++ b/app/Presenters/templates/Mail/Message.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Templates\Mail; +namespace App\Presenters\templates\Mail; use App\Model\Orm\Invoice\Invoice; use App\Model\Orm\Person\Person; diff --git a/app/Templates/Mail/style.css b/app/Presenters/templates/Mail/style.css similarity index 100% rename from app/Templates/Mail/style.css rename to app/Presenters/templates/Mail/style.css diff --git a/app/Templates/Mail/verification.@layout.latte b/app/Presenters/templates/Mail/verification.@layout.latte similarity index 100% rename from app/Templates/Mail/verification.@layout.latte rename to app/Presenters/templates/Mail/verification.@layout.latte diff --git a/app/Templates/Mail/verification.cs.latte b/app/Presenters/templates/Mail/verification.cs.latte similarity index 100% rename from app/Templates/Mail/verification.cs.latte rename to app/Presenters/templates/Mail/verification.cs.latte diff --git a/app/Templates/Mail/verification.latte b/app/Presenters/templates/Mail/verification.latte similarity index 100% rename from app/Templates/Mail/verification.latte rename to app/Presenters/templates/Mail/verification.latte diff --git a/app/Templates/Sign/in.latte b/app/Presenters/templates/Sign/in.latte similarity index 100% rename from app/Templates/Sign/in.latte rename to app/Presenters/templates/Sign/in.latte diff --git a/app/Templates/Team/edit.latte b/app/Presenters/templates/Team/edit.latte similarity index 100% rename from app/Templates/Team/edit.latte rename to app/Presenters/templates/Team/edit.latte diff --git a/app/Templates/Team/list.latte b/app/Presenters/templates/Team/list.latte similarity index 100% rename from app/Templates/Team/list.latte rename to app/Presenters/templates/Team/list.latte diff --git a/app/Templates/Team/register.latte b/app/Presenters/templates/Team/register.latte similarity index 100% rename from app/Templates/Team/register.latte rename to app/Presenters/templates/Team/register.latte diff --git a/composer.json b/composer.json index 1fda4ad..34ad668 100644 --- a/composer.json +++ b/composer.json @@ -16,26 +16,25 @@ "ext-intl": "*", "68publishers/asset": "^3.3", "bacon/bacon-qr-code": "^3.0", - "contributte/mail": "^0.7.0", + "contributte/mail": "^0.8.0", "contributte/translation": "^2.0", - "kdyby/forms-replicator": "^2.0.0", + "kdyby/forms-replicator": "^3.0", "latte/latte": "~3.0", "moneyphp/money": "^4.0", "nette/application": "~3.0", "nette/bootstrap": "~3.0", "nette/caching": "~3.0", "nette/di": "~3.0", - "nette/finder": "~2.5", "nette/forms": "^3.0", "nette/http": "~3.0", - "nette/mail": "~3.0", + "nette/mail": "~4.0", "nette/schema": "^1.2", "nette/security": "~3.0", - "nette/utils": "~3.0", - "nextras/form-components": "^1.0.0", - "nextras/forms-rendering": "@dev", + "nette/utils": "~4.0", + "nextras/form-components": "^3.0", + "nextras/forms-rendering": "^2.0", "nextras/orm": "^5.0", - "pelago/emogrifier": "^7.0", + "pelago/emogrifier": "^8.2", "rikudou/iban": "^1.3", "tracy/tracy": "~2.6" }, diff --git a/composer.lock b/composer.lock index 6d5bc47..43aabb3 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": "e10821537c90ee2b78e0bdfd5377f1f1", + "content-hash": "9c233afe81a437e02eeb163a11cd7887", "packages": [ { "name": "68publishers/asset", @@ -69,16 +69,16 @@ }, { "name": "bacon/bacon-qr-code", - "version": "v3.0.1", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f" + "reference": "36a1cb2b81493fa5b82e50bf8068bf84d1542563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f9cc1f52b5a463062251d666761178dbdb6b544f", - "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/36a1cb2b81493fa5b82e50bf8068bf84d1542563", + "reference": "36a1cb2b81493fa5b82e50bf8068bf84d1542563", "shasum": "" }, "require": { @@ -88,8 +88,9 @@ }, "require-dev": { "phly/keep-a-changelog": "^2.12", - "phpunit/phpunit": "^10.5.11 || 11.0.4", + "phpunit/phpunit": "^10.5.11 || ^11.0.4", "spatie/phpunit-snapshot-assertions": "^5.1.5", + "spatie/pixelmatch-php": "^1.2.0", "squizlabs/php_codesniffer": "^3.9" }, "suggest": { @@ -117,38 +118,35 @@ "homepage": "https://github.com/Bacon/BaconQrCode", "support": { "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.1" + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.3" }, - "time": "2024-10-01T13:55:55+00:00" + "time": "2025-11-19T17:15:36+00:00" }, { "name": "contributte/mail", - "version": "v0.7.2", + "version": "v0.8.0", "source": { "type": "git", "url": "https://github.com/contributte/mail.git", - "reference": "e3a1834ab8f95743c42de866a846ec6f76faf5ab" + "reference": "7a1a4cd9e30aecaeb6968ecc936b8c73f4e89c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/mail/zipball/e3a1834ab8f95743c42de866a846ec6f76faf5ab", - "reference": "e3a1834ab8f95743c42de866a846ec6f76faf5ab", + "url": "https://api.github.com/repos/contributte/mail/zipball/7a1a4cd9e30aecaeb6968ecc936b8c73f4e89c17", + "reference": "7a1a4cd9e30aecaeb6968ecc936b8c73f4e89c17", "shasum": "" }, "require": { - "nette/mail": "^3.1.0 || ^4.0.0", - "nette/utils": "^3.2.9 || ^4.0.0", - "php": ">=8.0" + "nette/mail": "^4.0.2", + "nette/utils": "^4.0.3", + "php": ">=8.1" }, "require-dev": { - "contributte/qa": "^0.4.0", - "contributte/tester": "^0.2.0", - "mockery/mockery": "^1.5.1", + "contributte/phpstan": "^0.1", + "contributte/qa": "^0.4", + "contributte/tester": "^0.4", + "mockery/mockery": "^1.6.6", "nette/di": "^3.1.2", - "phpstan/phpstan": "^1.10.11", - "phpstan/phpstan-deprecation-rules": "^1.1.3", - "phpstan/phpstan-nette": "^1.2.4", - "phpstan/phpstan-strict-rules": "^1.5.1", "tracy/tracy": "^2.10.2" }, "suggest": { @@ -157,7 +155,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "0.7.x-dev" + "dev-master": "0.9.x-dev" } }, "autoload": { @@ -184,7 +182,7 @@ ], "support": { "issues": "https://github.com/contributte/mail/issues", - "source": "https://github.com/contributte/mail/tree/v0.7.2" + "source": "https://github.com/contributte/mail/tree/v0.8.0" }, "funding": [ { @@ -196,34 +194,34 @@ "type": "github" } ], - "time": "2023-12-01T16:45:50+00:00" + "time": "2023-12-01T16:50:26+00:00" }, { "name": "contributte/translation", - "version": "v2.0.5", + "version": "v2.0.7", "source": { "type": "git", "url": "https://github.com/contributte/translation.git", - "reference": "8dedfb0746ee32da06d38d23e1f8e46fe5cabdf5" + "reference": "92bc279f34102466b3faee11f15ee95c1a7c3d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/translation/zipball/8dedfb0746ee32da06d38d23e1f8e46fe5cabdf5", - "reference": "8dedfb0746ee32da06d38d23e1f8e46fe5cabdf5", + "url": "https://api.github.com/repos/contributte/translation/zipball/92bc279f34102466b3faee11f15ee95c1a7c3d4a", + "reference": "92bc279f34102466b3faee11f15ee95c1a7c3d4a", "shasum": "" }, "require": { - "latte/latte": "^2.6|^3.0.12", + "latte/latte": "^2.6|^3.0.25", "nette/di": "^3.0.6", - "nette/finder": "^2.5.2|~3.0.0", + "nette/finder": "^2.5.2|^3.0.0", "nette/http": "^3.0.7", "nette/neon": "^3.3.1", "nette/routing": "^3.0", "nette/schema": "^1.0", - "nette/utils": "^3.2.1|~4.0.0", + "nette/utils": "^3.2.1|^4.0.0", "php": "^8.0.2", - "symfony/config": "^6.0|^7.0", - "symfony/translation": "^6.0|^7.0" + "symfony/config": "^6.0|^7.0|^8.0", + "symfony/translation": "^6.0|^7.0|^8.0" }, "require-dev": { "doctrine/orm": "^2.8", @@ -231,7 +229,7 @@ "nette/application": "^3.1.0", "nette/bootstrap": "^3.2.1", "nette/database": "^3.1.1", - "nette/robot-loader": "^3.4.0|~4.0.0", + "nette/robot-loader": "^3.4.0|^4.0.0", "nette/tester": "^2.3.1", "ninjify/nunjuck": "^0.4.0", "ninjify/qa": "^0.13", @@ -271,7 +269,7 @@ ], "support": { "issues": "https://github.com/contributte/translation/issues", - "source": "https://github.com/contributte/translation/tree/v2.0.5" + "source": "https://github.com/contributte/translation/tree/v2.0.7" }, "funding": [ { @@ -283,20 +281,20 @@ "type": "github" } ], - "time": "2024-03-20T10:14:53+00:00" + "time": "2025-12-01T07:10:21+00:00" }, { "name": "dasprid/enum", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { @@ -331,35 +329,46 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2024-08-09T14:30:48+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "kdyby/forms-replicator", - "version": "v2.0.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/Kdyby/FormsReplicator.git", - "reference": "cd6c9ccfaade43b85d181a8041ec5a7f842969b1" + "reference": "a287e4c7eee9e76e23345db873492c7759fff665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Kdyby/FormsReplicator/zipball/cd6c9ccfaade43b85d181a8041ec5a7f842969b1", - "reference": "cd6c9ccfaade43b85d181a8041ec5a7f842969b1", + "url": "https://api.github.com/repos/Kdyby/FormsReplicator/zipball/a287e4c7eee9e76e23345db873492c7759fff665", + "reference": "a287e4c7eee9e76e23345db873492c7759fff665", "shasum": "" }, "require": { - "nette/forms": "^3.0", - "nette/utils": "^3.0", - "php": ">=7.1" + "nette/forms": "^3.2.3", + "nette/utils": "^3.0 || ^4.0", + "php": ">= 8.2" + }, + "conflict": { + "nette/component-model": "<3.1.0" }, "require-dev": { - "nette/application": "^3.0@rc", - "nette/bootstrap": "^3.0@rc", - "nette/di": "^3.0@rc", - "nette/tester": "^2.2", - "tracy/tracy": "^2.6" + "nette/application": "^3.0", + "nette/bootstrap": "^3.0", + "nette/di": "^3.0", + "nette/neon": "^3.4.4", + "nette/tester": "^2.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-nette": "^2.0", + "rector/rector": "^2.0", + "symplify/easy-coding-standard": "^12.5", + "tracy/tracy": "^2.10.8" }, "suggest": { "nette/di": "to use ReplicatorExtension[CompilerExtension]" @@ -367,7 +376,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -404,28 +413,28 @@ ], "support": { "issues": "https://github.com/Kdyby/FormsReplicator/issues", - "source": "https://github.com/Kdyby/FormsReplicator/tree/master" + "source": "https://github.com/Kdyby/FormsReplicator/tree/v3.0.0" }, - "time": "2019-03-18T16:16:28+00:00" + "time": "2025-12-13T08:59:52+00:00" }, { "name": "latte/latte", - "version": "v3.0.21", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/nette/latte.git", - "reference": "9302610109836aeb2e540cf2e457414e52597789" + "reference": "b6e3ad20c968b0aee9a8b7c8587592cdf1feea73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/latte/zipball/9302610109836aeb2e540cf2e457414e52597789", - "reference": "9302610109836aeb2e540cf2e457414e52597789", + "url": "https://api.github.com/repos/nette/latte/zipball/b6e3ad20c968b0aee9a8b7c8587592cdf1feea73", + "reference": "b6e3ad20c968b0aee9a8b7c8587592cdf1feea73", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "php": "8.0 - 8.4" + "php": "8.2 - 8.5" }, "conflict": { "nette/application": "<3.1.7", @@ -435,7 +444,7 @@ "nette/php-generator": "^4.0", "nette/tester": "^2.5", "nette/utils": "^4.0", - "phpstan/phpstan": "^1", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.10" }, "suggest": { @@ -452,10 +461,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { + "psr-4": { + "Latte\\": "src/Latte" + }, "classmap": [ "src/" ] @@ -490,29 +502,29 @@ ], "support": { "issues": "https://github.com/nette/latte/issues", - "source": "https://github.com/nette/latte/tree/v3.0.21" + "source": "https://github.com/nette/latte/tree/v3.1.0" }, - "time": "2025-05-17T05:59:24+00:00" + "time": "2025-11-26T04:28:31+00:00" }, { "name": "moneyphp/money", - "version": "v4.7.1", + "version": "v4.8.0", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "1a23f0e1b22e2c59ed5ed70cfbe4cbe696be9348" + "reference": "b358727ea5a5cd2d7475e59c31dfc352440ae7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/1a23f0e1b22e2c59ed5ed70cfbe4cbe696be9348", - "reference": "1a23f0e1b22e2c59ed5ed70cfbe4cbe696be9348", + "url": "https://api.github.com/repos/moneyphp/money/zipball/b358727ea5a5cd2d7475e59c31dfc352440ae7ec", + "reference": "b358727ea5a5cd2d7475e59c31dfc352440ae7ec", "shasum": "" }, "require": { "ext-bcmath": "*", "ext-filter": "*", "ext-json": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cache/taggable-cache": "^1.1.0", @@ -580,50 +592,50 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.7.1" + "source": "https://github.com/moneyphp/money/tree/v4.8.0" }, - "time": "2025-06-06T07:12:38+00:00" + "time": "2025-10-23T07:55:09+00:00" }, { "name": "nette/application", - "version": "v3.1.15", + "version": "v3.2.8", "source": { "type": "git", "url": "https://github.com/nette/application.git", - "reference": "f50364147ca80d9fbcf4d6571cf216ced874d4f9" + "reference": "aaa18a09a488a2e632162539f77f90b3024c44f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/application/zipball/f50364147ca80d9fbcf4d6571cf216ced874d4f9", - "reference": "f50364147ca80d9fbcf4d6571cf216ced874d4f9", + "url": "https://api.github.com/repos/nette/application/zipball/aaa18a09a488a2e632162539f77f90b3024c44f8", + "reference": "aaa18a09a488a2e632162539f77f90b3024c44f8", "shasum": "" }, "require": { - "nette/component-model": "^3.0", - "nette/http": "^3.0.2", - "nette/routing": "^3.0.5", - "nette/utils": "^3.2.1 || ~4.0.0", - "php": ">=7.2" + "nette/component-model": "^3.1", + "nette/http": "^3.3.2", + "nette/routing": "^3.1", + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "conflict": { - "latte/latte": "<2.7.1 || >=3.0.0 <3.0.12 || >=3.1", - "nette/caching": "<3.1", - "nette/di": "<3.0.7", - "nette/forms": "<3.0", - "nette/schema": "<1.2", - "tracy/tracy": "<2.5" + "latte/latte": "<2.7.1 || >=3.0.0 <3.0.18 || >=3.2", + "nette/caching": "<3.2", + "nette/di": "<3.2", + "nette/forms": "<3.2", + "nette/schema": "<1.3", + "tracy/tracy": "<2.9" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "latte/latte": "^2.10.2 || ^3.0.12", - "mockery/mockery": "^1.0 || ^2.0", - "nette/di": "^v3.0", - "nette/forms": "^3.0", - "nette/robot-loader": "^3.2 || ^4.0", - "nette/security": "^3.0", - "nette/tester": "^2.3.1", - "phpstan/phpstan-nette": "^0.12", - "tracy/tracy": "^2.6" + "jetbrains/phpstorm-attributes": "^1.2", + "latte/latte": "^2.10.2 || ^3.0.18", + "mockery/mockery": "^1.6@stable", + "nette/di": "^3.2", + "nette/forms": "^3.2", + "nette/robot-loader": "^4.0", + "nette/security": "^3.2", + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" }, "suggest": { "latte/latte": "Allows using Latte in templates", @@ -632,10 +644,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -672,28 +687,28 @@ ], "support": { "issues": "https://github.com/nette/application/issues", - "source": "https://github.com/nette/application/tree/v3.1.15" + "source": "https://github.com/nette/application/tree/v3.2.8" }, - "time": "2024-05-12T20:50:30+00:00" + "time": "2025-11-24T00:10:57+00:00" }, { "name": "nette/bootstrap", - "version": "v3.2.6", + "version": "v3.2.7", "source": { "type": "git", "url": "https://github.com/nette/bootstrap.git", - "reference": "287240831efe4936b23a1b643df0d54069a4eda0" + "reference": "10fdb1cb05497da39396f2ce1785cea67c8aa439" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/bootstrap/zipball/287240831efe4936b23a1b643df0d54069a4eda0", - "reference": "287240831efe4936b23a1b643df0d54069a4eda0", + "url": "https://api.github.com/repos/nette/bootstrap/zipball/10fdb1cb05497da39396f2ce1785cea67c8aa439", + "reference": "10fdb1cb05497da39396f2ce1785cea67c8aa439", "shasum": "" }, "require": { "nette/di": "^3.1", "nette/utils": "^3.2.1 || ^4.0", - "php": "8.0 - 8.4" + "php": "8.0 - 8.5" }, "conflict": { "tracy/tracy": "<2.6" @@ -710,7 +725,7 @@ "nette/safe-stream": "^2.2", "nette/security": "^3.0", "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -724,6 +739,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -753,34 +771,37 @@ ], "support": { "issues": "https://github.com/nette/bootstrap/issues", - "source": "https://github.com/nette/bootstrap/tree/v3.2.6" + "source": "https://github.com/nette/bootstrap/tree/v3.2.7" }, - "time": "2025-05-22T06:18:42+00:00" + "time": "2025-08-01T02:02:03+00:00" }, { "name": "nette/caching", - "version": "v3.2.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "6821d74c1db82c493c02c47f6485022d79b63176" + "reference": "a1c13221b350d0db0a2bd4a77c1e7b65e0aa065d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/6821d74c1db82c493c02c47f6485022d79b63176", - "reference": "6821d74c1db82c493c02c47f6485022d79b63176", + "url": "https://api.github.com/repos/nette/caching/zipball/a1c13221b350d0db0a2bd4a77c1e7b65e0aa065d", + "reference": "a1c13221b350d0db0a2bd4a77c1e7b65e0aa065d", "shasum": "" }, "require": { - "nette/finder": "^2.4 || ^3.0", - "nette/utils": "^3.2 || ~4.0.0", - "php": "8.0 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "conflict": { + "latte/latte": "<3.0.12" }, "require-dev": { - "latte/latte": "^2.11 || ^3.0", + "latte/latte": "^3.0.12", "nette/di": "^3.1 || ^4.0", "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", + "psr/simple-cache": "^2.0 || ^3.0", "tracy/tracy": "^2.9" }, "suggest": { @@ -789,10 +810,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -824,40 +848,43 @@ ], "support": { "issues": "https://github.com/nette/caching/issues", - "source": "https://github.com/nette/caching/tree/v3.2.3" + "source": "https://github.com/nette/caching/tree/v3.4.0" }, - "time": "2023-09-26T11:12:20+00:00" + "time": "2025-08-06T23:05:08+00:00" }, { "name": "nette/component-model", - "version": "v3.0.3", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/nette/component-model.git", - "reference": "9d97c0e1916bbf8e306283ab187834501fd4b1f5" + "reference": "0d100ba05279a1f4b20acecaa617027fbda8ecb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/component-model/zipball/9d97c0e1916bbf8e306283ab187834501fd4b1f5", - "reference": "9d97c0e1916bbf8e306283ab187834501fd4b1f5", + "url": "https://api.github.com/repos/nette/component-model/zipball/0d100ba05279a1f4b20acecaa617027fbda8ecb2", + "reference": "0d100ba05279a1f4b20acecaa617027fbda8ecb2", "shasum": "" }, "require": { - "nette/utils": "^2.5 || ^3.0 || ~4.0.0", - "php": ">=7.1" + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -886,45 +913,49 @@ ], "support": { "issues": "https://github.com/nette/component-model/issues", - "source": "https://github.com/nette/component-model/tree/v3.0.3" + "source": "https://github.com/nette/component-model/tree/v3.1.3" }, - "time": "2023-01-09T20:16:05+00:00" + "time": "2025-11-22T18:56:33+00:00" }, { "name": "nette/di", - "version": "v3.1.10", + "version": "v3.2.5", "source": { "type": "git", "url": "https://github.com/nette/di.git", - "reference": "2645ec3eaa17fa2ab87c5eb4eaacb1fe6dd28284" + "reference": "5708c328ce7658a73c96b14dd6da7b8b27bf220f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/2645ec3eaa17fa2ab87c5eb4eaacb1fe6dd28284", - "reference": "2645ec3eaa17fa2ab87c5eb4eaacb1fe6dd28284", + "url": "https://api.github.com/repos/nette/di/zipball/5708c328ce7658a73c96b14dd6da7b8b27bf220f", + "reference": "5708c328ce7658a73c96b14dd6da7b8b27bf220f", "shasum": "" }, "require": { + "ext-ctype": "*", "ext-tokenizer": "*", - "nette/neon": "^3.3 || ^4.0", - "nette/php-generator": "^3.5.4 || ^4.0", - "nette/robot-loader": "^3.2 || ~4.0.0", + "nette/neon": "^3.3", + "nette/php-generator": "^4.1.6", + "nette/robot-loader": "^4.0", "nette/schema": "^1.2.5", - "nette/utils": "^3.2.5 || ~4.0.0", - "php": "7.2 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -958,47 +989,33 @@ ], "support": { "issues": "https://github.com/nette/di/issues", - "source": "https://github.com/nette/di/tree/v3.1.10" + "source": "https://github.com/nette/di/tree/v3.2.5" }, - "time": "2024-02-06T01:19:44+00:00" + "time": "2025-08-14T22:59:46+00:00" }, { "name": "nette/finder", - "version": "v2.6.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nette/finder.git", - "reference": "991aefb42860abeab8e003970c3809a9d83cb932" + "reference": "027395c638637de95c8e9fad49a7c51249404ed2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/991aefb42860abeab8e003970c3809a9d83cb932", - "reference": "991aefb42860abeab8e003970c3809a9d83cb932", + "url": "https://api.github.com/repos/nette/finder/zipball/027395c638637de95c8e9fad49a7c51249404ed2", + "reference": "027395c638637de95c8e9fad49a7c51249404ed2", "shasum": "" }, "require": { - "nette/utils": "^2.4 || ^3.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" + "nette/utils": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "3.0-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", @@ -1025,39 +1042,39 @@ ], "support": { "issues": "https://github.com/nette/finder/issues", - "source": "https://github.com/nette/finder/tree/v2.6.0" + "source": "https://github.com/nette/finder/tree/v3.0.0" }, - "time": "2022-10-13T01:31:15+00:00" + "time": "2022-12-14T17:05:54+00:00" }, { "name": "nette/forms", - "version": "v3.1.15", + "version": "v3.2.8", "source": { "type": "git", "url": "https://github.com/nette/forms.git", - "reference": "f373bcd5ea7a33672fa96035d4bf3110ab66ee44" + "reference": "3bbf691ea0eb50d9594c2109d9252f267092b91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/forms/zipball/f373bcd5ea7a33672fa96035d4bf3110ab66ee44", - "reference": "f373bcd5ea7a33672fa96035d4bf3110ab66ee44", + "url": "https://api.github.com/repos/nette/forms/zipball/3bbf691ea0eb50d9594c2109d9252f267092b91f", + "reference": "3bbf691ea0eb50d9594c2109d9252f267092b91f", "shasum": "" }, "require": { - "nette/component-model": "^3.0", - "nette/http": "^3.1", - "nette/utils": "^3.2.5 || ~4.0.0", - "php": "7.2 - 8.3" + "nette/component-model": "^3.1", + "nette/http": "^3.3", + "nette/utils": "^4.0.4", + "php": "8.1 - 8.5" }, "conflict": { - "latte/latte": ">=3.0.0 <3.0.12 || >=3.1" + "latte/latte": ">=3.0.0 <3.0.12 || >=3.2" }, "require-dev": { "latte/latte": "^2.10.2 || ^3.0.12", "nette/application": "^3.0", "nette/di": "^3.0", - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^1", + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -1066,10 +1083,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1102,27 +1122,27 @@ ], "support": { "issues": "https://github.com/nette/forms/issues", - "source": "https://github.com/nette/forms/tree/v3.1.15" + "source": "https://github.com/nette/forms/tree/v3.2.8" }, - "time": "2024-01-21T22:22:16+00:00" + "time": "2025-11-22T19:36:34+00:00" }, { "name": "nette/http", - "version": "v3.2.4", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/nette/http.git", - "reference": "d7cc833ee186d5139cde5aab43b39ee7aedd6f22" + "reference": "c557f21c8cedd621dbfd7990752b1d55ef353f1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/http/zipball/d7cc833ee186d5139cde5aab43b39ee7aedd6f22", - "reference": "d7cc833ee186d5139cde5aab43b39ee7aedd6f22", + "url": "https://api.github.com/repos/nette/http/zipball/c557f21c8cedd621dbfd7990752b1d55ef353f1d", + "reference": "c557f21c8cedd621dbfd7990752b1d55ef353f1d", "shasum": "" }, "require": { - "nette/utils": "^3.2.1 || ~4.0.0", - "php": "7.2 - 8.3" + "nette/utils": "^4.0.4", + "php": "8.1 - 8.5" }, "conflict": { "nette/di": "<3.0.3", @@ -1132,7 +1152,7 @@ "nette/di": "^3.0", "nette/security": "^3.0", "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.8" }, "suggest": { @@ -1144,10 +1164,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1183,37 +1206,34 @@ ], "support": { "issues": "https://github.com/nette/http/issues", - "source": "https://github.com/nette/http/tree/v3.2.4" + "source": "https://github.com/nette/http/tree/v3.3.3" }, - "time": "2024-01-30T18:13:43+00:00" + "time": "2025-10-30T22:32:24+00:00" }, { "name": "nette/mail", - "version": "v3.1.11", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/nette/mail.git", - "reference": "804d70278458452863a2d6be4c1d5bf5f91b3950" + "reference": "5f16f76ed14a32f34580811d1a07ac357352bbc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/mail/zipball/804d70278458452863a2d6be4c1d5bf5f91b3950", - "reference": "804d70278458452863a2d6be4c1d5bf5f91b3950", + "url": "https://api.github.com/repos/nette/mail/zipball/5f16f76ed14a32f34580811d1a07ac357352bbc4", + "reference": "5f16f76ed14a32f34580811d1a07ac357352bbc4", "shasum": "" }, "require": { "ext-iconv": "*", - "nette/utils": "^3.1 || ~4.0.0", - "php": "7.1 - 8.3" - }, - "conflict": { - "nette/di": "<3.0-stable" + "nette/utils": "^4.0", + "php": "8.0 - 8.5" }, "require-dev": { - "nette/di": "^3.0.0", - "nette/tester": "^2.0", - "phpstan/phpstan-nette": "^0.12", - "tracy/tracy": "^2.4" + "nette/di": "^3.1 || ^4.0", + "nette/tester": "^2.4", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.8" }, "suggest": { "ext-fileinfo": "to detect type of attached files", @@ -1222,10 +1242,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1246,7 +1269,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "📧 Nette Mail: handy email creation and transfer library for PHP with both text and MIME-compliant support.", + "description": "📧 Nette Mail: A handy library for creating and sending emails in PHP.", "homepage": "https://nette.org", "keywords": [ "mail", @@ -1257,31 +1280,31 @@ ], "support": { "issues": "https://github.com/nette/mail/issues", - "source": "https://github.com/nette/mail/tree/v3.1.11" + "source": "https://github.com/nette/mail/tree/v4.0.4" }, - "time": "2023-11-02T23:18:58+00:00" + "time": "2025-08-01T02:09:42+00:00" }, { "name": "nette/neon", - "version": "v3.4.4", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/nette/neon.git", - "reference": "3411aa86b104e2d5b7e760da4600865ead963c3c" + "reference": "36e3f4f89fd8a7b89ada74c7a678baa9f7cc7719" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/neon/zipball/3411aa86b104e2d5b7e760da4600865ead963c3c", - "reference": "3411aa86b104e2d5b7e760da4600865ead963c3c", + "url": "https://api.github.com/repos/nette/neon/zipball/36e3f4f89fd8a7b89ada74c7a678baa9f7cc7719", + "reference": "36e3f4f89fd8a7b89ada74c7a678baa9f7cc7719", "shasum": "" }, "require": { "ext-json": "*", - "php": "8.0 - 8.4" + "php": "8.0 - 8.5" }, "require-dev": { "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.7" }, "bin": [ @@ -1294,6 +1317,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1315,7 +1341,7 @@ } ], "description": "🍸 Nette NEON: encodes and decodes NEON file format.", - "homepage": "https://ne-on.org", + "homepage": "https://neon.nette.org", "keywords": [ "export", "import", @@ -1325,33 +1351,33 @@ ], "support": { "issues": "https://github.com/nette/neon/issues", - "source": "https://github.com/nette/neon/tree/v3.4.4" + "source": "https://github.com/nette/neon/tree/v3.4.6" }, - "time": "2024-10-04T22:00:08+00:00" + "time": "2025-11-25T13:12:06+00:00" }, { "name": "nette/php-generator", - "version": "v4.1.8", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "42806049a7774a2bd316c958f5dcf01c6b5c56fa" + "reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/42806049a7774a2bd316c958f5dcf01c6b5c56fa", - "reference": "42806049a7774a2bd316c958f5dcf01c6b5c56fa", + "url": "https://api.github.com/repos/nette/php-generator/zipball/4707546a1f11badd72f5d82af4f8a6bc64bd56ac", + "reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac", "shasum": "" }, "require": { - "nette/utils": "^3.2.9 || ^4.0", - "php": "8.0 - 8.4" + "nette/utils": "^4.0.6", + "php": "8.1 - 8.5" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", + "jetbrains/phpstorm-attributes": "^1.2", "nette/tester": "^2.4", - "nikic/php-parser": "^4.18 || ^5.0", - "phpstan/phpstan": "^1.0", + "nikic/php-parser": "^5.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.8" }, "suggest": { @@ -1360,10 +1386,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1384,7 +1413,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.4 features.", + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.5 features.", "homepage": "https://nette.org", "keywords": [ "code", @@ -1394,42 +1423,44 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.1.8" + "source": "https://github.com/nette/php-generator/tree/v4.2.0" }, - "time": "2025-03-31T00:29:29+00:00" + "time": "2025-08-06T18:24:31+00:00" }, { "name": "nette/robot-loader", - "version": "v3.4.2", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/nette/robot-loader.git", - "reference": "970c8f82be98ec54180c88a468cd2b057855d993" + "reference": "805fb81376c24755d50bdb8bc69ca4db3def71d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/robot-loader/zipball/970c8f82be98ec54180c88a468cd2b057855d993", - "reference": "970c8f82be98ec54180c88a468cd2b057855d993", + "url": "https://api.github.com/repos/nette/robot-loader/zipball/805fb81376c24755d50bdb8bc69ca4db3def71d1", + "reference": "805fb81376c24755d50bdb8bc69ca4db3def71d1", "shasum": "" }, "require": { "ext-tokenizer": "*", - "nette/finder": "^2.5 || ^3.0", - "nette/utils": "^3.0", - "php": ">=7.1" + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" + "nette/tester": "^2.4", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.1-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1461,41 +1492,44 @@ ], "support": { "issues": "https://github.com/nette/robot-loader/issues", - "source": "https://github.com/nette/robot-loader/tree/v3.4.2" + "source": "https://github.com/nette/robot-loader/tree/v4.1.0" }, - "time": "2022-12-14T15:41:06+00:00" + "time": "2025-08-06T18:34:21+00:00" }, { "name": "nette/routing", - "version": "v3.0.5", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/nette/routing.git", - "reference": "ff709ff9ed38a14c4fe3472534526593a8461ff5" + "reference": "14c466f3383add0d4f78a82074d3c9841f8edf47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/routing/zipball/ff709ff9ed38a14c4fe3472534526593a8461ff5", - "reference": "ff709ff9ed38a14c4fe3472534526593a8461ff5", + "url": "https://api.github.com/repos/nette/routing/zipball/14c466f3383add0d4f78a82074d3c9841f8edf47", + "reference": "14c466f3383add0d4f78a82074d3c9841f8edf47", "shasum": "" }, "require": { - "nette/http": "^3.0 || ~4.0.0", - "nette/utils": "^3.0 || ~4.0.0", - "php": ">=7.1" + "nette/http": "^3.2 || ~4.0.0", + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^1", - "tracy/tracy": "^2.3" + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1523,40 +1557,43 @@ ], "support": { "issues": "https://github.com/nette/routing/issues", - "source": "https://github.com/nette/routing/tree/v3.0.5" + "source": "https://github.com/nette/routing/tree/v3.1.2" }, - "time": "2023-10-08T21:37:46+00:00" + "time": "2025-10-31T00:55:27+00:00" }, { "name": "nette/schema", - "version": "v1.2.5", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", "shasum": "" }, "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": "7.1 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1585,47 +1622,50 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.5" + "source": "https://github.com/nette/schema/tree/v1.3.3" }, - "time": "2023-10-05T20:37:59+00:00" + "time": "2025-10-30T22:57:59+00:00" }, { "name": "nette/security", - "version": "v3.1.8", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/nette/security.git", - "reference": "9b8e5c76b2e738350498470c35a36a6f0d0e38d6" + "reference": "beca6757457281ebc9428743bec7960809f40d49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/security/zipball/9b8e5c76b2e738350498470c35a36a6f0d0e38d6", - "reference": "9b8e5c76b2e738350498470c35a36a6f0d0e38d6", + "url": "https://api.github.com/repos/nette/security/zipball/beca6757457281ebc9428743bec7960809f40d49", + "reference": "beca6757457281ebc9428743bec7960809f40d49", "shasum": "" }, "require": { - "nette/utils": "^3.2.1 || ~4.0.0", - "php": "7.2 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.5" }, "conflict": { "nette/di": "<3.0-stable", "nette/http": "<3.1.3" }, "require-dev": { - "mockery/mockery": "^1.3.6", - "nette/di": "^3.0.1", - "nette/http": "^3.0.0", - "nette/tester": "^2.0", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.4" + "mockery/mockery": "^1.6@stable", + "nette/di": "^3.1", + "nette/http": "^3.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1656,35 +1696,36 @@ ], "support": { "issues": "https://github.com/nette/security/issues", - "source": "https://github.com/nette/security/tree/v3.1.8" + "source": "https://github.com/nette/security/tree/v3.2.2" }, - "time": "2023-10-18T17:05:31+00:00" + "time": "2025-08-01T02:15:08+00:00" }, { "name": "nette/utils", - "version": "v3.2.10", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" + "reference": "fa1f0b8261ed150447979eb22e373b7b7ad5a8e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", - "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", + "url": "https://api.github.com/repos/nette/utils/zipball/fa1f0b8261ed150447979eb22e373b7b7ad5a8e0", + "reference": "fa1f0b8261ed150447979eb22e373b7b7ad5a8e0", "shasum": "" }, "require": { - "php": ">=7.2 <8.4" + "php": "8.2 - 8.5" }, "conflict": { - "nette/di": "<3.0.6" + "nette/finder": "<3", + "nette/schema": "<1.2.2" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "~2.0", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.3" + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" }, "suggest": { "ext-gd": "to use Image", @@ -1692,16 +1733,18 @@ "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()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "4.1-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1742,22 +1785,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.10" + "source": "https://github.com/nette/utils/tree/v4.1.0" }, - "time": "2023-07-30T15:38:18+00:00" + "time": "2025-12-01T17:49:23+00:00" }, { "name": "nextras/dbal", - "version": "v5.0.2", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/nextras/dbal.git", - "reference": "d26147e8496c234fc9a1e552294a5d783905991c" + "reference": "eeea004568c4fc8304cbf5e0444bb700225cfb37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextras/dbal/zipball/d26147e8496c234fc9a1e552294a5d783905991c", - "reference": "d26147e8496c234fc9a1e552294a5d783905991c", + "url": "https://api.github.com/repos/nextras/dbal/zipball/eeea004568c4fc8304cbf5e0444bb700225cfb37", + "reference": "eeea004568c4fc8304cbf5e0444bb700225cfb37", "shasum": "" }, "require": { @@ -1765,21 +1808,20 @@ "php": ">=8.1" }, "require-dev": { - "mockery/mockery": "~1.5", - "nette/caching": "~3.0", - "nette/di": "~3.0", - "nette/finder": "~2.5 || ~3.0", - "nette/neon": "~3.0", - "nette/tester": "~2.4", - "nette/utils": "~3.0 || ~4.0", + "mockery/mockery": "~1.6.12", + "nette/caching": "~3.1", + "nette/di": "~3.1", + "nette/neon": "~3.1", + "nette/tester": "dev-master", + "nette/utils": "~3.1 || ~4.0", "nextras/multi-query-parser": "~1.0", "phpstan/extension-installer": "1.4.3", - "phpstan/phpstan": "2.1.16", + "phpstan/phpstan": "2.1.31", "phpstan/phpstan-deprecation-rules": "2.0.3", - "phpstan/phpstan-strict-rules": "2.0.4", - "symfony/config": "~4.4 || ~5.0", - "symfony/dependency-injection": "~4.4 || ~5.0", - "symfony/http-kernel": "~4.4 || ~5.0", + "phpstan/phpstan-strict-rules": "2.0.7", + "symfony/config": "~5.4 || ~6.0 || ~7.0", + "symfony/dependency-injection": "~5.4 || ~6.0 || ~7.0", + "symfony/http-kernel": "~5.4 || ~6.0 || ~7.0", "tracy/tracy": "~2.7" }, "suggest": { @@ -1815,7 +1857,7 @@ ], "support": { "issues": "https://github.com/nextras/dbal/issues", - "source": "https://github.com/nextras/dbal/tree/v5.0.2" + "source": "https://github.com/nextras/dbal/tree/v5.0.7" }, "funding": [ { @@ -1823,37 +1865,37 @@ "type": "github" } ], - "time": "2025-06-07T19:13:08+00:00" + "time": "2025-11-08T13:56:19+00:00" }, { "name": "nextras/form-components", - "version": "v1.1.2", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nextras/form-components.git", - "reference": "67253c9354762682d7d0804974b2350f1c9a53af" + "reference": "ad60fdefabf3d3f4ddcb53bf6978fba68d4542f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextras/form-components/zipball/67253c9354762682d7d0804974b2350f1c9a53af", - "reference": "67253c9354762682d7d0804974b2350f1c9a53af", + "url": "https://api.github.com/repos/nextras/form-components/zipball/ad60fdefabf3d3f4ddcb53bf6978fba68d4542f5", + "reference": "ad60fdefabf3d3f4ddcb53bf6978fba68d4542f5", "shasum": "" }, "require": { "nette/application": "~3.0", "nette/component-model": "~3.0", - "nette/forms": "~3.0", + "nette/forms": "~3.1", "nette/utils": "^3.0 || ^4.0", - "php": ">=7.1" + "php": ">=8.0" }, "require-dev": { "latte/latte": "~3.0", "nette/bootstrap": "~3.0", "nette/di": "~3.0", - "nette/robot-loader": "~3.0", - "nette/tester": "~2.1", - "phpstan/phpstan-nette": "0.11", - "phpstan/phpstan-shim": "0.11.1", + "nette/robot-loader": "~3.0 || ~4.0", + "nette/tester": "dev-master", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-nette": "^2.0", "tracy/tracy": "~2.5" }, "type": "library", @@ -1888,22 +1930,22 @@ ], "support": { "issues": "https://github.com/nextras/form-components/issues", - "source": "https://github.com/nextras/form-components/tree/v1.1.2" + "source": "https://github.com/nextras/form-components/tree/v3.0.0" }, - "time": "2023-04-19T13:38:40+00:00" + "time": "2025-11-30T11:50:28+00:00" }, { "name": "nextras/forms-rendering", - "version": "dev-master", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/nextras/forms-rendering.git", - "reference": "ec07cdf772b4c041e80c16a9fc42c6dc31ebaabc" + "reference": "74270916f323097b2cad7f54d2d3206da3cf43f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextras/forms-rendering/zipball/ec07cdf772b4c041e80c16a9fc42c6dc31ebaabc", - "reference": "ec07cdf772b4c041e80c16a9fc42c6dc31ebaabc", + "url": "https://api.github.com/repos/nextras/forms-rendering/zipball/74270916f323097b2cad7f54d2d3206da3cf43f9", + "reference": "74270916f323097b2cad7f54d2d3206da3cf43f9", "shasum": "" }, "require": { @@ -1920,7 +1962,6 @@ "phpstan/phpstan-nette": "~1.0", "tracy/tracy": "^2.5" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1952,9 +1993,9 @@ ], "support": { "issues": "https://github.com/nextras/forms-rendering/issues", - "source": "https://github.com/nextras/forms-rendering/tree/master" + "source": "https://github.com/nextras/forms-rendering/tree/v2.0.1" }, - "time": "2025-02-09T11:47:51+00:00" + "time": "2025-09-06T12:50:49+00:00" }, { "name": "nextras/orm", @@ -2038,38 +2079,44 @@ }, { "name": "pelago/emogrifier", - "version": "v7.3.0", + "version": "v8.2.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/emogrifier.git", - "reference": "6e00d9d8235e8cc8eec857e8dcd6cfeefdfd0cd6" + "reference": "3548212a1b4232a4a6ad344992f551725b3de295" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/6e00d9d8235e8cc8eec857e8dcd6cfeefdfd0cd6", - "reference": "6e00d9d8235e8cc8eec857e8dcd6cfeefdfd0cd6", + "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/3548212a1b4232a4a6ad344992f551725b3de295", + "reference": "3548212a1b4232a4a6ad344992f551725b3de295", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "sabberworm/php-css-parser": "^8.7.0", - "symfony/css-selector": "^4.4.23 || ^5.4.0 || ^6.0.0 || ^7.0.0" + "php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "sabberworm/php-css-parser": "^9.1.0", + "symfony/css-selector": "^5.4.35 || ~6.3.12 || ^6.4.3 || ^7.0.3 || ^8.0.0", + "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.3" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpmd/phpmd": "2.15.0", "phpstan/extension-installer": "1.4.3", - "phpstan/phpstan": "1.12.7", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "1.6.1", - "phpunit/phpunit": "9.6.21", - "rawr/cross-data-providers": "2.4.0" + "phpstan/phpstan": "1.12.32 || 2.1.31", + "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7", + "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7", + "phpunit/phpunit": "9.6.29", + "rawr/phpunit-data-provider": "3.3.1", + "rector/rector": "1.2.10 || 2.2.2", + "rector/type-perfect": "1.0.0 || 2.1.0", + "squizlabs/php_codesniffer": "4.0.1", + "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0.x-dev" + "dev-main": "8.3.x-dev" } }, "autoload": { @@ -2116,20 +2163,20 @@ "issues": "https://github.com/MyIntervals/emogrifier/issues", "source": "https://github.com/MyIntervals/emogrifier" }, - "time": "2024-10-28T16:12:26+00:00" + "time": "2025-11-27T21:56:48+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -2161,9 +2208,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "rikudou/iban", @@ -2227,24 +2274,33 @@ }, { "name": "sabberworm/php-css-parser", - "version": "v8.8.0", + "version": "v9.1.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", - "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740" + "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740", - "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb", + "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb", "shasum": "" }, "require": { "ext-iconv": "*", - "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.3" }, "require-dev": { - "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41" + "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpstan/extension-installer": "1.4.3", + "phpstan/phpstan": "1.12.28 || 2.1.25", + "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7", + "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.6", + "phpunit/phpunit": "8.5.46", + "rawr/phpunit-data-provider": "3.3.1", + "rector/rector": "1.2.10 || 2.1.7", + "rector/type-perfect": "1.0.0 || 2.1.0" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" @@ -2252,7 +2308,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "9.0.x-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -2286,22 +2342,22 @@ ], "support": { "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", - "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0" + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.1.0" }, - "time": "2025-03-23T17:59:05+00:00" + "time": "2025-09-14T07:37:21+00:00" }, { "name": "symfony/asset", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b" + "reference": "0f7bccb9ffa1f373cbd659774d90629b2773464f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", - "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "url": "https://api.github.com/repos/symfony/asset/zipball/0f7bccb9ffa1f373cbd659774d90629b2773464f", + "reference": "0f7bccb9ffa1f373cbd659774d90629b2773464f", "shasum": "" }, "require": { @@ -2311,9 +2367,9 @@ "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2341,7 +2397,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v7.3.0" + "source": "https://github.com/symfony/asset/tree/v7.4.0" }, "funding": [ { @@ -2352,31 +2408,35 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-05T10:15:41+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { "name": "symfony/config", - "version": "v7.3.0", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "ba62ae565f1327c2f6366726312ed828c85853bc" + "reference": "2c323304c354a43a48b61c5fa760fc4ed60ce495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ba62ae565f1327c2f6366726312ed828c85853bc", - "reference": "ba62ae565f1327c2f6366726312ed828c85853bc", + "url": "https://api.github.com/repos/symfony/config/zipball/2c323304c354a43a48b61c5fa760fc4ed60ce495", + "reference": "2c323304c354a43a48b61c5fa760fc4ed60ce495", "shasum": "" }, "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^7.1", + "symfony/filesystem": "^7.1|^8.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -2384,11 +2444,11 @@ "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2416,7 +2476,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.3.0" + "source": "https://github.com/symfony/config/tree/v7.4.1" }, "funding": [ { @@ -2427,25 +2487,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-15T09:04:05+00:00" + "time": "2025-12-05T07:52:08+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", "shasum": "" }, "require": { @@ -2481,7 +2545,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v7.4.0" }, "funding": [ { @@ -2492,12 +2556,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-10-30T13:39:42+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2568,16 +2636,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", "shasum": "" }, "require": { @@ -2586,7 +2654,7 @@ "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2614,7 +2682,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.3.0" + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" }, "funding": [ { @@ -2625,16 +2693,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:15:23+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2693,7 +2765,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -2704,6 +2776,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -2713,7 +2789,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -2774,7 +2850,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -2785,6 +2861,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -2794,23 +2874,23 @@ }, { "name": "symfony/translation", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" + "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", + "url": "https://api.github.com/repos/symfony/translation/zipball/2d01ca0da3f092f91eeedb46f24aa30d2fca8f68", + "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68", "shasum": "" }, "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "symfony/translation-contracts": "^2.5.3|^3.3" }, "conflict": { "nikic/php-parser": "<5.0", @@ -2829,17 +2909,17 @@ "require-dev": { "nikic/php-parser": "^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/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2870,7 +2950,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.0" + "source": "https://github.com/symfony/translation/tree/v7.4.0" }, "funding": [ { @@ -2881,25 +2961,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -2948,7 +3032,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -2959,31 +3043,174 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-27T08:32:26+00:00" + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "thecodingmachine/safe", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/safe.git", + "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/2cdd579eeaa2e78e51c7509b50cc9fb89a956236", + "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10", + "squizlabs/php_codesniffer": "^3.2" + }, + "type": "library", + "autoload": { + "files": [ + "lib/special_cases.php", + "generated/apache.php", + "generated/apcu.php", + "generated/array.php", + "generated/bzip2.php", + "generated/calendar.php", + "generated/classobj.php", + "generated/com.php", + "generated/cubrid.php", + "generated/curl.php", + "generated/datetime.php", + "generated/dir.php", + "generated/eio.php", + "generated/errorfunc.php", + "generated/exec.php", + "generated/fileinfo.php", + "generated/filesystem.php", + "generated/filter.php", + "generated/fpm.php", + "generated/ftp.php", + "generated/funchand.php", + "generated/gettext.php", + "generated/gmp.php", + "generated/gnupg.php", + "generated/hash.php", + "generated/ibase.php", + "generated/ibmDb2.php", + "generated/iconv.php", + "generated/image.php", + "generated/imap.php", + "generated/info.php", + "generated/inotify.php", + "generated/json.php", + "generated/ldap.php", + "generated/libxml.php", + "generated/lzf.php", + "generated/mailparse.php", + "generated/mbstring.php", + "generated/misc.php", + "generated/mysql.php", + "generated/mysqli.php", + "generated/network.php", + "generated/oci8.php", + "generated/opcache.php", + "generated/openssl.php", + "generated/outcontrol.php", + "generated/pcntl.php", + "generated/pcre.php", + "generated/pgsql.php", + "generated/posix.php", + "generated/ps.php", + "generated/pspell.php", + "generated/readline.php", + "generated/rnp.php", + "generated/rpminfo.php", + "generated/rrd.php", + "generated/sem.php", + "generated/session.php", + "generated/shmop.php", + "generated/sockets.php", + "generated/sodium.php", + "generated/solr.php", + "generated/spl.php", + "generated/sqlsrv.php", + "generated/ssdeep.php", + "generated/ssh2.php", + "generated/stream.php", + "generated/strings.php", + "generated/swoole.php", + "generated/uodbc.php", + "generated/uopz.php", + "generated/url.php", + "generated/var.php", + "generated/xdiff.php", + "generated/xml.php", + "generated/xmlrpc.php", + "generated/yaml.php", + "generated/yaz.php", + "generated/zip.php", + "generated/zlib.php" + ], + "classmap": [ + "lib/DateTime.php", + "lib/DateTimeImmutable.php", + "lib/Exceptions/", + "generated/Exceptions/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP core functions that throw exceptions instead of returning FALSE on error", + "support": { + "issues": "https://github.com/thecodingmachine/safe/issues", + "source": "https://github.com/thecodingmachine/safe/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://github.com/OskarStark", + "type": "github" + }, + { + "url": "https://github.com/shish", + "type": "github" + }, + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2025-05-14T06:15:44+00:00" }, { "name": "tracy/tracy", - "version": "v2.10.10", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/nette/tracy.git", - "reference": "32303e02c222eea8571402a8310fc3fe70422c37" + "reference": "eec57bcf2ff11d79f519a19da9d7ae1e2c63c42e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/32303e02c222eea8571402a8310fc3fe70422c37", - "reference": "32303e02c222eea8571402a8310fc3fe70422c37", + "url": "https://api.github.com/repos/nette/tracy/zipball/eec57bcf2ff11d79f519a19da9d7ae1e2c63c42e", + "reference": "eec57bcf2ff11d79f519a19da9d7ae1e2c63c42e", "shasum": "" }, "require": { "ext-json": "*", "ext-session": "*", - "php": "8.0 - 8.4" + "php": "8.2 - 8.5" }, "conflict": { "nette/di": "<3.0" @@ -2995,19 +3222,22 @@ "nette/mail": "^3.0 || ^4.0", "nette/tester": "^2.2", "nette/utils": "^3.0 || ^4.0", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "psr/log": "^1.0 || ^2.0 || ^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10-dev" + "dev-master": "2.11-dev" } }, "autoload": { "files": [ "src/Tracy/functions.php" ], + "psr-4": { + "Tracy\\": "src" + }, "classmap": [ "src" ] @@ -3037,9 +3267,9 @@ ], "support": { "issues": "https://github.com/nette/tracy/issues", - "source": "https://github.com/nette/tracy/tree/v2.10.10" + "source": "https://github.com/nette/tracy/tree/v2.11.0" }, - "time": "2025-04-28T14:35:15+00:00" + "time": "2025-10-31T00:12:50+00:00" } ], "packages-dev": [ @@ -3188,16 +3418,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -3249,7 +3479,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -3259,13 +3489,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -3382,16 +3608,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -3401,10 +3627,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -3431,7 +3657,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -3439,62 +3665,61 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.75.0", + "version": "v3.92.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c" + "reference": "5646c2cd99b7cb4b658ff681fe27069ba86c7280" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/399a128ff2fdaf4281e4e79b755693286cdf325c", - "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/5646c2cd99b7cb4b658ff681fe27069ba86c7280", + "reference": "5646c2cd99b7cb4b658ff681fe27069ba86c7280", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", + "clue/ndjson-react": "^1.3", "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.3", + "composer/xdebug-handler": "^3.0.5", "ext-filter": "*", "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.2", + "fidry/cpu-core-counter": "^1.3", "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", - "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/finder": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/polyfill-mbstring": "^1.31", - "symfony/polyfill-php80": "^1.31", - "symfony/polyfill-php81": "^1.31", - "symfony/process": "^5.4 || ^6.4 || ^7.2", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.6", - "infection/infection": "^0.29.14", - "justinrainbow/json-schema": "^5.3 || ^6.2", - "keradus/cli-executor": "^2.1", + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31.0", + "justinrainbow/json-schema": "^6.5", + "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.7", - "php-cs-fixer/accessible-object": "^1.1", + "php-coveralls/php-coveralls": "^2.9", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12", - "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3", - "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3" + "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", + "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -3509,7 +3734,7 @@ "PhpCsFixer\\": "src/" }, "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "src/**/Internal/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3535,7 +3760,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.75.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.0" }, "funding": [ { @@ -3543,28 +3768,28 @@ "type": "github" } ], - "time": "2025-03-31T18:40:42+00:00" + "time": "2025-12-12T10:29:19+00:00" }, { "name": "nette/tester", - "version": "v2.5.4", + "version": "v2.5.7", "source": { "type": "git", "url": "https://github.com/nette/tester.git", - "reference": "c11863785779e87b40adebf150364f2e5938c111" + "reference": "dc02e7811f3491a72e87538044586cee2f483d58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/tester/zipball/c11863785779e87b40adebf150364f2e5938c111", - "reference": "c11863785779e87b40adebf150364f2e5938c111", + "url": "https://api.github.com/repos/nette/tester/zipball/dc02e7811f3491a72e87538044586cee2f483d58", + "reference": "dc02e7811f3491a72e87538044586cee2f483d58", "shasum": "" }, "require": { - "php": "8.0 - 8.4" + "php": "8.0 - 8.5" }, "require-dev": { "ext-simplexml": "*", - "phpstan/phpstan": "^1.0" + "phpstan/phpstan-nette": "^2.0@stable" }, "bin": [ "src/tester" @@ -3576,6 +3801,9 @@ } }, "autoload": { + "psr-4": { + "Tester\\": "src" + }, "classmap": [ "src/" ] @@ -3616,9 +3844,9 @@ ], "support": { "issues": "https://github.com/nette/tester/issues", - "source": "https://github.com/nette/tester/tree/v2.5.4" + "source": "https://github.com/nette/tester/tree/v2.5.7" }, - "time": "2024-10-23T23:57:10+00:00" + "time": "2025-11-22T18:50:53+00:00" }, { "name": "nextras/mail-panel", @@ -3809,16 +4037,11 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.27", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "3a6e423c076ab39dfedc307e2ac627ef579db162" - }, + "version": "1.12.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3a6e423c076ab39dfedc307e2ac627ef579db162", - "reference": "3a6e423c076ab39dfedc307e2ac627ef579db162", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", + "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", "shasum": "" }, "require": { @@ -3863,7 +4086,7 @@ "type": "github" } ], - "time": "2025-05-21T20:51:45+00:00" + "time": "2025-09-30T10:16:31+00:00" }, { "name": "phpstan/phpstan-nette", @@ -4228,16 +4451,16 @@ }, { "name": "react/dns", - "version": "v1.13.0", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", "shasum": "" }, "require": { @@ -4292,7 +4515,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.13.0" + "source": "https://github.com/reactphp/dns/tree/v1.14.0" }, "funding": [ { @@ -4300,20 +4523,20 @@ "type": "open_collective" } ], - "time": "2024-06-13T14:18:03+00:00" + "time": "2025-11-18T19:34:28+00:00" }, { "name": "react/event-loop", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", "shasum": "" }, "require": { @@ -4364,7 +4587,7 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" }, "funding": [ { @@ -4372,27 +4595,27 @@ "type": "open_collective" } ], - "time": "2023-11-13T13:48:05+00:00" + "time": "2025-11-17T20:46:25+00:00" }, { "name": "react/promise", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", "shasum": "" }, "require": { "php": ">=7.1.0" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpstan/phpstan": "1.12.28 || 1.4.10", "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", @@ -4437,7 +4660,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "source": "https://github.com/reactphp/promise/tree/v3.3.0" }, "funding": [ { @@ -4445,20 +4668,20 @@ "type": "open_collective" } ], - "time": "2024-05-24T10:39:05+00:00" + "time": "2025-08-19T18:57:03+00:00" }, { "name": "react/socket", - "version": "v1.16.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", "shasum": "" }, "require": { @@ -4517,7 +4740,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" + "source": "https://github.com/reactphp/socket/tree/v1.17.0" }, "funding": [ { @@ -4525,7 +4748,7 @@ "type": "open_collective" } ], - "time": "2024-07-26T10:38:09+00:00" + "time": "2025-11-19T20:47:34+00:00" }, { "name": "react/stream", @@ -4674,16 +4897,16 @@ }, { "name": "symfony/console", - "version": "v7.3.0", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + "reference": "6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "url": "https://api.github.com/repos/symfony/console/zipball/6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e", + "reference": "6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e", "shasum": "" }, "require": { @@ -4691,7 +4914,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2" + "symfony/string": "^7.2|^8.0" }, "conflict": { "symfony/dependency-injection": "<6.4", @@ -4705,16 +4928,16 @@ }, "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" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4748,7 +4971,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.4.1" }, "funding": [ { @@ -4759,25 +4982,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-24T10:34:04+00:00" + "time": "2025-12-05T15:23:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d", "shasum": "" }, "require": { @@ -4794,13 +5021,14 @@ }, "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/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4828,7 +5056,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.0" }, "funding": [ { @@ -4839,12 +5067,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-22T09:11:45+00:00" + "time": "2025-10-28T09:38:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4924,23 +5156,23 @@ }, { "name": "symfony/finder", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + "reference": "340b9ed7320570f319028a2cbec46d40535e94bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "url": "https://api.github.com/repos/symfony/finder/zipball/340b9ed7320570f319028a2cbec46d40535e94bd", + "reference": "340b9ed7320570f319028a2cbec46d40535e94bd", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4968,7 +5200,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.0" + "source": "https://github.com/symfony/finder/tree/v7.4.0" }, "funding": [ { @@ -4979,25 +5211,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-30T19:00:26+00:00" + "time": "2025-11-05T05:42:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca" + "reference": "b38026df55197f9e39a44f3215788edf83187b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/afb9a8038025e5dbc657378bfab9198d75f10fca", - "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", "shasum": "" }, "require": { @@ -5035,7 +5271,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" }, "funding": [ { @@ -5046,25 +5282,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-04T13:12:05+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -5113,7 +5353,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -5124,16 +5364,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5194,7 +5438,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -5205,6 +5449,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5214,7 +5462,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -5274,7 +5522,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -5285,6 +5533,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5294,7 +5546,7 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -5350,7 +5602,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" }, "funding": [ { @@ -5361,6 +5613,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5368,18 +5624,98 @@ ], "time": "2024-09-09T11:45:10+00:00" }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, { "name": "symfony/process", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/process/zipball/7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", "shasum": "" }, "require": { @@ -5411,7 +5747,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.4.0" }, "funding": [ { @@ -5422,25 +5758,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-17T09:11:12+00:00" + "time": "2025-10-16T11:21:06+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -5494,7 +5834,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -5505,25 +5845,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" + "reference": "8a24af0a2e8a872fb745047180649b8418303084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", "shasum": "" }, "require": { @@ -5556,7 +5900,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" }, "funding": [ { @@ -5567,31 +5911,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-24T10:49:57+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { "name": "symfony/string", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -5599,12 +5948,11 @@ "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/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5643,7 +5991,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.0" + "source": "https://github.com/symfony/string/tree/v7.4.0" }, "funding": [ { @@ -5654,19 +6002,21 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-20T20:19:01+00:00" + "time": "2025-11-27T13:27:24+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "nextras/forms-rendering": 20 - }, + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/docs/customizing-emails.md b/docs/customizing-emails.md index 674d37a..36b4ddf 100644 --- a/docs/customizing-emails.md +++ b/docs/customizing-emails.md @@ -1,8 +1,8 @@ # Customizing E-Mail messages -The templates for the e-mail messages sent to the teams after registration are located in [`app/Templates/Mail/` directory](../app/Templates/Mail/) so one can easily modify them. But often, one wants to change just a single section, e.g. payment instructions, and modifying the whole file is not very convenient for that. Also, it makes updating the entries for the next year’s event awkward due to having to manually merge possible changes. +The templates for the e-mail messages sent to the teams after registration are located in [`app/Presenters/templates/Mail/` directory](../app/Presenters/templates/Mail/) so one can easily modify them. But often, one wants to change just a single section, e.g. payment instructions, and modifying the whole file is not very convenient for that. Also, it makes updating the entries for the next year’s event awkward due to having to manually merge possible changes. -If you look at the [default e-mail template](../app/Templates/Mail/verification.latte), you will see [`block` tags](https://latte.nette.org/en/template-inheritance#toc-blocks) that will allow you to replace specific sections of the message. +If you look at the [default e-mail template](../app/Presenters/templates/Mail/verification.latte), you will see [`block` tags](https://latte.nette.org/en/template-inheritance#toc-blocks) that will allow you to replace specific sections of the message. If you create a `verification.$lang.latte` file in the `app/Config/mail/` directory with the following contents, you will change just the greeting and the payment instructions, while keeping the rest of the message body for the e-mail in language `$lang`: