diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index e9289156e6..20ac498e11 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -468,16 +468,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.95.11", + "version": "v3.95.12", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "35f98e1293283397824d7f349ce5afb8747c3cd5" + "reference": "b1b9055997a98dce3c2338e884626e718a25a923" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/35f98e1293283397824d7f349ce5afb8747c3cd5", - "reference": "35f98e1293283397824d7f349ce5afb8747c3cd5", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b1b9055997a98dce3c2338e884626e718a25a923", + "reference": "b1b9055997a98dce3c2338e884626e718a25a923", "shasum": "" }, "require": { @@ -517,7 +517,7 @@ "php-coveralls/php-coveralls": "^2.9.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", - "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55", + "phpunit/phpunit": "^9.6.35 || ^10.5.64 || ^11.5.56", "symfony/polyfill-php85": "^1.38", "symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.0", "symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.0" @@ -561,7 +561,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.95.11" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.12" }, "funding": [ { @@ -569,7 +569,7 @@ "type": "github" } ], - "time": "2026-06-25T14:17:04+00:00" + "time": "2026-07-07T13:29:36+00:00" }, { "name": "psr/container", diff --git a/app/Api/V1/Controllers/Insight/Income/TagController.php b/app/Api/V1/Controllers/Insight/Income/TagController.php index df99eef909..94be2ae461 100644 --- a/app/Api/V1/Controllers/Insight/Income/TagController.php +++ b/app/Api/V1/Controllers/Insight/Income/TagController.php @@ -158,7 +158,10 @@ final class TagController extends Controller 'currency_id' => (string) $foreignCurrencyId, 'currency_code' => $journal['foreign_currency_code'], ]; - $response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount'])); + $response[$foreignKey]['difference'] = bcadd( + (string) $response[$foreignKey]['difference'], + Steam::positive($journal['foreign_amount']) + ); $response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; } } diff --git a/app/Api/V1/Controllers/Insight/Transfer/TagController.php b/app/Api/V1/Controllers/Insight/Transfer/TagController.php index f92a7aa9f0..b7b85fd376 100644 --- a/app/Api/V1/Controllers/Insight/Transfer/TagController.php +++ b/app/Api/V1/Controllers/Insight/Transfer/TagController.php @@ -155,7 +155,10 @@ final class TagController extends Controller 'currency_id' => (string) $foreignCurrencyId, 'currency_code' => $journal['foreign_currency_code'], ]; - $response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount'])); + $response[$foreignKey]['difference'] = bcadd( + (string) $response[$foreignKey]['difference'], + Steam::positive($journal['foreign_amount']) + ); $response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; // intentional float } } diff --git a/app/Helpers/Functions/helpers.php b/app/Helpers/Functions/helpers.php index 05940cea92..fad0941f9c 100644 --- a/app/Helpers/Functions/helpers.php +++ b/app/Helpers/Functions/helpers.php @@ -42,6 +42,7 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Route; use League\CommonMark\GithubFlavoredMarkdownConverter; + use function Safe\json_decode; use function Safe\mb_ord; use function Safe\preg_match; @@ -51,7 +52,7 @@ if (!function_exists('env_default_when_empty')) { /** * @return null|mixed */ - function env_default_when_empty(mixed $value, bool | int | string | null $default = null): mixed + function env_default_when_empty(mixed $value, bool|int|string|null $default = null): mixed { if (null === $value) { return $default; @@ -65,7 +66,6 @@ if (!function_exists('env_default_when_empty')) { } if (!function_exists('sign_amount')) { - function sign_amount(string $amount, string $transactionType, string $sourceType): string { // withdrawals stay negative @@ -89,7 +89,7 @@ if (!function_exists('sign_amount')) { if (!function_exists('normal_journal_object_amount')) { function normal_journal_object_amount(TransactionJournal $journal): string { - $type = $journal->transactionType->type; + $type = $journal->transactionType->type; /** @var Transaction $first */ $first = $journal->transactions()->where('amount', '<', 0)->first(); @@ -98,12 +98,12 @@ if (!function_exists('normal_journal_object_amount')) { $colored = true; $sourceType = $first->account->accountType()->first()->type; - $amount = sign_amount($amount, $type, $sourceType); + $amount = sign_amount($amount, $type, $sourceType); if (TransactionTypeEnum::TRANSFER->value === $type) { $colored = false; } - $result = Amount::formatFlat($currency->symbol, $currency->decimal_places, $amount, $colored); + $result = Amount::formatFlat($currency->symbol, $currency->decimal_places, $amount, $colored); if (TransactionTypeEnum::TRANSFER->value === $type) { return sprintf('%s', $result); } @@ -123,10 +123,9 @@ if (!function_exists('journal_object_has_foreign')) { } if (function_exists('foreign_journal_object_amount')) { - function foreign_journal_object_amount(TransactionJournal $journal): string { - $type = $journal->transactionType->type; + $type = $journal->transactionType->type; /** @var Transaction $first */ $first = $journal->transactions()->where('amount', '<', 0)->first(); @@ -135,12 +134,12 @@ if (function_exists('foreign_journal_object_amount')) { $colored = true; $sourceType = $first->account->accountType()->first()->type; - $amount = sign_amount($amount, $type, $sourceType); + $amount = sign_amount($amount, $type, $sourceType); if (TransactionTypeEnum::TRANSFER->value === $type) { $colored = false; } - $result = Amount::formatFlat($currency->symbol, $currency->decimal_places, $amount, $colored); + $result = Amount::formatFlat($currency->symbol, $currency->decimal_places, $amount, $colored); if (TransactionTypeEnum::TRANSFER->value === $type) { return sprintf('%s', $result); } @@ -168,10 +167,11 @@ if (!function_exists('journal_link_translation')) { function journal_link_translation(string $direction, string $original): string { $key = sprintf('firefly.%s_%s', $original, $direction); - $translation = (string)trans($key); + $translation = (string) trans($key); if ($key === $translation) { return $original; } + return $translation; } } @@ -180,9 +180,9 @@ if (!function_exists('all_journal_triggers')) { function all_journal_triggers(): array { return [ - 'store-journal' => (string)trans('firefly.rule_trigger_store_journal'), - 'update-journal' => (string)trans('firefly.rule_trigger_update_journal'), - 'manual-activation' => (string)trans('firefly.rule_trigger_manual'), + 'store-journal' => (string) trans('firefly.rule_trigger_store_journal'), + 'update-journal' => (string) trans('firefly.rule_trigger_update_journal'), + 'manual-activation' => (string) trans('firefly.rule_trigger_manual'), ]; } } @@ -194,10 +194,11 @@ if (!function_exists('all_rule_actions')) { $ruleActions = array_keys(config('firefly.rule-actions')); $possibleActions = []; foreach ($ruleActions as $key) { - $possibleActions[$key] = (string)trans('firefly.rule_action_' . $key . '_choice'); + $possibleActions[$key] = (string) trans('firefly.rule_action_'.$key.'_choice'); } unset($ruleActions); asort($possibleActions); + return $possibleActions; } } @@ -206,9 +207,9 @@ if (!function_exists('all_journal_triggers')) { function all_journal_triggers(): array { return [ - 'store-journal' => (string)trans('firefly.rule_trigger_store_journal'), - 'update-journal' => (string)trans('firefly.rule_trigger_update_journal'), - 'manual-activation' => (string)trans('firefly.rule_trigger_manual'), + 'store-journal' => (string) trans('firefly.rule_trigger_store_journal'), + 'update-journal' => (string) trans('firefly.rule_trigger_update_journal'), + 'manual-activation' => (string) trans('firefly.rule_trigger_manual'), ]; } } @@ -217,14 +218,14 @@ if (!function_exists('mime_icon')) { function mime_icon(string $file): string { return match ($file) { - 'application/pdf' => 'bi-file-earmark-pdf', + 'application/pdf' => 'bi-file-earmark-pdf', 'image/webp', 'image/png', 'image/jpeg', 'image/svg+xml', 'image/heic', 'image/heic-sequence', - 'application/vnd.oasis.opendocument.image' => 'bi-file-earmark-image', + 'application/vnd.oasis.opendocument.image' => 'bi-file-earmark-image', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', @@ -237,7 +238,7 @@ if (!function_exists('mime_icon')) { 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.text-template', 'application/vnd.oasis.opendocument.text-web', - 'application/vnd.oasis.opendocument.text-master' => 'bi-file-earmark-word', + 'application/vnd.oasis.opendocument.text-master' => 'bi-file-earmark-word', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', @@ -245,7 +246,7 @@ if (!function_exists('mime_icon')) { 'application/vnd.sun.xml.calc.template', 'application/vnd.stardivision.calc', 'application/vnd.oasis.opendocument.spreadsheet', - 'application/vnd.oasis.opendocument.spreadsheet-template' => 'bi-file-earmark-excel', + 'application/vnd.oasis.opendocument.spreadsheet-template' => 'bi-file-earmark-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.template', @@ -254,18 +255,18 @@ if (!function_exists('mime_icon')) { 'application/vnd.sun.xml.impress.template', 'application/vnd.stardivision.impress', 'application/vnd.oasis.opendocument.presentation', - 'application/vnd.oasis.opendocument.presentation-template' => 'bi-file-earmark-slides', + 'application/vnd.oasis.opendocument.presentation-template' => 'bi-file-earmark-slides', 'application/vnd.sun.xml.draw', 'application/vnd.sun.xml.draw.template', 'application/vnd.stardivision.draw', - 'application/vnd.oasis.opendocument.chart' => 'bi-file-earmark-easel', + 'application/vnd.oasis.opendocument.chart' => 'bi-file-earmark-easel', 'application/vnd.oasis.opendocument.graphics', 'application/vnd.oasis.opendocument.graphics-template', 'application/vnd.sun.xml.math', 'application/vnd.stardivision.math', 'application/vnd.oasis.opendocument.formula', - 'application/vnd.oasis.opendocument.database' => 'bi-file-earmark-rules', - default => 'bi-file-earmark' + 'application/vnd.oasis.opendocument.database' => 'bi-file-earmark-rules', + default => 'bi-file-earmark' }; } } @@ -275,7 +276,7 @@ if (!function_exists('parse_markdown')) { { $converter = new GithubFlavoredMarkdownConverter(['allow_unsafe_links' => false, 'max_nesting_level' => 5, 'html_input' => 'escape']); - return (string)$converter->convert($string); + return (string) $converter->convert($string); } } @@ -369,11 +370,11 @@ if (!function_exists('account_balance')) { function account_balance(Account $account): string { /** @var Carbon $date */ - $date = now(); + $date = now(); // get the date from the current session. If it's in the future, keep `now()`. /** @var Carbon $session */ - $session = clone session('end', today(config('app.timezone'))->endOfMonth()); + $session = clone session('end', today(config('app.timezone'))->endOfMonth()); if ($session->lt($date)) { $date = $session->copy(); $date->endOfDay(); @@ -381,13 +382,13 @@ if (!function_exists('account_balance')) { Log::debug(sprintf('twig balance: Call finalAccountBalance with date/time "%s"', $date->toIso8601String())); // 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized. - $info = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id]; + $info = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id]; // $info = Steam::finalAccountBalance($account, $date); $currency = Steam::getAccountCurrency($account); $primary = Amount::getPrimaryCurrency(); $convertToPrimary = Amount::convertToPrimary(); $usePrimary = $convertToPrimary && $primary->id !== $currency->id; - $currency ??= $primary; + $currency ??= $primary; $strings = []; foreach ($info as $key => $balance) { if ('balance' === $key) { @@ -454,15 +455,15 @@ if (!function_exists('print_nice_filesize')) { { // less than one GB, more than one MB if ($size < (1024 * 1024 * 2014) && $size >= (1024 * 1024)) { - return round($size / (1024 * 1024), 2) . ' MB'; + return round($size / (1024 * 1024), 2).' MB'; } // less than one MB if ($size < (1024 * 1024)) { - return round($size / 1024, 2) . ' KB'; + return round($size / 1024, 2).' KB'; } - return $size . ' bytes'; + return $size.' bytes'; } } @@ -483,11 +484,11 @@ if (!function_exists('journal_get_meta_field')) { return ''; } - return json_decode((string)$entry->data, true); + return json_decode((string) $entry->data, true); } } if (!function_exists('journal_get_meta_date')) { - function journal_get_meta_date(int $journalId, string $metaField): Carbon | CarbonInterface + function journal_get_meta_date(int $journalId, string $metaField): Carbon|CarbonInterface { /** @var null|TransactionJournalMeta $entry */ $entry = DB::table('journal_meta')->where('name', $metaField)->where('transaction_journal_id', $journalId)->whereNull('deleted_at')->first(); @@ -495,7 +496,7 @@ if (!function_exists('journal_get_meta_date')) { return today(config('app.timezone')); } - return new Carbon(json_decode((string)$entry->data, false)); + return new Carbon(json_decode((string) $entry->data, false)); } } @@ -524,14 +525,14 @@ if (!function_exists('blade_escape_js')) { return preg_replace_callback( '#[^a-zA-Z0-9,\._]#Su', static function ($matches) { - $char = $matches[0]; + $char = $matches[0]; /* * A few characters have short escape sequences in JSON and JavaScript. * Escape sequences supported only by JavaScript, not JSON, are omitted. * \" is also supported but omitted, because the resulting string is not HTML safe. */ - $short = match ($char) { + $short = match ($char) { '\\' => '\\\\', '/' => '\/', "\x08" => '\b', @@ -553,9 +554,9 @@ if (!function_exists('blade_escape_js')) { // Split characters outside the BMP into surrogate pairs // https://tools.ietf.org/html/rfc2781.html#section-2.1 - $u = $codepoint - 0x10_000; - $high = 0xD800 | ($u >> 10); - $low = 0xDC00 | ($u & 0x3FF); + $u = $codepoint - 0x10_000; + $high = 0xD800 | ($u >> 10); + $low = 0xDC00 | ($u & 0x3FF); return \sprintf('\u%04X\u%04X', $high, $low); }, diff --git a/app/Http/Controllers/Account/IndexController.php b/app/Http/Controllers/Account/IndexController.php index cc50471ef0..64dd998ebf 100644 --- a/app/Http/Controllers/Account/IndexController.php +++ b/app/Http/Controllers/Account/IndexController.php @@ -80,7 +80,7 @@ final class IndexController extends Controller $collection = $this->repository->getInactiveAccountsByType($types); $total = $collection->count(); $page = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); $inactiveCount = $this->repository->getInactiveAccountsByType($types)->count(); @@ -147,7 +147,7 @@ final class IndexController extends Controller $collection = $this->repository->getActiveAccountsByType($types); $total = $collection->count(); $page = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); $inactiveCount = $this->repository->getInactiveAccountsByType($types)->count(); diff --git a/app/Http/Controllers/Account/ShowController.php b/app/Http/Controllers/Account/ShowController.php index bd52caa976..586a03c109 100644 --- a/app/Http/Controllers/Account/ShowController.php +++ b/app/Http/Controllers/Account/ShowController.php @@ -121,7 +121,7 @@ final class ShowController extends Controller $currency = $accountCurrency ?? $this->primaryCurrency; $fStart = $start->isoFormat($this->monthAndDayFormat); $fEnd = $end->isoFormat($this->monthAndDayFormat); - $isLiability = $this->repository->isLiability($account); + $isLiability = $this->repository->isLiability($account); $subTitle = (string) trans('firefly.journals_in_period_for_account', ['name' => $account->name, 'start' => $fStart, 'end' => $fEnd]); $chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); $firstTransaction = $this->repository->oldestJournalDate($account) ?? $start; @@ -179,7 +179,7 @@ final class ShowController extends Controller 'currency' => $currency, 'today' => $today, 'periods' => $periods, - 'isLiability' => $isLiability, + 'isLiability' => $isLiability, 'subTitleIcon' => $subTitleIcon, 'groups' => $groups, 'attachments' => $attachments, @@ -215,7 +215,7 @@ final class ShowController extends Controller $start = $this->repository->oldestJournalDate($account) ?? today(config('app.timezone'))->startOfMonth(); $subTitleIcon = config('firefly.subIconsByIdentifier.'.$account->accountType->type); $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $currency = $this->repository->getAccountCurrency($account) ?? $this->primaryCurrency; $subTitle = (string) trans('firefly.all_journals_for_account', ['name' => $account->name]); diff --git a/app/Http/Controllers/Bill/IndexController.php b/app/Http/Controllers/Bill/IndexController.php index 110ea3d5bd..d4478425b2 100644 --- a/app/Http/Controllers/Bill/IndexController.php +++ b/app/Http/Controllers/Bill/IndexController.php @@ -255,7 +255,10 @@ final class IndexController extends Controller if (count($bill['paid_dates']) < count($bill['pay_dates'])) { $count = count($bill['pay_dates']) - count($bill['paid_dates']); if ($count > 0) { - $avg = bcdiv(bcadd((string) $bill['amount_min'], (string) $bill['amount_max']), '2'); + $avg = bcdiv( + bcadd((string) $bill['amount_min'], (string) $bill['amount_max']), + '2' + ); $avg = bcmul($avg, (string) $count); $sums[$groupOrder][$currencyId]['total_left_to_pay'] = bcadd($sums[$groupOrder][$currencyId]['total_left_to_pay'], $avg); Log::debug( diff --git a/app/Http/Controllers/Bill/ShowController.php b/app/Http/Controllers/Bill/ShowController.php index 0c93f487f0..eb59fcda43 100644 --- a/app/Http/Controllers/Bill/ShowController.php +++ b/app/Http/Controllers/Bill/ShowController.php @@ -130,7 +130,7 @@ final class ShowController extends Controller $end = session('end'); $year = $start->year; $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $yearAverage = $this->repository->getYearAverage($bill, $start); $overallAverage = $this->repository->getOverallAverage($bill); diff --git a/app/Http/Controllers/Budget/BudgetLimitController.php b/app/Http/Controllers/Budget/BudgetLimitController.php index de7337738f..04d75cd738 100644 --- a/app/Http/Controllers/Budget/BudgetLimitController.php +++ b/app/Http/Controllers/Budget/BudgetLimitController.php @@ -198,7 +198,13 @@ final class BudgetLimitController extends Controller if ($request->expectsJson()) { $array = $limit->toArray(); // add some extra metadata: - $spentArr = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection()->push($budget), $currency); + $spentArr = $this->opsRepository->sumExpenses( + $limit->start_date, + $limit->end_date, + null, + new Collection()->push($budget), + $currency + ); $array['spent'] = $spentArr[$currency->id]['sum'] ?? '0'; $array['left_formatted'] = Amount::formatAnything($limit->transactionCurrency, bcadd($array['spent'], (string) $array['amount'])); $array['amount_formatted'] = Amount::formatAnything($limit->transactionCurrency, $limit['amount']); diff --git a/app/Http/Controllers/Budget/IndexController.php b/app/Http/Controllers/Budget/IndexController.php index 215ebbd484..d40d4432a3 100644 --- a/app/Http/Controllers/Budget/IndexController.php +++ b/app/Http/Controllers/Budget/IndexController.php @@ -284,7 +284,10 @@ final class IndexController extends Controller if (array_key_exists($currency->id, $spentArr) && array_key_exists('sum', $spentArr[$currency->id])) { $array['spent'][$currency->id]['spent'] = $spentArr[$currency->id]['sum']; - $array['spent'][$currency->id]['spent_outside'] = Steam::negative(bcsub($spentInLimits[$currency->id], $spentArr[$currency->id]['sum'])); + $array['spent'][$currency->id]['spent_outside'] = Steam::negative(bcsub( + $spentInLimits[$currency->id], + $spentArr[$currency->id]['sum'] + )); $array['spent'][$currency->id]['currency_id'] = $currency->id; $array['spent'][$currency->id]['currency_symbol'] = $currency->symbol; $array['spent'][$currency->id]['currency_decimal_places'] = $currency->decimal_places; diff --git a/app/Http/Controllers/Budget/ShowController.php b/app/Http/Controllers/Budget/ShowController.php index 62db3e127d..1b7e090cf4 100644 --- a/app/Http/Controllers/Budget/ShowController.php +++ b/app/Http/Controllers/Budget/ShowController.php @@ -97,7 +97,7 @@ final class ShowController extends Controller $firstDate = $first instanceof TransactionJournal ? $first->date : $start; $periods = $this->getNoModelPeriodOverview('budget', $firstDate, $end); $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; /** @var GroupCollectorInterface $collector */ @@ -132,7 +132,7 @@ final class ShowController extends Controller $start = $first instanceof TransactionJournal ? $first->date : new Carbon(); $end = today(config('app.timezone')); $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; /** @var GroupCollectorInterface $collector */ @@ -166,7 +166,7 @@ final class ShowController extends Controller $allStart = session('first', today(config('app.timezone'))->startOfYear()); $allEnd = today(); $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $limits = $this->getLimits($budget, $allStart, $allEnd); $repetition = null; @@ -216,7 +216,7 @@ final class ShowController extends Controller $currencySymbol = $budgetLimit->transactionCurrency->symbol; $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $subTitle = trans('firefly.budget_in_period', [ 'name' => $budget->name, diff --git a/app/Http/Controllers/Category/IndexController.php b/app/Http/Controllers/Category/IndexController.php index 6e7ecf9f15..3382848bed 100644 --- a/app/Http/Controllers/Category/IndexController.php +++ b/app/Http/Controllers/Category/IndexController.php @@ -71,7 +71,7 @@ final class IndexController extends Controller public function index(Request $request): Factory|\Illuminate\Contracts\View\View { $page = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $collection = $this->repository->getCategories(); $total = $collection->count(); diff --git a/app/Http/Controllers/Category/NoCategoryController.php b/app/Http/Controllers/Category/NoCategoryController.php index 0146ee30f1..9ade0705c6 100644 --- a/app/Http/Controllers/Category/NoCategoryController.php +++ b/app/Http/Controllers/Category/NoCategoryController.php @@ -85,7 +85,7 @@ final class NoCategoryController extends Controller /** @var Carbon $start */ /** @var Carbon $end */ $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $subTitle = trans('firefly.without_category_between', [ 'start' => $start->isoFormat($this->monthAndDayFormat), @@ -135,7 +135,7 @@ final class NoCategoryController extends Controller $end = null; $periods = new Collection(); $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; Log::debug('Start of noCategory()'); $subTitle = (string) trans('firefly.all_journals_without_category'); diff --git a/app/Http/Controllers/Category/ShowController.php b/app/Http/Controllers/Category/ShowController.php index c9e3b0ecfa..1275e96224 100644 --- a/app/Http/Controllers/Category/ShowController.php +++ b/app/Http/Controllers/Category/ShowController.php @@ -84,7 +84,7 @@ final class ShowController extends Controller /** @var Carbon $end */ $subTitleIcon = 'bi-bookmark'; $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $attachments = $this->repository->getAttachments($category); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $oldest = $this->repository->firstUseDate($category) ?? today(config('app.timezone'))->startOfYear(); @@ -136,7 +136,7 @@ final class ShowController extends Controller // default values: $subTitleIcon = 'bi-bookmark'; $page = (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $start = null; $end = null; diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index ad724137dc..f4b32fe5c5 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -539,7 +539,13 @@ final class BudgetController extends Controller } // get spent amount in this period for this currency. - $sum = $this->opsRepository->sumExpenses($currentStart, $currentEnd, $accounts, new Collection()->push($budget), $currency); + $sum = $this->opsRepository->sumExpenses( + $currentStart, + $currentEnd, + $accounts, + new Collection()->push($budget), + $currency + ); $amount = Steam::positive($sum[$currency->id]['sum'] ?? '0'); $chartData[0]['entries'][$title] = Steam::bcround($amount, $currency->decimal_places); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 9fe629642b..cf55743477 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -74,13 +74,14 @@ abstract class Controller extends BaseController { // is site a demo site? try { - $isDemoSiteConfig = AppConfiguration::get('is_demo_site', config('firefly.configuration.is_demo_site', false)); - } catch(FireflyException $e) { + $isDemoSiteConfig = AppConfiguration::get('is_demo_site', config('firefly.configuration.is_demo_site', false)); + } catch (FireflyException $e) { // if this breaks, just stop right here. Log::error($e->getMessage()); + return; } - $isDemoSite = (bool) $isDemoSiteConfig->data; + $isDemoSite = (bool) $isDemoSiteConfig->data; View::share('IS_DEMO_SITE', $isDemoSite); View::share('DEMO_USERNAME', config('firefly.demo_username')); View::share('DEMO_PASSWORD', config('firefly.demo_password')); @@ -88,21 +89,24 @@ abstract class Controller extends BaseController View::share('FF_BUILD_TIME', config('firefly.build_time')); // this breaks when running < PHP 8.5 and is totally intentional. - $input = ' James is cool'; - $output = $input + $input = ' James is cool'; + $output = $input |> trim(...) |> (fn (string $string) => str_replace(' ', '-', $string)) |> (fn (string $string) => str_replace(['.', '/', '…'], '', $string)) |> strtolower(...); // is webhooks enabled? - View::share('featuringWebhooks', true === config('firefly.feature_flags.webhooks') && true === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data); + View::share( + 'featuringWebhooks', + true === config('firefly.feature_flags.webhooks') && true === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data + ); // is currency exchange enabled? View::share('featuringCer', true === AppConfiguration::get('enable_exchange_rates', config('cer.enabled'))->data); // share custom auth guard info. - $authGuard = config('firefly.authentication_guard'); - $logoutUrl = config('firefly.custom_logout_url'); + $authGuard = config('firefly.authentication_guard'); + $logoutUrl = config('firefly.custom_logout_url'); // overrule v2 layout back to v1. @@ -116,15 +120,15 @@ abstract class Controller extends BaseController View::share('logoutUrl', $logoutUrl); // upload size - $maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize')); - $maxPostSize = Steam::phpBytes(ini_get('post_max_size')); - $uploadSize = min($maxFileSize, $maxPostSize); + $maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize')); + $maxPostSize = Steam::phpBytes(ini_get('post_max_size')); + $uploadSize = min($maxFileSize, $maxPostSize); View::share('uploadSize', $uploadSize); // share is alpha, is beta - $isAlpha = false; - $isBeta = false; - $isDevelop = false; + $isAlpha = false; + $isBeta = false; + $isDevelop = false; if (str_contains((string) config('firefly.version'), 'alpha')) { $isAlpha = true; } diff --git a/app/Http/Controllers/Json/RuleController.php b/app/Http/Controllers/Json/RuleController.php index ac4c160633..df6d67b946 100644 --- a/app/Http/Controllers/Json/RuleController.php +++ b/app/Http/Controllers/Json/RuleController.php @@ -51,7 +51,13 @@ final class RuleController extends Controller } try { - $view = view('rules.partials.action', ['actions' => $actions, 'count' => $count,'oldAction' => null, 'oldValue' => null,'oldChecked' => null])->render(); + $view = view('rules.partials.action', [ + 'actions' => $actions, + 'count' => $count, + 'oldAction' => null, + 'oldValue' => null, + 'oldChecked' => null, + ])->render(); } catch (Throwable $e) { Log::error(sprintf('Cannot render rules.partials.action: %s', $e->getMessage())); Log::error($e->getTraceAsString()); @@ -81,7 +87,14 @@ final class RuleController extends Controller asort($triggers); try { - $view = view('rules.partials.trigger', ['triggers' => $triggers, 'count' => $count,'oldTrigger' => null, 'oldProhibited' => null,'oldValue' => null,'oldChecked' =>null])->render(); + $view = view('rules.partials.trigger', [ + 'triggers' => $triggers, + 'count' => $count, + 'oldTrigger' => null, + 'oldProhibited' => null, + 'oldValue' => null, + 'oldChecked' => null, + ])->render(); } catch (Throwable $e) { Log::error(sprintf('Cannot render rules.partials.trigger: %s', $e->getMessage())); Log::error($e->getTraceAsString()); diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index e968e43c1f..dc94b02336 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -128,9 +128,8 @@ final class PreferencesController extends Controller // missing fields will give an error unless set, so: $tjOptionalFields['external_url'] ??= false; - $tjOptionalFields['location'] ??= false; - $tjOptionalFields['links'] ??= false; - + $tjOptionalFields['location'] ??= false; + $tjOptionalFields['links'] ??= false; $availableDarkModes = config('firefly.available_dark_modes'); diff --git a/app/Http/Controllers/Recurring/IndexController.php b/app/Http/Controllers/Recurring/IndexController.php index 8d77470286..aa3cd963ac 100644 --- a/app/Http/Controllers/Recurring/IndexController.php +++ b/app/Http/Controllers/Recurring/IndexController.php @@ -81,7 +81,7 @@ final class IndexController extends Controller public function index(Request $request): Factory|\Illuminate\Contracts\View\View { $page = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page'); - $page = min(max(1, $page), 2 ** 16); + $page = min(max(1, $page), 2 ** 16); $pageSize = (int) Preferences::get('listPageSize', 50)->data; $collection = $this->repository->get(); $today = today(config('app.timezone')); diff --git a/app/Http/Controllers/Report/BalanceController.php b/app/Http/Controllers/Report/BalanceController.php index 286d1e0622..ad7afe761e 100644 --- a/app/Http/Controllers/Report/BalanceController.php +++ b/app/Http/Controllers/Report/BalanceController.php @@ -134,8 +134,9 @@ final class BalanceController extends Controller // get transactions in budget } -// echo '
';
-//        print_r($report);exit;
+
+        //        echo '
';
+        //        print_r($report);exit;
         try {
             $result = view('reports.partials.balance', ['report' => $report])->render();
         } catch (Throwable $e) {
diff --git a/app/Http/Controllers/Report/BudgetController.php b/app/Http/Controllers/Report/BudgetController.php
index 766cbb14f6..42b38a814b 100644
--- a/app/Http/Controllers/Report/BudgetController.php
+++ b/app/Http/Controllers/Report/BudgetController.php
@@ -353,9 +353,9 @@ final class BudgetController extends Controller
      */
     public function topExpenses(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
     {
-        $spent   = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets);
+        $spent           = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets);
         $incomeTopLength = 0;
-        $result  = [];
+        $result          = [];
         foreach ($spent as $currency) {
             foreach ($currency['budgets'] as $budget) {
                 foreach ($budget['transaction_journals'] as $journal) {
@@ -376,16 +376,16 @@ final class BudgetController extends Controller
                         'budget_name'              => $budget['name'],
                     ];
                 }
-                $incomeTopLength++;
+                ++$incomeTopLength;
             }
         }
         // sort by amount_float
         // sort temp array by amount.
