Auto commit for release 'develop' on 2024-04-21

This commit is contained in:
github-actions
2024-04-21 17:23:16 +02:00
parent 3fdde2d1c8
commit 9d1a127200
49 changed files with 302 additions and 259 deletions

View File

@@ -73,7 +73,7 @@ class UpdateController extends Controller
$data = $request->getAll(); $data = $request->getAll();
// Fixes 8750. // Fixes 8750.
$transactions = $data['transactions'] ?? []; $transactions = $data['transactions'] ?? [];
foreach ($transactions as $index => $info) { foreach ($transactions as $index => $info) {
unset($data['transactions'][$index]['type']); unset($data['transactions'][$index]['type']);
} }

View File

@@ -106,8 +106,8 @@ class StoreRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$validTriggers = $this->getTriggers(); $validTriggers = $this->getTriggers();
$validActions = array_keys(config('firefly.rule-actions')); $validActions = array_keys(config('firefly.rule-actions'));
// some triggers and actions require text: // some triggers and actions require text:
$contextTriggers = implode(',', $this->getTriggersWithContext()); $contextTriggers = implode(',', $this->getTriggersWithContext());
@@ -119,11 +119,11 @@ class StoreRequest extends FormRequest
'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title', 'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title',
'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title', 'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title',
'trigger' => 'required|in:store-journal,update-journal', 'trigger' => 'required|in:store-journal,update-journal',
'triggers.*.type' => 'required|in:' . implode(',', $validTriggers), 'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024', 'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024',
'triggers.*.stop_processing' => [new IsBoolean()], 'triggers.*.stop_processing' => [new IsBoolean()],
'triggers.*.active' => [new IsBoolean()], 'triggers.*.active' => [new IsBoolean()],
'actions.*.type' => 'required|in:' . implode(',', $validActions), 'actions.*.type' => 'required|in:'.implode(',', $validActions),
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'], 'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
'actions.*.stop_processing' => [new IsBoolean()], 'actions.*.stop_processing' => [new IsBoolean()],
'actions.*.active' => [new IsBoolean()], 'actions.*.active' => [new IsBoolean()],
@@ -182,10 +182,10 @@ class StoreRequest extends FormRequest
*/ */
protected function atLeastOneActiveTrigger(Validator $validator): void protected function atLeastOneActiveTrigger(Validator $validator): void
{ {
$data = $validator->getData(); $data = $validator->getData();
/** @var null|array|int|string $triggers */ /** @var null|array|int|string $triggers */
$triggers = $data['triggers'] ?? []; $triggers = $data['triggers'] ?? [];
// need at least one trigger // need at least one trigger
if (!is_countable($triggers) || 0 === count($triggers)) { if (!is_countable($triggers) || 0 === count($triggers)) {
return; return;
@@ -211,10 +211,10 @@ class StoreRequest extends FormRequest
*/ */
protected function atLeastOneActiveAction(Validator $validator): void protected function atLeastOneActiveAction(Validator $validator): void
{ {
$data = $validator->getData(); $data = $validator->getData();
/** @var null|array|int|string $actions */ /** @var null|array|int|string $actions */
$actions = $data['actions'] ?? []; $actions = $data['actions'] ?? [];
// need at least one trigger // need at least one trigger
if (!is_countable($actions) || 0 === count($actions)) { if (!is_countable($actions) || 0 === count($actions)) {
return; return;

View File

@@ -47,7 +47,7 @@ class UpdateRequest extends FormRequest
*/ */
public function getAll(): array public function getAll(): array
{ {
$fields = [ $fields = [
'title' => ['title', 'convertString'], 'title' => ['title', 'convertString'],
'description' => ['description', 'stringWithNewlines'], 'description' => ['description', 'stringWithNewlines'],
'rule_group_id' => ['rule_group_id', 'convertInteger'], 'rule_group_id' => ['rule_group_id', 'convertInteger'],
@@ -122,11 +122,11 @@ class UpdateRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$validTriggers = $this->getTriggers(); $validTriggers = $this->getTriggers();
$validActions = array_keys(config('firefly.rule-actions')); $validActions = array_keys(config('firefly.rule-actions'));
/** @var Rule $rule */ /** @var Rule $rule */
$rule = $this->route()->parameter('rule'); $rule = $this->route()->parameter('rule');
// some triggers and actions require text: // some triggers and actions require text:
$contextTriggers = implode(',', $this->getTriggersWithContext()); $contextTriggers = implode(',', $this->getTriggersWithContext());
@@ -138,11 +138,11 @@ class UpdateRequest extends FormRequest
'rule_group_id' => 'belongsToUser:rule_groups', 'rule_group_id' => 'belongsToUser:rule_groups',
'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title', 'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title',
'trigger' => 'in:store-journal,update-journal', 'trigger' => 'in:store-journal,update-journal',
'triggers.*.type' => 'required|in:' . implode(',', $validTriggers), 'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024', 'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024',
'triggers.*.stop_processing' => [new IsBoolean()], 'triggers.*.stop_processing' => [new IsBoolean()],
'triggers.*.active' => [new IsBoolean()], 'triggers.*.active' => [new IsBoolean()],
'actions.*.type' => 'required|in:' . implode(',', $validActions), 'actions.*.type' => 'required|in:'.implode(',', $validActions),
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'], 'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
'actions.*.stop_processing' => [new IsBoolean()], 'actions.*.stop_processing' => [new IsBoolean()],
'actions.*.active' => [new IsBoolean()], 'actions.*.active' => [new IsBoolean()],

View File

@@ -122,7 +122,7 @@ class Controller extends BaseController
$obj = null; $obj = null;
} }
} }
if(null !== $date && 'end' === $field) { if (null !== $date && 'end' === $field) {
$obj->endOfDay(); $obj->endOfDay();
} }
$bag->set($field, $obj); $bag->set($field, $obj);

View File

@@ -25,7 +25,6 @@ namespace FireflyIII\Api\V2\Controllers\Model\Account;
use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Controllers\Controller;
use FireflyIII\Api\V2\Request\Model\Account\IndexRequest; use FireflyIII\Api\V2\Request\Model\Account\IndexRequest;
use FireflyIII\Api\V2\Request\Model\Transaction\InfiniteListRequest;
use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Enums\UserRoleEnum;
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
use FireflyIII\Transformers\V2\AccountTransformer; use FireflyIII\Transformers\V2\AccountTransformer;
@@ -77,6 +76,7 @@ class IndexController extends Controller
return response() return response()
->json($this->jsonApiList('accounts', $paginator, $transformer)) ->json($this->jsonApiList('accounts', $paginator, $transformer))
->header('Content-Type', self::CONTENT_TYPE); ->header('Content-Type', self::CONTENT_TYPE)
;
} }
} }

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Http\Middleware;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Vite; use Illuminate\Support\Facades\Vite;
use Barryvdh\Debugbar\Facades\Debugbar;
/** /**
* Class SecureHeaders * Class SecureHeaders
@@ -41,16 +42,16 @@ class SecureHeaders
public function handle(Request $request, \Closure $next) public function handle(Request $request, \Closure $next)
{ {
// generate and share nonce. // generate and share nonce.
$nonce = base64_encode(random_bytes(16)); $nonce = base64_encode(random_bytes(16));
Vite::useCspNonce($nonce); Vite::useCspNonce($nonce);
if(class_exists('Barryvdh\Debugbar\Facades\Debugbar')) { if (class_exists('Barryvdh\Debugbar\Facades\Debugbar')) {
\Barryvdh\Debugbar\Facades\Debugbar::getJavascriptRenderer()->setCspNonce($nonce); Debugbar::getJavascriptRenderer()->setCspNonce($nonce);
} }
app('view')->share('JS_NONCE', $nonce); app('view')->share('JS_NONCE', $nonce);
$response = $next($request); $response = $next($request);
$trackingScriptSrc = $this->getTrackingScriptSource(); $trackingScriptSrc = $this->getTrackingScriptSource();
$csp = [ $csp = [
"default-src 'none'", "default-src 'none'",
"object-src 'none'", "object-src 'none'",
sprintf("script-src 'unsafe-eval' 'strict-dynamic' 'nonce-%1s'", $nonce), sprintf("script-src 'unsafe-eval' 'strict-dynamic' 'nonce-%1s'", $nonce),
@@ -77,11 +78,10 @@ class SecureHeaders
]; ];
} }
$route = $request->route();
$route = $request->route(); $customUrl = '';
$customUrl = ''; $authGuard = (string) config('firefly.authentication_guard');
$authGuard = (string) config('firefly.authentication_guard'); $logoutUrl = (string) config('firefly.custom_logout_url');
$logoutUrl = (string) config('firefly.custom_logout_url');
if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) { if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) {
$customUrl = $logoutUrl; $customUrl = $logoutUrl;
} }
@@ -90,7 +90,7 @@ class SecureHeaders
$csp[] = sprintf("form-action 'self' %s", $customUrl); $csp[] = sprintf("form-action 'self' %s", $customUrl);
} }
$featurePolicies = [ $featurePolicies = [
"geolocation 'none'", "geolocation 'none'",
"midi 'none'", "midi 'none'",
// "notifications 'none'", // "notifications 'none'",

View File

@@ -296,13 +296,14 @@ class UserGroupRepository implements UserGroupRepositoryInterface
$this->user->save(); $this->user->save();
} }
#[\Override] public function getMembershipsFromGroupId(int $groupId): Collection #[\Override]
public function getMembershipsFromGroupId(int $groupId): Collection
{ {
return $this->user->groupMemberships()->where('user_group_id', $groupId)->get(); return $this->user->groupMemberships()->where('user_group_id', $groupId)->get();
} }
#[\Override]
#[\Override] public function getById(int $id): ?UserGroup public function getById(int $id): ?UserGroup
{ {
return UserGroup::find($id); return UserGroup::find($id);
} }

View File

@@ -65,7 +65,8 @@ class AccountRepository implements AccountRepositoryInterface
$q1->where('account_meta.name', '=', 'account_number'); $q1->where('account_meta.name', '=', 'account_number');
$q1->where('account_meta.data', '=', $json); $q1->where('account_meta.data', '=', $json);
} }
); )
;
if (0 !== count($types)) { if (0 !== count($types)) {
$dbQuery->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); $dbQuery->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id');
@@ -91,7 +92,7 @@ class AccountRepository implements AccountRepositoryInterface
public function findByName(string $name, array $types): ?Account public function findByName(string $name, array $types): ?Account
{ {
$query = $this->userGroup->accounts(); $query = $this->userGroup->accounts();
if (0 !== count($types)) { if (0 !== count($types)) {
$query->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); $query->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id');
@@ -115,8 +116,8 @@ class AccountRepository implements AccountRepositoryInterface
public function getAccountCurrency(Account $account): ?TransactionCurrency public function getAccountCurrency(Account $account): ?TransactionCurrency
{ {
$type = $account->accountType->type; $type = $account->accountType->type;
$list = config('firefly.valid_currency_account_types'); $list = config('firefly.valid_currency_account_types');
// return null if not in this list. // return null if not in this list.
if (!in_array($type, $list, true)) { if (!in_array($type, $list, true)) {
@@ -241,9 +242,9 @@ class AccountRepository implements AccountRepositoryInterface
public function getAccountsByType(array $types, ?array $sort = []): Collection public function getAccountsByType(array $types, ?array $sort = []): Collection
{ {
$sortable = ['name', 'active']; // TODO yes this is a duplicate array. $sortable = ['name', 'active']; // TODO yes this is a duplicate array.
$res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types); $res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types);
$query = $this->userGroup->accounts(); $query = $this->userGroup->accounts();
if (0 !== count($types)) { if (0 !== count($types)) {
$query->accountTypeIn($types); $query->accountTypeIn($types);
} }
@@ -276,11 +277,12 @@ class AccountRepository implements AccountRepositoryInterface
{ {
// search by group, not by user // search by group, not by user
$dbQuery = $this->userGroup->accounts() $dbQuery = $this->userGroup->accounts()
->where('active', true) ->where('active', true)
->orderBy('accounts.order', 'ASC') ->orderBy('accounts.order', 'ASC')
->orderBy('accounts.account_type_id', 'ASC') ->orderBy('accounts.account_type_id', 'ASC')
->orderBy('accounts.name', 'ASC') ->orderBy('accounts.name', 'ASC')
->with(['accountType']); ->with(['accountType'])
;
if ('' !== $query) { if ('' !== $query) {
// split query on spaces just in case: // split query on spaces just in case:
$parts = explode(' ', $query); $parts = explode(' ', $query);
@@ -306,29 +308,33 @@ class AccountRepository implements AccountRepositoryInterface
return $service->update($account, $data); return $service->update($account, $data);
} }
#[\Override] public function getMetaValues(Collection $accounts, array $fields): Collection #[\Override]
public function getMetaValues(Collection $accounts, array $fields): Collection
{ {
$query = AccountMeta::whereIn('account_id', $accounts->pluck('id')->toArray()); $query = AccountMeta::whereIn('account_id', $accounts->pluck('id')->toArray());
if (count($fields) > 0) { if (count($fields) > 0) {
$query->whereIn('name', $fields); $query->whereIn('name', $fields);
} }
return $query->get(['account_meta.id', 'account_meta.account_id', 'account_meta.name', 'account_meta.data']); return $query->get(['account_meta.id', 'account_meta.account_id', 'account_meta.name', 'account_meta.data']);
} }
#[\Override] public function getAccountTypes(Collection $accounts): Collection #[\Override]
public function getAccountTypes(Collection $accounts): Collection
{ {
return AccountType::leftJoin('accounts', 'accounts.account_type_id', '=', 'account_types.id') return AccountType::leftJoin('accounts', 'accounts.account_type_id', '=', 'account_types.id')
->whereIn('accounts.id', $accounts->pluck('id')->toArray()) ->whereIn('accounts.id', $accounts->pluck('id')->toArray())
->get(['accounts.id', 'account_types.type']); ->get(['accounts.id', 'account_types.type'])
;
} }
#[\Override] public function getLastActivity(Collection $accounts): array #[\Override]
public function getLastActivity(Collection $accounts): array
{ {
return Transaction::whereIn('account_id', $accounts->pluck('id')->toArray()) return Transaction::whereIn('account_id', $accounts->pluck('id')->toArray())
->leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id') ->leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id')
->groupBy('transactions.account_id') ->groupBy('transactions.account_id')
->get(['transactions.account_id', DB::raw('MAX(transaction_journals.date) as date_max')])->toArray() // @phpstan-ignore-line ->get(['transactions.account_id', DB::raw('MAX(transaction_journals.date) as date_max')])->toArray() // @phpstan-ignore-line
; ;
} }
} }

View File

@@ -51,8 +51,8 @@ trait ValidatesUserGroupTrait
} }
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
$groupId = 0; $groupId = 0;
if (!$request->has('user_group_id')) { if (!$request->has('user_group_id')) {
$groupId = $user->user_group_id; $groupId = $user->user_group_id;
Log::debug(sprintf('validateUserGroup: no user group submitted, use default group #%d.', $groupId)); Log::debug(sprintf('validateUserGroup: no user group submitted, use default group #%d.', $groupId));
@@ -61,8 +61,9 @@ trait ValidatesUserGroupTrait
$groupId = (int) $request->get('user_group_id'); $groupId = (int) $request->get('user_group_id');
Log::debug(sprintf('validateUserGroup: user group submitted, search for memberships in group #%d.', $groupId)); Log::debug(sprintf('validateUserGroup: user group submitted, search for memberships in group #%d.', $groupId));
} }
/** @var UserGroupRepositoryInterface $repository */ /** @var UserGroupRepositoryInterface $repository */
$repository = app(UserGroupRepositoryInterface::class); $repository = app(UserGroupRepositoryInterface::class);
$repository->setUser($user); $repository->setUser($user);
$memberships = $repository->getMembershipsFromGroupId($groupId); $memberships = $repository->getMembershipsFromGroupId($groupId);
@@ -73,14 +74,14 @@ trait ValidatesUserGroupTrait
} }
// need to get the group from the membership: // need to get the group from the membership:
$group = $repository->getById($groupId); $group = $repository->getById($groupId);
if (null === $group) { if (null === $group) {
Log::debug(sprintf('validateUserGroup: group #%d does not exist.', $groupId)); Log::debug(sprintf('validateUserGroup: group #%d does not exist.', $groupId));
throw new AuthorizationException((string) trans('validation.belongs_user_or_user_group')); throw new AuthorizationException((string) trans('validation.belongs_user_or_user_group'));
} }
Log::debug(sprintf('validateUserGroup: validate access of user to group #%d ("%s").', $groupId, $group->title)); Log::debug(sprintf('validateUserGroup: validate access of user to group #%d ("%s").', $groupId, $group->title));
$roles = property_exists($this, 'acceptedRoles') ? $this->acceptedRoles : []; $roles = property_exists($this, 'acceptedRoles') ? $this->acceptedRoles : [];
if (0 === count($roles)) { if (0 === count($roles)) {
Log::debug('validateUserGroup: no roles defined, so no access.'); Log::debug('validateUserGroup: no roles defined, so no access.');

View File

@@ -464,7 +464,7 @@ class Navigation
$increment = 'addDay'; $increment = 'addDay';
$format = $this->preferredCarbonFormat($start, $end); $format = $this->preferredCarbonFormat($start, $end);
$displayFormat = (string)trans('config.month_and_day_js', [], $locale); $displayFormat = (string)trans('config.month_and_day_js', [], $locale);
$diff = $start->diffInMonths($end, true); $diff = $start->diffInMonths($end, true);
// increment by month (for year) // increment by month (for year)
if ($diff >= 1.0001) { if ($diff >= 1.0001) {
$increment = 'addMonth'; $increment = 'addMonth';
@@ -495,7 +495,7 @@ class Navigation
public function preferredCarbonFormat(Carbon $start, Carbon $end): string public function preferredCarbonFormat(Carbon $start, Carbon $end): string
{ {
$format = 'Y-m-d'; $format = 'Y-m-d';
$diff = $start->diffInMonths($end, true); $diff = $start->diffInMonths($end, true);
Log::debug(sprintf('preferredCarbonFormat(%s, %s) = %f', $start->format('Y-m-d'), $end->format('Y-m-d'), $diff)); Log::debug(sprintf('preferredCarbonFormat(%s, %s) = %f', $start->format('Y-m-d'), $end->format('Y-m-d'), $diff));
if ($diff >= 1.001) { if ($diff >= 1.001) {
Log::debug(sprintf('Return Y-m because %s', $diff)); Log::debug(sprintf('Return Y-m because %s', $diff));

View File

@@ -71,7 +71,7 @@ class RuleTransformer extends AbstractTransformer
'links' => [ 'links' => [
[ [
'rel' => 'self', 'rel' => 'self',
'uri' => '/rules/' . $rule->id, 'uri' => '/rules/'.$rule->id,
], ],
], ],
]; ];
@@ -108,12 +108,12 @@ class RuleTransformer extends AbstractTransformer
if ('user_action' === $ruleTrigger->trigger_type) { if ('user_action' === $ruleTrigger->trigger_type) {
continue; continue;
} }
$triggerType = (string) $ruleTrigger->trigger_type; $triggerType = (string) $ruleTrigger->trigger_type;
$triggerValue = (string)$ruleTrigger->trigger_value; $triggerValue = (string)$ruleTrigger->trigger_value;
$prohibited = false; $prohibited = false;
if(str_starts_with($triggerType, '-')) { if (str_starts_with($triggerType, '-')) {
$prohibited = true; $prohibited = true;
$triggerType = substr($triggerType, 1); $triggerType = substr($triggerType, 1);
} }
@@ -122,7 +122,7 @@ class RuleTransformer extends AbstractTransformer
$triggerValue = 'true'; $triggerValue = 'true';
} }
$result[] = [ $result[] = [
'id' => (string)$ruleTrigger->id, 'id' => (string)$ruleTrigger->id,
'created_at' => $ruleTrigger->created_at->toAtomString(), 'created_at' => $ruleTrigger->created_at->toAtomString(),
'updated_at' => $ruleTrigger->updated_at->toAtomString(), 'updated_at' => $ruleTrigger->updated_at->toAtomString(),

View File

@@ -80,8 +80,6 @@ class AccountTransformer extends AbstractTransformer
} }
return $this->sortAccounts($objects); return $this->sortAccounts($objects);
} }
private function getDate(): Carbon private function getDate(): Carbon
@@ -99,21 +97,21 @@ class AccountTransformer extends AbstractTransformer
*/ */
public function transform(Account $account): array public function transform(Account $account): array
{ {
$id = $account->id; $id = $account->id;
// various meta // various meta
$accountRole = $this->accountMeta[$id]['account_role'] ?? null; $accountRole = $this->accountMeta[$id]['account_role'] ?? null;
$accountType = $this->accountTypes[$id]; $accountType = $this->accountTypes[$id];
$order = $account->order; $order = $account->order;
// no currency? use default // no currency? use default
$currency = $this->default; $currency = $this->default;
if (array_key_exists($id, $this->accountMeta) && 0 !== (int) ($this->accountMeta[$id]['currency_id'] ?? 0)) { if (array_key_exists($id, $this->accountMeta) && 0 !== (int) ($this->accountMeta[$id]['currency_id'] ?? 0)) {
$currency = $this->currencies[(int) $this->accountMeta[$id]['currency_id']]; $currency = $this->currencies[(int) $this->accountMeta[$id]['currency_id']];
} }
// amounts and calculation. // amounts and calculation.
$balance = $this->balances[$id]['balance'] ?? null; $balance = $this->balances[$id]['balance'] ?? null;
$nativeBalance = $this->convertedBalances[$id]['native_balance'] ?? null; $nativeBalance = $this->convertedBalances[$id]['native_balance'] ?? null;
// no order for some accounts: // no order for some accounts:
if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) { if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) {
@@ -121,33 +119,32 @@ class AccountTransformer extends AbstractTransformer
} }
// balance difference // balance difference
$diffStart = null; $diffStart = null;
$diffEnd = null; $diffEnd = null;
$balanceDiff = null; $balanceDiff = null;
$nativeBalanceDiff = null; $nativeBalanceDiff = null;
if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) { if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) {
$diffStart = $this->parameters->get('start')->toAtomString(); $diffStart = $this->parameters->get('start')->toAtomString();
$diffEnd = $this->parameters->get('end')->toAtomString(); $diffEnd = $this->parameters->get('end')->toAtomString();
$balanceDiff = $this->balanceDifferences[$id]['balance'] ?? null; $balanceDiff = $this->balanceDifferences[$id]['balance'] ?? null;
$nativeBalanceDiff = $this->balanceDifferences[$id]['native_balance'] ?? null; $nativeBalanceDiff = $this->balanceDifferences[$id]['native_balance'] ?? null;
} }
return [ return [
'id' => (string) $account->id, 'id' => (string) $account->id,
'created_at' => $account->created_at->toAtomString(), 'created_at' => $account->created_at->toAtomString(),
'updated_at' => $account->updated_at->toAtomString(), 'updated_at' => $account->updated_at->toAtomString(),
'active' => $account->active, 'active' => $account->active,
'order' => $order, 'order' => $order,
'name' => $account->name, 'name' => $account->name,
'iban' => '' === (string) $account->iban ? null : $account->iban, 'iban' => '' === (string) $account->iban ? null : $account->iban,
'account_number' => $this->accountMeta[$id]['account_number'] ?? null, 'account_number' => $this->accountMeta[$id]['account_number'] ?? null,
'type' => strtolower($accountType), 'type' => strtolower($accountType),
'account_role' => $accountRole, 'account_role' => $accountRole,
'currency_id' => (string) $currency->id, 'currency_id' => (string) $currency->id,
'currency_code' => $currency->code, 'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol, 'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places, 'currency_decimal_places' => $currency->decimal_places,
'native_currency_id' => (string) $this->default->id, 'native_currency_id' => (string) $this->default->id,
'native_currency_code' => $this->default->code, 'native_currency_code' => $this->default->code,
@@ -188,7 +185,7 @@ class AccountTransformer extends AbstractTransformer
'links' => [ 'links' => [
[ [
'rel' => 'self', 'rel' => 'self',
'uri' => '/accounts/' . $account->id, 'uri' => '/accounts/'.$account->id,
], ],
], ],
]; ];
@@ -206,19 +203,19 @@ class AccountTransformer extends AbstractTransformer
private function getDefaultCurrency(): void private function getDefaultCurrency(): void
{ {
$this->default = app('amount')->getDefaultCurrency(); $this->default = app('amount')->getDefaultCurrency();
} }
private function collectAccountMetaData(Collection $accounts): void private function collectAccountMetaData(Collection $accounts): void
{ {
/** @var CurrencyRepositoryInterface $repository */ /** @var CurrencyRepositoryInterface $repository */
$repository = app(CurrencyRepositoryInterface::class); $repository = app(CurrencyRepositoryInterface::class);
/** @var AccountRepositoryInterface $accountRepository */ /** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class); $accountRepository = app(AccountRepositoryInterface::class);
$metaFields = $accountRepository->getMetaValues($accounts, ['currency_id', 'account_role', 'account_number']); $metaFields = $accountRepository->getMetaValues($accounts, ['currency_id', 'account_role', 'account_number']);
$currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray(); $currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray();
$currencies = $repository->getByIds($currencyIds); $currencies = $repository->getByIds($currencyIds);
foreach ($currencies as $currency) { foreach ($currencies as $currency) {
$id = $currency->id; $id = $currency->id;
$this->currencies[$id] = $currency; $this->currencies[$id] = $currency;
@@ -265,14 +262,12 @@ class AccountTransformer extends AbstractTransformer
* @var string $direction * @var string $direction
*/ */
foreach ($sort as $column => $direction) { foreach ($sort as $column => $direction) {
// account_number + iban // account_number + iban
if ('iban' === $column) { if ('iban' === $column) {
$accounts = $this->sortByIban($accounts, $direction); $accounts = $this->sortByIban($accounts, $direction);
} }
if ('balance' === $column) { if ('balance' === $column) {
$accounts = $this->sortByBalance($accounts, $direction); $accounts = $this->sortByBalance($accounts, $direction);
} }
if ('last_activity' === $column) { if ('last_activity' === $column) {
$accounts = $this->sortByLastActivity($accounts, $direction); $accounts = $this->sortByLastActivity($accounts, $direction);
@@ -281,12 +276,14 @@ class AccountTransformer extends AbstractTransformer
$accounts = $this->sortByBalanceDifference($accounts, $direction); $accounts = $this->sortByBalanceDifference($accounts, $direction);
} }
} }
return $accounts; return $accounts;
} }
private function sortByIban(Collection $accounts, string $direction): Collection private function sortByIban(Collection $accounts, string $direction): Collection
{ {
$meta = $this->accountMeta; $meta = $this->accountMeta;
return $accounts->sort(function (Account $left, Account $right) use ($meta, $direction) { return $accounts->sort(function (Account $left, Account $right) use ($meta, $direction) {
$leftIban = trim(sprintf('%s%s', $left->iban, $meta[$left->id]['account_number'] ?? '')); $leftIban = trim(sprintf('%s%s', $left->iban, $meta[$left->id]['account_number'] ?? ''));
$rightIban = trim(sprintf('%s%s', $right->iban, $meta[$right->id]['account_number'] ?? '')); $rightIban = trim(sprintf('%s%s', $right->iban, $meta[$right->id]['account_number'] ?? ''));
@@ -301,6 +298,7 @@ class AccountTransformer extends AbstractTransformer
private function sortByBalance(Collection $accounts, string $direction): Collection private function sortByBalance(Collection $accounts, string $direction): Collection
{ {
$balances = $this->convertedBalances; $balances = $this->convertedBalances;
return $accounts->sort(function (Account $left, Account $right) use ($balances, $direction) { return $accounts->sort(function (Account $left, Account $right) use ($balances, $direction) {
$leftBalance = (float) ($balances[$left->id]['native_balance'] ?? 0); $leftBalance = (float) ($balances[$left->id]['native_balance'] ?? 0);
$rightBalance = (float) ($balances[$right->id]['native_balance'] ?? 0); $rightBalance = (float) ($balances[$right->id]['native_balance'] ?? 0);
@@ -315,6 +313,7 @@ class AccountTransformer extends AbstractTransformer
private function sortByLastActivity(Collection $accounts, string $direction): Collection private function sortByLastActivity(Collection $accounts, string $direction): Collection
{ {
$dates = $this->lastActivity; $dates = $this->lastActivity;
return $accounts->sort(function (Account $left, Account $right) use ($dates, $direction) { return $accounts->sort(function (Account $left, Account $right) use ($dates, $direction) {
$leftDate = $dates[$left->id] ?? Carbon::create(1900, 1, 1, 0, 0, 0); $leftDate = $dates[$left->id] ?? Carbon::create(1900, 1, 1, 0, 0, 0);
$rightDate = $dates[$right->id] ?? Carbon::create(1900, 1, 1, 0, 0, 0); $rightDate = $dates[$right->id] ?? Carbon::create(1900, 1, 1, 0, 0, 0);
@@ -332,12 +331,14 @@ class AccountTransformer extends AbstractTransformer
// yes the b is usually used for boolean by idiots but here it's for balance. // yes the b is usually used for boolean by idiots but here it's for balance.
$bStart = []; $bStart = [];
$bEnd = []; $bEnd = [];
try { try {
$bStart = app('steam')->balancesByAccountsConverted($accounts, $start); $bStart = app('steam')->balancesByAccountsConverted($accounts, $start);
$bEnd = app('steam')->balancesByAccountsConverted($accounts, $end); $bEnd = app('steam')->balancesByAccountsConverted($accounts, $end);
} catch (FireflyException $e) { } catch (FireflyException $e) {
Log::error($e->getMessage()); Log::error($e->getMessage());
} }
/** @var Account $account */ /** @var Account $account */
foreach ($accounts as $account) { foreach ($accounts as $account) {
$id = $account->id; $id = $account->id;
@@ -348,11 +349,12 @@ class AccountTransformer extends AbstractTransformer
]; ];
} }
} }
} }
private function sortByBalanceDifference(Collection $accounts, string $direction): Collection { private function sortByBalanceDifference(Collection $accounts, string $direction): Collection
{
$balances = $this->balanceDifferences; $balances = $this->balanceDifferences;
return $accounts->sort(function (Account $left, Account $right) use ($balances, $direction) { return $accounts->sort(function (Account $left, Account $right) use ($balances, $direction) {
$leftBalance = (float) ($balances[$left->id]['native_balance'] ?? 0); $leftBalance = (float) ($balances[$left->id]['native_balance'] ?? 0);
$rightBalance = (float) ($balances[$right->id]['native_balance'] ?? 0); $rightBalance = (float) ($balances[$right->id]['native_balance'] ?? 0);

22
composer.lock generated
View File

@@ -3366,16 +3366,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "3.2.4", "version": "3.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "82c28278c1c8f7b82dcdab25692237f052ffc8d8" "reference": "7219739c4e01d4680c980545821733b6ed8ee880"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/82c28278c1c8f7b82dcdab25692237f052ffc8d8", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7219739c4e01d4680c980545821733b6ed8ee880",
"reference": "82c28278c1c8f7b82dcdab25692237f052ffc8d8", "reference": "7219739c4e01d4680c980545821733b6ed8ee880",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3468,7 +3468,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-05T09:58:10+00:00" "time": "2024-04-18T16:35:06+00:00"
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
@@ -10391,16 +10391,16 @@
}, },
{ {
"name": "phpstan/phpstan-strict-rules", "name": "phpstan/phpstan-strict-rules",
"version": "1.5.3", "version": "1.5.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git", "url": "https://github.com/phpstan/phpstan-strict-rules.git",
"reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b" "reference": "2e193a07651a6f4be3baa44ddb21d822681f5918"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/568210bd301f94a0d4b1e5a0808c374c1b9cf11b", "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/2e193a07651a6f4be3baa44ddb21d822681f5918",
"reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b", "reference": "2e193a07651a6f4be3baa44ddb21d822681f5918",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -10434,9 +10434,9 @@
"description": "Extra strict and opinionated rules for PHPStan", "description": "Extra strict and opinionated rules for PHPStan",
"support": { "support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues", "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
"source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.3" "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.5"
}, },
"time": "2024-04-06T07:43:25+00:00" "time": "2024-04-19T15:12:26+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",

View File

@@ -1,7 +1,8 @@
<?php <?php
return [ declare(strict_types=1);
return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Debugbar Settings | Debugbar Settings
@@ -14,8 +15,8 @@ return [
| |
*/ */
'enabled' => env('DEBUGBAR_ENABLED', null), 'enabled' => env('DEBUGBAR_ENABLED', null),
'except' => [ 'except' => [
'telescope*', 'telescope*',
'horizon*', 'horizon*',
], ],
@@ -36,7 +37,7 @@ return [
| Specify a callback if you want to limit based on IP or authentication. | Specify a callback if you want to limit based on IP or authentication.
| Leaving it to null will allow localhost only. | Leaving it to null will allow localhost only.
*/ */
'storage' => [ 'storage' => [
'enabled' => true, 'enabled' => true,
'open' => env('DEBUGBAR_OPEN_STORAGE'), // bool/callback. 'open' => env('DEBUGBAR_OPEN_STORAGE'), // bool/callback.
'driver' => 'file', // redis, file, pdo, socket, custom 'driver' => 'file', // redis, file, pdo, socket, custom
@@ -61,7 +62,7 @@ return [
| |
*/ */
'editor' => env('DEBUGBAR_EDITOR') ?: env('IGNITION_EDITOR', 'phpstorm'), 'editor' => env('DEBUGBAR_EDITOR') ?: env('IGNITION_EDITOR', 'phpstorm'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -86,8 +87,8 @@ return [
| |
*/ */
'remote_sites_path' => env('DEBUGBAR_REMOTE_SITES_PATH'), 'remote_sites_path' => env('DEBUGBAR_REMOTE_SITES_PATH'),
'local_sites_path' => env('DEBUGBAR_LOCAL_SITES_PATH', env('IGNITION_LOCAL_SITES_PATH')), 'local_sites_path' => env('DEBUGBAR_LOCAL_SITES_PATH', env('IGNITION_LOCAL_SITES_PATH')),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -103,7 +104,7 @@ return [
| |
*/ */
'include_vendors' => true, 'include_vendors' => true,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -122,9 +123,9 @@ return [
| Changing `ajax_handler_auto_show` to false will prevent the Debugbar from reloading. | Changing `ajax_handler_auto_show` to false will prevent the Debugbar from reloading.
*/ */
'capture_ajax' => true, 'capture_ajax' => true,
'add_ajax_timing' => false, 'add_ajax_timing' => false,
'ajax_handler_auto_show' => true, 'ajax_handler_auto_show' => true,
'ajax_handler_enable_tab' => true, 'ajax_handler_enable_tab' => true,
/* /*
@@ -136,7 +137,7 @@ return [
| in the Messages tab. | in the Messages tab.
| |
*/ */
'error_handler' => false, 'error_handler' => false,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -147,7 +148,7 @@ return [
| Extension, without the server-side code. It uses Debugbar collectors instead. | Extension, without the server-side code. It uses Debugbar collectors instead.
| |
*/ */
'clockwork' => false, 'clockwork' => false,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -158,7 +159,7 @@ return [
| |
*/ */
'collectors' => [ 'collectors' => [
'phpinfo' => true, // Php version 'phpinfo' => true, // Php version
'messages' => true, // Messages 'messages' => true, // Messages
'time' => true, // Time Datalogger 'time' => true, // Time Datalogger
@@ -194,67 +195,67 @@ return [
| |
*/ */
'options' => [ 'options' => [
'time' => [ 'time' => [
'memory_usage' => false, // Calculated by subtracting memory start and end, it may be inaccurate 'memory_usage' => false, // Calculated by subtracting memory start and end, it may be inaccurate
], ],
'messages' => [ 'messages' => [
'trace' => true, // Trace the origin of the debug message 'trace' => true, // Trace the origin of the debug message
], ],
'memory' => [ 'memory' => [
'reset_peak' => false, // run memory_reset_peak_usage before collecting 'reset_peak' => false, // run memory_reset_peak_usage before collecting
'with_baseline' => false, // Set boot memory usage as memory peak baseline 'with_baseline' => false, // Set boot memory usage as memory peak baseline
'precision' => 0, // Memory rounding precision 'precision' => 0, // Memory rounding precision
], ],
'auth' => [ 'auth' => [
'show_name' => true, // Also show the users name/email in the debugbar 'show_name' => true, // Also show the users name/email in the debugbar
'show_guards' => true, // Show the guards that are used 'show_guards' => true, // Show the guards that are used
], ],
'db' => [ 'db' => [
'with_params' => true, // Render SQL with the parameters substituted 'with_params' => true, // Render SQL with the parameters substituted
'backtrace' => true, // Use a backtrace to find the origin of the query in your files. 'backtrace' => true, // Use a backtrace to find the origin of the query in your files.
'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults) 'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults)
'timeline' => false, // Add the queries to the timeline 'timeline' => false, // Add the queries to the timeline
'duration_background' => true, // Show shaded background on each query relative to how long it took to execute. 'duration_background' => true, // Show shaded background on each query relative to how long it took to execute.
'explain' => [ // Show EXPLAIN output on queries 'explain' => [ // Show EXPLAIN output on queries
'enabled' => false, 'enabled' => false,
'types' => ['SELECT'], // Deprecated setting, is always only SELECT 'types' => ['SELECT'], // Deprecated setting, is always only SELECT
], ],
'hints' => false, // Show hints for common mistakes 'hints' => false, // Show hints for common mistakes
'show_copy' => false, // Show copy button next to the query, 'show_copy' => false, // Show copy button next to the query,
'slow_threshold' => false, // Only track queries that last longer than this time in ms 'slow_threshold' => false, // Only track queries that last longer than this time in ms
'memory_usage' => false, // Show queries memory usage 'memory_usage' => false, // Show queries memory usage
'soft_limit' => 100, // After the soft limit, no parameters/backtrace are captured 'soft_limit' => 100, // After the soft limit, no parameters/backtrace are captured
'hard_limit' => 500, // After the hard limit, queries are ignored 'hard_limit' => 500, // After the hard limit, queries are ignored
], ],
'mail' => [ 'mail' => [
'timeline' => false, // Add mails to the timeline 'timeline' => false, // Add mails to the timeline
'show_body' => true, 'show_body' => true,
], ],
'views' => [ 'views' => [
'timeline' => false, // Add the views to the timeline (Experimental) 'timeline' => false, // Add the views to the timeline (Experimental)
'data' => false, //true for all data, 'keys' for only names, false for no parameters. 'data' => false, // true for all data, 'keys' for only names, false for no parameters.
'group' => 50, // Group duplicate views. Pass value to auto-group, or true/false to force 'group' => 50, // Group duplicate views. Pass value to auto-group, or true/false to force
'exclude_paths' => [ // Add the paths which you don't want to appear in the views 'exclude_paths' => [ // Add the paths which you don't want to appear in the views
'vendor/filament' // Exclude Filament components by default 'vendor/filament', // Exclude Filament components by default
], ],
], ],
'route' => [ 'route' => [
'label' => true, // show complete route on bar 'label' => true, // show complete route on bar
], ],
'session' => [ 'session' => [
'hiddens' => [], // hides sensitive values using array paths 'hiddens' => [], // hides sensitive values using array paths
], ],
'symfony_request' => [ 'symfony_request' => [
'hiddens' => [], // hides sensitive values using array paths, example: request_request.password 'hiddens' => [], // hides sensitive values using array paths, example: request_request.password
], ],
'events' => [ 'events' => [
'data' => false, // collect events data, listeners 'data' => false, // collect events data, listeners
], ],
'logs' => [ 'logs' => [
'file' => null, 'file' => null,
], ],
'cache' => [ 'cache' => [
'values' => true, // collect cache values 'values' => true, // collect cache values
], ],
], ],
@@ -270,7 +271,7 @@ return [
| |
*/ */
'inject' => true, 'inject' => true,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -282,7 +283,7 @@ return [
| from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97 | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
| |
*/ */
'route_prefix' => '_debugbar', 'route_prefix' => '_debugbar',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -291,7 +292,7 @@ return [
| |
| Additional middleware to run on the Debugbar routes | Additional middleware to run on the Debugbar routes
*/ */
'route_middleware' => [], 'route_middleware' => [],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -301,7 +302,7 @@ return [
| By default DebugBar route served from the same domain that request served. | By default DebugBar route served from the same domain that request served.
| To override default domain, specify it as a non-empty value. | To override default domain, specify it as a non-empty value.
*/ */
'route_domain' => null, 'route_domain' => null,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -311,7 +312,7 @@ return [
| Switches between light and dark theme. If set to auto it will respect system preferences | Switches between light and dark theme. If set to auto it will respect system preferences
| Possible values: auto, light, dark | Possible values: auto, light, dark
*/ */
'theme' => env('DEBUGBAR_THEME', 'auto'), 'theme' => env('DEBUGBAR_THEME', 'auto'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -321,5 +322,5 @@ return [
| By default, the DebugBar limits the number of frames returned by the 'debug_backtrace()' function. | By default, the DebugBar limits the number of frames returned by the 'debug_backtrace()' function.
| If you need larger stacktraces, you can increase this number. Setting it to 0 will result in no limit. | If you need larger stacktraces, you can increase this number. Setting it to 0 will result in no limit.
*/ */
'debug_backtrace_limit' => 50, 'debug_backtrace_limit' => 50,
]; ];

View File

@@ -117,7 +117,7 @@ return [
'expression_engine' => false, 'expression_engine' => false,
// see cer.php for exchange rates feature flag. // see cer.php for exchange rates feature flag.
], ],
'version' => 'develop/2024-04-18', 'version' => 'develop/2024-04-21',
'api_version' => '2.0.14', 'api_version' => '2.0.14',
'db_version' => 24, 'db_version' => 24,
@@ -924,7 +924,7 @@ return [
'sorting' => [ 'sorting' => [
'allowed' => [ 'allowed' => [
'transactions' => ['description', 'amount'], 'transactions' => ['description', 'amount'],
'accounts' => ['name', 'active', 'iban', 'balance', 'last_activity','balance_difference'], 'accounts' => ['name', 'active', 'iban', 'balance', 'last_activity', 'balance_difference'],
], ],
], ],
]; ];

170
package-lock.json generated
View File

@@ -2402,9 +2402,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.0.tgz",
"integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==", "integrity": "sha512-4fDVBAfWYlw2CtYgHEWarAYSozTx5OYLsSM/cdGW7H51FwI10DaGnjKgdqWyWXY/VjugelzriCiKf1UdM20Bxg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2415,9 +2415,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.0.tgz",
"integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==", "integrity": "sha512-JltUBgsKgN108NO4/hj0B/dJYNrqqmdRCtUet5tFDi/w+0tvQP0FToyWBV4HKBcSX4cvFChrCyt5Rh4FX6M6QQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2428,9 +2428,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.0.tgz",
"integrity": "sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==", "integrity": "sha512-UwF7tkWf0roggMRv7Vrkof7VgX9tEZIc4vbaQl0/HNX3loWlcum+0ODp1Qsd8s7XvQGT+Zboxx1qxav3vq8YDw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2441,9 +2441,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.0.tgz",
"integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==", "integrity": "sha512-RIY42wn6+Yb0qD29T7Dvm9/AhxrkGDf7X5dgI6rUFXR19+vCLh3u45yLcKOayu2ZQEba9rf/+BX3EggVwckiIw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2454,9 +2454,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.0.tgz",
"integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==", "integrity": "sha512-r2TGCIKzqk8VwjOvW7sveledh6aPao131ejUfZNIyFlWBCruF4HOu51KtLArDa7LL6qKd0vkgxGX3/2NmYpWig==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2467,9 +2467,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.0.tgz",
"integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==", "integrity": "sha512-/QwaDp0RXQTtm25wQFSl02zEm9oveRXr9qAHbdxWCm9YG9dR8esqpyqzS/3GgHDm7jHktPNz9gTENfoUKRCcXQ==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2480,9 +2480,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.0.tgz",
"integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==", "integrity": "sha512-iypHsz7YEfoyNL0iHbQ7B7pY6hpymvvMgFXXaMd5+WCtvJ9zqWPZKFmo78UeWzWNmTP9JtPiNIQt6efRxx/MNA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2493,9 +2493,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.0.tgz",
"integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==", "integrity": "sha512-7UpYcO0uVeomnoL5MpQhrS0FT7xZUJrEXtKVLmps5bRA7x5AiA1PDuPnMbxcOBWjIM2HHIG1t3ndnRTVMIbk5A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2506,9 +2506,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.0.tgz",
"integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==", "integrity": "sha512-FSuFy4/hOQy0lH135ifnElP/6dKoHcZGHovsaRY0jrfNRR2yjMnVYaqNHKGKy0b/1I8DkD/JtclgJfq7SPti1w==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -2519,9 +2519,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.0.tgz",
"integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==", "integrity": "sha512-qxAB8MiHuDI8jU0D+WI9Gym3fvUJHA/AjKRXxbEH921SB3AeKQStq1FKFA59dAoqqCArjJ1voXM/gMvgEc1q4Q==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@@ -2532,9 +2532,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.0.tgz",
"integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==", "integrity": "sha512-j/9yBgWFlNFBfG/S1M2zkBNLeLkNVG59T5c4tlmlrxU+XITWJ3aMVWdpcZ/+mu7auGZftAXueAgAE9mb4lAlag==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@@ -2545,9 +2545,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.0.tgz",
"integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==", "integrity": "sha512-SjsBA1a9wrEleNneGEsR40HdxKdwCatyHC547o/XINqwPW4cqTYiNy/lL1WTJYWU/KgWIb8HH4SgmFStbWoBzw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2558,9 +2558,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.0.tgz",
"integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==", "integrity": "sha512-YKCs7ghJZ5po6/qgfONiXyFKOKcTK4Kerzk/Kc89QK0JT94Qg4NurL+3Y3rZh5am2tu1OlvHPpBHQNBE8cFgJQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2571,9 +2571,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.0.tgz",
"integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==", "integrity": "sha512-+wtkF+z2nw0ZwwHji01wOW0loxFl24lBNxPtVAXtnPPDL9Ew0EhiCMOegXe/EAH3Zlr8Iw9tyPJXB3DltQLEyw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2584,9 +2584,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.0.tgz",
"integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==", "integrity": "sha512-7qLyKTL7Lf2g0B8bduETVAEI3WVUVwBRVcECojVevPNVAmi19IW1P2X+uMSwhmWNy36Q/qEvxXsfts1I8wpawg==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -2597,9 +2597,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.0.tgz",
"integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==", "integrity": "sha512-tkfxXt+7c3Ecgn7ln9NJPdBM+QKwQdmFFpgAP+FYhAuRS5y3tY8xeza82gFjbPpytkHmaQnVdMtuzbToCz2tuw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2708,9 +2708,9 @@
} }
}, },
"node_modules/@types/eslint": { "node_modules/@types/eslint": {
"version": "8.56.9", "version": "8.56.10",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
"integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/estree": "*", "@types/estree": "*",
@@ -3373,9 +3373,9 @@
} }
}, },
"node_modules/alpinejs": { "node_modules/alpinejs": {
"version": "3.13.8", "version": "3.13.9",
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.8.tgz", "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.9.tgz",
"integrity": "sha512-XolbBJryCndomtaHd/KHQjQeD/L72FJxy/YhLLFD4Lr7zzGcpcbg+UgXteMR2pYg1KhRUr6V4O3GfN1zJAmRWw==", "integrity": "sha512-BTEJ3fcUpqKlB+aFYSWGVEp8IP3vA96x7wUaNSdb5SJxV5i7s+/Bduxy9D6TokcqpW5MygsnG1eBEFfr4AnQSw==",
"dependencies": { "dependencies": {
"@vue/reactivity": "~3.1.1" "@vue/reactivity": "~3.1.1"
} }
@@ -5095,9 +5095,9 @@
"dev": true "dev": true
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.740", "version": "1.4.745",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.740.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz",
"integrity": "sha512-Yvg5i+iyv7Xm18BRdVPVm8lc7kgxM3r6iwqCH2zB7QZy1kZRNmd0Zqm0zcD9XoFREE5/5rwIuIAOT+/mzGcnZg==", "integrity": "sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA==",
"dev": true "dev": true
}, },
"node_modules/elliptic": { "node_modules/elliptic": {
@@ -6305,9 +6305,9 @@
} }
}, },
"node_modules/i18next-http-backend": { "node_modules/i18next-http-backend": {
"version": "2.5.0", "version": "2.5.1",
"resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.0.tgz", "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.1.tgz",
"integrity": "sha512-Z/aQsGZk1gSxt2/DztXk92DuDD20J+rNudT7ZCdTrNOiK8uQppfvdjq9+DFQfpAnFPn3VZS+KQIr1S/W1KxhpQ==", "integrity": "sha512-+rNX1tghdVxdfjfPt0bI1sNg5ahGW9kA7OboG7b4t03Fp69NdDlRIze6yXhIbN8rbHxJ8IP4dzRm/okZ15lkQg==",
"dependencies": { "dependencies": {
"cross-fetch": "4.0.0" "cross-fetch": "4.0.0"
} }
@@ -6498,9 +6498,9 @@
} }
}, },
"node_modules/ipaddr.js": { "node_modules/ipaddr.js": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
"integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">= 10" "node": ">= 10"
@@ -8991,9 +8991,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.14.3", "version": "4.16.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.16.0.tgz",
"integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==", "integrity": "sha512-joxy/Hd4Ee289394//Q1aoebcxXyHasDieCTk8YtP4G4al4TUlx85EnuCLrfrdtLzrna9kNjH++Sx063wxSgmA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/estree": "1.0.5" "@types/estree": "1.0.5"
@@ -9006,22 +9006,22 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.14.3", "@rollup/rollup-android-arm-eabi": "4.16.0",
"@rollup/rollup-android-arm64": "4.14.3", "@rollup/rollup-android-arm64": "4.16.0",
"@rollup/rollup-darwin-arm64": "4.14.3", "@rollup/rollup-darwin-arm64": "4.16.0",
"@rollup/rollup-darwin-x64": "4.14.3", "@rollup/rollup-darwin-x64": "4.16.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.14.3", "@rollup/rollup-linux-arm-gnueabihf": "4.16.0",
"@rollup/rollup-linux-arm-musleabihf": "4.14.3", "@rollup/rollup-linux-arm-musleabihf": "4.16.0",
"@rollup/rollup-linux-arm64-gnu": "4.14.3", "@rollup/rollup-linux-arm64-gnu": "4.16.0",
"@rollup/rollup-linux-arm64-musl": "4.14.3", "@rollup/rollup-linux-arm64-musl": "4.16.0",
"@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", "@rollup/rollup-linux-powerpc64le-gnu": "4.16.0",
"@rollup/rollup-linux-riscv64-gnu": "4.14.3", "@rollup/rollup-linux-riscv64-gnu": "4.16.0",
"@rollup/rollup-linux-s390x-gnu": "4.14.3", "@rollup/rollup-linux-s390x-gnu": "4.16.0",
"@rollup/rollup-linux-x64-gnu": "4.14.3", "@rollup/rollup-linux-x64-gnu": "4.16.0",
"@rollup/rollup-linux-x64-musl": "4.14.3", "@rollup/rollup-linux-x64-musl": "4.16.0",
"@rollup/rollup-win32-arm64-msvc": "4.14.3", "@rollup/rollup-win32-arm64-msvc": "4.16.0",
"@rollup/rollup-win32-ia32-msvc": "4.14.3", "@rollup/rollup-win32-ia32-msvc": "4.16.0",
"@rollup/rollup-win32-x64-msvc": "4.14.3", "@rollup/rollup-win32-x64-msvc": "4.16.0",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@@ -10098,9 +10098,9 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.2.9", "version": "5.2.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.9.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz",
"integrity": "sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==", "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.20.1", "esbuild": "^0.20.1",

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Изход', 'logout' => 'Изход',
'logout_other_sessions' => 'Изход от всички други сесии', 'logout_other_sessions' => 'Изход от всички други сесии',
'toggleNavigation' => 'Превключване на навигацията', 'toggleNavigation' => 'Превключване на навигацията',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Търсене...', 'searchPlaceholder' => 'Търсене...',
'version' => 'Версия', 'version' => 'Версия',
'dashboard' => 'Основно табло', 'dashboard' => 'Основно табло',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Tanca la sessió', 'logout' => 'Tanca la sessió',
'logout_other_sessions' => 'Tanca les altres sessions', 'logout_other_sessions' => 'Tanca les altres sessions',
'toggleNavigation' => 'Alternar navegació', 'toggleNavigation' => 'Alternar navegació',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Cerca...', 'searchPlaceholder' => 'Cerca...',
'version' => 'Versió', 'version' => 'Versió',
'dashboard' => 'Panell de control', 'dashboard' => 'Panell de control',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Odhlásit se', 'logout' => 'Odhlásit se',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Vyp/zap. navigaci', 'toggleNavigation' => 'Vyp/zap. navigaci',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Hledat…', 'searchPlaceholder' => 'Hledat…',
'version' => 'Verze', 'version' => 'Verze',
'dashboard' => 'Přehled', 'dashboard' => 'Přehled',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Logout', 'logout' => 'Logout',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Toggle navigation', 'toggleNavigation' => 'Toggle navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Search...', 'searchPlaceholder' => 'Search...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Dashboard', 'dashboard' => 'Dashboard',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Abmelden', 'logout' => 'Abmelden',
'logout_other_sessions' => 'Alle anderen Sitzungen abmelden', 'logout_other_sessions' => 'Alle anderen Sitzungen abmelden',
'toggleNavigation' => 'Navigation umschalten', 'toggleNavigation' => 'Navigation umschalten',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Suchen...', 'searchPlaceholder' => 'Suchen...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Übersicht', 'dashboard' => 'Übersicht',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Αποσύνδεση', 'logout' => 'Αποσύνδεση',
'logout_other_sessions' => 'Αποσυνδέσετε όλες τις άλλες συνεδρίες', 'logout_other_sessions' => 'Αποσυνδέσετε όλες τις άλλες συνεδρίες',
'toggleNavigation' => 'Εναλλαγή περιήγησης', 'toggleNavigation' => 'Εναλλαγή περιήγησης',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Αναζήτηση...', 'searchPlaceholder' => 'Αναζήτηση...',
'version' => 'Έκδοση', 'version' => 'Έκδοση',
'dashboard' => 'Επισκόπηση', 'dashboard' => 'Επισκόπηση',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Logout', 'logout' => 'Logout',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Toggle navigation', 'toggleNavigation' => 'Toggle navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Search...', 'searchPlaceholder' => 'Search...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Dashboard', 'dashboard' => 'Dashboard',

View File

@@ -2090,7 +2090,7 @@ return [
'logout' => 'Logout', 'logout' => 'Logout',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Toggle navigation', 'toggleNavigation' => 'Toggle navigation',
'toggle_dropdown' => 'Toggle dropdown', 'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Search...', 'searchPlaceholder' => 'Search...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Dashboard', 'dashboard' => 'Dashboard',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Cerrar sesión', 'logout' => 'Cerrar sesión',
'logout_other_sessions' => 'Desconectar todas las demás sesiones', 'logout_other_sessions' => 'Desconectar todas las demás sesiones',
'toggleNavigation' => 'Activar navegación', 'toggleNavigation' => 'Activar navegación',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Buscar...', 'searchPlaceholder' => 'Buscar...',
'version' => 'Versión', 'version' => 'Versión',
'dashboard' => 'Panel de control', 'dashboard' => 'Panel de control',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Kirjaudu ulos', 'logout' => 'Kirjaudu ulos',
'logout_other_sessions' => 'Kirjaudu ulos kaikista muista istunnoista', 'logout_other_sessions' => 'Kirjaudu ulos kaikista muista istunnoista',
'toggleNavigation' => 'Vaihda navigointia', 'toggleNavigation' => 'Vaihda navigointia',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Hae ...', 'searchPlaceholder' => 'Hae ...',
'version' => 'Versio', 'version' => 'Versio',
'dashboard' => 'Etusivu', 'dashboard' => 'Etusivu',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Se déconnecter', 'logout' => 'Se déconnecter',
'logout_other_sessions' => 'Déconnecter toutes les autres sessions', 'logout_other_sessions' => 'Déconnecter toutes les autres sessions',
'toggleNavigation' => 'Activer navigation', 'toggleNavigation' => 'Activer navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Rechercher...', 'searchPlaceholder' => 'Rechercher...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Tableau de bord', 'dashboard' => 'Tableau de bord',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Kijelentkezés', 'logout' => 'Kijelentkezés',
'logout_other_sessions' => 'Minden más munkamenet kijelentkeztetése', 'logout_other_sessions' => 'Minden más munkamenet kijelentkeztetése',
'toggleNavigation' => 'Navigációs mód átkapcsolása', 'toggleNavigation' => 'Navigációs mód átkapcsolása',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Keresés...', 'searchPlaceholder' => 'Keresés...',
'version' => 'Verzió', 'version' => 'Verzió',
'dashboard' => 'Műszerfal', 'dashboard' => 'Műszerfal',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Keluar', 'logout' => 'Keluar',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Toggle navigation', 'toggleNavigation' => 'Toggle navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Pencarian...', 'searchPlaceholder' => 'Pencarian...',
'version' => 'Versi', 'version' => 'Versi',
'dashboard' => 'Dasbor', 'dashboard' => 'Dasbor',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Esci', 'logout' => 'Esci',
'logout_other_sessions' => 'Esci da tutte le altre sessioni', 'logout_other_sessions' => 'Esci da tutte le altre sessioni',
'toggleNavigation' => 'Attiva / disattiva la navigazione', 'toggleNavigation' => 'Attiva / disattiva la navigazione',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Cerca...', 'searchPlaceholder' => 'Cerca...',
'version' => 'Versione', 'version' => 'Versione',
'dashboard' => 'Cruscotto', 'dashboard' => 'Cruscotto',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'ログアウト', 'logout' => 'ログアウト',
'logout_other_sessions' => 'すべてのセッションからログアウト', 'logout_other_sessions' => 'すべてのセッションからログアウト',
'toggleNavigation' => 'ナビゲーションを切り替え', 'toggleNavigation' => 'ナビゲーションを切り替え',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => '検索...', 'searchPlaceholder' => '検索...',
'version' => 'バージョン', 'version' => 'バージョン',
'dashboard' => 'ダッシュボード', 'dashboard' => 'ダッシュボード',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => '로그아웃', 'logout' => '로그아웃',
'logout_other_sessions' => '다른 모든 세션 로그아웃', 'logout_other_sessions' => '다른 모든 세션 로그아웃',
'toggleNavigation' => '토글 내비게이션', 'toggleNavigation' => '토글 내비게이션',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => '검색...', 'searchPlaceholder' => '검색...',
'version' => '버전', 'version' => '버전',
'dashboard' => '대시보드', 'dashboard' => '대시보드',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Logg ut', 'logout' => 'Logg ut',
'logout_other_sessions' => 'Logg ut alle andre økter', 'logout_other_sessions' => 'Logg ut alle andre økter',
'toggleNavigation' => 'Vis/Skjul navigation', 'toggleNavigation' => 'Vis/Skjul navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Søk...', 'searchPlaceholder' => 'Søk...',
'version' => 'Versjon', 'version' => 'Versjon',
'dashboard' => 'Startskjerm', 'dashboard' => 'Startskjerm',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Uitloggen', 'logout' => 'Uitloggen',
'logout_other_sessions' => 'Alle andere sessies afmelden', 'logout_other_sessions' => 'Alle andere sessies afmelden',
'toggleNavigation' => 'Navigatie aan of uit', 'toggleNavigation' => 'Navigatie aan of uit',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Zoeken...', 'searchPlaceholder' => 'Zoeken...',
'version' => 'Versie', 'version' => 'Versie',
'dashboard' => 'Dashboard', 'dashboard' => 'Dashboard',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Logg ut', 'logout' => 'Logg ut',
'logout_other_sessions' => 'Logg ut alle andre økter', 'logout_other_sessions' => 'Logg ut alle andre økter',
'toggleNavigation' => 'Vis/Skjul navigation', 'toggleNavigation' => 'Vis/Skjul navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Søk...', 'searchPlaceholder' => 'Søk...',
'version' => 'Versjon', 'version' => 'Versjon',
'dashboard' => 'Startskjerm', 'dashboard' => 'Startskjerm',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Wyloguj', 'logout' => 'Wyloguj',
'logout_other_sessions' => 'Wyloguj z pozostałych sesji', 'logout_other_sessions' => 'Wyloguj z pozostałych sesji',
'toggleNavigation' => 'Przełącz nawigację', 'toggleNavigation' => 'Przełącz nawigację',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Szukaj...', 'searchPlaceholder' => 'Szukaj...',
'version' => 'Wersja', 'version' => 'Wersja',
'dashboard' => 'Kokpit', 'dashboard' => 'Kokpit',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Desconectar', 'logout' => 'Desconectar',
'logout_other_sessions' => 'Sair de todas as outras sessões', 'logout_other_sessions' => 'Sair de todas as outras sessões',
'toggleNavigation' => 'Alternar navegação', 'toggleNavigation' => 'Alternar navegação',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Pesquisar...', 'searchPlaceholder' => 'Pesquisar...',
'version' => 'Versão', 'version' => 'Versão',
'dashboard' => 'Painel de Controle', 'dashboard' => 'Painel de Controle',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Terminar Sessão', 'logout' => 'Terminar Sessão',
'logout_other_sessions' => 'Terminar todas as outras sessões', 'logout_other_sessions' => 'Terminar todas as outras sessões',
'toggleNavigation' => 'Mostrar/esconder navegação', 'toggleNavigation' => 'Mostrar/esconder navegação',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Pesquisar...', 'searchPlaceholder' => 'Pesquisar...',
'version' => 'Versão', 'version' => 'Versão',
'dashboard' => 'Painel de controlo', 'dashboard' => 'Painel de controlo',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Ieșire', 'logout' => 'Ieșire',
'logout_other_sessions' => 'Deconectează toate celelalte sesiuni', 'logout_other_sessions' => 'Deconectează toate celelalte sesiuni',
'toggleNavigation' => 'Navigare', 'toggleNavigation' => 'Navigare',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Cautare...', 'searchPlaceholder' => 'Cautare...',
'version' => 'Versiunea', 'version' => 'Versiunea',
'dashboard' => 'Panou de control', 'dashboard' => 'Panou de control',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Выход', 'logout' => 'Выход',
'logout_other_sessions' => 'Завершить все другие сессии', 'logout_other_sessions' => 'Завершить все другие сессии',
'toggleNavigation' => 'Переключить навигацию', 'toggleNavigation' => 'Переключить навигацию',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Поиск...', 'searchPlaceholder' => 'Поиск...',
'version' => 'Версия', 'version' => 'Версия',
'dashboard' => 'Сводка', 'dashboard' => 'Сводка',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Odhlásiť sa', 'logout' => 'Odhlásiť sa',
'logout_other_sessions' => 'Odhlásiť všetky ostatné sedenia', 'logout_other_sessions' => 'Odhlásiť všetky ostatné sedenia',
'toggleNavigation' => 'Vyp/zap. navigáciu', 'toggleNavigation' => 'Vyp/zap. navigáciu',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Vyhľadať...', 'searchPlaceholder' => 'Vyhľadať...',
'version' => 'Verzia', 'version' => 'Verzia',
'dashboard' => 'Prehľad', 'dashboard' => 'Prehľad',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Odjava', 'logout' => 'Odjava',
'logout_other_sessions' => 'Odjavi vse druge seje', 'logout_other_sessions' => 'Odjavi vse druge seje',
'toggleNavigation' => 'Preklopi navigacijo', 'toggleNavigation' => 'Preklopi navigacijo',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Iskanje...', 'searchPlaceholder' => 'Iskanje...',
'version' => 'Različica', 'version' => 'Različica',
'dashboard' => 'Nadzorna plošča', 'dashboard' => 'Nadzorna plošča',

View File

@@ -2145,6 +2145,7 @@ return [
'logout' => 'Logga ut', 'logout' => 'Logga ut',
'logout_other_sessions' => 'Logga ut alla andra sessioner', 'logout_other_sessions' => 'Logga ut alla andra sessioner',
'toggleNavigation' => 'Växla navigering', 'toggleNavigation' => 'Växla navigering',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Sök...', 'searchPlaceholder' => 'Sök...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Kontrollpanel', 'dashboard' => 'Kontrollpanel',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Logout', 'logout' => 'Logout',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Toggle navigation', 'toggleNavigation' => 'Toggle navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Search...', 'searchPlaceholder' => 'Search...',
'version' => 'Version', 'version' => 'Version',
'dashboard' => 'Dashboard', 'dashboard' => 'Dashboard',

View File

@@ -2145,6 +2145,7 @@ return [
'logout' => ıkış Yap', 'logout' => ıkış Yap',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Navigasyonu aç / kapat', 'toggleNavigation' => 'Navigasyonu aç / kapat',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Aranıyor...', 'searchPlaceholder' => 'Aranıyor...',
'version' => 'Versiyon', 'version' => 'Versiyon',
'dashboard' => 'Gösterge paneli', 'dashboard' => 'Gösterge paneli',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Вихід із системи', 'logout' => 'Вихід із системи',
'logout_other_sessions' => 'Вийти з усіх інших сеансів', 'logout_other_sessions' => 'Вийти з усіх інших сеансів',
'toggleNavigation' => 'Переключити навігацію', 'toggleNavigation' => 'Переключити навігацію',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Пошук...', 'searchPlaceholder' => 'Пошук...',
'version' => 'Версія', 'version' => 'Версія',
'dashboard' => 'Головна панель', 'dashboard' => 'Головна панель',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => 'Đăng xuất', 'logout' => 'Đăng xuất',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => 'Chuyển đổi đổigle navigation', 'toggleNavigation' => 'Chuyển đổi đổigle navigation',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => 'Tìm kiếm...', 'searchPlaceholder' => 'Tìm kiếm...',
'version' => 'Phiên bản', 'version' => 'Phiên bản',
'dashboard' => 'Bảng điều khiển', 'dashboard' => 'Bảng điều khiển',

View File

@@ -2145,6 +2145,7 @@ return [
'logout' => '退出登录', 'logout' => '退出登录',
'logout_other_sessions' => '退出所有其他已登录设备', 'logout_other_sessions' => '退出所有其他已登录设备',
'toggleNavigation' => '切换导览', 'toggleNavigation' => '切换导览',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => '搜索…', 'searchPlaceholder' => '搜索…',
'version' => '版本', 'version' => '版本',
'dashboard' => '仪表盘', 'dashboard' => '仪表盘',

View File

@@ -2144,6 +2144,7 @@ return [
'logout' => '登出', 'logout' => '登出',
'logout_other_sessions' => 'Logout all other sessions', 'logout_other_sessions' => 'Logout all other sessions',
'toggleNavigation' => '切換導覽', 'toggleNavigation' => '切換導覽',
'toggle_dropdown' => 'Toggle dropdown',
'searchPlaceholder' => '搜尋…', 'searchPlaceholder' => '搜尋…',
'version' => '版本', 'version' => '版本',
'dashboard' => '監控面板', 'dashboard' => '監控面板',