-        $amounts = array_column($result, 'amount_float');
+        $amounts         = array_column($result, 'amount_float');
         array_multisort($amounts, SORT_ASC, $result);
 
         try {
-            $result = view('reports.budget.partials.top-expenses', ['result' => $result, 'incomeTopLength'=>$incomeTopLength])->render();
+            $result = view('reports.budget.partials.top-expenses', ['result' => $result, 'incomeTopLength' => $incomeTopLength])->render();
         } catch (Throwable $e) {
             Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage()));
             $result = sprintf('Could not render view: %s', $e->getMessage());
diff --git a/app/Http/Controllers/Report/CategoryController.php b/app/Http/Controllers/Report/CategoryController.php
index 834473d94b..e0466f00cc 100644
--- a/app/Http/Controllers/Report/CategoryController.php
+++ b/app/Http/Controllers/Report/CategoryController.php
@@ -604,7 +604,7 @@ final class CategoryController extends Controller
     {
         $incomeTopLength = 0;
         // chart properties for cache:
-        $cache     = new CacheProperties();
+        $cache           = new CacheProperties();
         $cache->addProperty($start);
         $cache->addProperty($end);
         $cache->addProperty('category-report');
@@ -614,15 +614,15 @@ final class CategoryController extends Controller
         }
 
         /** @var CategoryReportGenerator $generator */
-        $generator = app(CategoryReportGenerator::class);
+        $generator       = app(CategoryReportGenerator::class);
         $generator->setAccounts($accounts);
         $generator->setStart($start);
         $generator->setEnd($end);
         $generator->operations();
-        $report    = $generator->getReport();
+        $report          = $generator->getReport();
 
         try {
-            $result = view('reports.partials.categories', ['report' => $report,'incomeTopLength' => $incomeTopLength])->render();
+            $result = view('reports.partials.categories', ['report' => $report, 'incomeTopLength' => $incomeTopLength])->render();
             $cache->store($result);
         } catch (Throwable $e) {
             Log::error(sprintf('Could not render category::expenses: %s', $e->getMessage()));
@@ -641,12 +641,12 @@ final class CategoryController extends Controller
      */
     public function topExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
     {
-        $spent   = $this->opsRepository->listExpenses($start, $end, $accounts, $categories);
+        $spent           = $this->opsRepository->listExpenses($start, $end, $accounts, $categories);
         $incomeTopLength = 0;
-        $result  = [];
+        $result          = [];
         foreach ($spent as $currency) {
             foreach ($currency['categories'] as $category) {
-                $incomeTopLength++;
+                ++$incomeTopLength;
                 foreach ($category['transaction_journals'] as $journal) {
                     $result[] = [
                         'description'              => $journal['description'],
@@ -669,7 +669,7 @@ final class CategoryController extends Controller
         }
         // sort by amount_float
         // sort temp array by amount.
-        $amounts = array_column($result, 'amount_float');
+        $amounts         = array_column($result, 'amount_float');
         array_multisort($amounts, SORT_ASC, $result);
 
         try {
diff --git a/app/Http/Controllers/Report/OperationsController.php b/app/Http/Controllers/Report/OperationsController.php
index 8a4b7692eb..04c70b0c3e 100644
--- a/app/Http/Controllers/Report/OperationsController.php
+++ b/app/Http/Controllers/Report/OperationsController.php
@@ -65,7 +65,7 @@ final class OperationsController extends Controller
     public function expenses(Collection $accounts, Carbon $start, Carbon $end)
     {
         // chart properties for cache:
-        $cache  = new CacheProperties();
+        $cache           = new CacheProperties();
         $cache->addProperty($start);
         $cache->addProperty($end);
         $cache->addProperty('expense-report');
@@ -73,9 +73,9 @@ final class OperationsController extends Controller
         if ($cache->has()) {
             return $cache->get();
         }
-        $report = $this->tasker->getExpenseReport($start, $end, $accounts);
-        $type   = 'expense-entry';
-        $incomeTopLength= count($report['accounts']);
+        $report          = $this->tasker->getExpenseReport($start, $end, $accounts);
+        $type            = 'expense-entry';
+        $incomeTopLength = count($report['accounts']);
 
         try {
             $result = view('reports.partials.income-expenses', ['report' => $report, 'type' => $type, 'incomeTopLength' => $incomeTopLength])->render();
diff --git a/app/Http/Controllers/Report/TagController.php b/app/Http/Controllers/Report/TagController.php
index d6e63739cd..9b9aec606b 100644
--- a/app/Http/Controllers/Report/TagController.php
+++ b/app/Http/Controllers/Report/TagController.php
@@ -446,12 +446,12 @@ final class TagController extends Controller
      */
     public function topExpenses(Collection $accounts, Collection $tags, Carbon $start, Carbon $end)
     {
-        $spent   = $this->opsRepository->listExpenses($start, $end, $accounts, $tags);
-        $result  = [];
+        $spent           = $this->opsRepository->listExpenses($start, $end, $accounts, $tags);
+        $result          = [];
         $incomeTopLength = 0;
         foreach ($spent as $currency) {
             foreach ($currency['tags'] as $tag) {
-                $incomeTopLength++;
+                ++$incomeTopLength;
                 foreach ($tag['transaction_journals'] as $journal) {
                     $result[] = [
                         'description'              => $journal['description'],
@@ -474,7 +474,7 @@ final class TagController extends Controller
         }
         // sort by amount_float
         // sort temp array by amount.
-        $amounts = array_column($result, 'amount_float');
+        $amounts         = array_column($result, 'amount_float');
         array_multisort($amounts, SORT_ASC, $result);
 
         try {
diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php
index cec1b553dc..ec80c215a7 100644
--- a/app/Http/Controllers/SearchController.php
+++ b/app/Http/Controllers/SearchController.php
@@ -67,7 +67,7 @@ final class SearchController extends Controller
         }
         $fullQuery        = (string) $fullQuery;
         $page             = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page');
-        $page   = min(max(1, $page), 2 ** 16);
+        $page             = min(max(1, $page), 2 ** 16);
         $ruleId           = (int) $request->input('rule');
         $ruleChanged      = false;
 
@@ -117,7 +117,7 @@ final class SearchController extends Controller
         }
         $fullQuery  = (string) $entry;
         $page       = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page');
-        $page   = min(max(1, $page), 2 ** 16);
+        $page       = min(max(1, $page), 2 ** 16);
 
         $searcher->parseQuery($fullQuery);
 
diff --git a/app/Http/Controllers/System/InstallController.php b/app/Http/Controllers/System/InstallController.php
index 6f705715ac..13085f71f6 100644
--- a/app/Http/Controllers/System/InstallController.php
+++ b/app/Http/Controllers/System/InstallController.php
@@ -41,6 +41,7 @@ use Illuminate\Support\Facades\Log;
 use Illuminate\View\View;
 use Laravel\Passport\Passport;
 use phpseclib3\Crypt\RSA;
+
 use function Safe\file_put_contents;
 
 /**
@@ -55,37 +56,37 @@ final class InstallController extends Controller
     public const string FORBIDDEN_ERROR = 'Internal PHP function "proc_close" is disabled for your installation. Auto-migration is not possible.';
     public const string OTHER_ERROR     = 'An unknown error prevented Firefly III from executing the upgrade commands. Sorry.';
 
-    private string $lastError = '';
+    private string $lastError           = '';
     // empty on purpose.
-    private array $upgradeCommands
-        = [
-            // there are 5 initial commands
-            // Check 4 places: InstallController, Docker image, UpgradeDatabase, composer.json
-            'firefly-iii:create-database'        => [],
-            'migrate'                            => ['--seed' => true, '--force' => true],
-            'generate-keys'                      => [], // an exception :(
-            'firefly-iii:upgrade-database'       => [],
-            'firefly-iii:set-latest-version'     => ['--james-is-cool' => true],
-            'firefly-iii:verify-security-alerts' => [],
-        ];
+    private array $upgradeCommands      = [
+        // there are 5 initial commands
+        // Check 4 places: InstallController, Docker image, UpgradeDatabase, composer.json
+        'firefly-iii:create-database'        => [],
+        'migrate'                            => ['--seed' => true, '--force' => true],
+        'generate-keys'                      => [], // an exception :(
+        'firefly-iii:upgrade-database'       => [],
+        'firefly-iii:set-latest-version'     => ['--james-is-cool' => true],
+        'firefly-iii:verify-security-alerts' => [],
+    ];
 
     /**
      * Show index.
      *
      * @return Factory|View
      */
-    public function index(): Factory | \Illuminate\Contracts\View\View
+    public function index(): Factory|\Illuminate\Contracts\View\View
     {
         if ($this->hasNoTables() || $this->isOldVersionInstalled()) {
             app('view')->share('FF_VERSION', config('firefly.version'));
 
             // index will set FF3 version.
             try {
-                AppConfiguration::set('ff3_version', (string)config('firefly.version'));
-                AppConfiguration::set('ff3_build_time', (int)config('firefly.build_time'));
+                AppConfiguration::set('ff3_version', (string) config('firefly.version'));
+                AppConfiguration::set('ff3_build_time', (int) config('firefly.build_time'));
             } catch (FireflyException $e) {
                 Log::warning($e->getMessage());
             }
+
             return view('install.index');
         }
 
@@ -98,7 +99,7 @@ final class InstallController extends Controller
     public function keys(): void
     {
         if ($this->hasNoTables() || $this->isOldVersionInstalled()) {
-            $key = RSA::createKey(4096);
+            $key                      = RSA::createKey(4096);
 
             [$publicKey, $privateKey] = [Passport::keyPath('oauth-public.key'), Passport::keyPath('oauth-private.key')];
 
@@ -106,7 +107,7 @@ final class InstallController extends Controller
                 return;
             }
 
-            file_put_contents($publicKey, (string)$key->getPublicKey());
+            file_put_contents($publicKey, (string) $key->getPublicKey());
             file_put_contents($privateKey, $key->toString('PKCS1'));
         }
     }
@@ -114,14 +115,14 @@ final class InstallController extends Controller
     public function runCommand(Request $request): JsonResponse
     {
         if ($this->hasNoTables() || $this->isOldVersionInstalled()) {
-            $requestIndex = (int)$request->input('index');
+            $requestIndex = (int) $request->input('index');
             $response     = ['hasNextCommand' => false, 'done' => true, 'previous' => null, 'error' => false, 'errorMessage' => null];
 
             Log::debug(sprintf('Will now run commands. Request index is %d', $requestIndex));
-            $indexes = array_keys($this->upgradeCommands);
+            $indexes      = array_keys($this->upgradeCommands);
             if (array_key_exists($requestIndex, $indexes)) {
-                $command    = $indexes[$requestIndex];
-                $parameters = $this->upgradeCommands[$command];
+                $command                    = $indexes[$requestIndex];
+                $parameters                 = $this->upgradeCommands[$command];
                 Log::debug(sprintf('Will now execute command "%s" with parameters', $command), $parameters);
 
                 try {
diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php
index b3c9ae946c..a6a780259f 100644
--- a/app/Http/Controllers/TagController.php
+++ b/app/Http/Controllers/TagController.php
@@ -298,7 +298,7 @@ final class TagController extends Controller
         // default values:
         $subTitleIcon = 'bi-tag';
         $page         = (int) $request->input('page');
-        $page   = min(max(1, $page), 2 ** 16);
+        $page         = min(max(1, $page), 2 ** 16);
         $pageSize     = (int) Preferences::get('listPageSize', 50)->data;
         $periods      = [];
         $subTitle     = (string) trans('firefly.all_journals_for_tag', ['tag' => $tag->tag]);
diff --git a/app/Http/Controllers/Transaction/IndexController.php b/app/Http/Controllers/Transaction/IndexController.php
index b1bea92fe1..763f729843 100644
--- a/app/Http/Controllers/Transaction/IndexController.php
+++ b/app/Http/Controllers/Transaction/IndexController.php
@@ -152,7 +152,7 @@ final class IndexController extends Controller
         $subTitleIcon = config('firefly.transactionIconsByType.'.$objectType);
         $types        = config('firefly.transactionTypesByType.'.$objectType);
         $page         = (int) $request->input('page');
-        $page   = min(max(1, $page), 2 ** 16);
+        $page         = min(max(1, $page), 2 ** 16);
         $pageSize     = (int) Preferences::get('listPageSize', 50)->data;
         $path         = route('transactions.index.all', [$objectType]);
         $first        = $this->repository->firstNull();
diff --git a/app/Http/Controllers/Transaction/ShowController.php b/app/Http/Controllers/Transaction/ShowController.php
index 6f4d1c3f17..d7b3b18ffd 100644
--- a/app/Http/Controllers/Transaction/ShowController.php
+++ b/app/Http/Controllers/Transaction/ShowController.php
@@ -37,7 +37,6 @@ use FireflyIII\User;
 use Illuminate\Contracts\View\Factory;
 use Illuminate\Http\JsonResponse;
 use Illuminate\View\View;
-
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
 /**
diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php
index 1f10dbd174..7bb316c38f 100644
--- a/app/Http/Controllers/TransactionCurrency/IndexController.php
+++ b/app/Http/Controllers/TransactionCurrency/IndexController.php
@@ -72,7 +72,7 @@ final class IndexController extends Controller
         /** @var User $user */
         $user       = auth()->user();
         $page       = 0 === (int) $request->input('page') ? 1 : (int) $request->input('page');
-        $page   = min(max(1, $page), 2 ** 16);
+        $page       = min(max(1, $page), 2 ** 16);
         $pageSize   = (int) Preferences::get('listPageSize', 50)->data;
         $collection = $this->repository->getAll();
 
diff --git a/app/Http/Middleware/Installer.php b/app/Http/Middleware/Installer.php
index 31f1dc579a..39507685a5 100644
--- a/app/Http/Middleware/Installer.php
+++ b/app/Http/Middleware/Installer.php
@@ -74,6 +74,4 @@ class Installer
         // update firefly version
         return $next($request);
     }
-
-
 }
diff --git a/app/Jobs/CreateAutoBudgetLimits.php b/app/Jobs/CreateAutoBudgetLimits.php
index 93cf5e9364..d61661dd50 100644
--- a/app/Jobs/CreateAutoBudgetLimits.php
+++ b/app/Jobs/CreateAutoBudgetLimits.php
@@ -122,7 +122,13 @@ class CreateAutoBudgetLimits implements ShouldQueue
         // if has one, calculate expenses and use that as a base.
         $repository      = app(OperationsRepositoryInterface::class);
         $repository->setUser($autoBudget->budget->user);
-        $spent           = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection()->push($autoBudget->budget), $autoBudget->transactionCurrency);
+        $spent           = $repository->sumExpenses(
+            $previousStart,
+            $previousEnd,
+            null,
+            new Collection()->push($autoBudget->budget),
+            $autoBudget->transactionCurrency
+        );
         $currencyId      = $autoBudget->transaction_currency_id;
         $spentAmount     = $spent[$currencyId]['sum'] ?? '0';
         Log::debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount));
@@ -212,7 +218,13 @@ class CreateAutoBudgetLimits implements ShouldQueue
         // if has one, calculate expenses and use that as a base.
         $repository    = app(OperationsRepositoryInterface::class);
         $repository->setUser($autoBudget->budget->user);
-        $spent         = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection()->push($autoBudget->budget), $autoBudget->transactionCurrency);
+        $spent         = $repository->sumExpenses(
+            $previousStart,
+            $previousEnd,
+            null,
+            new Collection()->push($autoBudget->budget),
+            $autoBudget->transactionCurrency
+        );
         $currencyId    = $autoBudget->transaction_currency_id;
         $spentAmount   = $spent[$currencyId]['sum'] ?? '0';
         Log::debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount));
diff --git a/app/Support/AppConfiguration.php b/app/Support/AppConfiguration.php
index 6345872719..9ccf721331 100644
--- a/app/Support/AppConfiguration.php
+++ b/app/Support/AppConfiguration.php
@@ -61,7 +61,7 @@ class AppConfiguration
         try {
             /** @var null|Configuration $config */
             $config = Configuration::query()->where('name', $name)->first(['id', 'name', 'data']);
-        } catch (Exception|QueryException|FireflyException $e) {
+        } catch (Exception|FireflyException|QueryException $e) {
             throw new FireflyException(sprintf('Could not poll the database: %s', $e->getMessage()), 0, $e);
         }
 
diff --git a/app/Support/ExpandedForm.php b/app/Support/ExpandedForm.php
index d1ef179f69..79227827ca 100644
--- a/app/Support/ExpandedForm.php
+++ b/app/Support/ExpandedForm.php
@@ -100,15 +100,14 @@ class ExpandedForm
 
         try {
             $html = view('form.checkbox', [
-                'classes' => $classes,
-                'name'    => $name,
-                'label'   => $label,
-                'value'   => $value,
-                'options' => $options,
+                'classes'      => $classes,
+                'name'         => $name,
+                'label'        => $label,
+                'value'        => $value,
+                'options'      => $options,
                 'inputClasses' => $inputClasses,
             ])->render();
         } catch (Throwable $e) {
-
             Log::debug(sprintf('Could not render checkbox(): %s', $e->getMessage()));
             $html = 'Could not render checkbox.';
 
@@ -165,6 +164,23 @@ class ExpandedForm
         return $html;
     }
 
+    /**
+     * @throws FireflyException
+     */
+    public function hidden(string $name, mixed $value): string
+    {
+        try {
+            $html = view('form.hidden', ['name' => $name, 'value' => $value])->render();
+        } catch (Throwable $e) {
+            Log::debug(sprintf('Could not render hidden(): %s', $e->getMessage()));
+            $html = sprintf('Could not render hidden: %s', $e->getMessage());
+
+            throw new FireflyException($html, 0, $e);
+        }
+
+        return $html;
+    }
+
     /**
      * @param mixed $value
      *
@@ -325,23 +341,6 @@ class ExpandedForm
         return $html;
     }
 
-    /**
-     * @throws FireflyException
-     */
-    public function hidden(string $name, mixed $value): string
-    {
-        try {
-            $html = view('form.hidden', ['name' => $name, 'value' => $value])->render();
-        } catch (Throwable $e) {
-            Log::debug(sprintf('Could not render hidden(): %s', $e->getMessage()));
-            $html = sprintf('Could not render hidden: %s', $e->getMessage());
-
-            throw new FireflyException($html, 0, $e);
-        }
-
-        return $html;
-    }
-
     /**
      * @throws FireflyException
      */
diff --git a/app/Support/Export/ExportDataGenerator.php b/app/Support/Export/ExportDataGenerator.php
index f361cf8c12..ce7a2d0d8d 100644
--- a/app/Support/Export/ExportDataGenerator.php
+++ b/app/Support/Export/ExportDataGenerator.php
@@ -286,7 +286,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv         = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper     = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -357,7 +357,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv        = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper    = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -418,7 +418,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv         = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper     = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -465,7 +465,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv        = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper    = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -547,7 +547,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv          = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper      = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -716,7 +716,7 @@ class ExportDataGenerator
         }
         // load the CSV document from a string
         $csv            = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper        = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -865,7 +865,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv       = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper   = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -923,7 +923,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv      = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper  = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
@@ -1121,7 +1121,7 @@ class ExportDataGenerator
 
         // load the CSV document from a string
         $csv        = Writer::fromString();
-        $escaper = new EscapeFormula();
+        $escaper    = new EscapeFormula();
         $csv->addFormatter($escaper->escapeRecord(...));
 
         // insert the header
diff --git a/app/Support/Form/FormSupport.php b/app/Support/Form/FormSupport.php
index 916a72f746..181d2c38b8 100644
--- a/app/Support/Form/FormSupport.php
+++ b/app/Support/Form/FormSupport.php
@@ -139,19 +139,6 @@ trait FormSupport
         return today(config('app.timezone'));
     }
 
-    protected function getHolderClasses(string $name): string
-    {
-        // Get errors from session:
-        /** @var null|MessageBag $errors */
-        $errors = session('errors');
-
-        if (null !== $errors && $errors->has($name)) {
-            return 'has-error has-feedback';
-        }
-
-        return 'has-error has-feedback';
-    }
-
     protected function getErrorClassesForCheckbox(string $name): string
     {
         // Get errors from session:
@@ -165,6 +152,19 @@ trait FormSupport
         return 'form-check-input';
     }
 
+    protected function getHolderClasses(string $name): string
+    {
+        // Get errors from session:
+        /** @var null|MessageBag $errors */
+        $errors = session('errors');
+
+        if (null !== $errors && $errors->has($name)) {
+            return 'has-error has-feedback';
+        }
+
+        return 'has-error has-feedback';
+    }
+
     protected function label(string $name, ?array $options = null): string
     {
         $options ??= [];
diff --git a/app/Support/Http/Controllers/AugumentData.php b/app/Support/Http/Controllers/AugumentData.php
index a3a940b1ba..a507156873 100644
--- a/app/Support/Http/Controllers/AugumentData.php
+++ b/app/Support/Http/Controllers/AugumentData.php
@@ -222,7 +222,14 @@ trait AugumentData
                 $currentEnd->addMonth();
             }
             // primary currency amount.
-            $expenses        = $opsRepository->sumExpenses($currentStart, $currentEnd, null, $budgetCollection, $entry->transactionCurrency, $this->convertToPrimary);
+            $expenses        = $opsRepository->sumExpenses(
+                $currentStart,
+                $currentEnd,
+                null,
+                $budgetCollection,
+                $entry->transactionCurrency,
+                $this->convertToPrimary
+            );
             $spent           = $expenses[$currency->id]['sum'] ?? '0';
             $entry->pc_spent = $spent;
 
diff --git a/app/Support/JsonApi/Enrichments/RecurringEnrichment.php b/app/Support/JsonApi/Enrichments/RecurringEnrichment.php
index d0c09bf027..2428353cb0 100644
--- a/app/Support/JsonApi/Enrichments/RecurringEnrichment.php
+++ b/app/Support/JsonApi/Enrichments/RecurringEnrichment.php
@@ -354,7 +354,11 @@ class RecurringEnrichment implements EnrichmentInterface
 
         /** @var RecurrenceRepetition $repetition */
         foreach ($set as $repetition) {
-            $recurrence                               = $this->collection->filter(static fn (Recurrence $item): bool => (int) $item->id === (int) $repetition->recurrence_id)->first();
+            $recurrence                               = $this->collection->filter(
+                static fn (Recurrence $item): bool => (int) $item->id === (int) $repetition->recurrence_id
+            )
+                ->first()
+            ;
             $fromDate                                 = clone ($recurrence->latest_date ?? $recurrence->first_date);
             $recurrenceId                             = (int) $repetition->recurrence_id;
             $repId                                    = (int) $repetition->id;
diff --git a/app/Support/System/IsOldVersion.php b/app/Support/System/IsOldVersion.php
index d83816574e..dd60451d3e 100644
--- a/app/Support/System/IsOldVersion.php
+++ b/app/Support/System/IsOldVersion.php
@@ -47,8 +47,8 @@ trait IsOldVersion
             return 0;
         }
 
-        $currentDate = Carbon::createFromFormat('!Y-m-d', $currentParts[1]);
-        $latestDate  = Carbon::createFromFormat('!Y-m-d', $latestParts[1]);
+        $currentDate  = Carbon::createFromFormat('!Y-m-d', $currentParts[1]);
+        $latestDate   = Carbon::createFromFormat('!Y-m-d', $latestParts[1]);
 
         if ($currentDate->lt($latestDate)) {
             Log::debug(sprintf('This current version is older, current = %s, latest version %s.', $current, $latest));
@@ -71,16 +71,16 @@ trait IsOldVersion
     protected function isOldVersionInstalled(): bool
     {
         // version compare thing.
-        $configBuildTime = (int)config('firefly.build_time');
-        $dbBuildTime     = (int)AppConfiguration::getFresh('ff3_build_time', 123)->data;
+        $configBuildTime = (int) config('firefly.build_time');
+        $dbBuildTime     = (int) AppConfiguration::getFresh('ff3_build_time', 123)->data;
         $configTime      = Carbon::createFromTimestamp($configBuildTime, config('app.timezone'));
         $dbTime          = Carbon::createFromTimestamp($dbBuildTime, config('app.timezone'));
         if ($dbBuildTime < $configBuildTime) {
             Log::warning(sprintf(
-                             'Your database was last managed by an older version of Firefly III (I see %s, I expect %s). Redirect to migrate routine.',
-                             $dbTime->format('Y-m-d H:i:s'),
-                             $configTime->format('Y-m-d H:i:s')
-                         ));
+                'Your database was last managed by an older version of Firefly III (I see %s, I expect %s). Redirect to migrate routine.',
+                $dbTime->format('Y-m-d H:i:s'),
+                $configTime->format('Y-m-d H:i:s')
+            ));
 
             return true;
         }
diff --git a/app/Support/Twig/General.php b/app/Support/Twig/General.php
index 1eb64898d8..e7b0ba8fff 100644
--- a/app/Support/Twig/General.php
+++ b/app/Support/Twig/General.php
@@ -39,6 +39,7 @@ use Override;
 use Twig\Extension\AbstractExtension;
 use Twig\TwigFilter;
 use Twig\TwigFunction;
+
 use function Safe\parse_url;
 
 /**
@@ -103,9 +104,9 @@ class General extends AbstractExtension
             'activeRoutePartialObjectType',
             static function (array $context): string {
                 [, $route, $objectType] = func_get_args();
-                $activeObjectType = $context['objectType'] ?? false;
+                $activeObjectType       = $context['objectType'] ?? false;
 
-                if ($objectType === $activeObjectType && false !== stripos((string)Route::getCurrentRoute()->getName(), (string)$route)) {
+                if ($objectType === $activeObjectType && false !== stripos((string) Route::getCurrentRoute()->getName(), (string) $route)) {
                     return 'active';
                 }
 
@@ -144,11 +145,11 @@ class General extends AbstractExtension
             }
 
             /** @var Carbon $date */
-            $date = now();
+            $date             = now();
 
             // get the date from the current session. If it's in the future, keep `now()`.
             /** @var Carbon $session */
-            $session = clone session('end', today(config('app.timezone'))->endOfMonth());
+            $session          = clone session('end', today(config('app.timezone'))->endOfMonth());
             if ($session->lt($date)) {
                 $date = $session->copy();
                 $date->endOfDay();
@@ -156,13 +157,13 @@ class General extends AbstractExtension
             Log::debug(sprintf('twig balance: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
 
             // 2025-10-08 replace finalAccountBalance with accountsBalancesOptimized.
-            $info = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id];
+            $info             = Steam::accountsBalancesOptimized(new Collection()->push($account), $date)[$account->id];
             // $info             = Steam::finalAccountBalance($account, $date);
             $currency         = Steam::getAccountCurrency($account);
             $primary          = Amount::getPrimaryCurrency();
             $convertToPrimary = Amount::convertToPrimary();
             $usePrimary       = $convertToPrimary && $primary->id !== $currency->id;
-            $currency         ??= $primary;
+            $currency ??= $primary;
             $strings          = [];
             foreach ($info as $key => $balance) {
                 if ('balance' === $key) {
@@ -202,7 +203,7 @@ class General extends AbstractExtension
 
     protected function carbonize(): TwigFunction
     {
-        return new TwigFunction('carbonize', static fn(string $date): Carbon => new Carbon($date, config('app.timezone')));
+        return new TwigFunction('carbonize', static fn (string $date): Carbon => new Carbon($date, config('app.timezone')));
     }
 
     /**
@@ -225,15 +226,15 @@ class General extends AbstractExtension
         return new TwigFilter('filesize', static function (int $size): string {
             // less than one GB, more than one MB
             if ($size < (1024 * 1024 * 2014) && $size >= (1024 * 1024)) {
-                return round($size / (1024 * 1024), 2) . ' MB';
+                return round($size / (1024 * 1024), 2).' MB';
             }
 
             // less than one MB
             if ($size < (1024 * 1024)) {
-                return round($size / 1024, 2) . ' KB';
+                return round($size / 1024, 2).' KB';
             }
 
-            return $size . ' bytes';
+            return $size.' bytes';
         });
     }
 
@@ -282,7 +283,7 @@ class General extends AbstractExtension
             static function (string $text): string {
                 $converter = new GithubFlavoredMarkdownConverter(['allow_unsafe_links' => false, 'max_nesting_level' => 5, 'html_input' => 'escape']);
 
-                return (string)$converter->convert($text);
+                return (string) $converter->convert($text);
             },
             ['is_safe' => ['html']]
         );
@@ -315,15 +316,15 @@ class General extends AbstractExtension
     {
         return new TwigFilter(
             'mimeIcon',
-            static fn(string $string): string => match ($string) {
-                'application/pdf'                                          => 'fa-file-pdf-o',
+            static fn (string $string): string => match ($string) {
+                'application/pdf'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           => 'fa-file-pdf-o',
                 'image/webp',
                 'image/png',
                 'image/jpeg',
                 'image/svg+xml',
                 'image/heic',
                 'image/heic-sequence',
-                'application/vnd.oasis.opendocument.image'                 => 'fa-file-image-o',
+                'application/vnd.oasis.opendocument.image'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  => 'fa-file-image-o',
                 'application/msword',
                 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
@@ -336,7 +337,7 @@ class General extends AbstractExtension
                 'application/vnd.oasis.opendocument.text',
                 'application/vnd.oasis.opendocument.text-template',
                 'application/vnd.oasis.opendocument.text-web',
-                'application/vnd.oasis.opendocument.text-master'           => 'fa-file-word-o',
+                'application/vnd.oasis.opendocument.text-master'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            => 'fa-file-word-o',
                 'application/vnd.ms-excel',
                 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
@@ -344,7 +345,7 @@ class General extends AbstractExtension
                 'application/vnd.sun.xml.calc.template',
                 'application/vnd.stardivision.calc',
                 'application/vnd.oasis.opendocument.spreadsheet',
-                'application/vnd.oasis.opendocument.spreadsheet-template'  => 'fa-file-excel-o',
+                'application/vnd.oasis.opendocument.spreadsheet-template'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   => 'fa-file-excel-o',
                 'application/vnd.ms-powerpoint',
                 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
                 'application/vnd.openxmlformats-officedocument.presentationml.template',
@@ -353,18 +354,18 @@ class General extends AbstractExtension
                 'application/vnd.sun.xml.impress.template',
                 'application/vnd.stardivision.impress',
                 'application/vnd.oasis.opendocument.presentation',
-                'application/vnd.oasis.opendocument.presentation-template' => 'fa-file-powerpoint-o',
+                'application/vnd.oasis.opendocument.presentation-template'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  => 'fa-file-powerpoint-o',
                 'application/vnd.sun.xml.draw',
                 'application/vnd.sun.xml.draw.template',
                 'application/vnd.stardivision.draw',
-                'application/vnd.oasis.opendocument.chart'                 => 'bi-paint-bucket',
+                'application/vnd.oasis.opendocument.chart'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  => 'bi-paint-bucket',
                 'application/vnd.oasis.opendocument.graphics',
                 'application/vnd.oasis.opendocument.graphics-template',
                 'application/vnd.sun.xml.math',
                 'application/vnd.stardivision.math',
                 'application/vnd.oasis.opendocument.formula',
-                'application/vnd.oasis.opendocument.database'              => 'fa-calculator',
-                default                                                    => 'fa-file-o'
+                'application/vnd.oasis.opendocument.database'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               => 'fa-calculator',
+                default                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     => 'fa-file-o'
             },
             ['is_safe' => ['html']]
         );
@@ -399,6 +400,6 @@ class General extends AbstractExtension
 
     private function fireflyIIIConfig(): TwigFunction
     {
-        return new TwigFunction('fireflyiiiconfig', static fn(string $string, mixed $default): mixed => AppConfiguration::get($string, $default)->data);
+        return new TwigFunction('fireflyiiiconfig', static fn (string $string, mixed $default): mixed => AppConfiguration::get($string, $default)->data);
     }
 }
diff --git a/app/View/Components/Elements/TransactionAmount.php b/app/View/Components/Elements/TransactionAmount.php
index fbda9a5ce8..7bb2a968c8 100644
--- a/app/View/Components/Elements/TransactionAmount.php
+++ b/app/View/Components/Elements/TransactionAmount.php
@@ -23,11 +23,11 @@ class TransactionAmount extends Component
      */
     public function __construct(string $type, array $amount, array $foreign, array $sourceAccount, ?string $pcAmount, ?Account $account)
     {
-        $this->type     = $type;
-        $this->amount   = $amount;
-        $this->foreign  = $foreign;
-        $this->account  = $account;
-        $this->pcAmount = $pcAmount;
+        $this->type          = $type;
+        $this->amount        = $amount;
+        $this->foreign       = $foreign;
+        $this->account       = $account;
+        $this->pcAmount      = $pcAmount;
         $this->sourceAccount = $sourceAccount;
     }
 
diff --git a/app/View/Components/Form/Alpine/Checkbox.php b/app/View/Components/Form/Alpine/Checkbox.php
index d40e6ef0ec..c474ba9215 100644
--- a/app/View/Components/Form/Alpine/Checkbox.php
+++ b/app/View/Components/Form/Alpine/Checkbox.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Form\Alpine;
 
 use Closure;
@@ -14,20 +13,21 @@ class Checkbox extends Component
     public string $id;
     public string $value;
     public string $title;
+
     /**
      * Create a new component instance.
      */
     public function __construct(string $id, string $value, string $title)
     {
-        $this->id = $id;
-        $this->value= $value;
+        $this->id    = $id;
+        $this->value = $value;
         $this->title = $title;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.form.alpine.checkbox');
     }
diff --git a/app/View/Components/Form/Alpine/Deliveries.php b/app/View/Components/Form/Alpine/Deliveries.php
index 0bd7e26f0a..946aa67cc8 100644
--- a/app/View/Components/Form/Alpine/Deliveries.php
+++ b/app/View/Components/Form/Alpine/Deliveries.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Form\Alpine;
 
 use Closure;
@@ -12,18 +11,19 @@ use Illuminate\View\Component;
 class Deliveries extends Component
 {
     public string $value;
+
     /**
      * Create a new component instance.
      */
     public function __construct(string $value)
     {
-        $this->value= $value;
+        $this->value = $value;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.form.alpine.deliveries');
     }
diff --git a/app/View/Components/Form/Alpine/Responses.php b/app/View/Components/Form/Alpine/Responses.php
index 6c93f66d80..a0ab30ff71 100644
--- a/app/View/Components/Form/Alpine/Responses.php
+++ b/app/View/Components/Form/Alpine/Responses.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Form\Alpine;
 
 use Closure;
@@ -12,18 +11,19 @@ use Illuminate\View\Component;
 class Responses extends Component
 {
     public string $value;
+
     /**
      * Create a new component instance.
      */
     public function __construct(string $value)
     {
-        $this->value= $value;
+        $this->value = $value;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.form.alpine.responses');
     }
diff --git a/app/View/Components/Form/Alpine/Title.php b/app/View/Components/Form/Alpine/Title.php
index b5f5bcd41d..1b576d8c84 100644
--- a/app/View/Components/Form/Alpine/Title.php
+++ b/app/View/Components/Form/Alpine/Title.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Form\Alpine;
 
 use Closure;
@@ -12,18 +11,19 @@ use Illuminate\View\Component;
 class Title extends Component
 {
     public string $value;
+
     /**
      * Create a new component instance.
      */
     public function __construct(string $value)
     {
-        $this->value= $value;
+        $this->value = $value;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.form.alpine.title');
     }
diff --git a/app/View/Components/Form/Alpine/Triggers.php b/app/View/Components/Form/Alpine/Triggers.php
index f240e510dd..e4c86e8cc2 100644
--- a/app/View/Components/Form/Alpine/Triggers.php
+++ b/app/View/Components/Form/Alpine/Triggers.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Form\Alpine;
 
 use Closure;
@@ -13,19 +12,20 @@ class Triggers extends Component
 {
     public string $value;
     public string $multiple = '';
+
     /**
      * Create a new component instance.
      */
     public function __construct(string $value, string $multiple = '')
     {
-        $this->value= $value;
+        $this->value    = $value;
         $this->multiple = $multiple;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.form.alpine.triggers');
     }
diff --git a/app/View/Components/Form/Alpine/Url.php b/app/View/Components/Form/Alpine/Url.php
index f65243f119..d6d3a877a7 100644
--- a/app/View/Components/Form/Alpine/Url.php
+++ b/app/View/Components/Form/Alpine/Url.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Form\Alpine;
 
 use Closure;
@@ -12,18 +11,19 @@ use Illuminate\View\Component;
 class Url extends Component
 {
     public string $value;
+
     /**
      * Create a new component instance.
      */
     public function __construct(string $value)
     {
-        $this->value= $value;
+        $this->value = $value;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.form.alpine.url');
     }
diff --git a/app/View/Components/Lists/Ale.php b/app/View/Components/Lists/Ale.php
index 6d34632832..b00b6e2276 100644
--- a/app/View/Components/Lists/Ale.php
+++ b/app/View/Components/Lists/Ale.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Lists;
 
 use Closure;
@@ -13,6 +12,7 @@ use Illuminate\View\Component;
 class Ale extends Component
 {
     public array|Collection $logEntries;
+
     /**
      * Create a new component instance.
      */
@@ -24,7 +24,7 @@ class Ale extends Component
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.lists.ale');
     }
diff --git a/app/View/Components/Lists/Attachments.php b/app/View/Components/Lists/Attachments.php
index c8bdecdd8a..82791d9e88 100644
--- a/app/View/Components/Lists/Attachments.php
+++ b/app/View/Components/Lists/Attachments.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Lists;
 
 use Closure;
@@ -12,11 +11,12 @@ use Illuminate\View\Component;
 
 class Attachments extends Component
 {
-    public Collection|array $attachments;
+    public array|Collection $attachments;
+
     /**
      * Create a new component instance.
      */
-    public function __construct(Collection|array $attachments)
+    public function __construct(array|Collection $attachments)
     {
         $this->attachments = $attachments;
     }
@@ -24,7 +24,7 @@ class Attachments extends Component
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.lists.attachments');
     }
diff --git a/app/View/Components/Lists/Categories.php b/app/View/Components/Lists/Categories.php
index cdda40809e..912b720033 100644
--- a/app/View/Components/Lists/Categories.php
+++ b/app/View/Components/Lists/Categories.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Lists;
 
 use Closure;
@@ -13,6 +12,7 @@ use Illuminate\View\Component;
 class Categories extends Component
 {
     public LengthAwarePaginator $categories;
+
     /**
      * Create a new component instance.
      */
@@ -24,7 +24,7 @@ class Categories extends Component
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.lists.categories');
     }
diff --git a/app/View/Components/Lists/GroupsLarge.php b/app/View/Components/Lists/GroupsLarge.php
index c7defdfbe1..899d88ed94 100644
--- a/app/View/Components/Lists/GroupsLarge.php
+++ b/app/View/Components/Lists/GroupsLarge.php
@@ -13,26 +13,26 @@ use Illuminate\View\Component;
 
 class GroupsLarge extends Component
 {
-    public LengthAwarePaginator|Collection $groups;
-    public ?Account             $account;
-    public bool                 $showCategory;
-    public bool                 $showBudget;
+    public Collection|LengthAwarePaginator $groups;
+    public ?Account $account;
+    public bool $showCategory;
+    public bool $showBudget;
 
     /**
      * Create a new component instance.
      */
-    public function __construct(LengthAwarePaginator| Collection $groups, ?bool $showCategory, ?bool $showBudget, ?Account $account = null)
+    public function __construct(Collection|LengthAwarePaginator $groups, ?bool $showCategory, ?bool $showBudget, ?Account $account = null)
     {
         $this->groups       = $groups;
         $this->account      = $account;
-        $this->showCategory = $showCategory ??false;
+        $this->showCategory = $showCategory ?? false;
         $this->showBudget   = $showBudget ?? false;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): Closure | string | View
+    public function render(): Closure|string|View
     {
         return view('components.lists.groups-large');
     }
diff --git a/app/View/Components/Lists/PiggyBankEvents.php b/app/View/Components/Lists/PiggyBankEvents.php
index aa422c1b04..3e34a6c46c 100644
--- a/app/View/Components/Lists/PiggyBankEvents.php
+++ b/app/View/Components/Lists/PiggyBankEvents.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Lists;
 
 use Closure;
@@ -14,19 +13,20 @@ class PiggyBankEvents extends Component
 {
     public Collection $events;
     public bool $showPiggyBank;
+
     /**
      * Create a new component instance.
      */
     public function __construct(Collection $events, bool $showPiggyBank)
     {
-        $this->events = $events;
+        $this->events        = $events;
         $this->showPiggyBank = $showPiggyBank;
     }
 
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.lists.piggy-bank-events');
     }
diff --git a/app/View/Components/Report/Partial/JournalsAudit.php b/app/View/Components/Report/Partial/JournalsAudit.php
index 7aead03671..153c33ab7b 100644
--- a/app/View/Components/Report/Partial/JournalsAudit.php
+++ b/app/View/Components/Report/Partial/JournalsAudit.php
@@ -2,7 +2,6 @@
 
 declare(strict_types=1);
 
-
 namespace FireflyIII\View\Components\Report\Partial;
 
 use Closure;
@@ -15,12 +14,13 @@ class JournalsAudit extends Component
     public array $journals;
     public array $auditData;
     public Account $account;
+
     /**
      * Create a new component instance.
      */
-    public function __construct(array $journals,array $auditData, Account $account)
+    public function __construct(array $journals, array $auditData, Account $account)
     {
-        $this->journals = $journals;
+        $this->journals  = $journals;
         $this->auditData = $auditData;
         $this->account   = $account;
     }
@@ -28,7 +28,7 @@ class JournalsAudit extends Component
     /**
      * Get the view / contents that represent the component.
      */
-    public function render(): View|Closure|string
+    public function render(): Closure|string|View
     {
         return view('components.report.partial.journals-audit');
     }
diff --git a/composer.lock b/composer.lock
index 81925b66e9..65315f1fe2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1246,22 +1246,22 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "7.13.2",
+            "version": "7.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "bcd989ad36c92d42a3715379af91f2defee5b8dd"
+                "reference": "aef242412e13128b5049864867bb49fc37dd39de"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/bcd989ad36c92d42a3715379af91f2defee5b8dd",
-                "reference": "bcd989ad36c92d42a3715379af91f2defee5b8dd",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/aef242412e13128b5049864867bb49fc37dd39de",
+                "reference": "aef242412e13128b5049864867bb49fc37dd39de",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "guzzlehttp/promises": "^2.5",
-                "guzzlehttp/psr7": "^2.12.3",
+                "guzzlehttp/promises": "^2.5.1",
+                "guzzlehttp/psr7": "^2.12.4",
                 "php": "^7.2.5 || ^8.0",
                 "psr/http-client": "^1.0",
                 "symfony/deprecation-contracts": "^2.5 || ^3.0",
@@ -1354,7 +1354,7 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.13.2"
+                "source": "https://github.com/guzzle/guzzle/tree/7.14.0"
             },
             "funding": [
                 {
@@ -1370,20 +1370,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2026-07-05T19:00:11+00:00"
+            "time": "2026-07-08T22:54:09+00:00"
         },
         {
             "name": "guzzlehttp/promises",
-            "version": "2.5.0",
+            "version": "2.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/promises.git",
-                "reference": "4360e982f87f5f258bf872d094647791db2f4c8e"
+                "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e",
-                "reference": "4360e982f87f5f258bf872d094647791db2f4c8e",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29",
+                "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29",
                 "shasum": ""
             },
             "require": {
@@ -1438,7 +1438,7 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/promises/issues",
-                "source": "https://github.com/guzzle/promises/tree/2.5.0"
+                "source": "https://github.com/guzzle/promises/tree/2.5.1"
             },
             "funding": [
                 {
@@ -1454,20 +1454,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2026-06-02T12:23:43+00:00"
+            "time": "2026-07-08T15:48:39+00:00"
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "2.12.3",
+            "version": "2.12.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d"
+                "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/7ec62dc3f44aa218487dbed81a9bf9bc647be55d",
-                "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c",
+                "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c",
                 "shasum": ""
             },
             "require": {
@@ -1557,7 +1557,7 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.12.3"
+                "source": "https://github.com/guzzle/psr7/tree/2.12.4"
             },
             "funding": [
                 {
@@ -1573,20 +1573,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2026-06-23T15:21:08+00:00"
+            "time": "2026-07-08T15:56:20+00:00"
         },
         {
             "name": "guzzlehttp/uri-template",
-            "version": "v1.0.8",
+            "version": "v1.0.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/uri-template.git",
-                "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd"
+                "reference": "d7580af6d3f8384325d9cd3e99b21c3ed1848176"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/uri-template/zipball/9c19128923b05a5d7355e5d2318d7808b7e33bbd",
-                "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd",
+                "url": "https://api.github.com/repos/guzzle/uri-template/zipball/d7580af6d3f8384325d9cd3e99b21c3ed1848176",
+                "reference": "d7580af6d3f8384325d9cd3e99b21c3ed1848176",
                 "shasum": ""
             },
             "require": {
@@ -1643,7 +1643,7 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/uri-template/issues",
-                "source": "https://github.com/guzzle/uri-template/tree/v1.0.8"
+                "source": "https://github.com/guzzle/uri-template/tree/v1.0.9"
             },
             "funding": [
                 {
@@ -1659,7 +1659,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2026-06-23T13:02:23+00:00"
+            "time": "2026-07-08T16:19:22+00:00"
         },
         {
             "name": "jc5/google2fa-laravel",
@@ -1885,16 +1885,16 @@
         },
         {
             "name": "laravel/framework",
-            "version": "v13.18.1",
+            "version": "v13.19.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "7d66044819e269f05924793a6800022dc181d850"
+                "reference": "514502b38e11bd676ecf83b271c9452cc7500f16"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/7d66044819e269f05924793a6800022dc181d850",
-                "reference": "7d66044819e269f05924793a6800022dc181d850",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/514502b38e11bd676ecf83b271c9452cc7500f16",
+                "reference": "514502b38e11bd676ecf83b271c9452cc7500f16",
                 "shasum": ""
             },
             "require": {
@@ -2105,7 +2105,7 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2026-07-02T18:35:20+00:00"
+            "time": "2026-07-07T14:13:33+00:00"
         },
         {
             "name": "laravel/passport",
@@ -2844,16 +2844,16 @@
         },
         {
             "name": "league/flysystem",
-            "version": "3.35.1",
+            "version": "3.35.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c"
+                "reference": "b277b5dc3d56650b68904117124e79c851e12376"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f23af6c5aafd958a7593029a271d77baf5ed793c",
-                "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b277b5dc3d56650b68904117124e79c851e12376",
+                "reference": "b277b5dc3d56650b68904117124e79c851e12376",
                 "shasum": ""
             },
             "require": {
@@ -2921,9 +2921,9 @@
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/3.35.1"
+                "source": "https://github.com/thephpleague/flysystem/tree/3.35.2"
             },
-            "time": "2026-06-25T06:52:23+00:00"
+            "time": "2026-07-06T14:42:07+00:00"
         },
         {
             "name": "league/flysystem-local",
@@ -3046,16 +3046,16 @@
         },
         {
             "name": "league/mime-type-detection",
-            "version": "1.16.0",
+            "version": "1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/mime-type-detection.git",
-                "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
+                "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
-                "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
+                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76",
+                "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76",
                 "shasum": ""
             },
             "require": {
@@ -3065,7 +3065,7 @@
             "require-dev": {
                 "friendsofphp/php-cs-fixer": "^3.2",
                 "phpstan/phpstan": "^0.12.68",
-                "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
+                "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0"
             },
             "type": "library",
             "autoload": {
@@ -3086,7 +3086,7 @@
             "description": "Mime-type detection for Flysystem",
             "support": {
                 "issues": "https://github.com/thephpleague/mime-type-detection/issues",
-                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
+                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0"
             },
             "funding": [
                 {
@@ -3098,7 +3098,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-09-21T08:32:55+00:00"
+            "time": "2026-07-09T11:49:27+00:00"
         },
         {
             "name": "league/oauth2-server",
@@ -9936,16 +9936,16 @@
         },
         {
             "name": "vlucas/phpdotenv",
-            "version": "v5.6.3",
+            "version": "v5.6.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vlucas/phpdotenv.git",
-                "reference": "955e7815d677a3eaa7075231212f2110983adecc"
+                "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
-                "reference": "955e7815d677a3eaa7075231212f2110983adecc",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b",
+                "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b",
                 "shasum": ""
             },
             "require": {
@@ -10004,7 +10004,7 @@
             ],
             "support": {
                 "issues": "https://github.com/vlucas/phpdotenv/issues",
-                "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4"
             },
             "funding": [
                 {
@@ -10016,7 +10016,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-12-27T19:49:13+00:00"
+            "time": "2026-07-06T19:11:50+00:00"
         },
         {
             "name": "voku/portable-ascii",
@@ -11798,16 +11798,16 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "14.2.2",
+            "version": "14.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "10d7da3628a99289cdf4c662dd7f0d73f1baec83"
+                "reference": "82f6e49ff224e2cde923d74425e583a883910783"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/10d7da3628a99289cdf4c662dd7f0d73f1baec83",
-                "reference": "10d7da3628a99289cdf4c662dd7f0d73f1baec83",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/82f6e49ff224e2cde923d74425e583a883910783",
+                "reference": "82f6e49ff224e2cde923d74425e583a883910783",
                 "shasum": ""
             },
             "require": {
@@ -11815,7 +11815,7 @@
                 "ext-libxml": "*",
                 "ext-mbstring": "*",
                 "ext-xmlwriter": "*",
-                "nikic/php-parser": "^5.7.0",
+                "nikic/php-parser": "^5.8.0",
                 "php": ">=8.4",
                 "phpunit/php-text-template": "^6.0",
                 "sebastian/complexity": "^6.0",
@@ -11826,7 +11826,7 @@
                 "theseer/tokenizer": "^2.0.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^13.2.0"
+                "phpunit/phpunit": "^13.2.2"
             },
             "suggest": {
                 "ext-pcov": "PHP extension that provides line coverage",
@@ -11864,7 +11864,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.2"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.3"
             },
             "funding": [
                 {
@@ -11884,7 +11884,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2026-06-08T11:50:38+00:00"
+            "time": "2026-07-06T15:04:02+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -12181,30 +12181,30 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "13.2.2",
+            "version": "13.2.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "492c067e618de7b3c76105082c90f9d2833401b7"
+                "reference": "8f5180f4627fc1978be2f61d8d9979dbe37e0c10"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/492c067e618de7b3c76105082c90f9d2833401b7",
-                "reference": "492c067e618de7b3c76105082c90f9d2833401b7",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8f5180f4627fc1978be2f61d8d9979dbe37e0c10",
+                "reference": "8f5180f4627fc1978be2f61d8d9979dbe37e0c10",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
+                "ext-filter": "*",
                 "ext-json": "*",
                 "ext-libxml": "*",
                 "ext-mbstring": "*",
-                "ext-xml": "*",
                 "ext-xmlwriter": "*",
                 "myclabs/deep-copy": "^1.13.4",
                 "phar-io/manifest": "^2.0.4",
                 "phar-io/version": "^3.2.1",
                 "php": ">=8.4.1",
-                "phpunit/php-code-coverage": "^14.2.2",
+                "phpunit/php-code-coverage": "^14.2.3",
                 "phpunit/php-file-iterator": "^7.0.0",
                 "phpunit/php-invoker": "^7.0.0",
                 "phpunit/php-text-template": "^6.0.0",
@@ -12261,7 +12261,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/13.2.2"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/13.2.4"
             },
             "funding": [
                 {
@@ -12269,20 +12269,20 @@
                     "type": "other"
                 }
             ],
-            "time": "2026-06-29T13:36:29+00:00"
+            "time": "2026-07-08T08:36:51+00:00"
         },
         {
             "name": "rector/rector",
-            "version": "2.5.3",
+            "version": "2.5.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "3d3577ad88d70d9f8dccd0a4c2f75bf13d6268e6"
+                "reference": "9718a72e7f1aacacbdcb6eeed07a47147bce802e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/3d3577ad88d70d9f8dccd0a4c2f75bf13d6268e6",
-                "reference": "3d3577ad88d70d9f8dccd0a4c2f75bf13d6268e6",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/9718a72e7f1aacacbdcb6eeed07a47147bce802e",
+                "reference": "9718a72e7f1aacacbdcb6eeed07a47147bce802e",
                 "shasum": ""
             },
             "require": {
@@ -12321,7 +12321,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/2.5.3"
+                "source": "https://github.com/rectorphp/rector/tree/2.5.5"
             },
             "funding": [
                 {
@@ -12329,7 +12329,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2026-07-05T01:32:08+00:00"
+            "time": "2026-07-09T09:48:44+00:00"
         },
         {
             "name": "sebastian/cli-parser",
@@ -13021,24 +13021,24 @@
         },
         {
             "name": "sebastian/lines-of-code",
-            "version": "5.0.1",
+            "version": "5.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/lines-of-code.git",
-                "reference": "d2cff273a90c79b0eb590baa682d4b5c318bdbb7"
+                "reference": "d1b6f8fce682505dbd048977f1abedf1b8ad3ff8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d2cff273a90c79b0eb590baa682d4b5c318bdbb7",
-                "reference": "d2cff273a90c79b0eb590baa682d4b5c318bdbb7",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d1b6f8fce682505dbd048977f1abedf1b8ad3ff8",
+                "reference": "d1b6f8fce682505dbd048977f1abedf1b8ad3ff8",
                 "shasum": ""
             },
             "require": {
-                "nikic/php-parser": "^5.7.0",
+                "nikic/php-parser": "^5.8.0",
                 "php": ">=8.4"
             },
             "require-dev": {
-                "phpunit/phpunit": "^13.1.10"
+                "phpunit/phpunit": "^13.2.4"
             },
             "type": "library",
             "extra": {
@@ -13067,7 +13067,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
                 "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
-                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.1"
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.2"
             },
             "funding": [
                 {
@@ -13087,7 +13087,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2026-05-19T16:23:37+00:00"
+            "time": "2026-07-09T08:42:34+00:00"
         },
         {
             "name": "sebastian/object-enumerator",
diff --git a/config/firefly.php b/config/firefly.php
index 1e596dbcaf..1cda5e08ce 100644
--- a/config/firefly.php
+++ b/config/firefly.php
@@ -78,8 +78,8 @@ return [
         'running_balance_column' => (bool)env_default_when_empty(env('USE_RUNNING_BALANCE'), true), // this is only the default value, is not used.
         // see cer.php for exchange rates feature flag.
     ],
-'version' => 'develop/2026-07-06',
-'build_time' => 1783312383,
+'version' => 'develop/2026-07-09',
+'build_time' => 1783619838,
     'api_version'                          => '2.1.0', // field is no longer used.
     'db_version'                           => 28, // field is no longer used.
 
@@ -390,7 +390,7 @@ return [
         AccountTypeEnum::MORTGAGE->value   => AccountTypeEnum::MORTGAGE->value,
     ],
     'transactionTypesByType'               => [
-        'all' => [TransactionTypeEnum::WITHDRAWAL->value, TransactionTypeEnum::DEPOSIT->value, TransactionTypeEnum::TRANSFER->value],
+        'all'        => [TransactionTypeEnum::WITHDRAWAL->value, TransactionTypeEnum::DEPOSIT->value, TransactionTypeEnum::TRANSFER->value],
         'expenses'   => ['Withdrawal'],
         'withdrawal' => ['Withdrawal'],
         'revenue'    => ['Deposit'],
diff --git a/config/translations.php b/config/translations.php
index 8f093b604f..b8b7e3dd4e 100644
--- a/config/translations.php
+++ b/config/translations.php
@@ -39,7 +39,7 @@ return [
                 'date',
                 'rate',
                 'triggers',
-                'help_rate_form'
+                'help_rate_form',
             ],
             'list'       => [
                 'drag_and_drop',
@@ -143,7 +143,7 @@ return [
                 'webhook_trigger_STORE_TRANSACTION',
                 'webhook_trigger_UPDATE_TRANSACTION',
                 'webhook_response_RELEVANT',
-                'webhook_delivery_JSON'
+                'webhook_delivery_JSON',
                 //                'account_column_opt_drag_and_drop',
                 //                'account_column_opt_active',
                 //                'account_column_opt_name',
diff --git a/package-lock.json b/package-lock.json
index adcf80fcd1..d4b68b64d2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -97,9 +97,9 @@
             }
         },
         "node_modules/@oxc-project/types": {
-            "version": "0.138.0",
-            "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.138.0.tgz",
-            "integrity": "sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==",
+            "version": "0.139.0",
+            "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz",
+            "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==",
             "dev": true,
             "license": "MIT",
             "funding": {
@@ -235,9 +235,6 @@
                 "arm"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -259,9 +256,6 @@
                 "arm"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -283,9 +277,6 @@
                 "arm64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -307,9 +298,6 @@
                 "arm64"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -331,9 +319,6 @@
                 "x64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -355,9 +340,6 @@
                 "x64"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -459,9 +441,9 @@
             }
         },
         "node_modules/@rolldown/binding-android-arm64": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.4.tgz",
-            "integrity": "sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz",
+            "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==",
             "cpu": [
                 "arm64"
             ],
@@ -476,9 +458,9 @@
             }
         },
         "node_modules/@rolldown/binding-darwin-arm64": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.4.tgz",
-            "integrity": "sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz",
+            "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==",
             "cpu": [
                 "arm64"
             ],
@@ -493,9 +475,9 @@
             }
         },
         "node_modules/@rolldown/binding-darwin-x64": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.4.tgz",
-            "integrity": "sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz",
+            "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==",
             "cpu": [
                 "x64"
             ],
@@ -510,9 +492,9 @@
             }
         },
         "node_modules/@rolldown/binding-freebsd-x64": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.4.tgz",
-            "integrity": "sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz",
+            "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==",
             "cpu": [
                 "x64"
             ],
@@ -527,9 +509,9 @@
             }
         },
         "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.4.tgz",
-            "integrity": "sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz",
+            "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==",
             "cpu": [
                 "arm"
             ],
@@ -544,16 +526,13 @@
             }
         },
         "node_modules/@rolldown/binding-linux-arm64-gnu": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.4.tgz",
-            "integrity": "sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz",
+            "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -564,16 +543,13 @@
             }
         },
         "node_modules/@rolldown/binding-linux-arm64-musl": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.4.tgz",
-            "integrity": "sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz",
+            "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -584,16 +560,13 @@
             }
         },
         "node_modules/@rolldown/binding-linux-ppc64-gnu": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.4.tgz",
-            "integrity": "sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz",
+            "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==",
             "cpu": [
                 "ppc64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -604,16 +577,13 @@
             }
         },
         "node_modules/@rolldown/binding-linux-s390x-gnu": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.4.tgz",
-            "integrity": "sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz",
+            "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==",
             "cpu": [
                 "s390x"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -624,16 +594,13 @@
             }
         },
         "node_modules/@rolldown/binding-linux-x64-gnu": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.4.tgz",
-            "integrity": "sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz",
+            "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -644,16 +611,13 @@
             }
         },
         "node_modules/@rolldown/binding-linux-x64-musl": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.4.tgz",
-            "integrity": "sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz",
+            "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MIT",
             "optional": true,
             "os": [
@@ -664,9 +628,9 @@
             }
         },
         "node_modules/@rolldown/binding-openharmony-arm64": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.4.tgz",
-            "integrity": "sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz",
+            "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==",
             "cpu": [
                 "arm64"
             ],
@@ -681,9 +645,9 @@
             }
         },
         "node_modules/@rolldown/binding-wasm32-wasi": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.4.tgz",
-            "integrity": "sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz",
+            "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==",
             "cpu": [
                 "wasm32"
             ],
@@ -700,9 +664,9 @@
             }
         },
         "node_modules/@rolldown/binding-win32-arm64-msvc": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.4.tgz",
-            "integrity": "sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz",
+            "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==",
             "cpu": [
                 "arm64"
             ],
@@ -717,9 +681,9 @@
             }
         },
         "node_modules/@rolldown/binding-win32-x64-msvc": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.4.tgz",
-            "integrity": "sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz",
+            "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==",
             "cpu": [
                 "x64"
             ],
@@ -1494,9 +1458,9 @@
             }
         },
         "node_modules/i18next": {
-            "version": "26.3.4",
-            "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.4.tgz",
-            "integrity": "sha512-pa7m0d7pBDqGHZxljT+WPFeyFgQ7P7SciPPo1tTqYuO0z4sqADYhwnBESmmGp/wEof1inwdls/k8ZgTg8rxFHA==",
+            "version": "26.3.6",
+            "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.6.tgz",
+            "integrity": "sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==",
             "funding": [
                 {
                     "type": "individual",
@@ -1513,7 +1477,7 @@
             ],
             "license": "MIT",
             "peerDependencies": {
-                "typescript": "^5 || ^6"
+                "typescript": "^5 || ^6 || ^7"
             },
             "peerDependenciesMeta": {
                 "typescript": {
@@ -1857,9 +1821,6 @@
                 "arm64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MPL-2.0",
             "optional": true,
             "os": [
@@ -1881,9 +1842,6 @@
                 "arm64"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MPL-2.0",
             "optional": true,
             "os": [
@@ -1905,9 +1863,6 @@
                 "x64"
             ],
             "dev": true,
-            "libc": [
-                "glibc"
-            ],
             "license": "MPL-2.0",
             "optional": true,
             "os": [
@@ -1929,9 +1884,6 @@
                 "x64"
             ],
             "dev": true,
-            "libc": [
-                "musl"
-            ],
             "license": "MPL-2.0",
             "optional": true,
             "os": [
@@ -2217,13 +2169,13 @@
             }
         },
         "node_modules/rolldown": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.4.tgz",
-            "integrity": "sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA==",
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz",
+            "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@oxc-project/types": "=0.138.0",
+                "@oxc-project/types": "=0.139.0",
                 "@rolldown/pluginutils": "^1.0.0"
             },
             "bin": {
@@ -2233,21 +2185,21 @@
                 "node": "^20.19.0 || >=22.12.0"
             },
             "optionalDependencies": {
-                "@rolldown/binding-android-arm64": "1.1.4",
-                "@rolldown/binding-darwin-arm64": "1.1.4",
-                "@rolldown/binding-darwin-x64": "1.1.4",
-                "@rolldown/binding-freebsd-x64": "1.1.4",
-                "@rolldown/binding-linux-arm-gnueabihf": "1.1.4",
-                "@rolldown/binding-linux-arm64-gnu": "1.1.4",
-                "@rolldown/binding-linux-arm64-musl": "1.1.4",
-                "@rolldown/binding-linux-ppc64-gnu": "1.1.4",
-                "@rolldown/binding-linux-s390x-gnu": "1.1.4",
-                "@rolldown/binding-linux-x64-gnu": "1.1.4",
-                "@rolldown/binding-linux-x64-musl": "1.1.4",
-                "@rolldown/binding-openharmony-arm64": "1.1.4",
-                "@rolldown/binding-wasm32-wasi": "1.1.4",
-                "@rolldown/binding-win32-arm64-msvc": "1.1.4",
-                "@rolldown/binding-win32-x64-msvc": "1.1.4"
+                "@rolldown/binding-android-arm64": "1.1.5",
+                "@rolldown/binding-darwin-arm64": "1.1.5",
+                "@rolldown/binding-darwin-x64": "1.1.5",
+                "@rolldown/binding-freebsd-x64": "1.1.5",
+                "@rolldown/binding-linux-arm-gnueabihf": "1.1.5",
+                "@rolldown/binding-linux-arm64-gnu": "1.1.5",
+                "@rolldown/binding-linux-arm64-musl": "1.1.5",
+                "@rolldown/binding-linux-ppc64-gnu": "1.1.5",
+                "@rolldown/binding-linux-s390x-gnu": "1.1.5",
+                "@rolldown/binding-linux-x64-gnu": "1.1.5",
+                "@rolldown/binding-linux-x64-musl": "1.1.5",
+                "@rolldown/binding-openharmony-arm64": "1.1.5",
+                "@rolldown/binding-wasm32-wasi": "1.1.5",
+                "@rolldown/binding-win32-arm64-msvc": "1.1.5",
+                "@rolldown/binding-win32-x64-msvc": "1.1.5"
             }
         },
         "node_modules/rxjs": {
@@ -2536,16 +2488,16 @@
             "link": true
         },
         "node_modules/vite": {
-            "version": "8.1.3",
-            "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.3.tgz",
-            "integrity": "sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA==",
+            "version": "8.1.4",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.4.tgz",
+            "integrity": "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "lightningcss": "^1.32.0",
-                "picomatch": "^4.0.4",
+                "picomatch": "^4.0.5",
                 "postcss": "^8.5.16",
-                "rolldown": "~1.1.3",
+                "rolldown": "~1.1.4",
                 "tinyglobby": "^0.2.17"
             },
             "bin": {
diff --git a/resources/lang/en_US/breadcrumbs.php b/resources/lang/en_US/breadcrumbs.php
index 201ba295fb..cbe22a6be6 100644
--- a/resources/lang/en_US/breadcrumbs.php
+++ b/resources/lang/en_US/breadcrumbs.php
@@ -49,7 +49,7 @@ return [
     'reports'                => 'Reports',
     'search_result'          => 'Search results for ":query"',
     'withdrawal_list'        => 'Expenses',
-    'all_list'        => 'All transactions',
+    'all_list'               => 'All transactions',
     'Withdrawal_list'        => 'Expenses',
     'deposit_list'           => 'Revenue, income and deposits',
     'transfer_list'          => 'Transfers',
diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php
index 942bb9609c..a6ff27d2ac 100644
--- a/resources/lang/en_US/firefly.php
+++ b/resources/lang/en_US/firefly.php
@@ -186,7 +186,7 @@ return [
     'all_withdrawal'                                      => 'All expenses',
     'all_transactions'                                    => 'All transactions',
     'title_withdrawal_between'                            => 'All expenses between :start and :end',
-    'title_all_between'                            => 'All transactions between :start and :end',
+    'title_all_between'                                   => 'All transactions between :start and :end',
     'all_deposit'                                         => 'All revenue',
     'title_deposit_between'                               => 'All revenue between :start and :end',
     'all_transfers'                                       => 'All transfers',
@@ -249,7 +249,7 @@ return [
     'webhooks'                                            => 'Webhooks',
     'webhooks_breadcrumb'                                 => 'Webhooks',
     'webhooks_menu_disabled'                              => 'disabled',
-    'cer_menu_disabled'                              => 'disabled',
+    'cer_menu_disabled'                                   => 'disabled',
     'no_webhook_messages'                                 => 'There are no webhook messages',
     'webhook_trigger_ANY'                                 => 'After any event',
     'webhook_trigger_STORE_TRANSACTION'                   => 'After transaction creation',
@@ -295,7 +295,7 @@ return [
     'reset_webhook_secret'                                => 'Reset webhook secret',
     'webhook_stored_link'                                 => 'Webhook #{ID} ("{title}") has been stored.',
     'webhook_updated_link'                                => 'Webhook #{ID} ("{title}") has been updated.',
-    'no_webhooks' => 'You have no webhooks. Please create one. Webhooks can be used to make external systems respond to Firefly III events, like newly created transactions or updated budgets.',
+    'no_webhooks'                                         => 'You have no webhooks. Please create one. Webhooks can be used to make external systems respond to Firefly III events, like newly created transactions or updated budgets.',
 
     // API access
     'authorization_request'                               => 'Firefly III v:version Authorization Request',
@@ -1963,8 +1963,8 @@ return [
     'extension_date_is'                                   => 'Extension date is {date}',
 
     // accounts:
-    'disabled_split_account_dest' => 'This field is disabled. You can only change the destination account from the first split,  and it will be applied to all splits.',
-    'disabled_split_account_src' => 'This field is disabled. You can only change the source account from the first split,  and it will be applied to all splits.',
+    'disabled_split_account_dest'                         => 'This field is disabled. You can only change the destination account from the first split,  and it will be applied to all splits.',
+    'disabled_split_account_src'                          => 'This field is disabled. You can only change the source account from the first split,  and it will be applied to all splits.',
     'account_locked_currency'                             => 'The currency of this account must remain :name as long as piggy banks are linked to it.',
     'i_am_owed_amount'                                    => 'I am owed amount',
     'i_owe_amount'                                        => 'I owe amount',
@@ -2071,7 +2071,7 @@ return [
     'reconcile_this_account'                              => 'Reconcile this account',
     'reconcile'                                           => 'Reconcile',
     'show'                                                => 'Show',
-    'hide' => 'Hide',
+    'hide'                                                => 'Hide',
     'confirm_reconciliation'                              => 'Confirm reconciliation',
     'submitted_start_balance'                             => 'Submitted start balance',
     'selected_transactions'                               => 'Selected transactions (:count)',
@@ -2148,7 +2148,7 @@ return [
     'deleted_reconciliation'                              => 'Successfully deleted reconciliation transaction ":description"',
     'stored_journal'                                      => 'Successfully created new transaction ":description"',
     'stored_journal_js'                                   => 'Successfully created new transaction "{{description}}"',
-    'updated_journal_js'                                 => 'Successfully updated transaction "{{description}}"',
+    'updated_journal_js'                                  => 'Successfully updated transaction "{{description}}"',
     'stored_journal_no_descr'                             => 'Successfully created your new transaction',
     'updated_journal_no_descr'                            => 'Successfully updated your transaction',
     'select_transactions'                                 => 'Select transactions',
@@ -2801,9 +2801,9 @@ return [
     'no_categories_intro_default'                         => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.',
     'no_categories_imperative_default'                    => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:',
     'no_categories_create_default'                        => 'Create a category',
-    'no_object-groups_title_default' => 'Object groups',
-    'no_object-groups_intro_default' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page.',
-    'no_object-groups_imperative_default' => 'For more information, check out the help-pages in the top right corner, under the (?)-icon. ',
+    'no_object-groups_title_default'                      => 'Object groups',
+    'no_object-groups_intro_default'                      => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page.',
+    'no_object-groups_imperative_default'                 => 'For more information, check out the help-pages in the top right corner, under the (?)-icon. ',
     'no_tags_title_default'                               => 'Let\'s create a tag!',
     'no_tags_intro_default'                               => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.',
     'no_tags_imperative_default'                          => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:',
diff --git a/resources/lang/en_US/form.php b/resources/lang/en_US/form.php
index d483c680ea..e8e16b2dcb 100644
--- a/resources/lang/en_US/form.php
+++ b/resources/lang/en_US/form.php
@@ -136,7 +136,7 @@ return [
     'mime'                        => 'Mime type',
     'size'                        => 'Size',
     'trigger'                     => 'Trigger',
-    'triggers'                     => 'Triggers',
+    'triggers'                    => 'Triggers',
     'stop_processing'             => 'Stop processing',
     'end_date'                    => 'End date',
     'enddate'                     => 'End date',
@@ -269,9 +269,9 @@ return [
     'key'                         => 'Key',
     'value'                       => 'Content of record',
     'webhook_delivery'            => 'Delivery',
-    'deliveries'            => 'Deliveries',
+    'deliveries'                  => 'Deliveries',
     'webhook_response'            => 'Response',
-    'responses'            => 'Responses',
+    'responses'                   => 'Responses',
     'webhook_trigger'             => 'Trigger',
     'pushover_app_token'          => 'Pushover app token',
     'pushover_user_token'         => 'Pushover user token',
diff --git a/resources/lang/en_US/list.php b/resources/lang/en_US/list.php
index 600ccb54cf..80a1b56875 100644
--- a/resources/lang/en_US/list.php
+++ b/resources/lang/en_US/list.php
@@ -27,8 +27,8 @@ return [
     'icon'                    => 'Icon',
     'id'                      => 'ID',
     'create_date'             => 'Created at',
-    'responds_when' => 'Responds when',
-    'responds_with' => 'Responds with',
+    'responds_when'           => 'Responds when',
+    'responds_with'           => 'Responds with',
     'primary_currency'        => 'Primary currency',
     'update_date'             => 'Updated at',
     'updated_at'              => 'Updated at',