From dc0a2a2a103aa295065f86b96aabc765ed3229d2 Mon Sep 17 00:00:00 2001 From: Maxco10 Date: Tue, 17 Oct 2023 21:59:56 +0200 Subject: [PATCH 01/48] Fixed bug on description field Signed-off-by: Maxco10 --- app/Repositories/Rule/RuleRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php index 09e02cbe75..3c19b3aac5 100644 --- a/app/Repositories/Rule/RuleRepository.php +++ b/app/Repositories/Rule/RuleRepository.php @@ -289,7 +289,7 @@ class RuleRepository implements RuleRepositoryInterface $rule->strict = array_key_exists('strict', $data) ? $data['strict'] : false; $rule->stop_processing = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : false; $rule->title = $data['title']; - $rule->description = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : null; + $rule->description = $data['description']; $rule->save(); $rule->refresh(); From b032210a3312f8ebed49d1b3275fa3ed4ecd7e50 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 21 Oct 2023 07:45:28 +0200 Subject: [PATCH 02/48] Small changes to create transaction form --- .../Transaction/CreateController.php | 2 +- .../assets/v2/pages/transactions/create.js | 9 ++++ .../views/v2/transactions/create.blade.php | 54 +++++++++++++------ 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/Transaction/CreateController.php b/app/Http/Controllers/Transaction/CreateController.php index 9aa1d0d39e..164454e996 100644 --- a/app/Http/Controllers/Transaction/CreateController.php +++ b/app/Http/Controllers/Transaction/CreateController.php @@ -92,7 +92,7 @@ class CreateController extends Controller if('edit' === $request->get('redirect')) { return response()->json(['redirect' => route('transactions.edit', [$newGroup->id])]); } - + return response()->json(['redirect' => route('transactions.show', [$newGroup->id])]); } } diff --git a/resources/assets/v2/pages/transactions/create.js b/resources/assets/v2/pages/transactions/create.js index 7c6b800727..a6288f9df8 100644 --- a/resources/assets/v2/pages/transactions/create.js +++ b/resources/assets/v2/pages/transactions/create.js @@ -44,6 +44,10 @@ let transactions = function () { showSuccessMessage: false, showErrorMessage: false, entries: [], + loadingCurrencies: true, + enabledCurrencies: [], + nativeCurrencies: [], + foreignCurrencies: [], filters: { source: [], destination: [], @@ -123,6 +127,9 @@ let transactions = function () { }; console.log('Changed destination account into a known ' + item.type.toLowerCase()); }, + loadCurrencies() { + console.log('Loading user currencies.'); + }, changeSourceAccount(item, ac) { if (typeof item === 'undefined') { const index = parseInt(ac._searchInput.attributes['data-index'].value); @@ -161,6 +168,7 @@ let transactions = function () { addedSplit() { console.log('addedSplit'); + // TODO improve code location Autocomplete.init("input.ac-source", { server: urls.account, serverParams: { @@ -229,6 +237,7 @@ let transactions = function () { }); }); + this.loadCurrencies(); // source can never be expense account this.filters.source = ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Revenue account']; diff --git a/resources/views/v2/transactions/create.blade.php b/resources/views/v2/transactions/create.blade.php index c237d7dbb6..561b194413 100644 --- a/resources/views/v2/transactions/create.blade.php +++ b/resources/views/v2/transactions/create.blade.php @@ -37,7 +37,7 @@ :data-bs-target="'#split-'+index+'-pane'" type="button" role="tab" :aria-controls="'split-'+index+'-pane'" - aria-selected="true">Split # + aria-selected="true">{{ __('firefly.single_split') }} # @@ -49,7 +49,7 @@ @@ -72,45 +72,52 @@
-

{{ __('firefly.basic_journal_information') }}

+

{{ __('firefly.basic_journal_information') }}

-
+ placeholder="{{ __('firefly.description') }}">
-
-
@@ -136,10 +143,25 @@
- -
+
+ + +
+
Date: Sat, 21 Oct 2023 07:58:24 +0200 Subject: [PATCH 03/48] Add label actions things. --- .github/label-actions.yml | 45 +++++++++++++++++++++++++++++ .github/workflows/label-actions.yml | 21 ++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 .github/label-actions.yml create mode 100644 .github/workflows/label-actions.yml diff --git a/.github/label-actions.yml b/.github/label-actions.yml new file mode 100644 index 0000000000..d804ebeeef --- /dev/null +++ b/.github/label-actions.yml @@ -0,0 +1,45 @@ +# Configuration for Label Actions - https://github.com/dessant/label-actions + +# The `feature` label is added to issues +feature: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: > + Hi there! + + This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III + or the data importer in due course. + + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or + "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to + this issue to get updates. + + Thank you for your contributions. + +enhancement: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: > + Hi there! + + This issue has been marked as an enhancement. The requested (new) feature will become a part of Firefly III + or the data importer in due course. + + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or + "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to + this issue to get updates. + + Thank you for your contributions. + +# The `solved` label is added to discussions +triage: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: > + Hi there! + + This issue has been marked as being in triage. The root cause is not known yet, or the issue needs more + investigation. You can help by sharing debug information (from `/debug`) if you also have this issue or + when you haven't already done so. + + Thank you for your contributions. diff --git a/.github/workflows/label-actions.yml b/.github/workflows/label-actions.yml new file mode 100644 index 0000000000..caf1a31cc1 --- /dev/null +++ b/.github/workflows/label-actions.yml @@ -0,0 +1,21 @@ +name: 'Label Actions' + +on: + issues: + types: [labeled, unlabeled] + pull_request_target: + types: [labeled, unlabeled] + discussion: + types: [labeled, unlabeled] + +permissions: + contents: read + issues: write + pull-requests: write + discussions: write + +jobs: + action: + runs-on: ubuntu-latest + steps: + - uses: dessant/label-actions@v3 From 2a1e53f32ac35a0a432d9843f0b54234fd9d1b8a Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 21 Oct 2023 08:00:24 +0200 Subject: [PATCH 04/48] Slight changes in yaml config. --- .github/label-actions.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index d804ebeeef..92c0fec26e 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -4,7 +4,7 @@ feature: issues: # Post a comment, `{issue-author}` is an optional placeholder - comment: > + comment: | Hi there! This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III @@ -19,7 +19,7 @@ feature: enhancement: issues: # Post a comment, `{issue-author}` is an optional placeholder - comment: > + comment: | Hi there! This issue has been marked as an enhancement. The requested (new) feature will become a part of Firefly III @@ -35,7 +35,7 @@ enhancement: triage: issues: # Post a comment, `{issue-author}` is an optional placeholder - comment: > + comment: | Hi there! This issue has been marked as being in triage. The root cause is not known yet, or the issue needs more From d97581325d04d3e56e85dc0cc9c649afd0e4460a Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 21 Oct 2023 08:02:43 +0200 Subject: [PATCH 05/48] Expand YAML once more. --- .github/label-actions.yml | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index 92c0fec26e..29ab39a9c6 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -5,14 +5,11 @@ feature: issues: # Post a comment, `{issue-author}` is an optional placeholder comment: | - Hi there! + Hi there! This is an automatic reply. `Share and enjoy` - This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III - or the data importer in due course. + This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III or the data importer in due course. - If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or - "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to - this issue to get updates. + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to this issue to get updates. Thank you for your contributions. @@ -20,14 +17,11 @@ enhancement: issues: # Post a comment, `{issue-author}` is an optional placeholder comment: | - Hi there! + Hi there! This is an automatic reply. `Share and enjoy` - This issue has been marked as an enhancement. The requested (new) feature will become a part of Firefly III - or the data importer in due course. + This issue has been marked as an enhancement. The requested (new) feature will become a part of Firefly III or the data importer in due course. - If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or - "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to - this issue to get updates. + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to this issue to get updates. Thank you for your contributions. @@ -36,10 +30,8 @@ triage: issues: # Post a comment, `{issue-author}` is an optional placeholder comment: | - Hi there! + Hi there! This is an automatic reply. `Share and enjoy` - This issue has been marked as being in triage. The root cause is not known yet, or the issue needs more - investigation. You can help by sharing debug information (from `/debug`) if you also have this issue or - when you haven't already done so. + This issue has been marked as being in triage. The root cause is not known yet, or the issue needs more investigation. You can help by sharing debug information (from `/debug`) if you also have this issue or when you haven't already done so. Thank you for your contributions. From eb5ee4d147e3c839974438cfc7943cf97b954edb Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 21 Oct 2023 10:39:38 +0200 Subject: [PATCH 06/48] Slightly better text. --- .github/label-actions.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index 29ab39a9c6..761dbee3ca 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -9,7 +9,7 @@ feature: This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III or the data importer in due course. - If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to this issue to get updates. + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful, and do not influence [the roadmap](https://roadmap.firefly-iii.org/). Your comment may be :skull: deleted. You can subscribe to this issue to get updates. Thank you for your contributions. @@ -19,9 +19,9 @@ enhancement: comment: | Hi there! This is an automatic reply. `Share and enjoy` - This issue has been marked as an enhancement. The requested (new) feature will become a part of Firefly III or the data importer in due course. + This issue has been marked as an enhancement. The requested enhancement to an existing feature will become a part of Firefly III or the data importer in due course. - If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful and will be :skull: deleted. You can subscribe to this issue to get updates. + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful, and do not influence [the roadmap](https://roadmap.firefly-iii.org/). Your comment may be :skull: deleted. You can subscribe to this issue to get updates. Thank you for your contributions. From 97dfdd5c5d565af65c19ac02c915fa98bbbe40d7 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 06:56:46 +0200 Subject: [PATCH 07/48] Link currency to user and user group. --- app/Models/TransactionCurrency.php | 37 ++++++++++++ app/Models/UserGroup.php | 11 ++++ app/User.php | 11 ++++ ...10_21_113213_add_currency_pivot_tables.php | 60 +++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 database/migrations/2023_10_21_113213_add_currency_pivot_tables.php diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 5d34e44419..713bbbb32f 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -24,8 +24,10 @@ declare(strict_types=1); namespace FireflyIII\Models; use Eloquent; +use FireflyIII\User; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; @@ -40,6 +42,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property Carbon|null $updated_at * @property Carbon|null $deleted_at * @property bool $enabled + * @property bool $userDefault + * @property bool $userEnabled * @property string $code * @property string $name * @property string $symbol @@ -107,6 +111,39 @@ class TransactionCurrency extends Model throw new NotFoundHttpException(); } + /** + * @param User $user + * + * @return void + */ + public function refreshForUser(User $user) + { + $current = $user->currencies()->where('transaction_currencies.id', $this->id)->first(); + $default = app('amount')->getDefaultCurrencyByUser($user); + $this->userDefault = (int)$default->id === (int)$this->id; + $this->userEnabled = null !== $current; + } + + /** + * Link to users + * + * @return BelongsToMany + */ + public function users(): BelongsToMany + { + return $this->belongsToMany(User::class)->withTimestamps()->withPivot('default'); + } + + /** + * Link to user groups + * + * @return BelongsToMany + */ + public function userGroups(): BelongsToMany + { + return $this->belongsToMany(UserGroup::class)->withTimestamps()->withPivot('default'); + } + /** * @return HasMany */ diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index 5be2e89e81..ac8b3c8320 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -30,6 +30,7 @@ use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Support\Carbon; @@ -129,6 +130,16 @@ class UserGroup extends Model return $this->hasMany(Account::class); } + /** + * Link to currencies + * + * @return BelongsToMany + */ + public function currencies(): BelongsToMany + { + return $this->belongsToMany(TransactionCurrency::class); + } + /** * Link to attachments. * diff --git a/app/User.php b/app/User.php index d4cfe96cf3..dc9af881bf 100644 --- a/app/User.php +++ b/app/User.php @@ -46,6 +46,7 @@ use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\UserGroup; @@ -231,6 +232,16 @@ class User extends Authenticatable return $this->hasMany(Account::class); } + /** + * Link to currencies + * + * @return BelongsToMany + */ + public function currencies(): BelongsToMany + { + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('default'); + } + /** * Link to attachments * diff --git a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php new file mode 100644 index 0000000000..c20b4b1173 --- /dev/null +++ b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php @@ -0,0 +1,60 @@ +id(); + $table->timestamps(); + $table->integer('user_id', false, true); + $table->integer('transaction_currency_id', false, true); + $table->boolean('default')->default(false); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); + $table->unique(['user_id', 'transaction_currency_id'],'unique_combo'); + }); + } catch (QueryException $e) { + app('log')->error(sprintf('Could not create table "transaction_currency_user": %s', $e->getMessage())); + app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'); + } + } + + // transaction_currency_user_group + if (!Schema::hasTable('transaction_currency_user_group')) { + try { + Schema::create('transaction_currency_user_group', function (Blueprint $table) { + $table->id(); + $table->timestamps(); + $table->bigInteger('user_group_id', false, true); + $table->integer('transaction_currency_id', false, true); + $table->boolean('default')->default(false); + $table->foreign('user_group_id')->references('id')->on('user_groups')->onDelete('cascade'); + $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); + $table->unique(['user_group_id', 'transaction_currency_id'],'unique_combo'); + }); + } catch (QueryException $e) { + app('log')->error(sprintf('Could not create table "transaction_currency_user_group": %s', $e->getMessage())); + app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'); + } + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('transaction_currency_user'); + Schema::dropIfExists('transaction_currency_user_group'); + } +}; From 9d5b028a5fc197c858adcd5b96ff54f6ec4c9b5e Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 06:57:15 +0200 Subject: [PATCH 08/48] Remove routes that enable/disable/default a currency. --- routes/web.php | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/routes/web.php b/routes/web.php index c11017e924..0c8e87b468 100644 --- a/routes/web.php +++ b/routes/web.php @@ -333,19 +333,16 @@ Route::group( * Currency Controller. */ Route::group( - ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'currencies', 'as' => 'currencies.'], + ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\TransactionCurrency', 'prefix' => 'currencies', 'as' => 'currencies.'], static function () { - Route::get('', ['uses' => 'CurrencyController@index', 'as' => 'index']); - Route::get('create', ['uses' => 'CurrencyController@create', 'as' => 'create']); - Route::get('edit/{currency}', ['uses' => 'CurrencyController@edit', 'as' => 'edit']); - Route::get('delete/{currency}', ['uses' => 'CurrencyController@delete', 'as' => 'delete']); - Route::post('default', ['uses' => 'CurrencyController@defaultCurrency', 'as' => 'default']); - Route::post('enable', ['uses' => 'CurrencyController@enableCurrency', 'as' => 'enable']); - Route::post('disable', ['uses' => 'CurrencyController@disableCurrency', 'as' => 'disable']); + Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); + Route::get('create', ['uses' => 'CreateController@create', 'as' => 'create']); + Route::get('edit/{currency}', ['uses' => 'EditController@edit', 'as' => 'edit']); + Route::get('delete/{currency}', ['uses' => 'DeleteController@delete', 'as' => 'delete']); - Route::post('store', ['uses' => 'CurrencyController@store', 'as' => 'store']); - Route::post('update/{currency}', ['uses' => 'CurrencyController@update', 'as' => 'update']); - Route::post('destroy/{currency}', ['uses' => 'CurrencyController@destroy', 'as' => 'destroy']); + Route::post('store', ['uses' => 'CreateController@store', 'as' => 'store']); + Route::post('update/{currency}', ['uses' => 'EditController@update', 'as' => 'update']); + Route::post('destroy/{currency}', ['uses' => 'EditController@destroy', 'as' => 'destroy']); } ); From 2923d1b4493e8e4e9e81a343fc4b36a2b4a44b20 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 06:57:59 +0200 Subject: [PATCH 09/48] Remove unused methods from currency controller --- app/Http/Controllers/CurrencyController.php | 132 -------------------- 1 file changed, 132 deletions(-) diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 5834d3e547..0d3b332109 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -100,34 +100,7 @@ class CurrencyController extends Controller return view('currencies.create', compact('subTitleIcon', 'subTitle')); } - /** - * Make currency the default currency. - * - * @param Request $request - * - * @return RedirectResponse|Redirector - * @throws FireflyException - */ - public function defaultCurrency(Request $request) - { - $currencyId = (int)$request->get('id'); - if ($currencyId > 0) { - // valid currency? - $currency = $this->repository->find($currencyId); - if (null !== $currency) { - app('preferences')->set('currencyPreference', $currency->code); - app('preferences')->mark(); - Log::channel('audit')->info(sprintf('Make %s the default currency.', $currency->code)); - $this->repository->enable($currency); - $request->session()->flash('success', (string)trans('firefly.new_default_currency', ['name' => $currency->name])); - - return redirect(route('currencies.index')); - } - } - - return redirect(route('currencies.index')); - } /** * Deletes a currency. @@ -206,57 +179,6 @@ class CurrencyController extends Controller return redirect($this->getPreviousUrl('currencies.delete.url')); } - /** - * @param Request $request - * - * @return JsonResponse - * @throws FireflyException - */ - public function disableCurrency(Request $request): JsonResponse - { - $currencyId = (int)$request->get('id'); - $currency = $this->repository->find($currencyId); - - // valid currency? - if (null === $currency) { - return response()->json([]); - } - - app('preferences')->mark(); - - // user must be "owner" - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to disable currency %s but is not site owner.', $currency->code)); - return response()->json([]); - } - - // currency cannot be in use. - if ($this->repository->currencyInUse($currency)) { - $location = $this->repository->currencyInUseAt($currency); - $message = (string)trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]); - - $request->session()->flash('error', $message); - Log::channel('audit')->info(sprintf('Tried to disable currency %s but is in use.', $currency->code)); - return response()->json([]); - } - - // currency disabled! - $this->repository->disable($currency); - Log::channel('audit')->info(sprintf('Disabled currency %s.', $currency->code)); - - $this->repository->ensureMinimalEnabledCurrencies(); - - // extra warning - if ('EUR' === $currency->code) { - session()->flash('warning', (string)trans('firefly.disable_EUR_side_effects')); - } - - session()->flash('success', (string)trans('firefly.currency_is_now_disabled', ['name' => $currency->name])); - return response()->json([]); - } /** * Edit a currency. @@ -299,60 +221,6 @@ class CurrencyController extends Controller return view('currencies.edit', compact('currency', 'subTitle', 'subTitleIcon')); } - /** - * @param Request $request - * - * @return JsonResponse - */ - public function enableCurrency(Request $request): JsonResponse - { - $currencyId = (int)$request->get('id'); - if ($currencyId > 0) { - // valid currency? - $currency = $this->repository->find($currencyId); - if (null !== $currency) { - app('preferences')->mark(); - - $this->repository->enable($currency); - session()->flash('success', (string)trans('firefly.currency_is_now_enabled', ['name' => $currency->name])); - Log::channel('audit')->info(sprintf('Enabled currency %s.', $currency->code)); - } - } - - return response()->json([]); - } - - /** - * Show overview of currencies. - * - * @param Request $request - * - * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function index(Request $request) - { - /** @var User $user */ - $user = auth()->user(); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $collection = $this->repository->getAll(); - $total = $collection->count(); - $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); - $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); - $currencies->setPath(route('currencies.index')); - - $defaultCurrency = $this->repository->getCurrencyByPreference(app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR'))); - $isOwner = true; - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('info', (string)trans('firefly.ask_site_owner', ['owner' => config('firefly.site_owner')])); - $isOwner = false; - } - - return view('currencies.index', compact('currencies', 'defaultCurrency', 'isOwner')); - } - /** * Store new currency. * From 9b22c16f1484f44158cc6f184ee43e4c8895ce49 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 06:58:17 +0200 Subject: [PATCH 10/48] Remove unused logic from home controller --- app/Http/Controllers/HomeController.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 90e27d3c18..69a2d2d2aa 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -118,9 +118,6 @@ class HomeController extends Controller */ public function index(AccountRepositoryInterface $repository): mixed { - if ('v3' === config('firefly.layout')) { - return view('pwa'); - } $types = config('firefly.accountTypesByIdentifier.asset'); $count = $repository->count($types); Log::channel('audit')->info('User visits homepage.'); From 704fc24d209a86944baaecf5733f6b631f81d093 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:12:47 +0200 Subject: [PATCH 11/48] Rename field for less confusion. --- app/Models/TransactionCurrency.php | 4 ++-- app/Models/UserGroup.php | 2 +- app/User.php | 2 +- .../2023_10_21_113213_add_currency_pivot_tables.php | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 713bbbb32f..cf08a38f71 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -131,7 +131,7 @@ class TransactionCurrency extends Model */ public function users(): BelongsToMany { - return $this->belongsToMany(User::class)->withTimestamps()->withPivot('default'); + return $this->belongsToMany(User::class)->withTimestamps()->withPivot('user_default'); } /** @@ -141,7 +141,7 @@ class TransactionCurrency extends Model */ public function userGroups(): BelongsToMany { - return $this->belongsToMany(UserGroup::class)->withTimestamps()->withPivot('default'); + return $this->belongsToMany(UserGroup::class)->withTimestamps()->withPivot('group_default'); } /** diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index ac8b3c8320..e1958fa7c5 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -137,7 +137,7 @@ class UserGroup extends Model */ public function currencies(): BelongsToMany { - return $this->belongsToMany(TransactionCurrency::class); + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('group_default'); } /** diff --git a/app/User.php b/app/User.php index dc9af881bf..cac5cbf8ca 100644 --- a/app/User.php +++ b/app/User.php @@ -239,7 +239,7 @@ class User extends Authenticatable */ public function currencies(): BelongsToMany { - return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('default'); + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('user_default'); } /** diff --git a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php index c20b4b1173..214729e075 100644 --- a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php +++ b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php @@ -18,7 +18,7 @@ return new class extends Migration { $table->timestamps(); $table->integer('user_id', false, true); $table->integer('transaction_currency_id', false, true); - $table->boolean('default')->default(false); + $table->boolean('user_default')->default(false); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); $table->unique(['user_id', 'transaction_currency_id'],'unique_combo'); @@ -37,7 +37,7 @@ return new class extends Migration { $table->timestamps(); $table->bigInteger('user_group_id', false, true); $table->integer('transaction_currency_id', false, true); - $table->boolean('default')->default(false); + $table->boolean('group_default')->default(false); $table->foreign('user_group_id')->references('id')->on('user_groups')->onDelete('cascade'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); $table->unique(['user_group_id', 'transaction_currency_id'],'unique_combo'); From 0d65e396d465e031f9a37198adeb93d4af1b56e9 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:16:05 +0200 Subject: [PATCH 12/48] Update get() methods. --- .../Currency/CurrencyRepository.php | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index c977e730b0..591b4ae146 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -166,11 +166,25 @@ class CurrencyRepository implements CurrencyRepositoryInterface } /** + * Returns ALL currencies, regardless of whether they are enabled or not. + * * @return Collection */ public function getAll(): Collection { - return TransactionCurrency::orderBy('code', 'ASC')->get(); + $all = TransactionCurrency::orderBy('code', 'ASC')->get(); + $local = $this->get(); + return $all->map(function (TransactionCurrency $current) use ($local) { + $hasId = $local->contains(function (TransactionCurrency $entry) use ($current) { + return (int)$entry->id === (int)$current->id; + }); + $isDefault = $local->contains(function (TransactionCurrency $entry) use ($current) { + return 1 === (int)$entry->pivot->user_default && (int)$entry->id === (int)$current->id; + }); + $current->userEnabled = $hasId; + $current->userDefault = $isDefault; + return $current; + }); } /** @@ -178,7 +192,13 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function get(): Collection { - return TransactionCurrency::where('enabled', true)->orderBy('code', 'ASC')->get(); + $all = $this->user->currencies()->orderBy('code', 'ASC')->withPivot(['user_default'])->get(); + $all->map(function (TransactionCurrency $current) { + $current->userEnabled = true; + $current->userDefault = 1 === (int)$current->pivot->user_default; + return $current; + }); + return $all; } /** From 5425dac18060ebcf42bef7e50ddd79bfbf8f2a11 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:17:53 +0200 Subject: [PATCH 13/48] Update index to handle new fields. --- .../TransactionCurrency/IndexController.php | 87 +++++++++++++++++++ public/v1/js/ff/currencies/index.js | 71 +++++++++------ resources/views/currencies/index.twig | 65 +++++++------- 3 files changed, 163 insertions(+), 60 deletions(-) create mode 100644 app/Http/Controllers/TransactionCurrency/IndexController.php diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php new file mode 100644 index 0000000000..7467b37d0a --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/IndexController.php @@ -0,0 +1,87 @@ +middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Show overview of currencies. + * + * @param Request $request + * + * @return Factory|View + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function index(Request $request) + { + /** @var User $user */ + $user = auth()->user(); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $collection = $this->repository->getAll(); + $total = $collection->count(); + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); + + // order so default is on top: + $collection = $collection->sortBy( + function (TransactionCurrency $currency) { + $default = true === $currency->userDefault ? 0 : 1; + $enabled = true === $currency->userEnabled ? 0 : 1; + return sprintf('%s-%s-%s',$default, $enabled, $currency->code); + } + ); + + $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); + $currencies->setPath(route('currencies.index')); + $isOwner = true; + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('info', (string)trans('firefly.ask_site_owner', ['owner' => config('firefly.site_owner')])); + $isOwner = false; + } + + return view('currencies.index', compact('currencies', 'isOwner')); + } + +} diff --git a/public/v1/js/ff/currencies/index.js b/public/v1/js/ff/currencies/index.js index dbccfae942..e173b5c3e6 100644 --- a/public/v1/js/ff/currencies/index.js +++ b/public/v1/js/ff/currencies/index.js @@ -24,55 +24,70 @@ $(function () { "use strict"; $('.make_default').on('click', setDefaultCurrency); - $('.enable-currency').on('click', enableCurrency); $('.disable-currency').on('click', disableCurrency); }); function setDefaultCurrency(e) { var button = $(e.currentTarget); - var currencyId = parseInt(button.data('id')); + var currencyCode = button.data('code'); - $.post(makeDefaultUrl, { - _token: token, - id: currencyId - }).done(function (data) { - // lame but it works - location.reload(); - }).fail(function () { - console.error('I failed :('); + var params = { + default: true, + enabled: true + } + + $.ajax({ + url: updateCurrencyUrl + '/' + currencyCode, + data: JSON.stringify(params), + type: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'), + }, }); + window.location = redirectUrl + '?message=default&code=' + currencyCode; return false; } function enableCurrency(e) { var button = $(e.currentTarget); - var currencyId = parseInt(button.data('id')); + var currencyCode = button.data('code'); - $.post(enableCurrencyUrl, { - _token: token, - id: currencyId - }).done(function (data) { - // lame but it works - location.reload(); - }).fail(function () { - console.error('I failed :('); + var params = { + enabled: true + } + + $.ajax({ + url: updateCurrencyUrl + '/' + currencyCode, + data: JSON.stringify(params), + type: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'), + }, }); + window.location = redirectUrl + '?message=enabled&code=' + currencyCode; return false; } function disableCurrency(e) { var button = $(e.currentTarget); - var currencyId = parseInt(button.data('id')); + var currencyCode = button.data('code'); - $.post(disableCurrencyUrl, { - _token: token, - id: currencyId - }).done(function (data) { - // lame but it works - location.reload(); - }).fail(function () { - console.error('I failed :('); + var params = { + enabled: true + } + + $.ajax({ + url: updateCurrencyUrl + '/' + currencyCode, + data: JSON.stringify(params), + type: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'), + }, }); + window.location = redirectUrl + '?message=disabled&code=' + currencyCode; return false; } diff --git a/resources/views/currencies/index.twig b/resources/views/currencies/index.twig index d542f5fe6a..1a30c963ad 100644 --- a/resources/views/currencies/index.twig +++ b/resources/views/currencies/index.twig @@ -26,62 +26,64 @@ - {% if isOwner %} - - {% endif %} + - {% for currency in currencies %} - {% if isOwner %} - {% endif %} - {% endfor %} @@ -100,9 +102,8 @@ {% endblock %} {% block scripts %} {% endblock %} From 840fd61b045a8be99473234d529ceed9c08d08b5 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:45:48 +0200 Subject: [PATCH 14/48] Update API --- .../TransactionCurrency/ShowController.php | 17 +++++++--- .../TransactionCurrency/UpdateController.php | 32 ++++++++++--------- .../TransactionCurrency/UpdateRequest.php | 1 - 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php index 3c5b7c65c0..6f2d001fea 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php @@ -31,6 +31,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; use JsonException; @@ -81,13 +82,12 @@ class ShowController extends Controller $pageSize = $this->parameters->get('limit'); $collection = $this->repository->getAll(); $count = $collection->count(); + // slice them: $currencies = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($currencies, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.index') . $this->buildParams()); $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); @@ -113,10 +113,15 @@ class ShowController extends Controller */ public function show(TransactionCurrency $currency): JsonResponse { + /** @var User $user */ + $user = auth()->user(); $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); + // update fields with user info. + $currency->refreshForUser($user); + /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); @@ -138,9 +143,13 @@ class ShowController extends Controller */ public function showDefault(): JsonResponse { + /** @var User $user */ + $user = auth()->user(); $manager = $this->getManager(); - $currency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $currency); + $currency = app('amount')->getDefaultCurrencyByUser($user); + + // update fields with user info. + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php index e0f978c048..4401c8a50a 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php @@ -32,6 +32,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use JsonException; use League\Fractal\Resource\Item; @@ -82,11 +83,12 @@ class UpdateController extends Controller if ($this->repository->currencyInUse($currency)) { return response()->json([], 409); } + /** @var User $user */ + $user = auth()->user(); $this->repository->disable($currency); $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); @@ -110,14 +112,15 @@ class UpdateController extends Controller */ public function makeDefault(TransactionCurrency $currency): JsonResponse { + /** @var User $user */ + $user = auth()->user(); $this->repository->enable($currency); + $this->repository->makeDefault($currency); - app('preferences')->set('currencyPreference', $currency->code); app('preferences')->mark(); $manager = $this->getManager(); - - $this->parameters->set('defaultCurrency', $currency); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); @@ -144,9 +147,10 @@ class UpdateController extends Controller { $this->repository->enable($currency); $manager = $this->getManager(); + /** @var User $user */ + $user = auth()->user(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); @@ -172,18 +176,16 @@ class UpdateController extends Controller */ public function update(UpdateRequest $request, TransactionCurrency $currency): JsonResponse { - $data = $request->getAll(); + $data = $request->getAll(); + + /** @var User $user */ + $user = auth()->user(); $currency = $this->repository->update($currency, $data); - if (true === $request->boolean('default')) { - app('preferences')->set('currencyPreference', $currency->code); - app('preferences')->mark(); - } + app('preferences')->mark(); $manager = $this->getManager(); - - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); diff --git a/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php b/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php index 5e673d42b4..7c15fb7357 100644 --- a/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php @@ -57,7 +57,6 @@ class UpdateRequest extends FormRequest ]; return $this->getAllData($fields); - // return $return; } /** From 7feb4b4aaf31a5a6ed029e37b21fe1b30a67d281 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:45:57 +0200 Subject: [PATCH 15/48] Upgrade database version --- config/firefly.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/firefly.php b/config/firefly.php index 66fdf0205e..c0f55e1dcf 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -114,7 +114,7 @@ return [ ], 'version' => '6.0.27', 'api_version' => '2.0.10', - 'db_version' => 20, + 'db_version' => 21, // generic settings 'maxUploadSize' => 1073741824, // 1 GB From a810eb2cb54797b7546f038ec8dba4ded3cd6d93 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:50:46 +0200 Subject: [PATCH 16/48] Do error catching etc. --- app/Http/Middleware/InterestingMessage.php | 56 +++++++++++++++++++++- public/v1/js/ff/currencies/index.js | 23 +++++++-- resources/lang/en_US/firefly.php | 5 +- 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/app/Http/Middleware/InterestingMessage.php b/app/Http/Middleware/InterestingMessage.php index b609de52ab..a9c8c42044 100644 --- a/app/Http/Middleware/InterestingMessage.php +++ b/app/Http/Middleware/InterestingMessage.php @@ -26,6 +26,7 @@ namespace FireflyIII\Http\Middleware; use Closure; use FireflyIII\Models\Account; use FireflyIII\Models\Bill; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\Webhook; @@ -68,6 +69,10 @@ class InterestingMessage Preferences::mark(); $this->handleWebhookMessage($request); } + if ($this->currencyMessage($request)) { + Preferences::mark(); + $this->handleCurrencyMessage($request); + } return $next($request); } @@ -221,10 +226,57 @@ class InterestingMessage private function webhookMessage(Request $request): bool { // get parameters from request. - $billId = $request->get('webhook_id'); + $webhookId = $request->get('webhook_id'); + $message = $request->get('message'); + + return null !== $webhookId && null !== $message; + } + + /** + * @param Request $request + * + * @return bool + */ + private function currencyMessage(Request $request): bool + { + // get parameters from request. + $code = $request->get('code'); $message = $request->get('message'); - return null !== $billId && null !== $message; + return null !== $code && null !== $message; + } + + private function handleCurrencyMessage(Request $request): void + { + // params: + // get parameters from request. + $code = $request->get('code'); + $message = $request->get('message'); + + /** @var TransactionCurrency $webhook */ + $currency = TransactionCurrency::whereCode($code)->first(); + + if (null === $currency) { + return; + } + if ('enabled' === $message) { + session()->flash('success', (string)trans('firefly.currency_is_now_enabled', ['name' => $currency->name])); + } + if ('enable_failed' === $message) { + session()->flash('error', (string)trans('firefly.could_not_enable_currency', ['name' => $currency->name])); + } + if ('disabled' === $message) { + session()->flash('success', (string)trans('firefly.currency_is_now_disabled', ['name' => $currency->name])); + } + if ('disable_failed' === $message) { + session()->flash('error', (string)trans('firefly.could_not_disable_currency', ['name' => $currency->name])); + } + if ('default' === $message) { + session()->flash('success', (string)trans('firefly.new_default_currency', ['name' => $currency->name])); + } + if ('default_failed' === $message) { + session()->flash('error', (string)trans('firefly.default_currency_failed', ['name' => $currency->name])); + } } /** diff --git a/public/v1/js/ff/currencies/index.js b/public/v1/js/ff/currencies/index.js index e173b5c3e6..99ecaf7e24 100644 --- a/public/v1/js/ff/currencies/index.js +++ b/public/v1/js/ff/currencies/index.js @@ -45,8 +45,13 @@ function setDefaultCurrency(e) { 'Content-Type': 'application/json', 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'), }, + error: function () { + window.location = redirectUrl + '?message=default_failed&code=' + currencyCode; + }, + success: function () { + window.location = redirectUrl + '?message=default&code=' + currencyCode; + } }); - window.location = redirectUrl + '?message=default&code=' + currencyCode; return false; } @@ -66,8 +71,13 @@ function enableCurrency(e) { 'Content-Type': 'application/json', 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'), }, + error: function () { + window.location = redirectUrl + '?message=enable_failed&code=' + currencyCode; + }, + success: function () { + window.location = redirectUrl + '?message=enabled&code=' + currencyCode; + } }); - window.location = redirectUrl + '?message=enabled&code=' + currencyCode; return false; } @@ -76,7 +86,7 @@ function disableCurrency(e) { var currencyCode = button.data('code'); var params = { - enabled: true + enabled: false } $.ajax({ @@ -87,7 +97,12 @@ function disableCurrency(e) { 'Content-Type': 'application/json', 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'), }, + error: function () { + window.location = redirectUrl + '?message=disable_failed&code=' + currencyCode; + }, + success: function () { + window.location = redirectUrl + '?message=disabled&code=' + currencyCode; + } }); - window.location = redirectUrl + '?message=disabled&code=' + currencyCode; return false; } diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 832a7f369a..8bcd11ccaf 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -1582,7 +1582,8 @@ return [ 'create_currency' => 'Create a new currency', 'store_currency' => 'Store new currency', 'update_currency' => 'Update currency', - 'new_default_currency' => ':name is now the default currency.', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', @@ -1608,7 +1609,9 @@ return [ 'disable_currency' => 'Disable', 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', 'currency_is_now_enabled' => 'Currency ":name" has been enabled', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: 'mandatoryFields' => 'Mandatory fields', From 4cec0a9f979c7e72163db0668b2aa76eeed9e043 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:51:26 +0200 Subject: [PATCH 17/48] Refactor repository and some commands for upgrading --- .../Commands/Upgrade/AccountCurrencies.php | 15 +- .../Upgrade/UpgradeCurrencyPreferences.php | 153 ++++++++++++++++++ .../Commands/Upgrade/UpgradeSkeleton.php.stub | 1 + .../Currency/CurrencyRepository.php | 81 ++++++++-- .../Currency/CurrencyRepositoryInterface.php | 14 ++ .../Internal/Update/CurrencyUpdateService.php | 7 +- 6 files changed, 243 insertions(+), 28 deletions(-) create mode 100644 app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php diff --git a/app/Console/Commands/Upgrade/AccountCurrencies.php b/app/Console/Commands/Upgrade/AccountCurrencies.php index 73b6ffdf62..c470b70a1d 100644 --- a/app/Console/Commands/Upgrade/AccountCurrencies.php +++ b/app/Console/Commands/Upgrade/AccountCurrencies.php @@ -129,20 +129,7 @@ class AccountCurrencies extends Command $accounts = $this->accountRepos->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); // get user's currency preference: - $defaultCurrencyCode = app('preferences')->getForUser($user, 'currencyPreference', $systemCurrencyCode)->data; - if (!is_string($defaultCurrencyCode)) { - $defaultCurrencyCode = $systemCurrencyCode; - } - - /** @var TransactionCurrency|null $defaultCurrency */ - $defaultCurrency = TransactionCurrency::where('code', $defaultCurrencyCode)->first(); - - if (null === $defaultCurrency) { - Log::error(sprintf('Users currency pref "%s" does not exist!', $defaultCurrencyCode)); - $this->friendlyError(sprintf('User has a preference for "%s", but this currency does not exist.', $defaultCurrencyCode)); - - return; - } + $defaultCurrency = app('amount')->getDefaultCurrencyByUser($user); /** @var Account $account */ foreach ($accounts as $account) { diff --git a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php new file mode 100644 index 0000000000..29c21063f6 --- /dev/null +++ b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php @@ -0,0 +1,153 @@ +isExecuted() && true !== $this->option('force')) { + $this->friendlyInfo('This command has already been executed.'); + + return 0; + } + $this->runUpgrade(); + + $this->friendlyPositive('Currency preferences migrated.'); + + //$this->markAsExecuted(); + + return 0; + } + + /** + * @return bool + */ + private function isExecuted(): bool + { + $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); + if (null !== $configVar) { + return (bool)$configVar->data; + } + + return false; + } + + /** + * @param User $user + * + * @return string + */ + private function getPreference(User $user): string + { + $preference = Preference::where('user_id', $user->id)->where('name', 'currencyPreference')->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); + + if (null !== $preference) { + return (string)$preference->data; + } + return 'EUR'; + } + + + /** + * + */ + private function markAsExecuted(): void + { + app('fireflyconfig')->set(self::CONFIG_NAME, true); + } + + private function runUpgrade(): void + { + $groups = UserGroup::get(); + /** @var UserGroup $group */ + foreach ($groups as $group) { + $this->upgradeGroupPreferences($group); + } + + $users = User::get(); + /** @var User $user */ + foreach ($users as $user) { + $this->upgradeUserPreferences($user); + } + } + + /** + * @param User $user + * + * @return void + */ + private function upgradeUserPreferences(User $user): void + { + $currencies = TransactionCurrency::get(); + $enabled = new Collection(); + /** @var TransactionCurrency $currency */ + foreach ($currencies as $currency) { + if ($currency->enabled) { + $enabled->push($currency); + } + } + $user->currencies()->sync($enabled->pluck('id')->toArray()); + + // set the default currency for the user and for the group: + $preference = $this->getPreference($user); + $defaultCurrency = TransactionCurrency::where('code', $preference)->first(); + if (null === $currency) { + // get EUR + $defaultCurrency = TransactionCurrency::where('code', 'EUR')->first(); + } + $user->currencies()->updateExistingPivot($defaultCurrency->id, ['user_default' => true]); + $user->userGroup->currencies()->updateExistingPivot($defaultCurrency->id, ['group_default' => true]); + } + + /** + * @param UserGroup $group + * + * @return void + */ + private function upgradeGroupPreferences(UserGroup $group) + { + $currencies = TransactionCurrency::get(); + $enabled = new Collection(); + /** @var TransactionCurrency $currency */ + foreach ($currencies as $currency) { + if ($currency->enabled) { + $enabled->push($currency); + } + } + $group->currencies()->sync($enabled->pluck('id')->toArray()); + } +} diff --git a/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub b/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub index 4ba6803d78..a5fd3aab50 100644 --- a/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub +++ b/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub @@ -10,6 +10,7 @@ use Illuminate\Console\Command; */ class UpgradeSkeleton extends Command { + use ShowsFriendlyMessages; public const CONFIG_NAME = '480_some_name'; /** * The console command description. diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index 591b4ae146..39684f8a41 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -140,8 +140,8 @@ class CurrencyRepository implements CurrencyRepositoryInterface } // is the default currency for the user or the system - $defaultCode = app('preferences')->getForUser($this->user, 'currencyPreference', config('firefly.default_currency', 'EUR'))->data; - if ($currency->code === $defaultCode) { + $count = $this->user->currencies()->where('transaction_currencies.id', $currency->id)->wherePivot('user_default', 1)->count(); + if ($count > 0) { Log::info('Is the default currency of the user, return true.'); return 'current_default'; @@ -226,6 +226,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function disable(TransactionCurrency $currency): void { + $this->user->currencies()->detach($currency->id); $currency->enabled = false; $currency->save(); } @@ -236,15 +237,13 @@ class CurrencyRepository implements CurrencyRepositoryInterface public function ensureMinimalEnabledCurrencies(): void { // if no currencies are enabled, enable the first one in the DB (usually the EUR) - if (0 === $this->get()->count()) { - /** @var TransactionCurrency $first */ - $first = $this->getAll()->first(); - if (null === $first) { + if (0 === $this->user->currencies()->count()) { + $euro = app('amount')->getSystemCurrency(); + if (null === $euro) { throw new FireflyException('No currencies found. You broke Firefly III'); } - Log::channel('audit')->info(sprintf('Auto-enabled currency %s.', $first->code)); - $this->enable($first); - app('preferences')->set('currencyPreference', $first->code); + Log::channel('audit')->info(sprintf('Auto-enabled currency %s.', $euro->code)); + $this->enable($euro); app('preferences')->mark(); } } @@ -255,7 +254,8 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function enable(TransactionCurrency $currency): void { - $currency->enabled = true; + $this->user->currencies()->syncWithoutDetaching([$currency->id]); + $currency->enabled = false; $currency->save(); } @@ -462,6 +462,14 @@ class CurrencyRepository implements CurrencyRepositoryInterface return null; } + /** + * @inheritDoc + */ + public function getUserCurrencies(User $user): Collection + { + return $user->currencies()->get(); + } + /** * @inheritDoc */ @@ -527,6 +535,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function store(array $data): TransactionCurrency { + throw new FireflyException(sprintf('Method "%s" needs a refactor.', __METHOD__)); /** @var TransactionCurrencyFactory $factory */ $factory = app(TransactionCurrencyFactory::class); $result = $factory->create($data); @@ -546,9 +555,61 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function update(TransactionCurrency $currency, array $data): TransactionCurrency { + app('log')->debug('Now in update()'); + // can be true, false, null + $enabled = array_key_exists('enabled', $data) ? $data['enabled'] : null; + // can be true, false, but method only responds to "true". + $default = array_key_exists('default', $data) ? $data['default'] : false; + + // remove illegal combo's: + if (false === $enabled && true === $default) { + $enabled = true; + } + if (false === $default) { + app('log')->warning(sprintf('Set default=false will NOT do anything for currency %s', $currency->code)); + } + + // update currency with current user specific settings + $currency->refreshForUser($this->user); + + // currency is enabled, must be disabled. + if (false === $enabled) { + app('log')->debug(sprintf('Disabled currency %s for user #%d', $currency->code, $this->user->id)); + $this->user->currencies()->detach($currency->id); + } + // currency must be enabled + if (true === $enabled) { + app('log')->debug(sprintf('Enabled currency %s for user #%d', $currency->code, $this->user->id)); + $this->user->currencies()->detach($currency->id); + $this->user->currencies()->syncWithoutDetaching([$currency->id => ['user_default' => false]]); + } + + // currency must be made default. + if (true === $default) { + app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->user->id)); + $this->user->currencies()->detach($currency->id); + foreach ($this->user->currencies()->get() as $item) { + $this->user->currencies()->updateExistingPivot($item->id, ['user_default' => false]); + } + $this->user->currencies()->syncWithoutDetaching([$currency->id => ['user_default' => true]]); + } + /** @var CurrencyUpdateService $service */ $service = app(CurrencyUpdateService::class); return $service->update($currency, $data); } + + /** + * @inheritDoc + */ + public function makeDefault(TransactionCurrency $currency): void + { + app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->user->id)); + $this->user->currencies()->detach($currency->id); + foreach ($this->user->currencies()->get() as $item) { + $this->user->currencies()->updateExistingPivot($item->id, ['user_default' => false]); + } + $this->user->currencies()->syncWithoutDetaching([$currency->id => ['user_default' => true]]); + } } diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index 3ef07f66f4..ff8c1c8d1d 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -204,6 +204,20 @@ interface CurrencyRepositoryInterface */ public function getExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date): ?CurrencyExchangeRate; + /** + * @param TransactionCurrency $currency + * + * @return void + */ + public function makeDefault(TransactionCurrency $currency): void; + + /** + * @param User $user + * + * @return Collection + */ + public function getUserCurrencies(User $user): Collection; + /** * @param TransactionCurrency $currency * diff --git a/app/Services/Internal/Update/CurrencyUpdateService.php b/app/Services/Internal/Update/CurrencyUpdateService.php index c01444e4e8..01fe1692f6 100644 --- a/app/Services/Internal/Update/CurrencyUpdateService.php +++ b/app/Services/Internal/Update/CurrencyUpdateService.php @@ -52,14 +52,13 @@ class CurrencyUpdateService $currency->name = e($data['name']); } - if (array_key_exists('enabled', $data) && is_bool($data['enabled'])) { - $currency->enabled = (bool)$data['enabled']; - } + $currency->enabled = false; if (array_key_exists('decimal_places', $data) && is_int($data['decimal_places'])) { $currency->decimal_places = (int)$data['decimal_places']; } - + unset($currency->userEnabled); + unset($currency->userDefault); $currency->save(); return $currency; From 80237d8bc3571d6a26814c3846ccfb8a6344798c Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 07:55:36 +0200 Subject: [PATCH 18/48] Refactor methods that request the old currency preference. --- .../TransactionCurrency/StoreController.php | 9 ++-- app/Http/Controllers/JavascriptController.php | 8 ++-- app/Http/Controllers/NewUserController.php | 2 +- .../TransactionGroupRepository.php | 4 -- app/Support/Amount.php | 47 +++---------------- app/Support/Preferences.php | 27 +++++++++++ app/Transformers/CurrencyTransformer.php | 11 +---- 7 files changed, 46 insertions(+), 62 deletions(-) diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php index 61a4c63d22..12a8db0d50 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php @@ -31,6 +31,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use JsonException; use League\Fractal\Resource\Item; @@ -79,12 +80,14 @@ class StoreController extends Controller { $currency = $this->repository->store($request->getAll()); if (true === $request->boolean('default')) { - app('preferences')->set('currencyPreference', $currency->code); + $this->repository->makeDefault($currency); app('preferences')->mark(); } $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + + /** @var User $user */ + $user = auth()->user(); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index bdb002df78..66ec5e7242 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -56,13 +56,11 @@ class JavascriptController extends Controller */ public function accounts(AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository): Response { - $accounts = $repository->getAccountsByType( + $accounts = $repository->getAccountsByType( [AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD] ); - $preference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); - $default = $currencyRepository->findByCodeNull((string)$preference->data); - - $data = ['accounts' => []]; + $default = app('amount')->getDefaultCurrency(); + $data = ['accounts' => []]; /** @var Account $account */ foreach ($accounts as $account) { diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index 5ba5d4fd12..5f85744279 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -114,7 +114,7 @@ class NewUserController extends Controller $this->createCashWalletAccount($currency, $language); // create cash wallet account // store currency preference: - app('preferences')->set('currencyPreference', $currency->code); + $currencyRepository->makeDefault($currency); // store frontpage preferences: $accounts = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepository.php b/app/Repositories/TransactionGroup/TransactionGroupRepository.php index 860d03187d..aeb9411303 100644 --- a/app/Repositories/TransactionGroup/TransactionGroupRepository.php +++ b/app/Repositories/TransactionGroup/TransactionGroupRepository.php @@ -418,10 +418,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface if (null !== $currencyPreference) { $currency = TransactionCurrency::where('id', $currencyPreference->data)->first(); } - if (null === $currencyPreference) { - $currencyCode = app('preferences')->getForUser($this->user, 'currencyPreference', 'EUR')->data; - $currency = TransactionCurrency::where('code', $currencyCode)->first(); - } $journalId = (int)$row->transaction_journal_id; $return[$journalId] = $return[$journalId] ?? []; diff --git a/app/Support/Amount.php b/app/Support/Amount.php index fdad00c33d..54541bad07 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -108,35 +108,10 @@ class Amount */ public function getCurrencies(): Collection { + throw new FireflyException(sprintf('Method "%s" needs a refactor', __METHOD__)); return TransactionCurrency::where('enabled', true)->orderBy('code', 'ASC')->get(); } - /** - * @return string - * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function getCurrencyCode(): string - { - $cache = new CacheProperties(); - $cache->addProperty('getCurrencyCode'); - if ($cache->has()) { - return $cache->get(); - } - $currencyPreference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); - - $currency = TransactionCurrency::where('code', $currencyPreference->data)->first(); - if ($currency) { - $cache->store($currency->code); - - return $currency->code; - } - $cache->store(config('firefly.default_currency', 'EUR')); - - return (string)config('firefly.default_currency', 'EUR'); - } - /** * @return TransactionCurrency * @throws FireflyException @@ -163,22 +138,14 @@ class Amount if ($cache->has()) { return $cache->get(); } - $currencyPreference = app('preferences')->getForUser($user, 'currencyPreference', config('firefly.default_currency', 'EUR')); - $currencyPrefStr = $currencyPreference ? $currencyPreference->data : 'EUR'; - - // at this point the currency preference could be encrypted, if coming from an old version. - $currencyCode = $this->tryDecrypt((string)$currencyPrefStr); - - // could still be json encoded: - /** @var TransactionCurrency|null $currency */ - $currency = TransactionCurrency::where('code', $currencyCode)->first(); - if (null === $currency) { - // get EUR - $currency = TransactionCurrency::where('code', 'EUR')->first(); + $default = $user->currencies()->where('user_default', true)->first(); + if(null === $default) { + $default = $this->getSystemCurrency(); + $user->currencies()->sync([$default->id => ['user_default' => true]]); } - $cache->store($currency); + $cache->store($default); - return $currency; + return $default; } /** diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index c519a992ee..46a1a91d28 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -60,6 +60,9 @@ class Preferences */ public function get(string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } /** @var User|null $user */ $user = auth()->user(); if (null === $user) { @@ -82,6 +85,9 @@ class Preferences */ public function getForUser(User $user, string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); if (null !== $preference && null === $preference->data) { $preference->delete(); @@ -108,6 +114,9 @@ class Preferences */ public function delete(string $name): bool { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $fullName = sprintf('preference%s%s', auth()->user()->id, $name); if (Cache::has($fullName)) { Cache::forget($fullName); @@ -123,6 +132,9 @@ class Preferences */ public function forget(User $user, string $name): void { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $key = sprintf('preference%s%s', $user->id, $name); Cache::forget($key); Cache::put($key, '', 5); @@ -138,6 +150,9 @@ class Preferences */ public function setForUser(User $user, string $name, $value): Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $fullName = sprintf('preference%s%s', $user->id, $name); Cache::forget($fullName); /** @var Preference|null $pref */ @@ -185,6 +200,9 @@ class Preferences */ public function findByName(string $name): Collection { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } return Preference::where('name', $name)->get(); } @@ -220,6 +238,9 @@ class Preferences */ public function getFresh(string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } /** @var User|null $user */ $user = auth()->user(); if (null === $user) { @@ -243,6 +264,9 @@ class Preferences */ public function getFreshForUser(User $user, string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } return $this->getForUser($user, $name, $default); } @@ -283,6 +307,9 @@ class Preferences */ public function set(string $name, $value): Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $user = auth()->user(); if (null === $user) { // make new preference, return it: diff --git a/app/Transformers/CurrencyTransformer.php b/app/Transformers/CurrencyTransformer.php index 2c363f19eb..0449db14b3 100644 --- a/app/Transformers/CurrencyTransformer.php +++ b/app/Transformers/CurrencyTransformer.php @@ -34,23 +34,16 @@ class CurrencyTransformer extends AbstractTransformer * Transform the currency. * * @param TransactionCurrency $currency - * * @return array */ public function transform(TransactionCurrency $currency): array { - $isDefault = false; - $defaultCurrency = $this->parameters->get('defaultCurrency'); - if (null !== $defaultCurrency) { - $isDefault = (int)$defaultCurrency->id === (int)$currency->id; - } - return [ 'id' => (int)$currency->id, 'created_at' => $currency->created_at->toAtomString(), 'updated_at' => $currency->updated_at->toAtomString(), - 'default' => $isDefault, - 'enabled' => $currency->enabled, + 'default' => $currency->userDefault, + 'enabled' => $currency->userEnabled, 'name' => $currency->name, 'code' => $currency->code, 'symbol' => $currency->symbol, From c3398d4d51325997dfba5db1940a3b60027c651f Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 08:05:28 +0200 Subject: [PATCH 19/48] Fix refactor for field. --- app/Support/Amount.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Support/Amount.php b/app/Support/Amount.php index 54541bad07..c018e502c7 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -108,8 +108,9 @@ class Amount */ public function getCurrencies(): Collection { - throw new FireflyException(sprintf('Method "%s" needs a refactor', __METHOD__)); - return TransactionCurrency::where('enabled', true)->orderBy('code', 'ASC')->get(); + /** @var User $user */ + $user = auth()->user(); + return $user->currencies()->orderBy('code','ASC')->get(); } /** From 2072a3dd948eabd14e092d0ed0027017fd34baf6 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 08:18:24 +0200 Subject: [PATCH 20/48] Remove old frontend --- frontend/.editorconfig | 9 - frontend/.eslintignore | 9 - frontend/.eslintrc.js | 108 - frontend/.gitignore | 33 - frontend/.postcssrc.js | 28 - frontend/.prettierrc | 4 - frontend/babel.config.js | 35 - frontend/package.json | 53 - frontend/public/apple-touch-icon.png | Bin 6903 -> 0 bytes frontend/public/favicon-16x16.png | Bin 789 -> 0 bytes frontend/public/favicon-32x32.png | Bin 1209 -> 0 bytes frontend/public/manifest.webmanifest | 88 - frontend/public/maskable-icon.svg | 36 - frontend/public/maskable120.png | Bin 3300 -> 0 bytes frontend/public/maskable128.png | Bin 3551 -> 0 bytes frontend/public/maskable152.png | Bin 4242 -> 0 bytes frontend/public/maskable192.png | Bin 5299 -> 0 bytes frontend/public/maskable512.png | Bin 15101 -> 0 bytes frontend/public/maskable76.png | Bin 2107 -> 0 bytes frontend/public/safari-pinned-tab.svg | 59 - frontend/quasar.conf.js | 321 - frontend/quasar.extensions.json | 1 - frontend/src/App.vue | 104 - frontend/src/api/accounts/get.js | 51 - frontend/src/api/accounts/list.js | 45 - frontend/src/api/accounts/post.js | 28 - frontend/src/api/accounts/put.js | 28 - frontend/src/api/authenticate/index.js | 27 - frontend/src/api/budgets/get.js | 38 - frontend/src/api/budgets/list.js | 28 - frontend/src/api/budgets/post.js | 28 - frontend/src/api/budgets/put.js | 28 - frontend/src/api/categories/get.js | 38 - frontend/src/api/categories/list.js | 28 - frontend/src/api/categories/post.js | 28 - frontend/src/api/categories/put.js | 28 - frontend/src/api/chart/account/overview.js | 30 - frontend/src/api/currencies/get.js | 33 - frontend/src/api/currencies/index.js | 31 - frontend/src/api/currencies/list.js | 28 - frontend/src/api/currencies/post.js | 33 - frontend/src/api/currencies/put.js | 28 - frontend/src/api/data/export.js | 28 - frontend/src/api/generic/destroy.js | 27 - frontend/src/api/groups/get.js | 28 - frontend/src/api/groups/list.js | 28 - frontend/src/api/groups/put.js | 28 - frontend/src/api/piggy-banks/get.js | 33 - frontend/src/api/piggy-banks/list.js | 28 - frontend/src/api/piggy-banks/post.js | 28 - frontend/src/api/piggy-banks/put.js | 28 - frontend/src/api/preferences/index.js | 31 - frontend/src/api/preferences/put.js | 28 - frontend/src/api/recurring/get.js | 28 - frontend/src/api/recurring/list.js | 28 - frontend/src/api/recurring/post.js | 28 - frontend/src/api/recurring/put.js | 28 - frontend/src/api/root/api.js | 130 - frontend/src/api/rule-groups/get.js | 36 - frontend/src/api/rule-groups/list.js | 28 - frontend/src/api/rule-groups/post.js | 28 - frontend/src/api/rule-groups/put.js | 28 - frontend/src/api/rules/get.js | 31 - frontend/src/api/rules/post.js | 28 - frontend/src/api/rules/put.js | 28 - frontend/src/api/subscriptions/get.js | 33 - frontend/src/api/subscriptions/list.js | 28 - frontend/src/api/subscriptions/post.js | 28 - frontend/src/api/subscriptions/put.js | 28 - frontend/src/api/summary/basic.js | 32 - frontend/src/api/system/about.js | 28 - frontend/src/api/system/configuration.js | 31 - frontend/src/api/system/user.js | 36 - frontend/src/api/tags/get.js | 33 - frontend/src/api/tags/list.js | 28 - frontend/src/api/transactions/get.js | 28 - frontend/src/api/transactions/list.js | 29 - frontend/src/api/transactions/parser.js | 79 - frontend/src/api/transactions/post.js | 28 - frontend/src/api/transactions/put.js | 28 - frontend/src/api/v2/accounts/get.js | 48 - frontend/src/api/v2/autocomplete/accounts.js | 35 - frontend/src/api/v2/bills/sum.js | 38 - frontend/src/api/v2/budget-limits/list.js | 31 - frontend/src/api/v2/budgets/get.js | 32 - frontend/src/api/v2/budgets/list.js | 28 - frontend/src/api/v2/budgets/sum.js | 38 - .../src/api/v2/chart/account/dashboard.js | 30 - frontend/src/api/v2/net-worth/index.js | 29 - frontend/src/api/v2/preferences/index.js | 31 - frontend/src/api/v2/root/api.js | 69 - frontend/src/api/webhooks/get.js | 28 - frontend/src/api/webhooks/list.js | 28 - frontend/src/api/webhooks/post.js | 28 - frontend/src/api/webhooks/put.js | 28 - frontend/src/boot/.gitkeep | 0 frontend/src/boot/axios.js | 54 - frontend/src/boot/i18n.js | 33 - frontend/src/components/Alert.vue | 102 - .../src/components/CompositionComponent.vue | 78 - frontend/src/components/DateRange.vue | 135 - frontend/src/components/EssentialLink.vue | 71 - .../src/components/dashboard/AccountChart.vue | 175 - .../components/dashboard/BillInsightBox.vue | 178 - .../src/components/dashboard/BudgetBox.vue | 284 - .../dashboard/NetWorthInsightBox.vue | 134 - frontend/src/components/dashboard/NewUser.vue | 393 - .../components/dashboard/SpendInsightBox.vue | 186 - .../components/dashboard/TransactionList.vue | 214 - .../components/dashboard/TransactionLists.vue | 60 - frontend/src/components/models.ts | 28 - .../components/transactions/LargeTable.vue | 227 - .../src/components/transactions/Split.vue | 339 - .../transactions/form/DestinationAccount.vue | 156 - .../transactions/form/SourceAccount.vue | 156 - .../form/TransactionDescription.vue | 70 - frontend/src/css/app.scss | 21 - frontend/src/css/quasar.variables.scss | 49 - frontend/src/env.d.ts | 27 - frontend/src/i18n/bg_BG/index.js | 228 - frontend/src/i18n/ca_ES/index.js | 228 - frontend/src/i18n/cs_CZ/index.js | 228 - frontend/src/i18n/da_DK/index.js | 228 - frontend/src/i18n/de_DE/index.js | 228 - frontend/src/i18n/el_GR/index.js | 228 - frontend/src/i18n/en_GB/index.js | 228 - frontend/src/i18n/en_US/index.js | 228 - frontend/src/i18n/es_ES/index.js | 228 - frontend/src/i18n/fi_FI/index.js | 228 - frontend/src/i18n/fr_FR/index.js | 228 - frontend/src/i18n/hu_HU/index.js | 228 - frontend/src/i18n/id_ID/index.js | 228 - frontend/src/i18n/index.js | 25 - frontend/src/i18n/it_IT/index.js | 228 - frontend/src/i18n/ja_JP/index.js | 228 - frontend/src/i18n/ko_KR/index.js | 228 - frontend/src/i18n/nb_NO/index.js | 228 - frontend/src/i18n/nl_NL/index.js | 228 - frontend/src/i18n/nn_NO/index.js | 228 - frontend/src/i18n/pl_PL/index.js | 228 - frontend/src/i18n/pt_BR/index.js | 228 - frontend/src/i18n/pt_PT/index.js | 228 - frontend/src/i18n/ro_RO/index.js | 228 - frontend/src/i18n/ru_RU/index.js | 228 - frontend/src/i18n/sk_SK/index.js | 228 - frontend/src/i18n/sl_SI/index.js | 228 - frontend/src/i18n/sv_SE/index.js | 228 - frontend/src/i18n/tr_TR/index.js | 228 - frontend/src/i18n/uk_UA/index.js | 228 - frontend/src/i18n/vi_VN/index.js | 228 - frontend/src/i18n/zh_CN/index.js | 228 - frontend/src/i18n/zh_TW/index.js | 228 - frontend/src/index.template.html | 64 - frontend/src/layouts/MainLayout.vue | 391 - frontend/src/pages/Error404.vue | 51 - frontend/src/pages/Index.vue | 72 - frontend/src/pages/accounts/Create.vue | 219 - frontend/src/pages/accounts/Edit.vue | 218 - frontend/src/pages/accounts/Index.vue | 259 - frontend/src/pages/accounts/Reconcile.vue | 248 - frontend/src/pages/accounts/Show.vue | 121 - frontend/src/pages/administration/Index.vue | 60 - frontend/src/pages/budgets/Create.vue | 193 - frontend/src/pages/budgets/Edit.vue | 201 - frontend/src/pages/budgets/Index.vue | 217 - frontend/src/pages/budgets/Show.vue | 141 - frontend/src/pages/categories/Create.vue | 192 - frontend/src/pages/categories/Edit.vue | 200 - frontend/src/pages/categories/Index.vue | 214 - frontend/src/pages/categories/Show.vue | 142 - frontend/src/pages/currencies/Create.vue | 227 - frontend/src/pages/currencies/Edit.vue | 229 - frontend/src/pages/currencies/Index.vue | 217 - frontend/src/pages/currencies/Show.vue | 119 - frontend/src/pages/dashboard/Dashboard.vue | 115 - frontend/src/pages/dashboard/HomeChart.vue | 173 - frontend/src/pages/development/Index.vue | 90 - frontend/src/pages/export/Index.vue | 74 - frontend/src/pages/groups/Edit.vue | 200 - frontend/src/pages/groups/Index.vue | 197 - frontend/src/pages/groups/Show.vue | 78 - frontend/src/pages/piggy-banks/Create.vue | 272 - frontend/src/pages/piggy-banks/Edit.vue | 199 - frontend/src/pages/piggy-banks/Index.vue | 208 - frontend/src/pages/piggy-banks/Show.vue | 77 - frontend/src/pages/preferences/Index.vue | 413 - frontend/src/pages/profile/Data.vue | 46 - frontend/src/pages/profile/Index.vue | 169 - frontend/src/pages/recurring/Create.vue | 590 -- frontend/src/pages/recurring/Edit.vue | 606 -- frontend/src/pages/recurring/Index.vue | 209 - frontend/src/pages/recurring/Show.vue | 77 - frontend/src/pages/reports/Default.vue | 35 - frontend/src/pages/reports/Index.vue | 157 - frontend/src/pages/rule-groups/Create.vue | 189 - frontend/src/pages/rule-groups/Edit.vue | 199 - frontend/src/pages/rules/Create.vue | 593 -- frontend/src/pages/rules/Edit.vue | 199 - frontend/src/pages/rules/Index.vue | 232 - frontend/src/pages/rules/Show.vue | 77 - frontend/src/pages/subscriptions/Create.vue | 280 - frontend/src/pages/subscriptions/Edit.vue | 284 - frontend/src/pages/subscriptions/Index.vue | 197 - frontend/src/pages/subscriptions/Show.vue | 116 - frontend/src/pages/system/Index.vue | 211 - frontend/src/pages/tags/Index.vue | 137 - frontend/src/pages/tags/Show.vue | 118 - frontend/src/pages/transactions/Create.vue | 436 -- frontend/src/pages/transactions/Edit.vue | 447 -- frontend/src/pages/transactions/Index.vue | 284 - frontend/src/pages/transactions/Show.vue | 108 - frontend/src/pages/webhooks/Create.vue | 280 - frontend/src/pages/webhooks/Edit.vue | 289 - frontend/src/pages/webhooks/Index.vue | 188 - frontend/src/pages/webhooks/Show.vue | 73 - frontend/src/quasar.d.ts | 27 - frontend/src/router/index.js | 50 - frontend/src/router/routes.js | 989 --- frontend/src/shims-vue.d.ts | 27 - frontend/src/store/fireflyiii/actions.js | 36 - frontend/src/store/fireflyiii/getters.js | 52 - frontend/src/store/fireflyiii/index.js | 32 - frontend/src/store/fireflyiii/mutations.js | 51 - frontend/src/store/fireflyiii/state.js | 38 - frontend/src/store/index.js | 46 - frontend/src/store/module-example/actions.ts | 31 - frontend/src/store/module-example/getters.ts | 31 - frontend/src/store/module-example/index.ts | 36 - .../src/store/module-example/mutations.ts | 30 - frontend/src/store/module-example/state.ts | 31 - frontend/src/store/store-flag.d.ts | 30 - frontend/src/stores/fireflyiii.js | 221 - frontend/src/stores/index.js | 40 - frontend/src/stores/store-flag.d.ts | 30 - frontend/src/stores/teststore.js | 39 - .../support/transactions/calculate-type.js | 69 - frontend/tsconfig.json | 6 - frontend/yarn.lock | 6683 ----------------- 238 files changed, 35309 deletions(-) delete mode 100644 frontend/.editorconfig delete mode 100644 frontend/.eslintignore delete mode 100644 frontend/.eslintrc.js delete mode 100644 frontend/.gitignore delete mode 100644 frontend/.postcssrc.js delete mode 100644 frontend/.prettierrc delete mode 100644 frontend/babel.config.js delete mode 100644 frontend/package.json delete mode 100644 frontend/public/apple-touch-icon.png delete mode 100644 frontend/public/favicon-16x16.png delete mode 100644 frontend/public/favicon-32x32.png delete mode 100644 frontend/public/manifest.webmanifest delete mode 100644 frontend/public/maskable-icon.svg delete mode 100644 frontend/public/maskable120.png delete mode 100644 frontend/public/maskable128.png delete mode 100644 frontend/public/maskable152.png delete mode 100644 frontend/public/maskable192.png delete mode 100644 frontend/public/maskable512.png delete mode 100644 frontend/public/maskable76.png delete mode 100644 frontend/public/safari-pinned-tab.svg delete mode 100644 frontend/quasar.conf.js delete mode 100644 frontend/quasar.extensions.json delete mode 100644 frontend/src/App.vue delete mode 100644 frontend/src/api/accounts/get.js delete mode 100644 frontend/src/api/accounts/list.js delete mode 100644 frontend/src/api/accounts/post.js delete mode 100644 frontend/src/api/accounts/put.js delete mode 100644 frontend/src/api/authenticate/index.js delete mode 100644 frontend/src/api/budgets/get.js delete mode 100644 frontend/src/api/budgets/list.js delete mode 100644 frontend/src/api/budgets/post.js delete mode 100644 frontend/src/api/budgets/put.js delete mode 100644 frontend/src/api/categories/get.js delete mode 100644 frontend/src/api/categories/list.js delete mode 100644 frontend/src/api/categories/post.js delete mode 100644 frontend/src/api/categories/put.js delete mode 100644 frontend/src/api/chart/account/overview.js delete mode 100644 frontend/src/api/currencies/get.js delete mode 100644 frontend/src/api/currencies/index.js delete mode 100644 frontend/src/api/currencies/list.js delete mode 100644 frontend/src/api/currencies/post.js delete mode 100644 frontend/src/api/currencies/put.js delete mode 100644 frontend/src/api/data/export.js delete mode 100644 frontend/src/api/generic/destroy.js delete mode 100644 frontend/src/api/groups/get.js delete mode 100644 frontend/src/api/groups/list.js delete mode 100644 frontend/src/api/groups/put.js delete mode 100644 frontend/src/api/piggy-banks/get.js delete mode 100644 frontend/src/api/piggy-banks/list.js delete mode 100644 frontend/src/api/piggy-banks/post.js delete mode 100644 frontend/src/api/piggy-banks/put.js delete mode 100644 frontend/src/api/preferences/index.js delete mode 100644 frontend/src/api/preferences/put.js delete mode 100644 frontend/src/api/recurring/get.js delete mode 100644 frontend/src/api/recurring/list.js delete mode 100644 frontend/src/api/recurring/post.js delete mode 100644 frontend/src/api/recurring/put.js delete mode 100644 frontend/src/api/root/api.js delete mode 100644 frontend/src/api/rule-groups/get.js delete mode 100644 frontend/src/api/rule-groups/list.js delete mode 100644 frontend/src/api/rule-groups/post.js delete mode 100644 frontend/src/api/rule-groups/put.js delete mode 100644 frontend/src/api/rules/get.js delete mode 100644 frontend/src/api/rules/post.js delete mode 100644 frontend/src/api/rules/put.js delete mode 100644 frontend/src/api/subscriptions/get.js delete mode 100644 frontend/src/api/subscriptions/list.js delete mode 100644 frontend/src/api/subscriptions/post.js delete mode 100644 frontend/src/api/subscriptions/put.js delete mode 100644 frontend/src/api/summary/basic.js delete mode 100644 frontend/src/api/system/about.js delete mode 100644 frontend/src/api/system/configuration.js delete mode 100644 frontend/src/api/system/user.js delete mode 100644 frontend/src/api/tags/get.js delete mode 100644 frontend/src/api/tags/list.js delete mode 100644 frontend/src/api/transactions/get.js delete mode 100644 frontend/src/api/transactions/list.js delete mode 100644 frontend/src/api/transactions/parser.js delete mode 100644 frontend/src/api/transactions/post.js delete mode 100644 frontend/src/api/transactions/put.js delete mode 100644 frontend/src/api/v2/accounts/get.js delete mode 100644 frontend/src/api/v2/autocomplete/accounts.js delete mode 100644 frontend/src/api/v2/bills/sum.js delete mode 100644 frontend/src/api/v2/budget-limits/list.js delete mode 100644 frontend/src/api/v2/budgets/get.js delete mode 100644 frontend/src/api/v2/budgets/list.js delete mode 100644 frontend/src/api/v2/budgets/sum.js delete mode 100644 frontend/src/api/v2/chart/account/dashboard.js delete mode 100644 frontend/src/api/v2/net-worth/index.js delete mode 100644 frontend/src/api/v2/preferences/index.js delete mode 100644 frontend/src/api/v2/root/api.js delete mode 100644 frontend/src/api/webhooks/get.js delete mode 100644 frontend/src/api/webhooks/list.js delete mode 100644 frontend/src/api/webhooks/post.js delete mode 100644 frontend/src/api/webhooks/put.js delete mode 100644 frontend/src/boot/.gitkeep delete mode 100644 frontend/src/boot/axios.js delete mode 100644 frontend/src/boot/i18n.js delete mode 100644 frontend/src/components/Alert.vue delete mode 100644 frontend/src/components/CompositionComponent.vue delete mode 100644 frontend/src/components/DateRange.vue delete mode 100644 frontend/src/components/EssentialLink.vue delete mode 100644 frontend/src/components/dashboard/AccountChart.vue delete mode 100644 frontend/src/components/dashboard/BillInsightBox.vue delete mode 100644 frontend/src/components/dashboard/BudgetBox.vue delete mode 100644 frontend/src/components/dashboard/NetWorthInsightBox.vue delete mode 100644 frontend/src/components/dashboard/NewUser.vue delete mode 100644 frontend/src/components/dashboard/SpendInsightBox.vue delete mode 100644 frontend/src/components/dashboard/TransactionList.vue delete mode 100644 frontend/src/components/dashboard/TransactionLists.vue delete mode 100644 frontend/src/components/models.ts delete mode 100644 frontend/src/components/transactions/LargeTable.vue delete mode 100644 frontend/src/components/transactions/Split.vue delete mode 100644 frontend/src/components/transactions/form/DestinationAccount.vue delete mode 100644 frontend/src/components/transactions/form/SourceAccount.vue delete mode 100644 frontend/src/components/transactions/form/TransactionDescription.vue delete mode 100644 frontend/src/css/app.scss delete mode 100644 frontend/src/css/quasar.variables.scss delete mode 100644 frontend/src/env.d.ts delete mode 100644 frontend/src/i18n/bg_BG/index.js delete mode 100644 frontend/src/i18n/ca_ES/index.js delete mode 100644 frontend/src/i18n/cs_CZ/index.js delete mode 100644 frontend/src/i18n/da_DK/index.js delete mode 100644 frontend/src/i18n/de_DE/index.js delete mode 100644 frontend/src/i18n/el_GR/index.js delete mode 100644 frontend/src/i18n/en_GB/index.js delete mode 100644 frontend/src/i18n/en_US/index.js delete mode 100644 frontend/src/i18n/es_ES/index.js delete mode 100644 frontend/src/i18n/fi_FI/index.js delete mode 100644 frontend/src/i18n/fr_FR/index.js delete mode 100644 frontend/src/i18n/hu_HU/index.js delete mode 100644 frontend/src/i18n/id_ID/index.js delete mode 100644 frontend/src/i18n/index.js delete mode 100644 frontend/src/i18n/it_IT/index.js delete mode 100644 frontend/src/i18n/ja_JP/index.js delete mode 100644 frontend/src/i18n/ko_KR/index.js delete mode 100644 frontend/src/i18n/nb_NO/index.js delete mode 100644 frontend/src/i18n/nl_NL/index.js delete mode 100644 frontend/src/i18n/nn_NO/index.js delete mode 100644 frontend/src/i18n/pl_PL/index.js delete mode 100644 frontend/src/i18n/pt_BR/index.js delete mode 100644 frontend/src/i18n/pt_PT/index.js delete mode 100644 frontend/src/i18n/ro_RO/index.js delete mode 100644 frontend/src/i18n/ru_RU/index.js delete mode 100644 frontend/src/i18n/sk_SK/index.js delete mode 100644 frontend/src/i18n/sl_SI/index.js delete mode 100644 frontend/src/i18n/sv_SE/index.js delete mode 100644 frontend/src/i18n/tr_TR/index.js delete mode 100644 frontend/src/i18n/uk_UA/index.js delete mode 100644 frontend/src/i18n/vi_VN/index.js delete mode 100644 frontend/src/i18n/zh_CN/index.js delete mode 100644 frontend/src/i18n/zh_TW/index.js delete mode 100644 frontend/src/index.template.html delete mode 100644 frontend/src/layouts/MainLayout.vue delete mode 100644 frontend/src/pages/Error404.vue delete mode 100644 frontend/src/pages/Index.vue delete mode 100644 frontend/src/pages/accounts/Create.vue delete mode 100644 frontend/src/pages/accounts/Edit.vue delete mode 100644 frontend/src/pages/accounts/Index.vue delete mode 100644 frontend/src/pages/accounts/Reconcile.vue delete mode 100644 frontend/src/pages/accounts/Show.vue delete mode 100644 frontend/src/pages/administration/Index.vue delete mode 100644 frontend/src/pages/budgets/Create.vue delete mode 100644 frontend/src/pages/budgets/Edit.vue delete mode 100644 frontend/src/pages/budgets/Index.vue delete mode 100644 frontend/src/pages/budgets/Show.vue delete mode 100644 frontend/src/pages/categories/Create.vue delete mode 100644 frontend/src/pages/categories/Edit.vue delete mode 100644 frontend/src/pages/categories/Index.vue delete mode 100644 frontend/src/pages/categories/Show.vue delete mode 100644 frontend/src/pages/currencies/Create.vue delete mode 100644 frontend/src/pages/currencies/Edit.vue delete mode 100644 frontend/src/pages/currencies/Index.vue delete mode 100644 frontend/src/pages/currencies/Show.vue delete mode 100644 frontend/src/pages/dashboard/Dashboard.vue delete mode 100644 frontend/src/pages/dashboard/HomeChart.vue delete mode 100644 frontend/src/pages/development/Index.vue delete mode 100644 frontend/src/pages/export/Index.vue delete mode 100644 frontend/src/pages/groups/Edit.vue delete mode 100644 frontend/src/pages/groups/Index.vue delete mode 100644 frontend/src/pages/groups/Show.vue delete mode 100644 frontend/src/pages/piggy-banks/Create.vue delete mode 100644 frontend/src/pages/piggy-banks/Edit.vue delete mode 100644 frontend/src/pages/piggy-banks/Index.vue delete mode 100644 frontend/src/pages/piggy-banks/Show.vue delete mode 100644 frontend/src/pages/preferences/Index.vue delete mode 100644 frontend/src/pages/profile/Data.vue delete mode 100644 frontend/src/pages/profile/Index.vue delete mode 100644 frontend/src/pages/recurring/Create.vue delete mode 100644 frontend/src/pages/recurring/Edit.vue delete mode 100644 frontend/src/pages/recurring/Index.vue delete mode 100644 frontend/src/pages/recurring/Show.vue delete mode 100644 frontend/src/pages/reports/Default.vue delete mode 100644 frontend/src/pages/reports/Index.vue delete mode 100644 frontend/src/pages/rule-groups/Create.vue delete mode 100644 frontend/src/pages/rule-groups/Edit.vue delete mode 100644 frontend/src/pages/rules/Create.vue delete mode 100644 frontend/src/pages/rules/Edit.vue delete mode 100644 frontend/src/pages/rules/Index.vue delete mode 100644 frontend/src/pages/rules/Show.vue delete mode 100644 frontend/src/pages/subscriptions/Create.vue delete mode 100644 frontend/src/pages/subscriptions/Edit.vue delete mode 100644 frontend/src/pages/subscriptions/Index.vue delete mode 100644 frontend/src/pages/subscriptions/Show.vue delete mode 100644 frontend/src/pages/system/Index.vue delete mode 100644 frontend/src/pages/tags/Index.vue delete mode 100644 frontend/src/pages/tags/Show.vue delete mode 100644 frontend/src/pages/transactions/Create.vue delete mode 100644 frontend/src/pages/transactions/Edit.vue delete mode 100644 frontend/src/pages/transactions/Index.vue delete mode 100644 frontend/src/pages/transactions/Show.vue delete mode 100644 frontend/src/pages/webhooks/Create.vue delete mode 100644 frontend/src/pages/webhooks/Edit.vue delete mode 100644 frontend/src/pages/webhooks/Index.vue delete mode 100644 frontend/src/pages/webhooks/Show.vue delete mode 100644 frontend/src/quasar.d.ts delete mode 100644 frontend/src/router/index.js delete mode 100644 frontend/src/router/routes.js delete mode 100644 frontend/src/shims-vue.d.ts delete mode 100644 frontend/src/store/fireflyiii/actions.js delete mode 100644 frontend/src/store/fireflyiii/getters.js delete mode 100644 frontend/src/store/fireflyiii/index.js delete mode 100644 frontend/src/store/fireflyiii/mutations.js delete mode 100644 frontend/src/store/fireflyiii/state.js delete mode 100644 frontend/src/store/index.js delete mode 100644 frontend/src/store/module-example/actions.ts delete mode 100644 frontend/src/store/module-example/getters.ts delete mode 100644 frontend/src/store/module-example/index.ts delete mode 100644 frontend/src/store/module-example/mutations.ts delete mode 100644 frontend/src/store/module-example/state.ts delete mode 100644 frontend/src/store/store-flag.d.ts delete mode 100644 frontend/src/stores/fireflyiii.js delete mode 100644 frontend/src/stores/index.js delete mode 100644 frontend/src/stores/store-flag.d.ts delete mode 100644 frontend/src/stores/teststore.js delete mode 100644 frontend/src/support/transactions/calculate-type.js delete mode 100644 frontend/tsconfig.json delete mode 100644 frontend/yarn.lock diff --git a/frontend/.editorconfig b/frontend/.editorconfig deleted file mode 100644 index 9d08a1a828..0000000000 --- a/frontend/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/frontend/.eslintignore b/frontend/.eslintignore deleted file mode 100644 index 0cc1d660ad..0000000000 --- a/frontend/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -/dist -/src-bex/www -/src-capacitor -/src-cordova -/.quasar -/node_modules -.eslintrc.js -babel.config.js -/src-ssr \ No newline at end of file diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js deleted file mode 100644 index fdd68ea42d..0000000000 --- a/frontend/.eslintrc.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * .eslintrc.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -const { resolve } = require('path'); -module.exports = { - // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy - // This option interrupts the configuration hierarchy at this file - // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) - root: true, - - // https://eslint.vuejs.org/user-guide/#how-to-use-custom-parser - // Must use parserOptions instead of "parser" to allow vue-eslint-parser to keep working - // `parser: 'vue-eslint-parser'` is already included with any 'plugin:vue/**' config and should be omitted - parserOptions: { - // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#configuration - // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#eslint - // Needed to make the parser take into account 'vue' files - extraFileExtensions: ['.vue'], - parser: '@typescript-eslint/parser', - project: resolve(__dirname, './tsconfig.json'), - tsconfigRootDir: __dirname, - ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features - sourceType: 'module' // Allows for the use of imports - }, - - env: { - browser: true - }, - - // Rules order is important, please avoid shuffling them - extends: [ - // Base ESLint recommended rules - // 'eslint:recommended', - - // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage - // ESLint typescript rules - 'plugin:@typescript-eslint/recommended', - // consider disabling this class of rules if linting takes too long - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - - // Uncomment any of the lines below to choose desired strictness, - // but leave only one uncommented! - // See https://eslint.vuejs.org/rules/#available-rules - 'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention) - // 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability) - // 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) - - // https://github.com/prettier/eslint-config-prettier#installation - // usage with Prettier, provided by 'eslint-config-prettier'. - 'prettier' - ], - - plugins: [ - // required to apply rules which need type information - '@typescript-eslint', - - // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-file - // required to lint *.vue files - 'vue', - - // https://github.com/typescript-eslint/typescript-eslint/issues/389#issuecomment-509292674 - // Prettier has not been included as plugin to avoid performance impact - // add it as an extension for your IDE - ], - - globals: { - ga: 'readonly', // Google Analytics - cordova: 'readonly', - __statics: 'readonly', - __QUASAR_SSR__: 'readonly', - __QUASAR_SSR_SERVER__: 'readonly', - __QUASAR_SSR_CLIENT__: 'readonly', - __QUASAR_SSR_PWA__: 'readonly', - process: 'readonly', - Capacitor: 'readonly', - chrome: 'readonly' - }, - - // add your custom rules here - rules: { - 'prefer-promise-reject-errors': 'off', - - // TypeScript - quotes: ['warn', 'single', { avoidEscape: true }], - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - - // allow debugger during development only - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' - } -} diff --git a/frontend/.gitignore b/frontend/.gitignore deleted file mode 100644 index 553e1345ce..0000000000 --- a/frontend/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -.DS_Store -.thumbs.db -node_modules - -# Quasar core related directories -.quasar -/dist - -# Cordova related directories and files -/src-cordova/node_modules -/src-cordova/platforms -/src-cordova/plugins -/src-cordova/www - -# Capacitor related directories and files -/src-capacitor/www -/src-capacitor/node_modules - -# BEX related directories and files -/src-bex/www -/src-bex/js/core - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.idea -*.suo -*.ntvs* -*.njsproj -*.sln diff --git a/frontend/.postcssrc.js b/frontend/.postcssrc.js deleted file mode 100644 index 3e3fe5cb92..0000000000 --- a/frontend/.postcssrc.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * .postcssrc.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - plugins: [ - // to edit target browsers: use "browserslist" field in package.json - require('autoprefixer') - ] -} diff --git a/frontend/.prettierrc b/frontend/.prettierrc deleted file mode 100644 index 650cb880f6..0000000000 --- a/frontend/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "semi": true -} diff --git a/frontend/babel.config.js b/frontend/babel.config.js deleted file mode 100644 index 88ca4e7820..0000000000 --- a/frontend/babel.config.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * babel.config.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* eslint-env node */ - -module.exports = api => { - return { - presets: [ - [ - '@quasar/babel-preset-app', - api.caller(caller => caller && caller.target === 'node') - ? { targets: { node: 'current' } } - : {} - ] - ] - } -} - diff --git a/frontend/package.json b/frontend/package.json deleted file mode 100644 index 3926d6beac..0000000000 --- a/frontend/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "firefly-iii", - "version": "0.0.1", - "description": "Personal finances manager", - "productName": "Firefly III", - "author": "James Cole ", - "private": true, - "scripts": { - "lint": "eslint --ext .js,.ts,.vue ./", - "test": "echo \"No test specified\" && exit 0" - }, - "dependencies": { - "@popperjs/core": "^2.11.2", - "@quasar/extras": "^1.16.5", - "apexcharts": "^3.32.1", - "axios": "^0.21.1", - "axios-cache-adapter": "^2.7.3", - "core-js": "^3.6.5", - "date-fns": "^2.28.0", - "pinia": "^2.0.14", - "quasar": "^2.12.3", - "vue": "3", - "vue-i18n": "^9.0.0", - "vue-router": "^4.0.0", - "vue3-apexcharts": "^1.4.1" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.13.14", - "@quasar/app-webpack": "^3.9.2", - "@types/node": "^12.20.21", - "@typescript-eslint/eslint-plugin": "^4.16.1", - "@typescript-eslint/parser": "^4.16.1", - "eslint": "^7.14.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-vue": "^7.0.0" - }, - "browserslist": [ - "last 10 Chrome versions", - "last 10 Firefox versions", - "last 4 Edge versions", - "last 7 Safari versions", - "last 8 Android versions", - "last 8 ChromeAndroid versions", - "last 8 FirefoxAndroid versions", - "last 10 iOS versions", - "last 5 Opera versions" - ], - "engines": { - "node": ">= 12.22.1", - "npm": ">= 6.13.4", - "yarn": ">= 1.21.1" - } -} diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png deleted file mode 100644 index cfd92079cc948f6f1b88aa5a0f757d6ca195fae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6903 zcmd6sWmr^CxWJcgDS@S=L<9sDkdQ{Ykw&_gl4hlQk&cyE8tG<9X=&+_?v@sikXY{i zKi&`b`+d%H&diB9Gv}Q*e(#(pO?3q#d>VWJ06?UqD654k8~)pIu~A3yF>F3mfoUhL zCJg`}5(pkFuu$iWR*G6`0D$i+03bLV0JuY43jPfMc!2ta?NV}Acneu zZKD{4OHNn&Ifc}bz%K&_l_EvF?H z#cC8!r_Y*Pp_O9b{w|f=$UDVZ3855&4|fMA@hNFykrARze`lf*3c;$yxz1V4&aP-P zLw>H05f8!gwks~#55U(BTY?`Ty(S=mk4NkG9qZ)xFN}Dmz+#~voG{*I?8*{++-7gc z6Ucf0|FPoVFPH~b#8bTL+i6uoXOcbb`nEvnP#tpdyn!Tr6W3PvIX_)DE@q+@^NdpE zIq&ffP~9Efepz_~+L@SwZ}S=)MM^kxUbN0qXU_?h3^Cb8VauXle`3FR5BD)+99}@aNz4);NAq3~RkVtMwJ> zB)?=U?}b;nv7kB#Y2YeMX}J(pgGqVd5ar&c{aU*Mony594%&T3Hb@-0{abiB;%j~$ z+Fj@Vb(0-d9|z?jL)hHE%{_-*JYc7i$V@~U>Z;xI zcgdYJowSfDsv%yhNUI#YVTa}rn>D0fPdo}HWi~O>2NW2*8P=K{mN7F~`oxP#vkZQE z5W;J$(erUo>t@%G?yd9tt<>WvICZh358~+I?iYMzMO{t`2cPN zFS;~HRbW_{UD-$Jm-?#+n6f1sxq(%I!8vJVk~AO2sx_25nf??d`EZ!(hV=~Nly1no zVV%j+e3wBqe#vFxrpmm32%a}*@um~>_&iw=od6WR3_5)%WRuv9c zl#XSM<#cU!T1K=d6A9k6Cq;oC(9qRRFf*3Q*8GXD`+!6BY+o4sBX5xq#T?Nnm{Ll_ zJhz#&-OQS56<&xTb&I_@1#qm!+!ZY89bCxqJ)~y^$Za-Bn`oS@CTIl={@3@!#?e#eZ3v{6ZNQzH(&a-=XzDZh*Og+raC1z~FKexFK= zlwGp9X(>&7`FQN-6aXhwP?FND-wj-Px;i6qGSPJki;iz_-oo*odK3zhJv_$K*g=f2 z>?D#A!tU+^Q=05LL%NFd7bsiMEi!c019?L3D94{>gKQqs&eGaTxF2(OQWD85GTur& zP>bX|rcz#t>3CLK&CVkUrp9i*`agad#HteW=xJRv#jBGEo|&3QCKnm`~G*3U0>aV(kQTIco%E|M5DCLA`>!Gmypk z>5w*kYAHFYOq>;r`oy5aOPzH$7lhh5;jGbV!NF9CitS|4+e%~1X++f8H7`w*(5UzasXhSv8Ri!p+USi_GcMpa1RfA+0?xPAU<4 zqOn=y_@;?Hhs}T0w_MVlc)A~ho0SWEu%NT{xq@bPdWYWPuC(KxR9AjOi^pU-RPaIi z@GQu99hWk3xKW7w)cEWpk4ar-vT;*Jx0x`WvM6M2r;!S+&1rzRJ!p@I+T#H&BO5%gElx51_4mM z$$Xi^e@f)ROKoA>ZGOy^T?ys4NSut+z`I2Kg8g0#LzpPLTbyD#J{O*DB9UOQ75?UX zELVQ6tIOh#q|Q~MlTpeEddc1Cg@!Gk*b)_I}`n;i#`S)hR`T zr%vXAlxEf7$tBAJTC64(5=_52?$zJqdcHszOC)1Mbc-?4w0QiRM110rx3}xouP_Cx zSL#ayetr0z&=_86@tKD>g5!NM5DAc%W0hwtoRfjjSqp~2)He%ZK1Vej&sW&N2PELb zJnv<14wrTcvqGAJZ}|LKqAf^9TN}JFQcox0T5a)~RYK?aZnAqVqjOU3hpQkf>v_%= zL8AICLv}Q{qXIJ}F6mzMhg%FCPh$n^8A^`%HPt*HtWL#7hso20g)+SV9PD`R*4Fxy zz+!$(HCf|5%3hL;nx~L0>#tT?0vFX&VHu3G0obB&MwF`8BC1@41dxoF?_Dndf6ant zX*Y_UHFZ6l2a}a%Ze|!>^Y)GwA53@u!2)rzq^FRQV5>Wzi<0UKx$6t(HbNw1@Atc+ zx~lEFZ*(d@s?6RckgRvbjGCX>RO3esnuL1Op<)^0Vr2c*LaY0tVCLz`xBZqga>)i- zxYA~gOa1|DV)D-3Go?iolpd_vuXSJ_(L7SPK>tGB&_rGbkKMIaf zEADJlV+(ih7v(^yNb?=;4}ETScm{bz<_e`H4O#fLy?c;ms%l9$3tM{{F`g ztj{-gwYwG+p>L8$H5ndxo`9loO@s^gN+~L=j3opmm3uWa?M2PV(9gq;Mas0?X5cSy z2&BCWb59uph=ZXTVlA}_RM@tK*v+eSt!zoJSv$)!Y-;S)O@wlui_(`E50xzsQ zC*pg?dTP0B-(zxRz?I!W$-=PV_-BFMf%57doQ!|S4 z{rFj(Tc)%2l_*ro%5j{0guU&!4=6tIM7)Kw-ciYgQiUTu9M>cPG8UbX4~TXlKL?BK z(e|3fsL$%)e-dx;h7c_(Aq4q#41Vju3qL4?tk}q7PklTbe#qQDzLmVjTFOD*+*f<=x6-jnM+8}d)qunw{u3yhk2sv@53}n zkwwGkV<(u0nfrQ?cwy1AN0fiTBg!Ipi2Q#EYCzBmPNa7?x@3FV*kA9YV-bnjkS=71 z#>~Y5j|C|CLP4?Rahdi3hmI%?oQxgd>jA-q-O@vX9@?;$ zfxzy>3O>3GKI#21DJxpFu8Vj6y0ePQT4~0EOm!CgS2vQTKo+PUlY~F~v(Aryy_b-y-96+d)Q?Mv z(2iux>}(gRuXjCU^jrZDd|vTf_bE*2Hd|Iavg`C+{I%q%wXdE;eX6gIAtjPL87&Y# z@08)IQQ869(+G<42)fI4(;{zKX_WS^O-O1sg9}AC+=hKWDXx8k$>kqde)e6XF~*C| zi(ChHg1Lz7AOfbpmJ2d3CB|;ew;F3-9)5Nc7T)S7DK}dzO6e?r*kf<~N`Muds8ikH zqrPHNe}%T?w{8jEAJNXyM?aT2n|@B4u^hc%vqnA4xRV|aQcZzy|Dtj`1=6h*wg0uO zot}i)uBH7KL7;djpxY$ZFx5Rv`rA+7V81(bX?|B~;I*A~Lmfimbt5il6`ewY&M6ox zPMJCQ8nT<0KZD`v)RO%V)2ml?E5c5D|rF;Zedd^P+EDe$nac zw@04ML>YKi8Jh@t1n#Yn>aq#&_FlH3asBoup$$HT=|8<=`l`S{3%^YMn*4JNLiQ1{ zSKfS3QJs67j^&XjiLSTW(*( zf2t**scND2$TlcVF127ImZ)Onx{>>M(SzpGccPx8GD*DN?_1!F_y197URj*#nU6r7 z9q>QIgiGGhJ2X49E!2^53d%lJOe8)0`OVr^)K^*g4aNPq9^PXOYTnl7r@!rzrb5SY zQUzMxY|XNSUre4o(h2%Mrx8sRYo~KCQtN%xn7o8N!DA9qEVdPHV8Vf#ajB?;V0`=^ z>0H3E8A;1-^}FS-2XEosrp-n9UO$tlIC@l6h?L9ZpRN0nK06K9v9!O&mF_L*QeW-J zMUO4Z>>O%+1|KW+nqceCqUEYwZOWc2>4cKvjxQFX%t6$XbdyickvN-}M)a3XMgLyz zzSRZxdDtpPc*`~uuG#&TLT9-Hia;qtpnA}?&mZFGn0cxo+^ky4;T9y|(>!E18+Zlj zNC15Y4|!3Ek{-6c@k?+>Hn5k5nsH&}gOe5I#BHf>j>LT-0^_5|=EHeWz$PsBLch6hAnnl^$yEubwUV#Yw5bCmSs;X?E_Vlo?s#!>Y{j$d=%9ywjOK>+T z;{~oh$|Hyj>Gm~#z=?JAn8kT78=>Cdj(8gt3|x}e>}`>J3V=e8X74%Y7zsVfQw^6Wr-!#{ zoD2V*^E|gpSs2Pc*)&a|uI0MjeF{7D1y987EE)n^zQ^uk34CCD_bjFV1So*)mMps? z;rcDdOqgXIx_~t4yFSaf_pLUx+L>!Z;jz}|`@4zmgWj2A3XVo^f1bBhI=ur5>yZQ{ z)d8+H`bw{D6wl+;K-5`4g>dMpNV(5aLo79B2X5t%eCqzFnMMuy*r;gf2N^F@_$dl+;2_E- zUJfO{-yG%ffVrfdC%*{+uO^FfbEPcYyI98c8&iLhVkcMvDPDP!F1OX!-g{LVcU;)) z;p}aXP?kP7C#C8dCHzaWeA6^CfNiJM8Y-V6{p{=kr>;OIV!6zs+@NVg_g%{yh4$b< zk(gVg2`ZUwt@i5nTyb1vCV_VM9S{QpZW?<|eldh+Fuw_7!hC629%n%6kXVKIkfLld z>>7yn+Flw%k#l6jkteb9b3RD)Il9PPXbo@?yUaEbLeF)Zvwgq*%I)II(fkJI)eZHSdXBibrd2s5r#nohDcp)(EXE>GOt4kFe6_uF#Mk{t0Ml=1ahSWTDI z#VGH*7q!Wk=~{P$;?QI~6}9hW(SvWz!sJ5-KfZtEKXv-}fZDWfdLN0jk=SO;>?6JP z`<`4Bl*d1uun7v6K;*jdboT_}n=O0)cHB}qFjuN5VD0xBg<_Ln&;4Yi3cNKLcy=;A zAu&C)HSSG`PP3F+^T(cY8bST}%4gu&8G96M_rYh4NdQ#3_)KgcxphM=`uB9YS%@~b z>vMf}QFt_NgZG{@)p>`@)YGAd9KCIqUOPKjv+>2M-N9YG3xDf=+%6I6w=18^_!!G8 zXnUOAt2Xt?%at3%77HtdgX)%vbO9d&yz?^az8eC({il)YVxCuq5xUv4{zeJ!s;c%h zzWpJuPKN3Ld48jqBW}uP7`OPfcvjyl99z#R9fgJorwoA_J~>5N%Y>Yt@-{*mEP9rf zFSN*=69x|gPZLl}27|Nx3i{tXxw>e=e+(4@{V!Qj%W7N!eo#Exv+x0m7R_QnPwKM< zGh)v9eVa=b6d>R%Kz}>vrk6B8pY&>T-Ja+{G-xiQ6*hzoQ zb8O6YE4bWf+}Nl4_MM_a1h3;KUHbG?A6_k<0<4Y|Aoj23?m1gFX1z=3?GTYims<$Tx?bIel$XW;t%-aKRYey$Nf=EO#2 z3T%-kbg>4mNG;-t{ROU2%b-2`3b+2{4r3slL8cj5ujw>Jg-|Od z`g^UjPE{IFUTF3gt9}JnKKpOYt8s?ZhIMfS7IA|u*IsW|WDM~>+VU6rjwjdXMGjSy zXFVd%nEfS2qm^T$Is8*dV_h*>Nc#TZpweRHw`B0kU+SpbP-*ieTP+MP%Nmu-j6QOO zbmgb~$%ykI_q;fE)BUlFHmp3U7}-5>1chOgL7%);fP&keGdzH z2i(SL=7r7-a}ONklDz-yRl4qnQIs5j@6$WsBixEOgLSUScqoTzeb@HiGJ^jTcjc`s zGCaxXW)j89D1Pe6KEi9N?lYSY=g|ryEtg7%Nvh(-%PQl*$IRKt7s$5_STL-y{giS< zAaLUUxxc>*p>6@jmM7&Mu$|B*;YLML*`l}}mX<3_Dr>!_^- z<6ufG^hT@46yIK0PTT%s{wvQ|`bkX9rUpdVh-}(cT?Jbjp>hhrWd|ZTrtp$*F(se= z$$EGRPUEO;BL5QO=#5`4#U-WtTbI@`t#T4Jfq;W}EIx|<+D6>3&3ROo&=M~{8kJGL zsgvtHsxuRhw>EK<4FlR>X-Bb$|F4z)CmcUMlVYBUaw*i$7gkR>15axUPa6>{cNRZdl_+Jg2U99bGeg5wTjbYSXs0P&k^`Pxy z>j|-Nw*f#P5N`WVjviJPt~T5*?sl1{Vl=3S^nG;le!*RO{)Mn;u(wE!3_1l(2xU9`L7JmKg k8||a(!x;%y%v0tD98!^bUc47bL3II8l2ezhes3Q7KX3y)F8}}l diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png deleted file mode 100644 index 8c83dacde53de0abb7807b6bd33dd46cb08fe480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>#Qt##i->pZXae)yH$&|Nr~<_Q0kGldJFb6kW>?I2WvQG1lV! zi9P>;;NRchAK$%LJNtZu@mW9h=PRfE{rTh1myc(Iv>!~a`tkhHk7p16|NQ>{?Xw?G z?!8zy`{C5uhtnI*hZ%mleDeR_zdv6;|NrF9|E+U>J-G4t>X}EgTAr<(b}mT!$Mc8( zzkU9HbkqMuE&neZ`2Ohj^EET?_m}Dz`~Sax z{+`_Nd-cS>H_p7-yY6hD*5i2{w;NKfWqaLe&bVF@`eDPXPN0_=lf2zsL?+!oX$s_U z7I;J!Gcbq%nIb@$+e@zkS?ndAzOL-gn4~$`m<=b(6aj_$JY5_^BrYc>DDW8=87}%T zGcw}l4ND6_rkFc6duskLH5sJ#I2}?_Qd*SsNGL$iQ&SV2=@reaJU@F}dVGD(E;*~apsgq(D)RP?TbZ}459ElIloXW} ziWU~PTVFYN`10x5x7i=Y`0=UvsquL}`oqca+Jtw)wgcQimouoAxJHzuB$lLFB^RXv zDF!10BO_e{BV8l&5Ccmq12ZcFV{HQiD+7Zg_ZEUu4MIb1eoAIqC2kE{n2D?NY%?PN}v7CMhd7XyecH3Bq*_5p`a)~Ei)%op`@}P zRUxyWB$Jc1ICAEQ%n|m}4IT@;^cY@=3zmFxGMx&vg2B_(&t;ucLK6UrkXUs9 diff --git a/frontend/public/favicon-32x32.png b/frontend/public/favicon-32x32.png deleted file mode 100644 index 53a42dce3e7407de78cac1b0417090a5fa745fd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmZ`&dsNbQ6#p7yspQ$|L}ld~Q&H1Y!pvlDQ^E-;YKYC1IT0{9JtX@zORY>>W!l_Q zH#?D2hg(s(eDrc_>QLJzkPl2z^F^X^@R^$655D{P*Z$fc_kKS2@j3ULd(X{@3=grh z-E0d0uwyY991KY-W{txh=WyVAUKM#tl|RZc~Q4DkEG~QQOs`kWK+z$?;G|xV6X8=DSr! z{iwcH+9?QXi`~6A*bO0^RmnT}fhw+-inCq8c6kxwGp}ib7V}JN{q*y?iJJ1E>uG8c zQxWd^GC5*tY*=@@sO_L%*O9&Rn)b>1sQa2?__5pW8_AbX-aQ4E$M!~zR=eJ z-_FD4YG}}n$$rq5Tp5!Uw;%HFPT?%{tF&Djmo@u{=8krI+FJhj3vIRu)3Nw*S%*i)qQ+-D;_mn(ObHwY_HJ zTTOc0RP&RCzRtzLp5Al3zHx=)sgV2D$27h*01g0F8?c5q1dIZ5<){5 z@7dP@4HnplnO~d)fQV5dR_Uwg!q{qr#SUJrTeZdJUEGcWhZIc1Wif)dyIcA3_6eEa z+0+O45InYgLN+)^V*3N~P7`P5X5SF3sRWyv-1z7gFZY%g-l}aMlD3gOPU%vJe?7^X4~rAGa=~P<3N| zJA8c}Kd7ZY%5Lxd?Dx_ST#>gSz@m~iwlPiRz zM1Prgk4K^Vg>qrV1er{ZCgHo1h8r5`N6}k{if!$S>eAC{OeWW`LW#P-cT;FaO~k%i?#_;mBjlaz zX#3m%rp-t09}56TpQWc3#huT=R!&BOV-Nuk5z_c6LJRC-%F!{S(ouV2yGB z&WYf~C#-W?7g|8Xts^lqcgh7gry4G)wMYF|lcLF?X?1HRvvjW)&~IFe%+Y;|un~Y2 L9L}hu$7lTu6&h4R diff --git a/frontend/public/manifest.webmanifest b/frontend/public/manifest.webmanifest deleted file mode 100644 index cf49fb98e2..0000000000 --- a/frontend/public/manifest.webmanifest +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "Firefly III", - "short_name": "Firefly III", - "start_url": "/", - "icons": [ - { - "src": "/maskable72.png", - "sizes": "72x72", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable76.png", - "sizes": "76x76", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable96.png", - "sizes": "96x96", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable120.png", - "sizes": "120x120", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable128.png", - "sizes": "128x128", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable144.png", - "sizes": "144x144", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable152.png", - "sizes": "152x152", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable180.png", - "sizes": "180x180", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable384.png", - "sizes": "384x384", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "maskable" - } - ], - "theme_color": "#1e6581", - "background_color": "#1e6581", - "display": "standalone" -} diff --git a/frontend/public/maskable-icon.svg b/frontend/public/maskable-icon.svg deleted file mode 100644 index 46ca2a846f..0000000000 --- a/frontend/public/maskable-icon.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - diff --git a/frontend/public/maskable120.png b/frontend/public/maskable120.png deleted file mode 100644 index 28472c71b9df4919726ca018bc60bf065628f3d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3300 zcmb_f^;Z+#8=f#arA9X@64IdLXiz4gNQWTJXc#d@NjaoLaC9jkCE*Z31VOr_=a_&D z7$J@1cc1^^`@{1-_q^vh=brQ4d*AoDNyZR8I%-a8002N|ps#I8ErMEc1ML1 z0HF0V&;~yZL2Va=`aV74`KsEHkjXnfRby?RIMSiK^kze!_&a<+yX+cRd$KTeF(0GIqwL*f_-L@DBMnG^RpI%>+XIfH&0uuTdVE(8_~7r(6GkVZ<*5tvp zdoxF#e*&}cdomg;zpth1So%MZIVAZkIZkaaU^OPcu)y@-dLyY3*UUKrmey5A?@xvk3Y)|@37 za!XY0vQcpTFiQdsnYk9(0D?v@&7Q_G4ZJFzHaY%F^X9JJkZGhTRVy5S&VspOM)#y~ zzwXwbFJ*0dq^r-_-Pg^^vUIJC?n&f2L)i@S+K_8HF72-}io4zEyrv@Vi55x{t4w$L zQIIuP6I0HJQV(kN!oSmga#%(&ar_XYk+>DpQYlWoYsn8|r_#!G7Vz2Up{jWt-2Lx~ zYuSj@0FSQbz%`Z|__}rXB@=&*1K5W@@=Vn~o}VWELi15sXF*!~3sx^)MY;$`Axc0v zIchd`49kfs$Ozj0^zx?|fiCiZZl8YTd(7B;O21X=(jQINLCqrTsNye&!Q^l?tKf*2 z(6ML4+m7?DO^D(HMmNWR%jv`o^ilg%Y;siR`5CXG#`IPyTjZb-p#FiL(gq*Kz_8@F zit^mluND@DD>-d`iYP)!8lbLS_S5Dl|2iE|W#?0$IMM-JBUAM_4=#Q&&o zQyl>*?Va1>ltSP2&yw0PjOIHjd8WkKRu)f-YWap)ijeNM7ae9iUvC=O$1*M*alc*KvwPx1iLsOVv<|Wq1(%115kNkzLY)*5uh}&fHDR(gD$o2j~Zp9qKPSU4g z{lw3>VG}c2%O*~+PvV^-;ycA(U6EiFxI!~`zsmepa3_&*`8pf^drO*Kon{{y_Lz^- z__9Avz<-LIwhun_H2J$0qa3Hr5xya!-QZ$jM>A|dYQJg>JhjnNJ|dNF_srnkR}t%^)C?OKX{gGTsUVcUJ&FpvaI*!Jp9s1k(iW#D!2LbC7j>Y;eB=rb6~1< zuus|5Wmk}x@=dKAKM=Pcf$VTiWs*G5!z@NaUDT?6jAkZ&9IxVidTRSOtX?iALZUCgG|@r-oiFw(g#6V?(xX>aBcH7uLIiRUVVhNa&@b-rrqRwSk-LBldj? znGkFS?f{XBY(J{e+P6i=+;B3v{|9LrAQEd9Nc7q^S(PZ?>f4^k`QeS!eI^>uSRbc3G+Ac$bTq7uQfQtWSa;?2O(zNNl`O{*=eQ$15EzF@1Jj=nVDu< zS#T3ThmyUX{8ge6mGjH`eI!1c5shYc%~1Ap(N}XF*=ryq=A6>(!09uP(SIVU(24zI z;cZ`2PQK;T$~w!!=dJvG@}{ATy~a|B%SGyt0n*1oLwJ?Tpi@5`1I#Q%uIi!6TH})y zOC6X;O4KMIZYdF}!oW4Fjj%M8XN|W7nXvgFvuEz9-{|6V8jzA1j6YE_oALDdU4wR7 z!2*`CF=L%)a&-&&A?5*8Fp4cKu)nM0(8f-Hg+7aO<;#hcfQDUb+JhdgdtSe6o+x%JD;*9w(@^de-O*QGI_8Uv-FHozWQ=)>EBG@53 zQB5_y_)C*5$l~N3dS_i}%mS#@*7^)0e1mF3C)~^EXD7P)`~Y^5{OvvyBoA8007Vx; zS;xBcjx~Dbe+*4+d{5{-Rpy=x_Ri_R6sEO+etim6MZgZNg@aZO)5o1$xh@XK=DN!8 zhY{)O@6I*ifpcoVPz@6KFIcyrjgG&L3j@j8g?Txe7Rx1ex$;}P_;UTjHIE6nvy&@M zm3#fkKNZIp^M4PU7$5^tD#G3lh5Ro-Th$**{HClYS)SR58r?6LZvk)RJ=ET|zIQ87 zNPeD-6crgk#%s;4NP6}yODM(0AZdy|0rt=|Yi0Gh)v;G*d9AMjb$92n0;C=;d`!^H zeZn1{lP?L&D-~qKVe*}+mdK?=fw4+rr90c^j$-8%CixES%gy~Z+EcAC_rrnmLD@@dGta!8yB^tceMX~qNr+l?}*lzNeeH5 zs|x$>*a7uB`+Ed7r6TuBnHq4Wal>?|?GLYAO;Ti~ld+oX6@2l&91_UfXEK^3O6p8U zkf|mIlPf?$_v}y|2db4@5yHuN;@G@bF>8+%{I5pT4Y(e^6t2J_<*r~eCIo`ih$d+C>m5L22I>LI`zX@)vZuH)q}b+)f=M3T4|9mmPwUsO0J z)==nS`LR=~9b!!r?eW++HzA=N^! zm%A{9!M!=Y9ySVIPg0OV2iU6HA#hFQa31YuG(Y~27ZJ{ds3I-uNvZ$Bn%Z(B^@!vQ za}`nVv0mn#fzzwawEG)J=QHl}2ttDK1SeHLjngxy|l=XH9}KD^a{4eZ||eR|KH`zX}|%{4mFzWapeS|cFd zMO=Nr3pE?p$Ilnhaht42U(|Z&#~kfUrmnX?If$M&7YfeJL`n`N>$+0zm=Xe7R~qG) z8x?TSMnkK5>?EJowII>2G;iD@;Z;P`b9MEkEUomJg+Hh)!XZJTw=G0uvJ^8am}2f) j{C*e1n)3go(d!$s+c>#G@{B#=4+UVL1JSP2bcp#Mb0<}M diff --git a/frontend/public/maskable128.png b/frontend/public/maskable128.png deleted file mode 100644 index 6a29bd5dedcac45688679c2291ab0fdb5ddf06c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3551 zcmb_fXHXOB(oP_e9x=e7CA}tA3ihy*aOH)vyRB2MA z3JTJjbm>T>NDv`>xxc@k_s(pacXxJncAj@+5JBpWjyGXMZ!Gcwe-pn2kdl<@-1 zc51l{&>R!i(9RD40MkM+0N9%GcY_x3`WxKwx5T*l<6L|n0B|^*+(U0qKeP+>fgHxy zJ!e;wkJi!4NMFb5N$$_QVC?1bk3{&-tp@`cviB05s`zi1Vs(uTXTFyS?S2#j_k+Ck zG)h<>uLnfy-qS@%f}$atQ7WbUzN006;;edMFX=y&My=76O0s+Cl0`3$n7cA6cU2v{ z=YYH3%earKc0AKli}m_Efv#)r-&IYGt)1~Z68|&0o9~BT@55q$w@7GY8<=YV_#X^| zzo|6=_>kP%D;snkR~!Hd#VmzB{y^nKIbzR$mqe7(8*-!mrO&9)=%Tv}5F#s3Ns#b} zP-bLC!H+yZ0(?r}wl}C5d-hnB{)SUKZW#?09x&VAg|agpL%mgP2k-Y(yi>$% z$19(2_%QRW^^?V}iBI!73tzZhaw5I$ zG5?DP(R{7<_NqL0C17QWTh@KIbI4UHC%HIgKj)OA9iAP)>-qSaAO4iH%)%Wa+>hBe zBNE}oz7sQIZkQ*m9bV~bMWPu=gYxE|K&Il)1X`K)NhXm+(y1|eq}0}k z(}bFe&4H1-ONV*o7tq!$y1e@*edP zws@!{G_O<2m@bt`u!F(7HuLtrytKvl$vq=jwa-hrWUx zwwCm1xGAox)%yf@8cpSI6N0iz@ZYuA-xYfvbJAuFSmUi5!=rB=eE3-y(*0;Wz~~LE zLS$-9u4F0rqBK9^ZkBY#!{hnRFLTG9)<=l71VAaOtvxrv4DD+r!EcP<{Cch|o8wft zF(PXG6pD0YG{>*9DU%k$ovUeSn=IqJFM%6IR|ei$Yoz(Tb|h90IUzgw;T?i8#!rQr zE)4g*Z5DXx)t#9J0h>1hL{TWR1V^yFh${o6+Zvp|na#gV>8{M>D8>X% zT9`0J2r6xpkP@w4wq)fFmf3$E6SVaocU~sfjfgpY=3sfT=7mc_`82{R|C80- zusUxQ@Nd8OR^yl0z`Rpu&@%#6wsnvoQi+n0x$u?Inf<*(wfUxmQqRJ8N4YpYZvET5 zBn6h95uqcfHU@v3=ex$$FGqB)c9zNs8+MGlV;@)71njsgf#X@<^nRK>%{xbIS~!Di z2sFY<^~Vc61(yP<`Vvbk1cq&Hb*UO-Unf;jVGny#B&(SO@4Oug`Tf@_WKWD$tj7Ln zUOpwDGi=gjQ|k32!^SMiFJR)$mP8M=v|*P#+jpg>EKWTWEzT(+G+39Ny}SpjP<6P^ zQMftpi;CYy}CU!%BEN^6NwWPj?{MS3{r?JOw+hwOqZvg7*!jGfS@)7LwFgs*8U< zUCBr4>4fAVtJyX+smaId{N&DNf>Bd&7a6@Mf6hX5t{-Vx^69rF8A*I;XaMklwlD+< z?+YpG5x9*&YSm{3MaGz@`ono-bf2)c%4EpBfmNR&a83HB>4O?JNrW0G;%4dxLc>K< zoQTXa4IERd;X3ROTijs=nRu}!yby(bx9$AAaa|NeWm~sa9eF~|XkdMn&n?i23#tBA zWRkCV$@&mvYGAi5Rnb-rsi|T142307ygRHMB~4a)FX~}s_B;u*yv;JVoPYEQ0i;NO zXVT8N^XotQP#6c(Jpu3K?f+3dyv+7g{h%2sp3eO^c3sLiVgC#;>Y`vCI@&Z91h-IH zj*h^H5kik;4)ci>c0M`up>tX8V-|h~d6u?>!wA15wjxEj-*495;Ff0&_|WcX_p6gs zRi;3Do_N$K;i_HH2~69R5$r-aP?%G$**!AK5!R9)SH%a<_}6LU)*E{>vX5IK9bToU z{nyuVi3rC0gf`9xGcC8cA2Va0m@Rvr>zm?CXYSL^zJ)PPnNyQ8}*B97%SF#-CP;I=WwpSlUXq2$=b-U`Mp|T;d621_lVr7dZ5{C z>%m_+?}TRkNTgG ziOg%7$6Y0yPt+$hG7N~%gUu5=MS5?9P^&6IZi7Z`iKJphCg>rXNT>a6y@9d?OWZ7d z6*V-1b_mRsF^VuuW5J)<0O#f(`$nsX8(PNjR@UTIsKV)>Tu5({xxzM79l~wa&Tyk3 zY}-3(Z@N3)M%y;{B=qM^@xlWInEQ+Y3g##K}wao89T)>Rez^ zvO?bZzm&$ri+1YAh#l5nd(G<~($zYWT_E^%hEZ~Aq!sm8XA;nwiiBw)n)(7bHpsh+ zon%Mk=VhC&qC3rM%U4DDn3r3EWV>15;%7QT{-3Jqr&ij?(fvW#iJp;4MD#0}Y|hC; z-kZ~lGY60EX1?%BuH$0gOH!&`uQQr0PR4qJ8n9OKe6hdD@{M8{fRs&F%Oj&-JZ_S+8ilk6+Y&=O3ZTetEKBYIbsg?M8k-X}+kBxP0x7kFR^|x+z}Y*k z-oD<)Bi45uWgQ&2M<&7ICEIUfkCB^yS70gQnUD%7(IYZ-R>klG9Zt@6-}JfkbIF^t z1?F!*SUJ%BXPcWr7DeOQ4(g|hM!4lzfz4&|ZV9DZ=AM{cp#~5zxEm5iwJjKEEwabI zc?P}Z9g9%^vyl`dHh@Y4S~CN%TYCwtt-pJBq+Vq0%ZiRO;o*WNK~8u+@>5B%S3elX znYEQa#hz1zA_$?P2O24-%!U&&2#+t`M}xGnbMbER`oIT?L14iN9siK+(5j14sdh@x z5EO^+^!^>VUNndyX!HAF=rk1mN_U(Nz@9Ktb7t#Lbqzgvz-@o&Z@qDBC1@>FWo7wN zThdX&f{ojKW#AU~A_rm?#uF_o6()`8-fNOyW*xNfST>Y}!*(_Fyd|7^=OW9iBgv=hLAjsMEkJMABxXd{;&3aW15%nz^ zu)-6W#mIKBIOl-<(LNS>5)R13L$t=3m%I0Z!5qUGfRz};9bYcx+IBdk%Z)B+XoVXj z5uiOMsz4bXnS;OPe9Wvc_^fFP9#a|{rDrZkHqJ9nRi!f=b~|cmyXv%#%*wmYGmx8Q zoXhh}tSg-5AM~%LSWrl0=(R}X$4GnnXKY7MzO7eJhPgQFWCo?8tAPJ1pZ9#e4D2}> zT2!x9ee=Cz=?pVMdF2k1!^lVu7}GxbbIZ1qhdrx)VaJsjaSZ7YVe9C5e0mH9U=x#hdwYIiON(29 z`>TSe7!T>5yD%1XIY(+S9ZfnysP3yp!;C^7;-3ez6KolZd$rR1hec6eWtg|z&;d5r zI5~y!zGQZR-%vI%I+LBO5SDLwY6Y##l?%Z?l%;!$Bfu6<#(nq8K06fsrR5ilMy#GKBvXKzMS!ulYe2Arp9>Hi94zea<>~L_;Nv3f?FTPBl79pM zRP0)+N+u!i4wu6NOlEq(C&&3$;bJ7ASv(|K#2oSxYIIZqp^XeZ9s*`&^)K5#jTu=9 z3D5nb;KgSl;&IVX*T7I$T{-8MoAS%H`X^~?Y4?i(D@Ph)F0Ono9kFaJu^;|Bn5Tqd z`B&o$EpYDJ7BkGqXntgraBr~;{5bM*z2NxcRg431)}%0E)JxEw-0=Sau|>jHs8M=@ zE&5nv-gW;DROZrpo0WU6~aXPWn)R8=Tcuv!PjD>Fp zgF>V_S0gftrie#7QzQDf(>$X$2bc}9e-cN!PCeuK3l^J2?VrBu=g#s7s17-Jo&!1e z_c7v&sjX`GNXB@~qJQ0T^ZDaInq(gl&-YFNum^63WSsg~$EBU&#ks)R7HQUhi-_3& zZM~)8&>hCa&t@Z{EU9xzC^#xU|DTNgXKIVmZTJiB6& zlK`UKB_{&jsivf8lq9HDQlJY}E0HE};+w(It@4>yznhPOw0wr=C>he5tH~ujrDE7w zW5(@c$MeAXQv}J%^r!xJ*Sy`FgBbQ(QR^Kq=`Pu|gCj&m7yjK|QgvWe-2qu%61)l4 z+IF^qNi(U4!?osW!L3!uU>qZ48SnNKzlmKA$nB6@5SuodB^>8Dp^_KY+|pjGROOP| z9t>FiE@~4j4xk{D_*UN($PX8ge}CG{siURLO>aCa?79J*WjPPUXm$={$i5xDY&uvZ zZG4#&B%}48w-MuW&ipmnwFZ8xnN!z8Y&i{_SrNhBdCnUVtY}W~POCgrC!j z>Y74ad#)8E#CIo!6BtdOOL|~8ZMJNqnGcN|-_nDoB_+ySmzQ4cZcPa%NGDq-j}1#X zkBgcOfpws84p+=wpr&MgI0uVVhRW#Yxzg)m4L5TdQ+2S8)pSxV+%|QwuDCwM91{Ec z3X>GXMD6kdWwI@9c;Ax#sa`%UXNO)O%2)sIq|#7g8ZFBb6hhLxLn z)(U9zz1UWjJ7pj@F8!3d;?JY@ROTkXAmav3NaTl>G6rXxDV^-t62eQtD~8N~V(qN* za}$b}hw_>~Er~OpdIVMlqSDMoDr}Us+tCw)v)vCXJ`}FAb`t*>p?dEj#KkXZQfX?C zJEv%Bi~sVwHGtU8rkup~dG|x+nVTU|0R%_=3iJ9b)7nZDhx?#_ZM-LEpbM)G%pBEj&u8K?lY2`R+5M0W2K@-eq>y<- zOU`|1)Gqq1rvI@rys6lIZEH9=wLtoBna!)}pCdM50$ZU8f0;549AQCWvUe&^TN*(- zBH)eoiBk(9w@AMy@^3MveKp#yil)zKjfy~bd8`=|)6}_ixX3Q^8f4%l)gCzFY%h}T ztmQk{UwUsS7sppcU$!w7sFnDw6YCVv+e)NR3jQeM0P;4* zMIeSz<5AekA{C=>Mx6U7Dc$l#WVL`t+~x7|o!Gcl^uuPM%$eBP4@XLe=v5U{OL{-{ zWM#s91)hdR$ESu}Uqyv5wY>hnMY_)hwtYYV)Kz2kt$DVW)W^}?+m#m7kq~g4j-EPg z`S7&Wdw6@*MV8YQbN)H+bn~Gy5_ZyVzi{ucrk+7|J>$u&JiG`N2{w#ZJ{$G%02$LE zq4mRK!{O^4ZWN1p0hI-(RKY&?HYj*>3fl0S-70Xd4xHgea+M9PWHRJ{P50sYLF34Vc$#InccyfDcAu z(pO?*xE>4zt(8Pt-k;ZT{II0em0toO9FE#1rEKH&;kIN2VhVQ)dKOpFEX}O>Z&w88 zTG{wh)Nc0M47Th#3a4i$2G311vt%rS<*3{r%drl)= zPn0LQGd2xgeW5jUD6!8a!q6i3(aBeY4vvnX)T;YxELwmKzkiwQkGq=aI9cyAGWZ|2 z_)TliNd+7+P}gUnn6KimAzwWHXHNWqp#9W&;1HJS?50!~d6T*s_KyaX=cLa2{$L}nqrK*@1ypaT1rb= zs4lb3Ck!BkcFNdKx(0MP*F21RVU(dqf0oJw$q(3R-)&Nd-)K3(o7|j9RyL%f@gnZP zC|SnHRZ)Jna0W3IFVwTf<&;zL53vK4^+k!z;Aonk$jykQ?J4|67N~MQLH)ay``wt# zl|Py0+=_+=q(Q5~r!8$K~58{oX-uV}da zW)*IS|4xSJq#v^N^fV07*8~38&OVYH?dz!Kz_t%LgzZRFl8#5KD zU4fCV^@*fZHvJ=gn54&9KNl&zYhNd8%H3}X3Ut}Zh6FF=mbo-#xFSyGUZVtx1)}w5D=j&@PZR#-~ zud`5;@IZi52Oh8Ha&rk=DpQ4B>-&R{_4kodU)LstwkREcllAo6CrPj40qGzrhu1D2 zg`@s}+Q1NQ?OVk2%Lq-(o1h3%SLXRd5Zr@p{pwU+u*=BDojR_SGH)%Q6h}gv!Bds? z_hd2P-WS}_EPzTlmhz}y6uwOdyG4LdYZ}K$n?xnLZN9MByPud7f3(^LZAjkglIA(% z=|~cS1jlN+Z&*6;bEtZg+v9idr6>r7i4w8BtPQrPXXZBuA?;a338=!!-I{_%inW>DJU{qmNeBLWwWIt=+`aVSC{h_Lh397r| zSwL^Q`duR9N50}$yL8bbBar#T6(~(aIYfzxUK9oGrfb-RI@H*HRw|?G89hqxi&uQy zK04Np0AVKPR=$g*&Xsb0#Xm}*FMkGKXc5}@D@ek{8E07cMX+cewo^KN^eeO?zH&D8 zk?3wh%U)Duk=tRikP|);(1X1%!HpyT%sE$G^Wbs6z=%x|^$_k#%i4wD#flI35#_i9 zpnzze7q>rp$ucF89~uVv>hO*JW{7qm6cxWa-wnAYU@H=V5^9)t@g8QqJ_X?;rly7V zEN<;L9=M$=ZaSWlk|tyW=F5*Q{UOKQnhkaas_qaQ9<~+d+vXkNi|D|jYl+jFt1Lka z3LRLKZYyj^Zf~M3({z?Vhb|q4*bl|PA1zsZ$sZ*J{23Chec}A}phBGraDf-zqsB9R z)fe}_pmmbeG$fPfB8oQX?#B`{7N`M3k2?X)IT3=4J0TzKK*6+W#8)iQR^^njFPz;YIe;oCwC3U8f#=#2PzK!ReB`gE96~VZ-H_&wZ#8*+7#UoHJ6KFs@>$obg87X zjR+BFd)`Bz3W`dZHX**MG@P#zn50hUO42tW64sCU5Lr&QWrF;Pzj7!;Z5?zPJJwm9 z)`kyGEXGgBDF>XG5Vap4p*vE)2u$q8&Ar{=QzscKK!hSi2Bu~x0z=bz4`n7km;Ec% zM?BAMSo=6jfTO5Yuw8$xUrv3nm$2S#n^N_`JSqc#G5B^DH9vzIz3~!R!5V%A_?}?r2eOD5YHFelQsi`xDo?NT1sr%oW zG^b3yBiHx;EvxZD;K~>=C$_DjU)6ErvHmPhhdh&gFKN{+FO#k4hLxbf)P4*r#5mT- z3v-RP3%;N!0j|`<-#wggJm1=7T>K1qSP0%X>5v~g9;wY(RxFb~0;G(jWyF0W{R!`E@7z_ZCMLY^|SlKq_FoMI?* t;htm6al!w=(EBG0qDbEV6RNRbb)#Pz;wRG|aQ_K_mYSYwgR*_>{{TH)<7xl^ diff --git a/frontend/public/maskable192.png b/frontend/public/maskable192.png deleted file mode 100644 index f280d1d2b2718c35d54fe03464bc04324887f0c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5299 zcmc&&`8$;F_kRXsLiQ1|leLT`CHu%ug+W3?vZV}S?AyqiBx{z$*bUJl`!d>$?8}s$ z3E9nzy%67d{{!D&KR?{heO>2%p6fdIIp=wu*Lgj)xMjr3e4ZHq09F%YeFSaq{BNCM zq&*SSUJ%;GA6NB%C(zHTrd zKaW>r&GP^Ng`4Q>S_kKE&V&R*-3lO7pS{=U7JrdNIxey=^BHkEIpN@Fg5X+7>l@6` zrOWE-)t}`CE|cosz-9@R3vV>e)}=ty#gifIbbiLEdZMvnIUE@r>8YioM(Q)GCHpVP zicArutyVv5W+;>$%@E95j{{zMR~1PJ^G(Q3Ue-NR0!8q`6EkIiSWhVMS%n#JJ`cty zKBt4{7=lD^lmHy%mcW_O|J5_s_i6$EZDB{W-J6r?sHtwtB~}rUh_({~yDO zd6C(t#Dr6pZ)PHpYlp*9bcascJL*DD>a&8TbX*oo2BWP;0-~oafn!a!R_vzRKs%E} zq=8tf1~aD6mIMIsrD+4clc7*`p>(Cg!Y%G?XeItlNF$b7;FL6Sm0z9q8VB#EBItB8 zU9P_mS4{-he_!%dz!}}A4mC1G%{Fft~Rwqt$E*DvNUXR3&P0%;iv%vfznlE8Z@=|lz^(<`! z`Otsg6E)ggH5CFl{jdWAgwmkEq$ttZi+_+}vkTF6WuTP!%f2c8ufSf1ZYLYGTeb>Z_G;wG^if@jMrN_xd3C-rH)!1DwRWf@8LZsu=1x>WPR>+ORZ6 zqyphGnLsFo=~=fCSRMA9bJ#Zx$4(T6re?(hOwvn$-OHOL3#82CaG7n#@v0YCm$3@P z%?YW)n?Q3h?a<9iGBY%W==SwB!Cm(#rT@W^mxTWp?bWLfbRM^|rSiMwasGXleSe

!*RQ$2V%V;ZH8O#I?1%S0=!DPE57||{S zkuA=`jFd|vhd~#d{_x345KNFMl{xJ2hZ79RQ&iCILb(YtX=BB-M~OUv7p1&BDuo%S z+<=JI+?O(Zd*oDE$3inST&rjN#{R}|6<>3+N5i#`Q8c29E;;m2UdC#)6ecOQcsGc* z=Qf@(&i-P6?34S-0Dm2CvDc4kiw9^#cDlt##h~8A+Tvle5-+eoyr{H2%&KCoWZ32D zZ`rYQQwA+d^YTnN9aiKr*v-7{Mx$mzx8jyx=G#au*~pYW2DmLE#S$MPz>KUSmR$gU zS)Ab8s`lWH45#M?S*)?jIQ=`HiQ5S9=dfDJ7qDnMHo^7sr7yAr6`hGj1u=o+zPO7f zrp>A+f)iu2VgdY0W`_WDc87!JRd!2q>FsUO`O=p+Q(KaAE(8EHqtU0=y=5?oRav5a z^6>#L*Y=^DCp}i#y?B>*9Z1P&fl56{$SNk)@*uJ~>q}YT-?ycU2D;N)&XzAKIOh3U zeU)|t&Stm|>sxb?tRH5+2{v6*E>1^-NSSh(m(1Us#=73mSB7{lz%p8r6D5(rhqui_ zE$M!^-h1}s{sU9w^{?r2Kt94CD8f~AA!(i4{f-*~EV{n-ZD^6#49U22t&B@;?9_Tq zSv=hu)ZM-hP26RY&Hf;w@K0(NgCM(`5WDlE>eOi51!ILgkY3Cu%%sA9BoBQVi^V_TV3t~U@jFW)U%#`wHb7yu{@}qwbd85Z}fBF#u^0v}wyQKl0w3b02 zioU}z4OoVjUnNB%TKp{|mL#ZYQ;Yi0{%Y&W_?FW2&)US4-(INLx_VAQLiF-)jlcI0 z3~-&mDxzd}Uj3SAo@#q6d2}veyo4SYvWg1ryqzURfB4?Yxuz;PMC`E|{%`aJCb;QD zFwQJhy1;0s(8;iufQQ@h9i~J75|I*gY6`&vg@CY3OUy&Xh>+Y{} zc54I7HEbb`voG4dnH8CuWw!|as#gWs9AVOxI(OqRVpgf{QQ?~=X!4}Eu|qb3UpdwP zpLv?na%gFapvYmQ4#i+ynle9KSioDxCf2PEti91pKJ2HYA=K@u4Kqu(a`vN`8k@Os zC34{-!nd_rFXvzN#?ir_|PzTH9lg;-&B&;ABGms(FsCc^wSybOe7BO zuuvlS)KrhXs6uMsvl$)+_6-+Yg)nI^P8wx=BG;dq=FdrAwtOL5T&XBvM9!Ut8|9?UP_J`DJartSssr3fAsf)L zqq{Xi0PDEl`E)z(jTYmz&CX+uXqgHj&(MPj437kly--rNcJ#(NnOW^QQw1U>Xpil1 z2|{XZI>Fm^;_ADdKB#Qenzk#=PnL;J)pB@pyC;s+{_R%v4XB4i)VL7bEmQbkR;&Km zFTdQ`A#XX;{(j8ni=XQt29?()o*Y4rSe&NT=`K?}CyoOO3hoP{s_u%$PWaB8V{A#`eJPabn6hq$}w zSELOrh2Al@X7n2DaA)e$I_3NbmW-bJ8fJMqBG)8e{tnd}G9f#`h_Onv%8T3}rt-GZ zs#o8xOXW?<67{XE2w)$TT#2itpHetM=01e~&70HB(704g*_^JE_m!xC&(4<(Ekd!! zIMtZhIDZFqJxBlDw4E7^2}bxOoZCW7;HxF#d8op(ol735=kNp3+ho}?o*x1^#*r7?Y( zm!h~NdkbP~E6>WgNF|Rh-JgzUPdiVM?x~u|YJJzaB7$(|h#eQJwh9?nr@;$k}z>UWiY;m(ze1qGunLT6qoZ=hI<3`Mx?p8WTSn zLm8`R;o{?I8MLB+=Wv41f%~pV4==7vnGUjAH8CLu!Xk4 zJEgNU3YoCE7zC1N(hR)Vmw;zFY6k~hN{HMo#lGEBA)Y}L-dTal6kNZ1!LWwF9Nx-0 z-odoO>E2yL>(a^L8wNB!!8q4k*ycbn`qj=J7v5e`KnFjBGHEtd)Pw%4nZKXA-5&dR zEsO7H+9~z6Qn2lACZ~&K$Ke&|X>Zj#p)(4vJ+FJahA|U&T&NBxrjq7!GHtGT`%2k= z4^PkRItT#wRv7|2*e}^L$2PHxup%w_yEN-Ke{yH7Ot*tyN`(DVMgkQGJqHWAFQs^9t&Ep+9@Hu9IC}PHs!=7Xk*+Z!hXrgH)+yl7A0a4 zNC*M~Puq7E!lLg9efl6FP|C&Q-%3Fn8@?g18zVnsUBg(12poP7knS5b@Widw zt)+l*XSEjdHDyN0BLL{A?Wid{7TeIK@eJo2O^sVT;7>cBTCa`S(l5Xue$T>Bwcjgv zH7<#z9rD6;XcG?Ce1^l%3iz<%=D$}T!74vvPx>Q+HHIeES`|+sv#$|sWun^2 zJx^^B*&J!5Oz>q@2Z>jshL=9Uf{*TAgLs7*wXxU$-LeexS~%M?-p^#6rGDJZ1AJJc-iWVy^` zA*#y_a2TgMfNdfYCt7@+R!T@s$H z%Pj3l4*<(^VOJuBK4_AuR<8-Kv?84~PiL!r8{!M@ajIZA+Lalc-37VZX5du2L(#U;2*>OldJr1ed{z#4&%Uo@|&wXmZlr&3f zN#-sHz!cO){YM4nwM97mauzJgmVwEY3ghJ4y+%ILi*Y_tH)x^vl4dUo{Aaq=Vp>U@ z|0wW`lc!kZbKo||0RFUPg}^Cr83cs0KU^z_xHiA%TXH{@0Ea%X!n_|f(2AWJd0MBS z{c@;6J0gdsXXLO`4EytRtc(MQYFhK}_w zqD12tKQFxR^M_U#PVU%83g`ZoIoqc3D;E%6_-G2DuYA}4=1LPqP-OkhNl09KV(Z33 zc-581YHT?zaH3v*)F~^Pd~8j0`6^IH^KX!8`Zh?!v5XJ%i1M=h(e76@xMOO4IM}sD zUFP8t;+{HC+${%qBSAMhqrWA}{Vm1N!(D4>M90{_O-*_7My_es@0%Ry(d6);-MD0d;BS&GR5nAgQ^$K4}Z z&n-3)4%lkuQpLD)TKT$VxoQm!ErEHHGDfL>aFQV?Oy_xI{I#s}l{pJXH4549AxtTe zNr?a4itG$BMK7(8DhzOj_jax4xE*Ws8|^ZnV7Q!V7Ug=#woQkc!PI$B_4h{1)e5SX zxuW|~xpf~bvt_c>0F-*300K*dJ6#~>umijaOf@a$QS7&HPo(gCRf-qi8TCx9W2#G7 zVWZ$Cb^BE9Fy|pj)3|fqTO0b{!U4hMfzQDcHpRjvsP*z^83%Gi`^pb~Mc?~kN=&Nywd-KFK89NS)NPjoSk z{tJBciWFGAd=9R0BR@AQS8zJd4{dKh{n?S3 zLt*}PHE5pl;vWOAb`-l~0+PBvh(D0aUk2Y1(@wsOM>39{D1ZwYyVm`RQBzX+ju9{Z z=$T52PZ?~NVs8w8QQR|KA>1(R>3%%q`dcq6m)^!c)Ozzj+!+(pJKBG7Z?f)Y=|g&4 z-A-D_w>?^`6rz!L?0{_ILvYC3-lwxKrN##fp46;qpl!$)2lrkW({nlwP@FxBjp0?| z#9xaC5&qPRA7w3e1sGS~Pm$hF4NXM~!>n3eN4fV2vRM`$zjfXEo+ulz%Vg08UDE4Y z!8092MY9ForvdR`n16*&nLxY+P58>eGm3isuT`-BM}a$v%Ix8=^BLm^qX~|HiNP)X J+Uxh8{2y{O@cgTNnnAZUm$o z2Ik!JJn!%P1?PNwKPdCtv-cfquY0X)UF(_;s>(8?#5BYZ1d+jq-R?8tSF7N8^;e;Sl%8WIzGWvaH@W1YRu#uq9|NZ#CcKCnb1o#L7$cZ>!i$zx} zN76PFe_4w-Ub{<2x1oQmt(81Hii|~=C-=`z=40Op{vkBN`;h}PKV(5m2&E@Vm?y4F zoDeRL4Ql@QsJBOz^w=xgTajEWjmFvUh53dF>d%A@f8CZ=sDN|K0=Et?fuukt)Pf30 zKxulMbQflH?XoyexGyWEAcymMs{)02M#{31(uaRV^zt8ITqC`{BLX>~E_@2eTc4dT zadiKxJe#J^&Tf(DiMO13fk)|CdW}Iq^mN{@6%X4+0Vp@FV&QwJ3+h3T1tnkKPyOW~_ znU;Shx~8IV%n;PQLzPf)v{do^1in2~Qg*2t+RuStz-w{Bjqq(ZX6>4RP+)TrnS>q* zcB3pg;KyLRi3H015j4(142g2wq16$+!w)kzh*C+oN>?U@-M`77zTdx;{}^AA1`Ofz zd*`mH%ze0IB~w~qyUuLhdd@7HP}G_%^pz5rmnx+zy%Q3-&0IFz=f;J?Y-6=gQ7MX@ zc#s?gv=rpfNU)>KNOFV@$-wBLqRxZXm?25Lpkp6fvZm&Om;D)7sil&>eYWeG1xC_kYkKE7K9N75rSt#RV47e!zATu^*Jx|SQBB6!o)%MW$=PleLVh| z8+iIdw7+StSukq6q#b?}aLqZ|=&|vQ=Fp{f(VEU&Y%B zBJV?`l3)!^d9A)g;kPW}_GGXHH885GBYkFTrGv{^!TsKM!TYl|z>CSn)IIJ$?HF9X zvJY%Crv`SEt^`btv=|DsI~$Qgm_s|vxb<~_Ilp*fu4)C0tl=)w<1UVZi?(M|UYdN? zpVsa|qVK@!B096fLpzl^pL9_5js4w+KQwuk1>U^qTl}EZ7*sEw%JaYrMgBm{25yvp zh#}XI&1k$wwi7ONs;7ZrDN%SW49rm1_1YT79q?9@n@_|D<=GUO@aFJOa|3F5a@sfRcqdNF9BvU4p5m|>^b#6CEQ!4>Ne5EtT5d_jgYUt zY;4YTs5f7j|KKRE=k6{W-cF7cApTBGJMia!hbTg7#
Tp>J^{EZ*Q-%`T>({-gG_Ncl$(4PmkU zaxdExm?N9XvrqnnQpDP5<*guZQMDUqb^JqY>zAX0LvFDdTW~dAVvu+FbX%wM?vdUIz=}+@ZRt6DM;FI2lWC z$FC4V8gV+4nMD&sS}>RJM=Zj^B|~T~+nx4h8lO$Q$dW+0UD@&1^7H|?H$H_YS%i^d zWS!nH!u^ZAJ*)A8OCm4Wns&4$T!vz6?MdoCuc>g`#)qm;iHWtEu(u58?!DC?vzz-8 z#;YA8r92clQFfO{&r2(Wg9ZD&-~asCH02CV;CQH^SB3y??p$n6hnwX?CtbzggiO?EI-7 z>4}EtLCNC#j>{^}Jh1CAFYzR!Olj!L)0)5P@-z9rjDWi&S()rqw8gduJ;S}BEvSX} zeg^IgM3mJTRdAhrA*QiPQNE&}2E~xq5I}=I71!7?r;f>oSmfLg#1n<{1Cr8v6K70WaF;V67)+wDF& z?dbaH9tk*~>UTd=R1AS^=Co`EZ#{)8*GU5IB($ zGCAuf=Vc>DVa4Ogcae)^kSLq3QT}PtMKTq9i5*1KgX2Jbl0esDV(ZOU!ep*DK)BKr zg{yF!>~gRs*N?kX&~Fl_7<})%>8!okZOttJAwj@&!)=`-X{Nxmoe!lJ^l_JPAAM37 z!M80k#;U7j55|EAp_%!oMc6qi{&P$Q&)m&X*2(jKI8KH#YR*IBLCU)xHCVPXXk2o3 zGvJd!=2zpdMcVsZ=aK(q0@087K_#nK_W923C5FB)N|*{0$ME|Th9>VvVwK~~=&w^i z7W^PyteE(|VI>nE0INK2IMppVB}wYpt*944yaUfuG8e1&<_Q*g{}2bJ&~u#lwv9@S zxRhx!ZCYc-1;ldouV%^moEHhvg)&9$ZvqXd~4$eZ_xql{h{=B?{j(93Wty1WqF> zVIrO&d}xe6ZC{D9-^c;XXz^6M|7?%)FSRKiF=VI(kZZE%)K$e!C?>@8(48MXe;dUe zV?_bgJXY1tLkwc_!BPxW!5J>{J%)dd3g!c@z~7(ItQ)+?isFW9a(6YTc6rlUnW5KG zI5W3D>r4juTq<~&_`iftufz<=>V2(Kj?6fD2L>C?Tz{{j3F0`yoSqbX6}f0Lnp76w zTr&c&j_t7ffZ#I83b20?FjcH=XX=mCSM;6BX#S#=+-NW|?lK=-?u%9GDJ7WSqUGQ? zAh8k;7cJycc0X~ksdij@)k1W+pq_YrfSUq(l=phY{|*L^UBm5XSc1tcuz}%oyp|CF zGsKT!LV=#71P%*VLWkP_T-5~+MA50~e=b2c_tiZZoO5ez4Z*AhRHx^s(=%^uj%^w)Ru*)mDJytTWsw+NxQ6*gwg|9mg# zRTBmu4Q>P$2FdDi=}{Z+@4Huma@#&aO#cAqWXXg~)j`-S5=&SOgl>bX2bW2}-T2_{ zydw$mj%*32ihJ`jucC}3F*7vI0aq*hA9pENT${Pd1}YbD`y*n=(|*EbJE=Lh&;16Z z*Rgy0AB3X^ApLLb;(qbUOX+j`@o(!n%1QS--ETY!#t$-LmH1<$eS!Z~!^b1?-+24q zWiupK&~%}$=l8X1viO9MNP^B-!EpQ4&rx{vy;}EW@piygJnbg9t#=%5wm4Dp4Qf1V zbwF`Hkpff2fT_;9G=L@NZm|hH+9^csUC#U?BeyH)f0Iw3Ua;vc95 z5FpM)1%_(%80?L;ZBY85`eUr$ZPR`>riI@)+C0)_`kddeF1(EHQ+>8*NIBr3woB_* z{MssF>165Tg4OtIG*O11C;?Vsj))kl(r9>XLdaGGmK>A)0VzN#eqQj-#3(CECta;3 zpJC0dy_KBC*%|HaSNzV{*KT8#fN`1C_6UGmE1gga% z><2$|GsZZw#78f@6Xo03wG%{?9wL{n0DEdl@-YCg5UiQ*0_;T`%W*UFYL29Of6vowL8fdbfx*PqdlOMY2pLccRDX_wEHsY;stXR26)2;nL6XH`sZ!$P zl`r5MX;EaA#N~5Gc*BJI?UuX5L6#sQhImz5g7q3lBh(?8LmDVx&f9gFJ|- zrwVLU0a@_<{icwID3?!4A*aK=Dv!k1lk-A*a}lQqjXYAW%Sn*0C_N=k9u_!QM04`WZ=dTCAf9bd^0dde(Kmwpa)df%j6e_95AG~U{+J(2M6#@`QP|8+ z_NxHMyBaCd61EV4lz{{2{{l;S>Btg)_#^L|SW%sVQm*gM;S&!KtZdE> zs!M!#>9%dqh>fPQV9IERV=q7=bP#UrHrBle4Z zfx-*YwU$M4FS7Efj$*6^`Sd0-y~1YZcEYAxLC=x+ODVTI%Dz@gHPsq9_Qs=KJyd*O z7e4h((METo12_0_rBp@pk@@K!kJnX>vM3SgcT|5+x#20EjNO*tre2A~NrLtFt*a*K z!{Qr0{Jea}DLQU~^m;dE*d2{UD$R?mWo6*1J%cm0c^AFg=sLQ<_5?S=9#&kQD-vJ1 z0eskVIh7oi@_ns?t`OUOZYVUnMZq;LOy**V@ zRVm}LYV9sHIS6r;v)F}rV+^Bhwtd8?p=;E}_Cd+5zKk<&F@s#cK(@#mbs3$6Lqo4B zjp0%~tJk$Pi{}@qY`Xc6i|7CD8~N=f-LCMF9&22mIQ6t%I$Zs}QoqV9%oG15v)HD>*AbCFp243rkD4{an;{J6(;NSrna`%{i1fW3A6)WcY$l&)7jYwZAbPP4^`8 zV$>d-RoOG|PCC`;!i-F0vh7#qG;iM_qQL{>Mp#J|BS~E3rTA?W;VfRmen6d&y zF#f!l2C*8E8_fkEHc6m=1dVv$vopkGhxvNL=GdChvC~IT#Bab4(BHY%Hm-yy>I}Go z^Fj%Th=o(XFHxVUcfIACzs@4}k7jFKX^Y#`{U6+=i`&A!8A-y3I0<@8`Iee3X5~he zik-6K%CKSa^jvJ=RsNYHY5lTqY;Oj|kfR%%3g;g9%V^tXqF5QcE_Epmh0@vpfx1in zvGm#K5?{6X%fI!EY3RotMo(p!)$oaUB+#3i*$gk%1Lp=c#0Rdg*sjzj6$5bEeSIbG z!SAZ_S8CZ?ewPI^Va^I0{2@Z+;TFhj$f6KetuR>hjh~H8i|C1Vteb04x~}=Wws~2H zeQe9e`=-w`_x#d;k|a`T?Jg+B^f{Z9L5-1)(43^vI}DLFhI6hhvfcEFzTYh3b|z@- zR`@(+tkx9?yRNAUl~WVaE8v(cnXb>TGwQd;e@8lmcNqHrpoPWKHhHYFksvfgkz4i7 z>BA2|@~kxUPm{kx7lTlp+^AzX?KH|$NU}XTl|W;9;l-v>>(yiCS!$)&As;yjp5L(1 z)h;Js_GK=10oVicDPO_;I~iB+6m-*kx_+F$cjzF;emDLVL$S%Qx8Fu?^Nfi)B2fXU zvl|jH{MpW6X#UwDmrCFae408V@e$?rx9Sy>Q$HQ6>yeG$!T$E1iu`XbjA3 zMLr7*r~n)=)gEJgVrvTE^#m@r+mR}y2l=lquGEC#LyI8))e3ADISjrj@%4`_ALyRt z$tc%l-({w!k(=e8;hU*)8QzfP0|i9_owr3YxuY{U^wMKZu_NDpgxhJsJcr4!ND$dT zaTKeWEhm4YW3%BxkR@Yv(_gPalMmF1w^6fxQEaP)B8$Ap)K21|_ajx}jbnG$b!4i@(00*uhN@(Tv?wkr$QO#+>VBRI7h&*P1hRZ4^xD0Hfbov|pak`K$4kz6Nn z`0Ja5kY3i_FLKTD*RvFZE@nNeUwc;g)nf;9@|Vy|d6x$ReRl&r+MSvaUu)YFyn4FV z;p@S<(WSx*@za4yi@&LI{h2s~g>$2tjWdRYW}>*E-;wx1f9Fp4&Nn1fd^O$XOT_s0 zBa-Uwvv!txz<-UAwVMrB+{`Rf-7 zpQuy}Dg^Y-B1N2B9a%ZNpz?cQtqi(qrDDh$IRH6S)@ouy&x@Ap$5ebxJej%A;QQ-+ zM$Y>*h34k^$}o~h*6)^Mz3T%fT}hEnRAQJt-f*VcC08`X(G?b(X0?l};?0vLw4m_j4_pAe|4bzNQywiYEbqPuQ`3RBzVf|^ z@5Ip%S@ZUBTn1;b7bRz=CZnuX^VIDVCT2*E=C*;cKp+4+wrD$>VR zwgIj=LmIaxMGEk zV*!HK^2iSuE|ThYXk~y}9%JhS1B$Uq9q)7uXPM}yrmI>9R{^a6O6XCvJ)^l-G_z-( z!)$9@(-ycSO-Nc1Cmz_a87bF~4DwQgAcKaZ@88$;DyV;w4?p(0O1Jg*mgFK+6Q@a_ z9mB%(KNH^t3Kwxjt4(U$fk&EYI;hbTa-)-SKcTr0?xHw9`TA@_-nRV$q4CJU8;wRO zxjVwIW`d)ItKy2siL;-?-duVa=9lG2thP~I4!_SQKar8H3(3`#h4%lb&32*v+fJO*Z!Pj zW(SPN#o}n&cu{(YAt9mCwn39|4&!=rEKyL>bmY)fsu0M7z5d6mXIvmu* zN+K%(oLA(d8|s#%_oI<=TTtKvcsS?vXh?3|}w^FW>#5%hW`^lc5p! zLdP2(FH?Q|Xs_V(WvaSZd?CK%KIS-aA#rJR;ijW;KEPGr2$(NEa6I`v7DxNR1oR_* z6iwuoammf655z~w_*!nOkOmdHxcE$ew4IIFV*%W;_~Ct9&4$jIJ*tF99u6B^Tslub z{D|GP(cFNa@kf^UJ}BIf|G@ZG<94*|&(Pp>SvuTS3~4lz)EYO3K}#k7TD*1*#bYsm zWG(&ZK=%3+Y+QOaz{KBV*_s>uA++QBC6fuN1$C3rLrE@nvEZz0#7gU}Up>VjLX7z< z3^&?4(Wi5)v`M3nv7BhOqG%z8HS^ADhhH13%_f`Gm|3SJN;0s!gjr0%S<-CE!QrDq zhwT@*ev;Nh)onT^fe^4bA?^l`RV~~@(r|6w;WqIyoa>QOf zJ5lkL!1$ckqPH*Y%h4yF55`UMa>SWW-41kO7d0-z2GH*^0>tuAKqElozvV(Ieq5vQ zqe>^BkD67{bw9J3L}~sTVc*;>D2Bw0_TB|ndGlUwy;F?qNtFxw6;sjEZbu(pMpfgy zvzzel1h-Iu+KQN4!vI1og&2CTPK~il2jm=dW#s*!McGcRp78DW>U1R~O%RE!Eu0V} zyZsoXC@Jt<_NNH?D}x8QK700Usiwv+RSuvfr+RJQbxzxd)t+%|HlK4k+&Fn)=3z7v z9-jc`_tUG#COul8A|2a^3xyb=O-9*Ax{zK`O* z>~|S?J?c{=G~bF$bImr7Gc%@5G6N)e3|s7!`{UwBGWlbyvG0obcByL(38{6U)*&4x zd+jc0AoIg7>ycEkLx*MczT&x8L0qLgEZm$*L>t5PeRrZ~(l>WJqjEqiL@jdFUn44O z_nr^`VX{~EVY27nb0djkpq?<4V4A{hu)R+zmMaXNTU`>jbs9-Q!=Kj1k5dht>P!Jj zY2~AFHDG$b?=)W`h8eFSmN68NbJzUrogho%@Z2*YghsB8NxnN)=|d%f>r0njbq>s$ zi551Pt1BsEh8jQ5uTjAdGiL?J>V!S2Jlj55QRFv|vb@!)*OUNNGuFSMVy|8@MO_~* zE7R~@(%vo$*b!(7d5(sk7;-e7DWg*l)J{nvj6|x*`!trbm~3$Hq1UTSXBQ)8Byt=D z5{owA!Ai%1L@*gfs{2N$2VWci>`3aT_y1rp_E#)Q5jtE9@6DUPY>Tkqyhkm|9w5q4 zz2$uZLVVNqJkIpQi8^dR9rD^_EPinD%D!gR>a!xTQ}g80yk4z1E#qYz}-=AnPPD8^0TNiM!GfzS%d}3`^SWXGxzMQ3QRlLDJ$94 zb}@|rGfIG7X`}^RphxJZ4YT!B%6yKGDP+Mgw#il1{_}xKK)uKPTpV^Blg)WC{F5N> zB3fxnbi+9I(kG?Gz%4GzQqZp8-Z7D6xWugb%thHcm{%%|z_j zB2=J)IFrg^(2KN+7qrf4eAie2`7Adm{@HssDVMbDaaFHUM{1sWtKqS$W$`7l4Mwg2 z2$k>^PHoUhE&ytSo)iJGVq*-$n?_>C?$Xc{SG^(5s*`k=fXB`?;Csl?Y<@mirZV4N zYUevZ8atV#WbbOHpP5A3wDT6Q&G>+Ma>raqABy|d1BN~ySpS`GH5Sv6plv-DhP6ksVKbg<=(LZA@89MfvNY5vWh8(H z%C{_0*GmMOEZ>08_9ZG9F!|mu*+r53NrBR>WuoT7#8VW}a=p&8hth(B5)UIu8NDtS zhD&H3B??TZ1wJGRI>((q=zWVi*^(FI2=NZ|#)-m}v`# z$8rDS5OY;n@Hy7Jarm2;wI06Cw(N>g7yRxUPf4%UzoVLPlCrHi1O%FgWo_-~3H5H^oxUa6c+Mu1uJg7fKA`w-b*UI3>0 z!4`gQw`BGAqtKDT{b6N>Y!1jenvy|z8awh|IZzpmU!60OB{MuSG z5a8VXWJesIIqi`%aw)yOdYs%-*ESH;Rq$trejh9L@mbJ#)`x+98vo1dIL>U1xt4)e z#Zjx-3kNlSTB_TIj#SO}PZMx(I95>MRs}#ssrS>+yrNftk`_UG9MdsFPBeey1Erc_ zAKvCA(RywB8;|nMy5qBX%$_r$ZpGjO{YE}fy3b2M4k>kZ!O}|N((gnuBxrw8ew8-F z&t>mET?}FYA?V8(iXyiBoVn8;dVN(l@?D~0l!ti2XGv#d@LD)=m5N!RqF!rrt$o08f1-D(s*0l?j1B6yB|0;Y(?;9h$r+1y!Oqk?C1C+ z2@`YSkYh@U6y=!uiBW|IPIA`ISJMOm-=3rjJz-%eHXfOC>l0FubE#dsQp-lG@HhVb zcbuT5NoM;Ai~#7VOoywc4&1yFzg22krh$7l6PRjAVys~B=4ZP$ZSFT}fI>;`p3!;u zSw_R4`;F~nag=+=)SWLe>3-wx;i;6=>pFu3aBeUb*oJ%+=CYYGT1u&N2a&B_ST*Dx zK2^2iV~eswvAC*_Z8mGM^MQ`5;Y-jD1iq#*7yuW5wbma!Z2@CeV?1r$e}OS?lSCG7 zASFQm474(zSQ-Q#^Gdw~4cHyT3gHJ4JlTw2HfH&4ckOj*@;0_oD5=f9#yR%`7tO8H&azkP@i#_rmK@Jobid2U3_vH<1J+T9sViAi^S zkp|4$k$$Jd!gWCY{oBq+Y(JqvPuLggQ8L z?aGm9XiM%}Kj5RC+lrkyU13b@pFc4I(>ny9C6zW=uAF@Bi}JjXBODWIwur$d_TqZP zvx{Eep3iAUR%FU|v}LPru!5ynf*#YMXp1jhEzq9mIAGe_MTtL`{CZCTqQNUFD+0xC z#65VfcRZzp8;lS_zQ1v3-wHR0A5S2y7w8LNr5>Af5)QV$0e~Pl23_tqEPxsWN$vZp zR@lk>N6fUDrpL;mM>)^jBLErgE|!m#Iwe7Cf3Ao_@WK!<#Jn(udeWoM%BC4MZ!hp3 zXI*fO*@6`TJ3jy|a!|_us$*-;?J~_+WBwhnI%M@$T9K*Cj@-zR{mh&i^w$N4Dy25y zzT%Ta+lt3`P}l#qwe%XnKw6E=msk2j5;P3qlQy@}*-&$k!4C8je6gq%YMe{e2}?#lFEY2Q2heW-ssw!hIG<)hWGHUa zYlM(374=_q@^*kUC>&5~efRzdq_rp~R3gYN(z;Ze1uhrNzExj&W9}g(!~4HxM~+X@ z5aunwXLyPL?Taf)G(>5*VeKEir`+++DH3JThX@UeNT7gotlM%0w*FV$ak+eKcM;9O zfrp34ww#)31oP4C+Pu6M=oy@CUJ?!@GB?)Xd*Y?oU7w?bpapec?1iW5z2dl`aBmYt z3(#WM17b>ZaM(>YkSDPV^Vd;oJoyEE?)de5Tru)J;3yFj42lBhzvuzJf|I4t=HZi_1IC>{$!(l*6qeGy>pWRND$yLn%{)#-2zB5NinftE;&I)CqKsT~ z-4_J;c#frWA?OJbFPhD}fVJsR!oKBNm=6Qekl6g5j{UL}-O%{E1Vm1*j*;6!E#GkQ z*OwFL*HA2d5uKI0MOX_Vr@z4BdJI#jtOTk6O#(JrZWv?09&zr(V-Nvm%gJ*w&rvKN z?E&S3lM{nzj#GYVfqY$BzhLNbxhPnB-r#!Kgdkt4lKQVjcy|okXm`HI1&-z&z^-ky z<)}HHp%e7|mTSYwZYD=9HmwkuQOi;m6bz4jXX2;rYP7 z$+r6&eR{>4zyF~JD?v3h=1Kl?C(h{*(FZsJYdv`oikkzf>b9DGyHj{^ z2&)zq@uoejzOtX&?nzY)&d#XenVuBUZy)k{oJ=Vqv=i;ypSSKa$A!qL>D-mO+7w2O z=cMmjfR5G%T#LS2cRr|S-~1|Zuj4W2{m z?203kFtYn>Eqpyj1DHhzEx;%)Y>>A~mnbZdti04T%)0iTH#b}#B^Q(m_TPZ4k`vx4 znPS6tOO)@Oi34K77SJ=K*J;qYB2b!`4u846@g$8|$cJ$F8IwFORkAYv5+5i*?P&~d z5BBPa$1&p@Pf#@>^@Nu+3v2q^Z`0$pXSnqA!`d4qlHAVAhaQdsX*OfT3b#?`D_ge0 z*G);m1BnycTK(`NtWcuT3I575f~-XibL7|yK{^-QkI?Teq@awX(tnUFxHAAHkoSY zBV88{1=M1NvSt*|z6Bbfw)^XCAA^Ip3aLVV-Uc0gO||_MAM3sBn>amPP@B~YQa5tC zSc+&SPuTrGvCqxbpT_H|(BD@6ICXP{>CWHlD{@knAE+)d&nvL^AVr{PX*s$t!&<87 z4|U0jqwpX|as|+?&{q%vAc%yU2uh#t<>G-ou)hHWxJ?cIlzjbhT+J=+sox`_ZrEn$ z8v&e0$y}xls%g}xa%Fa4AN+p>+V5q4f-YC&034%#p)$kOxvDdB@EC|1n46JmJ|3h! z#g3|hjyZdF_sW~@gDyAmu?NfWZ0U|<8BRpgaJu?ZrT$;FfSrcBgT)57M}A-k{tg-V zHO1K6z6yXcK*!R;3tA>-!p}$Fhml({(?;ObA(76%zqXd`Q&O-3F&UuH@$(Xh<8^?f zKTFa!55s5)_=wYR`6ZI2?j#d>pcx0u73hO?ul_wa8=C*IDIq9aGX7E)^rJyzFFdT1 zk`yOh0QfoRq4Om*j9SyeTlLcqrMF?}n8|~7b3|N=Igr4A1l?@bJG4pB z?UocN*Oaz4o|`9Ma~yqXo#=e^W3I<^K*c)~pAPpM-v7LT=BdFr9+wx=DDLu~-eEub z{bTs0#~Mod1u?(C9RP2q4}0#TX+S}}c2_#Gy7ASa$eB00LKUxo14yc)#x6(@-%)D+ zis|J=X@(|xC7cgA29FHN_+dYAO-BuzMH&?MM`B0A94)L*6|gHJr==AvGxh(Lddo@S zGMm1F<5(a>_W9$CFux1%=U9<*8m=DUgSEe(k#Qc|m_3R4DFy=%FaA$ikN2qfYpoQi zbw*iv0GU#WNk%I!UfVbM4dh;hRzy410Q+Ir5!O_I6C>u!)&HAUFNsMp8?S(Jk^y9* z>xBLLn)~TDi}zv{fmD?T*6Cq>PumV%ErIyc6|=^y*NIaKx3MI9_MPJhN+F#qGGmR1 zfk}8ylZjpxxDaz(U~_~&m>B#mvY5YSLG4g1FdsC{t$=73SX`)IN3|fNqn0(fQIasy z4QTgD8j`7dQna~%{BO-$gn}g6-W{z#1vc=lBtQ6i*cD5orwu^UQEhRvH2Kd|-|ev{ z;5QVCA&bYoI=bv8PfUPR_LLZ?(+Gfgck4*N4OH8po8Ok<%o!Q+cZG}f6M0u$^H=YU z)l^Iyas2Kse6T(`GMeSimy=`o&B)ylvO!Z8Q`6fELpBR(scZCI?}3NqwynoWBF$hR uj>8~CHFU84a2&fUMx0T#{FWfvup7T1wZk%35*FCqYdLZL2%M1)5B`$h#^h(rYa zyJjc_0Pqe%%uSqQidTzc!$c>fiN-BmGs9h8)1hG_eiIU3Kp96r%Jb9JmCr)1nFM28 z9$}On|JAM$y_PLrBWA>B^ieqnlX^cDT9a4FS@Xj~;FzQ7BNh20l>C83&D5%<%&hIE z9dr+oo<#^%^J>}JX+A%?BunbvUEEDz2Fyeztm`OZfj`9uU#M7W(S-M3R|qISJXa|9 z(kJOf5`X3YC9jZI;gKC8(SH=+vnm7iK{s`DG|;TqD@B(>uvZ(4Nr@?SQwGG7@TUj! z4}xdgGQWOqSwSfJlG~M%6-x(sAa7h?_6rRtr^W+!Imim)v^@Dt;RLYFlYHZ*VfVdn z&l7maBO)~+-2lb z%e+=rej*s9E0^|D`?61#fO#`#Kq3BblM~A&B9|^&7E4I>Qj?hUGcg9mXE)KBD?r|sd@on%=w?(Go&s67S|7i&0q!oT5mO7dfeJIAfzu8S=3kTT zn>N~dat*g^=q&#WFYVzv`19|m0o~7>e9IOThcvtu*=|g;vm)%UO$Ox-ajM5 zX_hQlsxSWGU^_O&+6|15JBA;{3Iw_~YS-IaOs+rs$dZpheCs=n9HZxpjX44?mQ$=&g$27h=~Pq{ zUfZITiEfy`9BmjEajxbql%pn}glw{I*K3ss>p-hlmGNd1;*ksh-Hm~6ib ztbxkt1V%0TGss-oPmF7(|8#*n+>6Fs!@j^0g`)qMCV7dhc6s@>c5wk91^ra3#Jg=f zk2h{fM@A4Sx9vJ*b#ffW%5JTj;e|JvGoqQ|JoeJ_Qy;w3BzKv8G+y4ByS=!FxSY^> zx=ezs%_pe%{*KY9*|>c63A48+#Ta{NK%+C*Vu#s5-+HddO?GP`?02Ny=ca%%@G^3c z>k!v^;2 z6P0Rr?37A`okGMc?8B-VL%++7k@D{m5^@y=b*#}GX z?B1x%9a~X052Yt=0U>)%&CfLU5QUhuhFQZ1zH={>I&kTu91IUndKsf@CkOc|R{4{&=ZDr9d?&UD5UJc^7$Pj7ZyBy4$nTA-R-~7l5&}-F$4FSRXHAy-#2B6x_wfG^KVl}t<^x+hY8^dh_GqI>| zjx{n%Dt#BY7}gse+vo>&{?t#rW9D9-245Q3yqN8+ZFE5MS>(Hv8ZS&`>LOcH1Rh8U zeK{&m(x8=cgq%=SAA26`LG<Vj;)twpNYhcv)W}Li?PZHELQjPQmBA56ib24EWwYG?3~!&KAO73$+^hS8|Y& z$5}IWXVxghkXhChGNK{Pn)2Iwh^>UyJX~&1j!Z5QCe|O-eNF$OSv0hPaZ|R zovR7fP+i_iBH8qnT<-*#T8v=DHT~7MZtQ8Dx~6X8+|TWJ1ZXa1d+h&`KeC=}5pSf% S>`Cm$4}e(Mnd3}-lKumBjt(IJ diff --git a/frontend/public/safari-pinned-tab.svg b/frontend/public/safari-pinned-tab.svg deleted file mode 100644 index 36c7d4ecc4..0000000000 --- a/frontend/public/safari-pinned-tab.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - diff --git a/frontend/quasar.conf.js b/frontend/quasar.conf.js deleted file mode 100644 index ef4d94995b..0000000000 --- a/frontend/quasar.conf.js +++ /dev/null @@ -1,321 +0,0 @@ -/* - * quasar.conf.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* - * This file runs in a Node context (it's NOT transpiled by Babel), so use only - * the ES6 features that are supported by your Node version. https://node.green/ - */ - -// Configuration for your app -// https://quasar.dev/quasar-cli/quasar-conf-js - -/* eslint-env node */ -/* eslint-disable @typescript-eslint/no-var-requires */ -const { configure } = require('quasar/wrappers'); - -module.exports = configure(function (ctx) { - return { - // https://quasar.dev/quasar-cli/supporting-ts - supportTS: false, - - // https://quasar.dev/quasar-cli/prefetch-feature - preFetch: true, - - // app boot file (/src/boot) - // --> boot files are part of "main.js" - // https://quasar.dev/quasar-cli/boot-files - boot: [ - 'i18n', - 'axios', - ], - - // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css - css: [ - 'app.scss' - ], - - // https://github.com/quasarframework/quasar/tree/dev/extras - extras: [ - // 'ionicons-v4', - // 'mdi-v5', - 'fontawesome-v6', - // 'eva-icons', - // 'themify', - // 'line-awesome', - // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! - - // 'roboto-font', // optional, you are not bound to it - // 'material-icons', // optional, you are not bound to it - ], - - // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build - build: { - vueRouterMode: 'hash', // available values: 'hash', 'history' - - // transpile: false, - publicPath: '/v3/', - distDir: '../public/v3', - - - // Add dependencies for transpiling with Babel (Array of string/regex) - // (from node_modules, which are by default not transpiled). - // Applies only if "transpile" is set to true. - // transpileDependencies: [], - - // rtl: true, // https://quasar.dev/options/rtl-support - // preloadChunks: true, - // showProgress: false, - // gzip: true, - // analyze: true, - - // Options below are automatically set depending on the env, set them if you want to override - // extractCSS: false, - - // https://quasar.dev/quasar-cli/handling-webpack - // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain - chainWebpack (/* chain */) { - // - }, - }, - - // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer - devServer: { - server: { - type: 'https' - }, - port: 8080, - host: 'firefly-dev.sd.local', - open: false, // opens browser window automatically - proxy: [ - { - context: ['/sanctum', '/api'], - target: 'https://firefly.sd.local', // Laravel Homestead end-point - // avoid problems with session and XSRF cookies - // When using capacitor, use the IP of the dev server streaming the app - // For SPA and PWA use localhost, given that the app is streamed on that host - // xxx address is your machine current IP address - cookieDomainRewrite: - ctx.modeName === 'capacitor' ? '10.0.0.1' : '.sd.local', - changeOrigin: true, - } - ] - }, - - - // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework - framework: { - config: { - dark: 'auto' - }, - - lang: 'en-US', // Quasar language pack - iconSet: 'fontawesome-v6', - - // For special cases outside of where the auto-import strategy can have an impact - // (like functional components as one of the examples), - // you can manually specify Quasar components/directives to be available everywhere: - // - // components: [], - // directives: [], - - // Quasar plugins - plugins: [ - 'Dialog', - 'LocalStorage', - ] - }, - - // animations: 'all', // --- includes all animations - // https://quasar.dev/options/animations - animations: [], - - // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr - ssr: { - pwa: false, - - // manualStoreHydration: true, - // manualPostHydrationTrigger: true, - - prodPort: 3000, // The default port that the production server should use - // (gets superseded if process.env.PORT is specified at runtime) - - maxAge: 1000 * 60 * 60 * 24 * 30, - // Tell browser when a file from the server should expire from cache (in ms) - - chainWebpackWebserver (/* chain */) { - // - }, - - middlewares: [ - ctx.prod ? 'compression' : '', - 'render' // keep this as last one - ] - }, - - // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa - pwa: { - workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' - workboxOptions: {}, // only for GenerateSW - - // for the custom service worker ONLY (/src-pwa/custom-service-worker.[js|ts]) - // if using workbox in InjectManifest mode - chainWebpackCustomSW (/* chain */) { - // - }, - - manifest: { - name: 'Firefly III', - short_name: 'Firefly III', - description: 'Personal Finances Manager', - start_url: '/', - display: 'standalone', - orientation: 'portrait', - theme_color: "#1e6581", - background_color: "#1e6581", - icons: [ - { - "src": "/maskable72.png", - "sizes": "72x72", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable76.png", - "sizes": "76x76", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable96.png", - "sizes": "96x96", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable120.png", - "sizes": "120x120", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable128.png", - "sizes": "128x128", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable144.png", - "sizes": "144x144", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable152.png", - "sizes": "152x152", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable180.png", - "sizes": "180x180", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable384.png", - "sizes": "384x384", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "maskable" - } - ] - } - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova - cordova: { - // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor - capacitor: { - hideSplashscreen: true - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron - electron: { - bundler: 'packager', // 'packager' or 'builder' - - packager: { - // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options - - // OS X / Mac App Store - // appBundleId: '', - // appCategoryType: '', - // osxSign: '', - // protocol: 'myapp://path', - - // Windows only - // win32metadata: { ... } - }, - - builder: { - // https://www.electron.build/configuration/configuration - - appId: 'firefly-iii' - }, - - // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain - chainWebpack (/* chain */) { - // do something with the Electron main process Webpack cfg - // extendWebpackMain also available besides this chainWebpackMain - }, - - // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain - chainWebpackPreload (/* chain */) { - // do something with the Electron main process Webpack cfg - // extendWebpackPreload also available besides this chainWebpackPreload - }, - } - } -}); diff --git a/frontend/quasar.extensions.json b/frontend/quasar.extensions.json deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/frontend/quasar.extensions.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue deleted file mode 100644 index 87056cffe0..0000000000 --- a/frontend/src/App.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - - diff --git a/frontend/src/api/accounts/get.js b/frontend/src/api/accounts/get.js deleted file mode 100644 index 8270b4ecdb..0000000000 --- a/frontend/src/api/accounts/get.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Api from "src/api/root/api"; - -export default class Get extends Api { - constructor() { - super('accounts'); // call the super class constructor and pass in the name parameter - } - - /** - * - * @param identifier - * @param date - * @returns {Promise>} - */ - get(identifier, date) { - let params = {date: date}; - if (!date) { - return this.apiGet(identifier); - } - return this.apiGet(identifier, params); - } - - /** - * - * @param identifier - * @param page - * @returns {Promise>} - */ - transactions(identifier, page) { - return this.apiGetChildren('transactions', identifier, page); - } -} diff --git a/frontend/src/api/accounts/list.js b/frontend/src/api/accounts/list.js deleted file mode 100644 index 28b7d5b41a..0000000000 --- a/frontend/src/api/accounts/list.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import Api from "src/api/root/api"; - -export default class List extends Api { - constructor() { - super('accounts'); - } - - list(type, page, cacheKey) { - let url = '/api/v1/accounts'; - return api.get(url, {params: {page: page, cache: cacheKey, type: type}}); - // console.log('list'); - // - // - // let params = { - // type: type, - // page: page - // } - // this.apiList(page, params).then((response) => { - // console.log('response OK'); - // }).catch((err) => { - // console.error('api list failed'); - // }); - } -} diff --git a/frontend/src/api/accounts/post.js b/frontend/src/api/accounts/post.js deleted file mode 100644 index 159ec94f32..0000000000 --- a/frontend/src/api/accounts/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/accounts'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/accounts/put.js b/frontend/src/api/accounts/put.js deleted file mode 100644 index 58a6c43d12..0000000000 --- a/frontend/src/api/accounts/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/accounts/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/authenticate/index.js b/frontend/src/api/authenticate/index.js deleted file mode 100644 index 2335516928..0000000000 --- a/frontend/src/api/authenticate/index.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Authenticate { - async authenticate() { - return await api.get('/sanctum/csrf-cookie'); - } -} diff --git a/frontend/src/api/budgets/get.js b/frontend/src/api/budgets/get.js deleted file mode 100644 index 48eaa24ec6..0000000000 --- a/frontend/src/api/budgets/get.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/budgets/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/budgets/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } - - transactionsWithoutBudget(page, cacheKey) { - let url = '/api/v1/budgets/transactions-without-budget'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/budgets/list.js b/frontend/src/api/budgets/list.js deleted file mode 100644 index 25e6cb40c9..0000000000 --- a/frontend/src/api/budgets/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/budgets'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/budgets/post.js b/frontend/src/api/budgets/post.js deleted file mode 100644 index 51ef6c6dad..0000000000 --- a/frontend/src/api/budgets/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/budgets'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/budgets/put.js b/frontend/src/api/budgets/put.js deleted file mode 100644 index d58e7872cb..0000000000 --- a/frontend/src/api/budgets/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/budgets/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/categories/get.js b/frontend/src/api/categories/get.js deleted file mode 100644 index a3fc6f2891..0000000000 --- a/frontend/src/api/categories/get.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/categories/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/categories/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } - - transactionsWithoutCategory(page, cacheKey) { - let url = '/api/v1/categories/transactions-without-category'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/categories/list.js b/frontend/src/api/categories/list.js deleted file mode 100644 index 0d07c89c4e..0000000000 --- a/frontend/src/api/categories/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/categories'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/categories/post.js b/frontend/src/api/categories/post.js deleted file mode 100644 index af240f2d05..0000000000 --- a/frontend/src/api/categories/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/categories'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/categories/put.js b/frontend/src/api/categories/put.js deleted file mode 100644 index 0576150be3..0000000000 --- a/frontend/src/api/categories/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/categories/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/chart/account/overview.js b/frontend/src/api/chart/account/overview.js deleted file mode 100644 index cecaefaf51..0000000000 --- a/frontend/src/api/chart/account/overview.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * overview.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Overview { - overview(range, cacheKey) { - let startStr = format(range.start, 'y-MM-dd'); - let endStr = format(range.end, 'y-MM-dd'); - return api.get('/api/v1/chart/account/overview', {params: {start: startStr, end: endStr, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/currencies/get.js b/frontend/src/api/currencies/get.js deleted file mode 100644 index ebce1424c6..0000000000 --- a/frontend/src/api/currencies/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/currencies/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/currencies/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/currencies/index.js b/frontend/src/api/currencies/index.js deleted file mode 100644 index 86c8c916e9..0000000000 --- a/frontend/src/api/currencies/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import Authenticate from '../authenticate/index'; - -export default class Currencies { - default() { - let auth = new Authenticate(); - return auth.authenticate().then(() => { - return api.get('/api/v1/currencies/default') - }); - } -} diff --git a/frontend/src/api/currencies/list.js b/frontend/src/api/currencies/list.js deleted file mode 100644 index 2468bc3d94..0000000000 --- a/frontend/src/api/currencies/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/currencies'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/currencies/post.js b/frontend/src/api/currencies/post.js deleted file mode 100644 index 063e99c502..0000000000 --- a/frontend/src/api/currencies/post.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/currencies'; - return api.post(url, submission); - } - - makeDefault(currency) { - let url = '/api/v1/currencies/' + currency + '/default'; - return api.post(url); - } -} diff --git a/frontend/src/api/currencies/put.js b/frontend/src/api/currencies/put.js deleted file mode 100644 index f3bae8c194..0000000000 --- a/frontend/src/api/currencies/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/currencies/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/data/export.js b/frontend/src/api/data/export.js deleted file mode 100644 index d3a15f23f9..0000000000 --- a/frontend/src/api/data/export.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Export { - transactions(start, end) { - let url = '/api/v1/data/export/transactions'; - return api.get(url, {params: {start: start, end: end}}); - } -} diff --git a/frontend/src/api/generic/destroy.js b/frontend/src/api/generic/destroy.js deleted file mode 100644 index 90e32cb0dd..0000000000 --- a/frontend/src/api/generic/destroy.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * destroy.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Api from "src/api/root/api"; - -export default class Destroy extends Api { - constructor(path) { - super(path); - } -} diff --git a/frontend/src/api/groups/get.js b/frontend/src/api/groups/get.js deleted file mode 100644 index 693ba9261f..0000000000 --- a/frontend/src/api/groups/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/object_groups/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/groups/list.js b/frontend/src/api/groups/list.js deleted file mode 100644 index 7c37ad4b7e..0000000000 --- a/frontend/src/api/groups/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(type, page, cacheKey) { - let url = '/api/v1/object_groups'; - return api.get(url, {params: {page: page, cache: cacheKey, type: type}}); - } -} diff --git a/frontend/src/api/groups/put.js b/frontend/src/api/groups/put.js deleted file mode 100644 index b326011c27..0000000000 --- a/frontend/src/api/groups/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/object_groups/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/piggy-banks/get.js b/frontend/src/api/piggy-banks/get.js deleted file mode 100644 index fa3271f5d6..0000000000 --- a/frontend/src/api/piggy-banks/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/piggy_banks/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/piggy_banks/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/piggy-banks/list.js b/frontend/src/api/piggy-banks/list.js deleted file mode 100644 index 836b8313b1..0000000000 --- a/frontend/src/api/piggy-banks/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/piggy_banks'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/piggy-banks/post.js b/frontend/src/api/piggy-banks/post.js deleted file mode 100644 index 8f7b1020d8..0000000000 --- a/frontend/src/api/piggy-banks/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/piggy_banks'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/piggy-banks/put.js b/frontend/src/api/piggy-banks/put.js deleted file mode 100644 index 0168125922..0000000000 --- a/frontend/src/api/piggy-banks/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/piggy_banks/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/preferences/index.js b/frontend/src/api/preferences/index.js deleted file mode 100644 index fac50967d5..0000000000 --- a/frontend/src/api/preferences/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Preferences { - getByName(name) { - return api.get('/api/v1/preferences/' + name); - } - - postByName(name, value) { - return api.post('/api/v1/preferences', {name: name, data: value}); - } -} diff --git a/frontend/src/api/preferences/put.js b/frontend/src/api/preferences/put.js deleted file mode 100644 index d8283cae65..0000000000 --- a/frontend/src/api/preferences/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(name, value) { - let url = '/api/v1/preferences/' + name; - return api.put(url, {data: value}); - } -} diff --git a/frontend/src/api/recurring/get.js b/frontend/src/api/recurring/get.js deleted file mode 100644 index d08f98d99b..0000000000 --- a/frontend/src/api/recurring/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/recurrences/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/recurring/list.js b/frontend/src/api/recurring/list.js deleted file mode 100644 index a47029db44..0000000000 --- a/frontend/src/api/recurring/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/recurrences'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/recurring/post.js b/frontend/src/api/recurring/post.js deleted file mode 100644 index 6f32133667..0000000000 --- a/frontend/src/api/recurring/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/recurrences'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/recurring/put.js b/frontend/src/api/recurring/put.js deleted file mode 100644 index e56d616008..0000000000 --- a/frontend/src/api/recurring/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/recurrences/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/root/api.js b/frontend/src/api/root/api.js deleted file mode 100644 index b2a9f0eae7..0000000000 --- a/frontend/src/api/root/api.js +++ /dev/null @@ -1,130 +0,0 @@ -/* - * api.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -/** - * - */ -export default class Api { - root = '/api/v1/'; - path = ''; - - constructor(path) { - this.path = path; - } - - apiPath() { - return this.root + this.path; - } - - apiPathId(identifier) { - return this.root + this.path + '/' + identifier; - } - - /** - * - * @param identifier - * @param params - * @returns {Promise>} - */ - apiGet(identifier, params) { - let url = this.apiPathId(identifier); - if (params) { - return api.get(url, {params: params}); - } - return api.get(url); - } - - /** - * This is a generic method that works for all DELETE operations. - * - * @param identifier - * @returns {Promise>} - */ - destroy(identifier) { - let url = this.apiPathId(identifier); - return api.delete(url); - } - - apiPathChildren(identifier, type) { - return this.apiPathId(identifier) + '/' + type; - } - - apiGetChildren(type, identifier, page) { - let url = this.apiPathChildren(identifier, type); - let cacheKey = 'still-todo'; - // needs a cache key. Based on type. - return api.get(url, {params: {page: page, cache: cacheKey}}); - } - - - /** - * - * @param page - * @param params - * @returns {Promise>} - */ - apiList(page, params) { - let type = 'transactions'; - let identifier = '1'; - - let cacheKey = 'still-todo'; - let url = this.apiPathChildren(identifier, type); - - // needs a cache key. Based on type. - return api.get(url, {params: {page: page, cache: cacheKey}}); - - - // let identifier = 'abc'; - // // test: - // let type= 'expense'; - - // let type ='accounts'; - // - // this.store.getters["fireflyiii/getScopedCacheKey"](type); - // let cacheKey = 'def'; - // let url = this.apiPath(); - // - // // needs a cache key. Based on type. - // return api.get(url, {params: {page: page, cache: cacheKey}}); - - // - // - // console.log('apiList'); - // let cacheKey; - // - // //let $q = useQuasar(); - // //const store = useStore(); - // cacheKey = 'OK'; - // console.log('path: ' + this.path); - // //cacheKey = $store.getters["fireflyiii/getScopedCacheKey"](this.path); - // //store.getters["fireflyiii/getScopedCacheKey"](this.path) - // let cache = { - // cache: cacheKey - // }; - // let merged = {...params, ...cache}; - // console.log(merged); - // let url = this.apiPath(); - // console.log(url); - // return api.get(url, {params: merged}); - } - -} diff --git a/frontend/src/api/rule-groups/get.js b/frontend/src/api/rule-groups/get.js deleted file mode 100644 index b63ba19027..0000000000 --- a/frontend/src/api/rule-groups/get.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier, date) { - let url = '/api/v1/rule_groups/' + identifier; - if (!date) { - return api.get(url); - } - return api.get(url, {params: {date: date}}); - } - - rules(identifier, page, cacheKey) { - let url = '/api/v1/rule_groups/' + identifier + '/rules'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/rule-groups/list.js b/frontend/src/api/rule-groups/list.js deleted file mode 100644 index 3aaa5e1f31..0000000000 --- a/frontend/src/api/rule-groups/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/rule_groups'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/rule-groups/post.js b/frontend/src/api/rule-groups/post.js deleted file mode 100644 index 70601acba1..0000000000 --- a/frontend/src/api/rule-groups/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/rule_groups'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/rule-groups/put.js b/frontend/src/api/rule-groups/put.js deleted file mode 100644 index e04ee87c89..0000000000 --- a/frontend/src/api/rule-groups/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/rule_groups/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/rules/get.js b/frontend/src/api/rules/get.js deleted file mode 100644 index 98f6bc77b6..0000000000 --- a/frontend/src/api/rules/get.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier, date) { - let url = '/api/v1/rules/' + identifier; - if (!date) { - return api.get(url); - } - return api.get(url, {params: {date: date}}); - } -} diff --git a/frontend/src/api/rules/post.js b/frontend/src/api/rules/post.js deleted file mode 100644 index 5dbacb8b5b..0000000000 --- a/frontend/src/api/rules/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/rules'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/rules/put.js b/frontend/src/api/rules/put.js deleted file mode 100644 index cede795cbb..0000000000 --- a/frontend/src/api/rules/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/rules/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/subscriptions/get.js b/frontend/src/api/subscriptions/get.js deleted file mode 100644 index 66759dd199..0000000000 --- a/frontend/src/api/subscriptions/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/bills/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/bills/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/subscriptions/list.js b/frontend/src/api/subscriptions/list.js deleted file mode 100644 index aa88472022..0000000000 --- a/frontend/src/api/subscriptions/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/bills'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/subscriptions/post.js b/frontend/src/api/subscriptions/post.js deleted file mode 100644 index 1be441cdb7..0000000000 --- a/frontend/src/api/subscriptions/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/bills'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/subscriptions/put.js b/frontend/src/api/subscriptions/put.js deleted file mode 100644 index d3067215c7..0000000000 --- a/frontend/src/api/subscriptions/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(identifier, submission) { - let url = '/api/v1/bills/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/summary/basic.js b/frontend/src/api/summary/basic.js deleted file mode 100644 index 2c4c185ebc..0000000000 --- a/frontend/src/api/summary/basic.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from 'date-fns'; - - -export default class Basic { - list(range, cacheKey) { - let startStr = format(range.start, 'y-MM-dd'); - let endStr = format(range.end, 'y-MM-dd'); - - return api.get('/api/v1/summary/basic', {params: {start: startStr, end: endStr, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/system/about.js b/frontend/src/api/system/about.js deleted file mode 100644 index 3f8d10ce74..0000000000 --- a/frontend/src/api/system/about.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * about.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -//import createAuthRefreshInterceptor from 'axios-auth-refresh'; - -export default class About { - list() { - return api.get('/api/v1/about'); - } -} diff --git a/frontend/src/api/system/configuration.js b/frontend/src/api/system/configuration.js deleted file mode 100644 index 4161f0294c..0000000000 --- a/frontend/src/api/system/configuration.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * configuration.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Configuration { - get(identifier) { - return api.get('/api/v1/configuration/' + identifier); - } - - put(identifier, value) { - return api.put('/api/v1/configuration/' + identifier, value); - } -} diff --git a/frontend/src/api/system/user.js b/frontend/src/api/system/user.js deleted file mode 100644 index 36d1e8464f..0000000000 --- a/frontend/src/api/system/user.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * user.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class AboutUser { - get() { - return api.get('/api/v1/about/user'); - } - - put(identifier, submission) { - console.log('here we are'); - return api.put('/api/v1/users/' + identifier, submission); - } - - logout() { - return api.post('/logout'); - } -} diff --git a/frontend/src/api/tags/get.js b/frontend/src/api/tags/get.js deleted file mode 100644 index 90939638e2..0000000000 --- a/frontend/src/api/tags/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/tags/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/tags/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/tags/list.js b/frontend/src/api/tags/list.js deleted file mode 100644 index 0239f7ac4c..0000000000 --- a/frontend/src/api/tags/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/tags'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/transactions/get.js b/frontend/src/api/transactions/get.js deleted file mode 100644 index c8adc2f7bf..0000000000 --- a/frontend/src/api/transactions/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = 'api/v1/transactions/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/transactions/list.js b/frontend/src/api/transactions/list.js deleted file mode 100644 index fee89f3764..0000000000 --- a/frontend/src/api/transactions/list.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(type, page, cacheKey) { - let url = 'api/v1/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey, type: type}}); - } - -} diff --git a/frontend/src/api/transactions/parser.js b/frontend/src/api/transactions/parser.js deleted file mode 100644 index 76ae40f162..0000000000 --- a/frontend/src/api/transactions/parser.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - * parser.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default class Parser { - parseResponse(response) { - let obj = {}; - obj.rows = []; - obj.rowsPerPage = response.data.meta.pagination.per_page; - obj.rowsNumber = response.data.meta.pagination.total; - - for (let i in response.data.data) { - if (response.data.data.hasOwnProperty(i)) { - let current = response.data.data[i]; - let group = { - group_id: current.id, - splits: [], - group_title: current.attributes.group_title - }; - - for (let ii in current.attributes.transactions) { - if (current.attributes.transactions.hasOwnProperty(ii)) { - let transaction = current.attributes.transactions[ii]; - let parsed = { - group_id: current.id, - journal_id: parseInt(transaction.transaction_journal_id), - type: transaction.type, - description: transaction.description, - amount: transaction.amount, - date: transaction.date, - source: transaction.source_name, - destination: transaction.destination_name, - category: transaction.category_name, - budget: transaction.budget_name, - currencyCode: transaction.currency_code, - }; - if (1 === current.attributes.transactions.length && 0 === parseInt(ii)) { - group.group_title = transaction.description; - } - - // merge with group if index = 0; - if (0 === parseInt(ii)) { - group = { - ...group, - ...parsed - }; - } - // append to splits if > 1 and > 1 - if (current.attributes.transactions.length > 0) { - group.splits.push(parsed); - // add amount: - if (ii > 0) { - group.amount = parseFloat(group.amount) + parseFloat(parsed.amount); - } - } - } - } - obj.rows.push(group); - } - } - return obj; - } -} diff --git a/frontend/src/api/transactions/post.js b/frontend/src/api/transactions/post.js deleted file mode 100644 index 5197fc1035..0000000000 --- a/frontend/src/api/transactions/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/transactions'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/transactions/put.js b/frontend/src/api/transactions/put.js deleted file mode 100644 index 52858ded73..0000000000 --- a/frontend/src/api/transactions/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(identifier, submission) { - let url = '/api/v1/transactions/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/v2/accounts/get.js b/frontend/src/api/v2/accounts/get.js deleted file mode 100644 index 16d4cecfed..0000000000 --- a/frontend/src/api/v2/accounts/get.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * get.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Api from "src/api/v2/root/api"; - -export default class Get extends Api { - constructor() { - super('accounts'); // call the super class constructor and pass in the name parameter - } - - /** - * - * @param identifier - * @param date - * @returns {Promise>} - */ - get(identifier, date) { - let params = {date: date}; - if (!date) { - return this.apiGet(identifier); - } - return this.apiGet(identifier, params); - } - - transactions(identifier, params) { - if (!params) { - return this.apiGetTransactions(identifier); - } - return this.apiGetTransactions(identifier, params); - } -} diff --git a/frontend/src/api/v2/autocomplete/accounts.js b/frontend/src/api/v2/autocomplete/accounts.js deleted file mode 100644 index 83756b128e..0000000000 --- a/frontend/src/api/v2/autocomplete/accounts.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * get.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Accounts { - - /** - * - * @param types - * @returns {Promise>} - */ - get(types, query) { - let url = 'api/v2/autocomplete/accounts'; - return api.get(url, {params: {types: types, query: query, limit: 25}}) - } - -} diff --git a/frontend/src/api/v2/bills/sum.js b/frontend/src/api/v2/bills/sum.js deleted file mode 100644 index ad0171424e..0000000000 --- a/frontend/src/api/v2/bills/sum.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Sum { - unpaid(start, end) { - let url = 'api/v2/bills/sum/unpaid'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } - - paid(start, end) { - let url = 'api/v2/bills/sum/paid'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } -} diff --git a/frontend/src/api/v2/budget-limits/list.js b/frontend/src/api/v2/budget-limits/list.js deleted file mode 100644 index ebfd951302..0000000000 --- a/frontend/src/api/v2/budget-limits/list.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class List { - list(budget, start, end, page) { - let url = '/api/v2/budgets/' + budget + '/limits'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {page: page, start: startStr, end: endStr}}); - } -} diff --git a/frontend/src/api/v2/budgets/get.js b/frontend/src/api/v2/budgets/get.js deleted file mode 100644 index 2f5d1c2aed..0000000000 --- a/frontend/src/api/v2/budgets/get.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Get { - spent(identifier, start, end) { - let url = '/api/v2/budgets/' + identifier + '/spent'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } - -} diff --git a/frontend/src/api/v2/budgets/list.js b/frontend/src/api/v2/budgets/list.js deleted file mode 100644 index 122c817e98..0000000000 --- a/frontend/src/api/v2/budgets/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page) { - let url = '/api/v2/budgets'; - return api.get(url, {params: {page: page}}); - } -} diff --git a/frontend/src/api/v2/budgets/sum.js b/frontend/src/api/v2/budgets/sum.js deleted file mode 100644 index 926004bf5c..0000000000 --- a/frontend/src/api/v2/budgets/sum.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Sum { - budgeted(start, end) { - let url = 'api/v2/budgets/sum/budgeted'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } - - spent(start, end) { - let url = 'api/v2/budgets/sum/spent'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } -} diff --git a/frontend/src/api/v2/chart/account/dashboard.js b/frontend/src/api/v2/chart/account/dashboard.js deleted file mode 100644 index c131ff2ae9..0000000000 --- a/frontend/src/api/v2/chart/account/dashboard.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * overview.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Dashboard { - overview(range, cacheKey) { - let startStr = format(range.start, 'y-MM-dd'); - let endStr = format(range.end, 'y-MM-dd'); - return api.get('/api/v2/chart/account/dashboard', {params: {start: startStr, end: endStr, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/v2/net-worth/index.js b/frontend/src/api/v2/net-worth/index.js deleted file mode 100644 index 6037ee45a2..0000000000 --- a/frontend/src/api/v2/net-worth/index.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class NetWorth { - get(date) { - let dateStr = format(date, 'y-MM-dd'); - return api.get('/api/v2/net-worth', {params: {date: dateStr}}); - } -} diff --git a/frontend/src/api/v2/preferences/index.js b/frontend/src/api/v2/preferences/index.js deleted file mode 100644 index 4e5e9e5951..0000000000 --- a/frontend/src/api/v2/preferences/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Preferences { - get(name) { - return api.get('/api/v2/preferences/' + name); - } - - // postByName(name, value) { - // return api.post('/api/v1/preferences', {name: name, data: value}); - // } -} diff --git a/frontend/src/api/v2/root/api.js b/frontend/src/api/v2/root/api.js deleted file mode 100644 index 1ab35799e3..0000000000 --- a/frontend/src/api/v2/root/api.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * api.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -/** - * - */ -export default class Api { - root = '/api/v2/'; - path = ''; - - constructor(path) { - this.path = path; - } - - apiPath() { - return this.root + this.path; - } - - apiPathWithObject(object) { - return this.root + this.path + '/' + object; - } - - /** - * - * @param object - * @param params - * @returns {Promise>} - */ - apiGet(object, params) { - let url = this.apiPathWithObject(object); - if (params) { - return api.get(url, {params: params}); - } - return api.get(url); - } - - /** - * - * @param object - * @param params - * @returns {Promise>} - */ - apiGetTransactions(object, params) { - let url = this.apiPathWithObject(object) + '/transactions'; - if (params) { - return api.get(url, {params: params}); - } - return api.get(url); - } -} diff --git a/frontend/src/api/webhooks/get.js b/frontend/src/api/webhooks/get.js deleted file mode 100644 index 3c8ce7ed11..0000000000 --- a/frontend/src/api/webhooks/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/webhooks/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/webhooks/list.js b/frontend/src/api/webhooks/list.js deleted file mode 100644 index 5d4335ea73..0000000000 --- a/frontend/src/api/webhooks/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/webhooks'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/webhooks/post.js b/frontend/src/api/webhooks/post.js deleted file mode 100644 index b120984741..0000000000 --- a/frontend/src/api/webhooks/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/webhooks'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/webhooks/put.js b/frontend/src/api/webhooks/put.js deleted file mode 100644 index 16dff0a824..0000000000 --- a/frontend/src/api/webhooks/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(identifier, submission) { - let url = '/api/v1/webhooks/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/boot/.gitkeep b/frontend/src/boot/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frontend/src/boot/axios.js b/frontend/src/boot/axios.js deleted file mode 100644 index 40bb2c27dc..0000000000 --- a/frontend/src/boot/axios.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * axios.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {boot} from 'quasar/wrappers' -import axios from 'axios' -import {setupCache} from 'axios-cache-adapter' - -const cache = setupCache({ - maxAge: 15 * 60 * 1000, - exclude: {query: false} -}) - -// Be careful when using SSR for cross-request state pollution -// due to creating a Singleton instance here; -// If any client changes this (global) instance, it might be a -// good idea to move this instance creation inside of the -// "export default () => {}" function below (which runs individually -// for each client) - -const url = process.env.DEBUGGING ? 'https://firefly.sd.local' : '/'; -const api = axios.create({baseURL: url, withCredentials: true, adapter: cache.adapter}); - -export default boot(({app}) => { - // for use inside Vue files (Options API) through this.$axios and this.$api - axios.defaults.withCredentials = true; - axios.defaults.baseURL = url; - - app.config.globalProperties.$axios = axios - // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) - // so you won't necessarily have to import axios in each vue file - - app.config.globalProperties.$api = api - // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) - // so you can easily perform requests against your app's API -}) - -export {api} diff --git a/frontend/src/boot/i18n.js b/frontend/src/boot/i18n.js deleted file mode 100644 index d28f99d44b..0000000000 --- a/frontend/src/boot/i18n.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * i18n.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {boot} from 'quasar/wrappers' -import {createI18n} from 'vue-i18n' -import messages from 'src/i18n' - -export default boot(({app}) => { - const i18n = createI18n({ - locale: 'en-US', - messages - }) - - // Set i18n instance on app - app.use(i18n) -}) diff --git a/frontend/src/components/Alert.vue b/frontend/src/components/Alert.vue deleted file mode 100644 index 8523990715..0000000000 --- a/frontend/src/components/Alert.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/CompositionComponent.vue b/frontend/src/components/CompositionComponent.vue deleted file mode 100644 index 511bc9c321..0000000000 --- a/frontend/src/components/CompositionComponent.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - diff --git a/frontend/src/components/DateRange.vue b/frontend/src/components/DateRange.vue deleted file mode 100644 index 86fd499585..0000000000 --- a/frontend/src/components/DateRange.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - - - diff --git a/frontend/src/components/EssentialLink.vue b/frontend/src/components/EssentialLink.vue deleted file mode 100644 index bfae5fff32..0000000000 --- a/frontend/src/components/EssentialLink.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/frontend/src/components/dashboard/AccountChart.vue b/frontend/src/components/dashboard/AccountChart.vue deleted file mode 100644 index 5e0d624045..0000000000 --- a/frontend/src/components/dashboard/AccountChart.vue +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/BillInsightBox.vue b/frontend/src/components/dashboard/BillInsightBox.vue deleted file mode 100644 index c9ed006f95..0000000000 --- a/frontend/src/components/dashboard/BillInsightBox.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - - - diff --git a/frontend/src/components/dashboard/BudgetBox.vue b/frontend/src/components/dashboard/BudgetBox.vue deleted file mode 100644 index beae4361c0..0000000000 --- a/frontend/src/components/dashboard/BudgetBox.vue +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - diff --git a/frontend/src/components/dashboard/NetWorthInsightBox.vue b/frontend/src/components/dashboard/NetWorthInsightBox.vue deleted file mode 100644 index 9e594d0d97..0000000000 --- a/frontend/src/components/dashboard/NetWorthInsightBox.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/NewUser.vue b/frontend/src/components/dashboard/NewUser.vue deleted file mode 100644 index c3cde7a446..0000000000 --- a/frontend/src/components/dashboard/NewUser.vue +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/SpendInsightBox.vue b/frontend/src/components/dashboard/SpendInsightBox.vue deleted file mode 100644 index bae80cb180..0000000000 --- a/frontend/src/components/dashboard/SpendInsightBox.vue +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/TransactionList.vue b/frontend/src/components/dashboard/TransactionList.vue deleted file mode 100644 index 0189b5afac..0000000000 --- a/frontend/src/components/dashboard/TransactionList.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - - - diff --git a/frontend/src/components/dashboard/TransactionLists.vue b/frontend/src/components/dashboard/TransactionLists.vue deleted file mode 100644 index 73cd2d58c5..0000000000 --- a/frontend/src/components/dashboard/TransactionLists.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/frontend/src/components/models.ts b/frontend/src/components/models.ts deleted file mode 100644 index 440b03cfdc..0000000000 --- a/frontend/src/components/models.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * models.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export interface Todo { - id: number; - content: string; -} - -export interface Meta { - totalCount: number; -} diff --git a/frontend/src/components/transactions/LargeTable.vue b/frontend/src/components/transactions/LargeTable.vue deleted file mode 100644 index 47d6be4b81..0000000000 --- a/frontend/src/components/transactions/LargeTable.vue +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/Split.vue b/frontend/src/components/transactions/Split.vue deleted file mode 100644 index c5d78872b3..0000000000 --- a/frontend/src/components/transactions/Split.vue +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/form/DestinationAccount.vue b/frontend/src/components/transactions/form/DestinationAccount.vue deleted file mode 100644 index dc09048ee4..0000000000 --- a/frontend/src/components/transactions/form/DestinationAccount.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/form/SourceAccount.vue b/frontend/src/components/transactions/form/SourceAccount.vue deleted file mode 100644 index e8cbce81b0..0000000000 --- a/frontend/src/components/transactions/form/SourceAccount.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/form/TransactionDescription.vue b/frontend/src/components/transactions/form/TransactionDescription.vue deleted file mode 100644 index 1529ef9462..0000000000 --- a/frontend/src/components/transactions/form/TransactionDescription.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - diff --git a/frontend/src/css/app.scss b/frontend/src/css/app.scss deleted file mode 100644 index 32f2ddcee0..0000000000 --- a/frontend/src/css/app.scss +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * app.scss - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// app global css in SCSS form diff --git a/frontend/src/css/quasar.variables.scss b/frontend/src/css/quasar.variables.scss deleted file mode 100644 index 6ce65936bb..0000000000 --- a/frontend/src/css/quasar.variables.scss +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * quasar.variables.scss - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// Quasar SCSS (& Sass) Variables -// -------------------------------------------------- -// To customize the look and feel of this app, you can override -// the Sass/SCSS variables found in Quasar's source Sass/SCSS files. - -// Check documentation for full list of Quasar variables - -// Your own variables (that are declared here) and Quasar's own -// ones will be available out of the box in your .vue/.scss/.sass files - -// It's highly recommended to change the default colors -// to match your app's branding. -// Tip: Use the "Theme Builder" on Quasar's documentation website. - -// $primary : #1976D2; -$primary: #1E6581; - -$secondary: #26A69A; -$accent: #9C27B0; - -$dark: #1D1D1D; - -// $positive : #21BA45; -$positive: #64B624; -// $negative : #C10015; -$negative: #CD5029; - -$info: #31CCEC; -$warning: #F2C037; diff --git a/frontend/src/env.d.ts b/frontend/src/env.d.ts deleted file mode 100644 index 11ff2d97ab..0000000000 --- a/frontend/src/env.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * env.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -declare namespace NodeJS { - interface ProcessEnv { - NODE_ENV: string; - VUE_ROUTER_MODE: 'hash' | 'history' | 'abstract' | undefined; - VUE_ROUTER_BASE: string | undefined; - } -} diff --git a/frontend/src/i18n/bg_BG/index.js b/frontend/src/i18n/bg_BG/index.js deleted file mode 100644 index 8c3f82ff49..0000000000 --- a/frontend/src/i18n/bg_BG/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "bg", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "\u0418\u043c\u0435", - "amount_min": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u043d\u0430 \u0441\u0443\u043c\u0430", - "amount_max": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430 \u0441\u0443\u043c\u0430", - "url": "URL", - "title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435", - "first_date": "\u041f\u044a\u0440\u0432\u0430 \u0434\u0430\u0442\u0430", - "repetitions": "\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "iban": "IBAN", - "skip": "\u041f\u0440\u043e\u043f\u0443\u0441\u043d\u0438", - "date": "\u0414\u0430\u0442\u0430" - }, - "list": { - "name": "\u0418\u043c\u0435", - "account_number": "Account number", - "currentBalance": "\u0422\u0435\u043a\u0443\u0449 \u0431\u0430\u043b\u0430\u043d\u0441", - "lastActivity": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442", - "active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438 \u0435?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438", - "subscriptions": "\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0437\u0445\u043e\u0434\u0438", - "title_withdrawal": "\u0420\u0430\u0437\u0445\u043e\u0434\u0438", - "title_revenue": "\u041f\u0440\u0438\u0445\u043e\u0434\u0438", - "title_deposit": "\u041f\u0440\u0438\u0445\u043e\u0434\u0438", - "title_transfer": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "title_transfers": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "asset_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "expense_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u0438", - "revenue_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438", - "liabilities_accounts": "\u0417\u0430\u0434\u044a\u043b\u0436\u0435\u043d\u0438\u044f" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", - "edit": "\u041f\u0440\u043e\u043c\u0435\u043d\u0438", - "delete": "\u0418\u0437\u0442\u0440\u0438\u0439", - "reconcile": "\u0421\u044a\u0433\u043b\u0430\u0441\u0443\u0432\u0430\u0439", - "create_new_asset": "\u0421\u044a\u0437\u0434\u0430\u0439 \u043d\u043e\u0432\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "confirm_action": "Confirm action", - "new_budget": "\u041d\u043e\u0432 \u0431\u044e\u0434\u0436\u0435\u0442", - "new_asset_account": "\u041d\u043e\u0432\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "newTransfer": "\u041d\u043e\u0432\u043e \u043f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0435", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u041d\u043e\u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442", - "newWithdrawal": "\u041d\u043e\u0432 \u0440\u0430\u0437\u0445\u043e\u0434", - "bills_paid": "\u041f\u043b\u0430\u0442\u0435\u043d\u0438 \u0441\u043c\u0435\u0442\u043a\u0438", - "left_to_spend": "\u041e\u0441\u0442\u0430\u043d\u0430\u043b\u0438 \u0437\u0430 \u0445\u0430\u0440\u0447\u0435\u043d\u0435", - "no_budget": "(\u0431\u0435\u0437 \u0431\u044e\u0434\u0436\u0435\u0442)", - "budgeted": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438\u0440\u0430\u043d\u0438", - "spent": "\u041f\u043e\u0445\u0430\u0440\u0447\u0435\u043d\u0438", - "no_bill": "(\u043d\u044f\u043c\u0430 \u0441\u043c\u0435\u0442\u043a\u0430)", - "rule_trigger_source_account_starts_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_source_account_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_source_account_is_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435..", - "rule_trigger_source_account_contains_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0442\u043e\u0447\u043d\u043e..", - "rule_trigger_destination_account_id_choice": "ID \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0442\u043e\u0447\u043d\u043e..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "\u0420\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0441\u043c\u0435\u0442\u043a\u0430 (\u0432 \u0431\u0440\u043e\u0439)", - "rule_trigger_destination_is_cash_choice": "\u041f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0441\u043c\u0435\u0442\u043a\u0430 (\u0432 \u0431\u0440\u043e\u0439)", - "rule_trigger_source_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_source_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_source_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0435..", - "rule_trigger_source_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_destination_account_starts_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_destination_account_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_destination_account_is_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435..", - "rule_trigger_destination_account_contains_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_destination_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_destination_account_nr_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_destination_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0435..", - "rule_trigger_destination_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_transaction_type_choice": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435 \u043e\u0442 \u0442\u0438\u043f..", - "rule_trigger_category_is_choice": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_description_ends_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_description_contains_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_description_is_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0435..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "\u0414\u0430\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435 \u043f\u0440\u0435\u0434\u0438..", - "rule_trigger_date_after_choice": "\u0414\u0430\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435 \u0441\u043b\u0435\u0434..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u0411\u044e\u0434\u0436\u0435\u0442\u044a\u0442 \u0435..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "\u0412\u0430\u043b\u0443\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_foreign_currency_is_choice": "\u0427\u0443\u0436\u0434\u0430\u0442\u0430 \u0432\u0430\u043b\u0443\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_has_attachments_choice": "\u0418\u043c\u0430 \u043f\u043e\u043d\u0435 \u0442\u043e\u043b\u043a\u043e\u0432\u0430 \u043f\u0440\u0438\u043a\u0430\u0447\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0435", - "rule_trigger_has_no_category_choice": "\u041d\u044f\u043c\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "rule_trigger_has_any_category_choice": "\u0418\u043c\u0430 (\u043d\u044f\u043a\u0430\u043a\u0432\u0430) \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "rule_trigger_has_no_budget_choice": "\u041d\u044f\u043c\u0430 \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_trigger_has_any_budget_choice": "\u0418\u043c\u0430 (\u043d\u044f\u043a\u0430\u043a\u044a\u0432) \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "\u041d\u044f\u043c\u0430 \u0435\u0442\u0438\u043a\u0435\u0442(\u0438)", - "rule_trigger_has_any_tag_choice": "\u0418\u043c\u0430 \u0435\u0434\u0438\u043d \u0438\u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 (\u043d\u044f\u043a\u0430\u043a\u0432\u0438) \u0435\u0442\u0438\u043a\u0435\u0442\u0438", - "rule_trigger_any_notes_choice": "\u0418\u043c\u0430 (\u043d\u044f\u043a\u0430\u043a\u0432\u0438) \u0431\u0435\u043b\u0435\u0436\u043a\u0438", - "rule_trigger_no_notes_choice": "\u041d\u044f\u043c\u0430 \u0431\u0435\u043b\u0435\u0436\u043a\u0438", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "\u0421\u043c\u0435\u0442\u043a\u0430\u0442\u0430 \u0435..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "ID \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0438", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0435\u0442\u0438\u043a\u0435\u0442\u0438", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0431\u0435\u043b\u0435\u0436\u043a\u0438", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0432\u0430\u0439\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442", - "rule_action_convert_withdrawal_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0432\u0430\u0439\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0432 \u0442\u0435\u0433\u043b\u0435\u043d\u0435", - "rule_action_convert_transfer_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0432\u0430\u0439\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440", - "placeholder": "[Placeholder]", - "recurrences": "\u041f\u043e\u0432\u0442\u0430\u0440\u044f\u0449\u0438 \u0441\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0437\u0445\u043e\u0434\u0438", - "title_withdrawal": "\u0422\u0435\u0433\u043b\u0435\u043d\u0438\u044f", - "title_revenue": "\u041f\u0440\u0438\u0445\u043e\u0434\u0438", - "pref_1D": "\u0415\u0434\u0438\u043d \u0434\u0435\u043d", - "pref_1W": "\u0415\u0434\u043d\u0430 \u0441\u0435\u0434\u043c\u0438\u0446\u0430", - "pref_1M": "\u0415\u0434\u0438\u043d \u043c\u0435\u0441\u0435\u0446", - "pref_3M": "\u0422\u0440\u0438 \u043c\u0435\u0441\u0435\u0446\u0430 (\u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435)", - "pref_6M": "\u0428\u0435\u0441\u0442 \u043c\u0435\u0441\u0435\u0446\u0430", - "pref_1Y": "\u0415\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430", - "repeat_freq_yearly": "\u0435\u0436\u0435\u0433\u043e\u0434\u043d\u043e", - "repeat_freq_half-year": "\u043d\u0430 \u0432\u0441\u0435\u043a\u0438 6 \u043c\u0435\u0441\u0435\u0446\u0430", - "repeat_freq_quarterly": "\u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u043d\u043e", - "repeat_freq_monthly": "\u043c\u0435\u0441\u0435\u0447\u043d\u043e", - "repeat_freq_weekly": "\u0435\u0436\u0435\u0441\u0435\u0434\u043c\u0438\u0447\u043d\u043e", - "single_split": "\u0420\u0430\u0437\u0434\u0435\u043b", - "asset_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "expense_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u0438", - "liabilities_accounts": "\u0417\u0430\u0434\u044a\u043b\u0436\u0435\u043d\u0438\u044f", - "undefined_accounts": "Accounts", - "name": "\u0418\u043c\u0435", - "revenue_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "title_deposit": "\u0414\u0435\u043f\u043e\u0437\u0438\u0442\u0438", - "title_transfer": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "title_transfers": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "piggyBanks": "\u041a\u0430\u0441\u0438\u0447\u043a\u0438", - "rules": "\u041f\u0440\u0430\u0432\u0438\u043b\u0430", - "accounts": "\u0421\u043c\u0435\u0442\u043a\u0438", - "categories": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "tags": "\u0415\u0442\u0438\u043a\u0435\u0442\u0438", - "object_groups_page_title": "\u0413\u0440\u0443\u043f\u0438", - "reports": "\u041e\u0442\u0447\u0435\u0442\u0438", - "webhooks": "Webhooks", - "currencies": "\u0412\u0430\u043b\u0443\u0442\u0438", - "administration": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435", - "profile": "\u041f\u0440\u043e\u0444\u0438\u043b", - "source_account": "\u0420\u0430\u0437\u0445\u043e\u0434\u043d\u0430 \u0441\u043c\u0435\u0442\u043a\u0430", - "destination_account": "\u041f\u0440\u0438\u0445\u043e\u0434\u043d\u0430 \u0441\u043c\u0435\u0442\u043a\u0430", - "amount": "\u0421\u0443\u043c\u0430", - "date": "\u0414\u0430\u0442\u0430", - "time": "\u0412\u0440\u0435\u043c\u0435", - "preferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "balance": "\u0421\u0430\u043b\u0434\u043e", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438", - "subscriptions": "\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438", - "welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?", - "bills_to_pay": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u043b\u0430\u0449\u0430\u043d\u0435", - "net_worth": "\u041d\u0435\u0442\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/ca_ES/index.js b/frontend/src/i18n/ca_ES/index.js deleted file mode 100644 index bc2e907979..0000000000 --- a/frontend/src/i18n/ca_ES/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ca", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nom", - "amount_min": "Import m\u00ednim", - "amount_max": "Import m\u00e0xim", - "url": "URL", - "title": "T\u00edtol", - "first_date": "Primera data", - "repetitions": "Repeticions", - "description": "Descripci\u00f3", - "iban": "IBAN", - "skip": "Ometre", - "date": "Data" - }, - "list": { - "name": "Nom", - "account_number": "N\u00famero de compte", - "currentBalance": "Saldo actual", - "lastActivity": "Darrera activitat", - "active": "Est\u00e0 actiu?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Pressupostos", - "subscriptions": "Subscripcions", - "transactions": "Transaccions", - "title_expenses": "Despeses", - "title_withdrawal": "Despeses", - "title_revenue": "Ingressos \/ salari", - "title_deposit": "Ingressos \/ salari", - "title_transfer": "Transfer\u00e8ncies", - "title_transfers": "Transfer\u00e8ncies", - "asset_accounts": "Comptes d'actius", - "expense_accounts": "Comptes de despeses", - "revenue_accounts": "Comptes d'ingressos", - "liabilities_accounts": "Passius" - }, - "firefly": { - "administration_index": "Administraci\u00f3 financera", - "actions": "Accions", - "edit": "Editar", - "delete": "Eliminar", - "reconcile": "Consolidar", - "create_new_asset": "Crear un nou compte d'actius", - "confirm_action": "Confirmar acci\u00f3", - "new_budget": "Nou pressupost", - "new_asset_account": "Nou compte d'actiu", - "newTransfer": "Nova transfer\u00e8ncia", - "submission_options": "Opcions de tramesa", - "apply_rules_checkbox": "Aplicar regles", - "fire_webhooks_checkbox": "Disparar webhooks", - "newDeposit": "Nou dip\u00f2sit", - "newWithdrawal": "Nova despesa", - "bills_paid": "Factures pagades", - "left_to_spend": "Queda per gastar", - "no_budget": "(cap pressupost)", - "budgeted": "Pressupostat", - "spent": "Gastat", - "no_bill": "(cap factura)", - "rule_trigger_source_account_starts_choice": "El nom del compte d'origen comen\u00e7a per..", - "rule_trigger_source_account_ends_choice": "El nom del compte d'origen acaba amb..", - "rule_trigger_source_account_is_choice": "El nom del compte d'origen \u00e9s..", - "rule_trigger_source_account_contains_choice": "El nom del compte d'origen cont\u00e9..", - "rule_trigger_account_id_choice": "L'ID d'un dels comptes \u00e9s exactament..", - "rule_trigger_source_account_id_choice": "L'ID del compte d'origen \u00e9s exactament..", - "rule_trigger_destination_account_id_choice": "L'ID del compte de dest\u00ed \u00e9s exactament..", - "rule_trigger_account_is_cash_choice": "Un dels comptes \u00e9s d'efectiu", - "rule_trigger_source_is_cash_choice": "El compte d'origen \u00e9s el compte (efectiu)", - "rule_trigger_destination_is_cash_choice": "El compte de dest\u00ed \u00e9s el compte (efectiu)", - "rule_trigger_source_account_nr_starts_choice": "El n\u00famero \/ IBAN del compte d'origen comen\u00e7a per..", - "rule_trigger_source_account_nr_ends_choice": "El n\u00famero \/ IBAN del compte d'origen acaba amb..", - "rule_trigger_source_account_nr_is_choice": "El n\u00famero \/ IBAN del compte d'origen \u00e9s..", - "rule_trigger_source_account_nr_contains_choice": "El n\u00famero \/ IBAN del compte d'origen cont\u00e9..", - "rule_trigger_destination_account_starts_choice": "El nom del compte de dest\u00ed comen\u00e7a per..", - "rule_trigger_destination_account_ends_choice": "El nom del compte de dest\u00ed acaba amb..", - "rule_trigger_destination_account_is_choice": "El nom del compte de dest\u00ed \u00e9s..", - "rule_trigger_destination_account_contains_choice": "El nom del compte de dest\u00ed cont\u00e9..", - "rule_trigger_destination_account_nr_starts_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed comen\u00e7a per..", - "rule_trigger_destination_account_nr_ends_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed acaba amb..", - "rule_trigger_destination_account_nr_is_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed \u00e9s..", - "rule_trigger_destination_account_nr_contains_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed cont\u00e9..", - "rule_trigger_transaction_type_choice": "La transacci\u00f3 \u00e9s del tipus..", - "rule_trigger_category_is_choice": "La categoria \u00e9s..", - "rule_trigger_amount_less_choice": "La quantitat \u00e9s menor o igual a ..", - "rule_trigger_amount_is_choice": "La quantitat \u00e9s..", - "rule_trigger_amount_more_choice": "La quantitat \u00e9s major o igual a..", - "rule_trigger_description_starts_choice": "La descripci\u00f3 comen\u00e7a per..", - "rule_trigger_description_ends_choice": "La descripci\u00f3 acaba amb..", - "rule_trigger_description_contains_choice": "La descripci\u00f3 cont\u00e9..", - "rule_trigger_description_is_choice": "La descripci\u00f3 \u00e9s..", - "rule_trigger_date_on_choice": "La data de la transacci\u00f3 \u00e9s..", - "rule_trigger_date_before_choice": "La data de la transacci\u00f3 \u00e9s anterior a..", - "rule_trigger_date_after_choice": "La data de la transacci\u00f3 \u00e9s posterior a..", - "rule_trigger_created_at_on_choice": "La transacci\u00f3 es va fer el..", - "rule_trigger_updated_at_on_choice": "La transacci\u00f3 es va editar per \u00faltim cop el..", - "rule_trigger_budget_is_choice": "El pressupost \u00e9s..", - "rule_trigger_tag_is_choice": "Qualsevol etiqueta \u00e9s..", - "rule_trigger_currency_is_choice": "La moneda de la transacci\u00f3 \u00e9s..", - "rule_trigger_foreign_currency_is_choice": "La moneda estrangera de la transacci\u00f3 \u00e9s..", - "rule_trigger_has_attachments_choice": "Com a m\u00ednim t\u00e9 aquest nombre d'adjunts", - "rule_trigger_has_no_category_choice": "No t\u00e9 categoria", - "rule_trigger_has_any_category_choice": "T\u00e9 categoria (qualsevol)", - "rule_trigger_has_no_budget_choice": "No t\u00e9 pressupost", - "rule_trigger_has_any_budget_choice": "T\u00e9 un pressupost (qualsevol)", - "rule_trigger_has_no_bill_choice": "No t\u00e9 factura", - "rule_trigger_has_any_bill_choice": "T\u00e9 una factura (qualsevol)", - "rule_trigger_has_no_tag_choice": "No t\u00e9 etiqueta(es)", - "rule_trigger_has_any_tag_choice": "T\u00e9 una o m\u00e9s etiquetes (qualsevol)", - "rule_trigger_any_notes_choice": "T\u00e9 notes (qualsevol)", - "rule_trigger_no_notes_choice": "No t\u00e9 notes", - "rule_trigger_notes_is_choice": "Les notes s\u00f3n..", - "rule_trigger_notes_contains_choice": "Les notes contenen..", - "rule_trigger_notes_starts_choice": "Les notes comencen per..", - "rule_trigger_notes_ends_choice": "Les notes acaben amb..", - "rule_trigger_bill_is_choice": "La factura \u00e9s..", - "rule_trigger_external_id_is_choice": "L'ID externa \u00e9s..", - "rule_trigger_internal_reference_is_choice": "La refer\u00e8ncia interna \u00e9s..", - "rule_trigger_journal_id_choice": "L'ID del llibre de transaccions \u00e9s..", - "rule_trigger_any_external_url_choice": "La transaci\u00f3 t\u00e9 (cap) URL externa", - "rule_trigger_no_external_url_choice": "La transacci\u00f3 no t\u00e9 URL extern", - "rule_trigger_id_choice": "L'ID de la transacci\u00f3 \u00e9s..", - "rule_action_delete_transaction_choice": "ELIMINAR transacci\u00f3(!)", - "rule_action_set_category_choice": "Establir categoria a ..", - "rule_action_clear_category_choice": "Esborrar qualsevol categoria", - "rule_action_set_budget_choice": "Establir pressupost a ..", - "rule_action_clear_budget_choice": "Esborrar qualsevol pressupost", - "rule_action_add_tag_choice": "Afegir etiqueta ..", - "rule_action_remove_tag_choice": "Eliminar etiqueta ..", - "rule_action_remove_all_tags_choice": "Eliminar totes les etiquetes", - "rule_action_set_description_choice": "Estableix la descripci\u00f3 a ..", - "rule_action_update_piggy_choice": "Afegir\/eliminar la quantitat de la transacci\u00f3 a\/de la guardiola ..", - "rule_action_append_description_choice": "Afegir a la descripci\u00f3 ..", - "rule_action_prepend_description_choice": "Preposar a la descripci\u00f3 ..", - "rule_action_set_source_account_choice": "Establir el compte d'origen a ..", - "rule_action_set_destination_account_choice": "Establir el compte de dest\u00ed a ..", - "rule_action_append_notes_choice": "Afegir a les notes ..", - "rule_action_prepend_notes_choice": "Preposar a les notes ..", - "rule_action_clear_notes_choice": "Eliminar qualsevol nota", - "rule_action_set_notes_choice": "Establir les notes a ..", - "rule_action_link_to_bill_choice": "Enlla\u00e7ar a una factura ..", - "rule_action_convert_deposit_choice": "Convertir la transacci\u00f3 a un dip\u00f2sit", - "rule_action_convert_withdrawal_choice": "Convertir la transacci\u00f3 en una retirada", - "rule_action_convert_transfer_choice": "Convertir la transacci\u00f3 en una transfer\u00e8ncia", - "placeholder": "[Placeholder]", - "recurrences": "Transaccions recurrents", - "title_expenses": "Despeses", - "title_withdrawal": "Despeses", - "title_revenue": "Ingressos \/ salari", - "pref_1D": "Un dia", - "pref_1W": "Una setmana", - "pref_1M": "Un mes", - "pref_3M": "Tres mesos (trimestre)", - "pref_6M": "Sis mesos", - "pref_1Y": "Un any", - "repeat_freq_yearly": "anualment", - "repeat_freq_half-year": "cada mig any", - "repeat_freq_quarterly": "trimestralment", - "repeat_freq_monthly": "mensualment", - "repeat_freq_weekly": "setmanalment", - "single_split": "Divisi\u00f3", - "asset_accounts": "Comptes d'actius", - "expense_accounts": "Comptes de despeses", - "liabilities_accounts": "Passius", - "undefined_accounts": "Comptes", - "name": "Nom", - "revenue_accounts": "Comptes d'ingressos", - "description": "Descripci\u00f3", - "category": "Categoria", - "title_deposit": "Ingressos \/ salari", - "title_transfer": "Transfer\u00e8ncies", - "title_transfers": "Transfer\u00e8ncies", - "piggyBanks": "Guardioles", - "rules": "Regles", - "accounts": "Comptes", - "categories": "Categories", - "tags": "Etiquetes", - "object_groups_page_title": "Grups", - "reports": "Informes", - "webhooks": "Webhooks", - "currencies": "Monedes", - "administration": "Administraci\u00f3", - "profile": "Perfil", - "source_account": "Compte d'origen", - "destination_account": "Compte de dest\u00ed", - "amount": "Import", - "date": "Data", - "time": "Hora", - "preferences": "Configuraci\u00f3", - "transactions": "Transaccions", - "balance": "Saldo", - "budgets": "Pressupostos", - "subscriptions": "Subscripcions", - "welcome_back": "Qu\u00e8 est\u00e0 passant?", - "bills_to_pay": "Factures a pagar", - "net_worth": "Valor net", - "pref_last365": "L'any passat", - "pref_last90": "\u00daltims 90 dies", - "pref_last30": "\u00daltims 30 dies", - "pref_last7": "\u00daltims 7 dies", - "pref_YTD": "Any en curs", - "pref_QTD": "Trimestre en curs", - "pref_MTD": "Mes en curs" - } -} diff --git a/frontend/src/i18n/cs_CZ/index.js b/frontend/src/i18n/cs_CZ/index.js deleted file mode 100644 index b917a4f6cd..0000000000 --- a/frontend/src/i18n/cs_CZ/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "cs", - "month_and_day_fns": "d MMMM, y" - }, - "form": { - "name": "N\u00e1zev", - "amount_min": "Minim\u00e1ln\u00ed \u010d\u00e1stka", - "amount_max": "Maxim\u00e1ln\u00ed \u010d\u00e1stka", - "url": "URL", - "title": "N\u00e1zev", - "first_date": "Prvn\u00ed datum", - "repetitions": "Opakov\u00e1n\u00ed", - "description": "Popis", - "iban": "IBAN", - "skip": "P\u0159esko\u010dit", - "date": "Datum" - }, - "list": { - "name": "Jm\u00e9no", - "account_number": "Account number", - "currentBalance": "Aktu\u00e1ln\u00ed z\u016fstatek", - "lastActivity": "Posledn\u00ed aktivita", - "active": "Aktivn\u00ed?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Akce", - "edit": "Upravit", - "delete": "Odstranit", - "reconcile": "Reconcile", - "create_new_asset": "Vytvo\u0159it nov\u00fd \u00fa\u010det aktiv", - "confirm_action": "Confirm action", - "new_budget": "Nov\u00fd rozpo\u010det", - "new_asset_account": "Nov\u00fd \u00fa\u010det s aktivy", - "newTransfer": "Nov\u00fd p\u0159evod", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nov\u00fd vklad", - "newWithdrawal": "Nov\u00fd v\u00fddaj", - "bills_paid": "Zaplacen\u00e9 \u00fa\u010dty", - "left_to_spend": "Zb\u00fdv\u00e1 k utracen\u00ed", - "no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)", - "budgeted": "Rozpo\u010det", - "spent": "Utraceno", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transakce je typu\u2026", - "rule_trigger_category_is_choice": "Kategorie je\u2026", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Popis za\u010d\u00edn\u00e1 na\u2026", - "rule_trigger_description_ends_choice": "Popis kon\u010d\u00ed na\u2026", - "rule_trigger_description_contains_choice": "Popis obsahuje\u2026", - "rule_trigger_description_is_choice": "Popis je\u2026", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Datum transakce je p\u0159ed..", - "rule_trigger_date_after_choice": "Datum transakce je po..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Rozpo\u010det je\u2026", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "M\u011bna transakce je\u2026", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "M\u00e1 alespo\u0148 tolik p\u0159\u00edloh", - "rule_trigger_has_no_category_choice": "Nem\u00e1 \u017e\u00e1dnou kategorii", - "rule_trigger_has_any_category_choice": "M\u00e1 (libovolnou) kategorii", - "rule_trigger_has_no_budget_choice": "Nem\u00e1 \u017e\u00e1dn\u00fd rozpo\u010det", - "rule_trigger_has_any_budget_choice": "M\u00e1 (libovoln\u00fd) rozpo\u010det", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Nem\u00e1 \u017e\u00e1dn\u00e9 \u0161t\u00edtky", - "rule_trigger_has_any_tag_choice": "M\u00e1 jeden a v\u00edce \u0161t\u00edtk\u016f", - "rule_trigger_any_notes_choice": "M\u00e1 (jak\u00e9koli) pozn\u00e1mky", - "rule_trigger_no_notes_choice": "Nem\u00e1 \u017e\u00e1dn\u00e9 pozn\u00e1mky", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Vy\u010distit jak\u00e9koli kategorie", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Vy\u010distit jak\u00fdkoli rozpo\u010det", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Odebrat ve\u0161ker\u00e9 \u0161t\u00edtky", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Odstranit v\u0161echny pozn\u00e1mky", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "P\u0159em\u011bnit tuto transakci na vklad", - "rule_action_convert_withdrawal_choice": "P\u0159em\u011bnit transakci na v\u00fdb\u011br", - "rule_action_convert_transfer_choice": "P\u0159em\u011bnit tuto transakci na p\u0159evod", - "placeholder": "[Placeholder]", - "recurrences": "Opakovan\u00e9 transakce", - "title_expenses": "V\u00fddaje", - "title_withdrawal": "V\u00fddaje", - "title_revenue": "Odm\u011bna\/p\u0159\u00edjem", - "pref_1D": "Jeden den", - "pref_1W": "Jeden t\u00fdden", - "pref_1M": "Jeden m\u011bs\u00edc", - "pref_3M": "T\u0159i m\u011bs\u00edce (\u010dtvrtlet\u00ed)", - "pref_6M": "\u0160est m\u011bs\u00edc\u016f", - "pref_1Y": "Jeden rok", - "repeat_freq_yearly": "ro\u010dn\u011b", - "repeat_freq_half-year": "p\u016floro\u010dn\u011b", - "repeat_freq_quarterly": "\u010dtvrtletn\u011b", - "repeat_freq_monthly": "m\u011bs\u00ed\u010dn\u011b", - "repeat_freq_weekly": "t\u00fddn\u011b", - "single_split": "Rozd\u011blit", - "asset_accounts": "\u00da\u010dty aktiv", - "expense_accounts": "V\u00fddajov\u00e9 \u00fa\u010dty", - "liabilities_accounts": "Z\u00e1vazky", - "undefined_accounts": "Accounts", - "name": "N\u00e1zev", - "revenue_accounts": "P\u0159\u00edjmov\u00e9 \u00fa\u010dty", - "description": "Popis", - "category": "Kategorie", - "title_deposit": "Odm\u011bna\/p\u0159\u00edjem", - "title_transfer": "P\u0159evody", - "title_transfers": "P\u0159evody", - "piggyBanks": "Pokladni\u010dky", - "rules": "Pravidla", - "accounts": "\u00da\u010dty", - "categories": "Kategorie", - "tags": "\u0160t\u00edtky", - "object_groups_page_title": "Skupiny", - "reports": "P\u0159ehledy", - "webhooks": "Webhooky", - "currencies": "M\u011bny", - "administration": "Spr\u00e1va", - "profile": "Profil", - "source_account": "Zdrojov\u00fd \u00fa\u010det", - "destination_account": "C\u00edlov\u00fd \u00fa\u010det", - "amount": "\u010c\u00e1stka", - "date": "Datum", - "time": "\u010cas", - "preferences": "P\u0159edvolby", - "transactions": "Transakce", - "balance": "Z\u016fstatek", - "budgets": "Rozpo\u010dty", - "subscriptions": "Subscriptions", - "welcome_back": "Jak to jde?", - "bills_to_pay": "Faktury k zaplacen\u00ed", - "net_worth": "\u010cist\u00e9 jm\u011bn\u00ed", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/da_DK/index.js b/frontend/src/i18n/da_DK/index.js deleted file mode 100644 index 53426d28c6..0000000000 --- a/frontend/src/i18n/da_DK/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "da", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Navn", - "amount_min": "Minimumsbel\u00f8b", - "amount_max": "Maksimumbel\u00f8b", - "url": "URL", - "title": "Titel", - "first_date": "F\u00f8rste dato", - "repetitions": "Gentagelser", - "description": "Beskrivelse", - "iban": "IBAN", - "skip": "Spring over", - "date": "Dato" - }, - "list": { - "name": "Navn", - "account_number": "Konto nummer", - "currentBalance": "Nuv\u00e6rende saldo", - "lastActivity": "Seneste aktivitet", - "active": "Aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budget", - "subscriptions": "Abonnementer", - "transactions": "Transaktioner", - "title_expenses": "Udgifter", - "title_withdrawal": "Udgifter", - "title_revenue": "Indt\u00e6gter \/ indkomster", - "title_deposit": "Indt\u00e6gter \/ indkomster", - "title_transfer": "Overf\u00f8rsler", - "title_transfers": "Overf\u00f8rsler", - "asset_accounts": "Aktivkonti", - "expense_accounts": "Udgiftskonti", - "revenue_accounts": "Indt\u00e6gtskonti", - "liabilities_accounts": "G\u00e6ld" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Handlinger", - "edit": "Rediger", - "delete": "Slet", - "reconcile": "Afstem", - "create_new_asset": "Opret ny aktivkonto", - "confirm_action": "Bekr\u00e6ft", - "new_budget": "Nyt budget", - "new_asset_account": "Ny aktivkonto", - "newTransfer": "New transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "New deposit", - "newWithdrawal": "New expense", - "bills_paid": "Betalte regninger", - "left_to_spend": "Left to spend", - "no_budget": "(no budget)", - "budgeted": "Budgetteret", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Kildekontonavn starter med..", - "rule_trigger_source_account_ends_choice": "Kildekontonavnet slutter med..", - "rule_trigger_source_account_is_choice": "Kildekontonavn er..", - "rule_trigger_source_account_contains_choice": "Kildekontonavnet indeholder..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Kildekonto ID er pr\u00e6cis..", - "rule_trigger_destination_account_id_choice": "Destinationskonto ID er pr\u00e6cis..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Kildekonto er (kontant) konto", - "rule_trigger_destination_is_cash_choice": "Destinationskonto er (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "Kildekontonummer \/ IBAN starter med..", - "rule_trigger_source_account_nr_ends_choice": "Kildekontonummer \/ IBAN slutter med..", - "rule_trigger_source_account_nr_is_choice": "Kildekontonummer \/ IBAN er..", - "rule_trigger_source_account_nr_contains_choice": "Kildekontonummer \/ IBAN indeholder..", - "rule_trigger_destination_account_starts_choice": "Destinationskontonavnet starter med..", - "rule_trigger_destination_account_ends_choice": "Destinationskontonavnet slutter med..", - "rule_trigger_destination_account_is_choice": "Destinationskontonavnet er..", - "rule_trigger_destination_account_contains_choice": "Destinationskontonavnet indeholder..", - "rule_trigger_destination_account_nr_starts_choice": "Destinationskontonummer \/ IBAN starter med..", - "rule_trigger_destination_account_nr_ends_choice": "Destinationskontonummer \/ IBAN slutter med..", - "rule_trigger_destination_account_nr_is_choice": "Destinationskontonummer \/ IBAN er..", - "rule_trigger_destination_account_nr_contains_choice": "Destinationskontonummer \/ IBAN indeholder..", - "rule_trigger_transaction_type_choice": "Transaktionen er af type..", - "rule_trigger_category_is_choice": "Kategorien er..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivelsen starter med..", - "rule_trigger_description_ends_choice": "Beskrivelsen slutter med..", - "rule_trigger_description_contains_choice": "Beskrivelsen indeholder..", - "rule_trigger_description_is_choice": "Beskrivelsen er..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaktionsdato er f\u00f8r..", - "rule_trigger_date_after_choice": "Transaktionsdatoen er efter..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budgettet er..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaktionsvalutaen er..", - "rule_trigger_foreign_currency_is_choice": "Udenlandsk transaktionsvaluta er..", - "rule_trigger_has_attachments_choice": "Har mindst s\u00e5 mange vedh\u00e6ftede filer", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har en (vilk\u00e5rlig) kategori", - "rule_trigger_has_no_budget_choice": "Har intet budget", - "rule_trigger_has_any_budget_choice": "Har et (noget) budget", - "rule_trigger_has_no_bill_choice": "Har ingen regning", - "rule_trigger_has_any_bill_choice": "Har en (valgfri) regning", - "rule_trigger_has_no_tag_choice": "Har ingen tag(s)", - "rule_trigger_has_any_tag_choice": "Har en eller flere (nogen) tags", - "rule_trigger_any_notes_choice": "Har (nogen) noter", - "rule_trigger_no_notes_choice": "Har ingen noter", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Regningen er..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaktionsjournal ID er..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Ryd alle kategorier", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Ryd ethvert budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Fjern alle tags", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Fjern alle noter", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Konverter transaktionen til et indskud", - "rule_action_convert_withdrawal_choice": "Konverter transaktionen til en udbetaling", - "rule_action_convert_transfer_choice": "Konverter transaktionen til en overf\u00f8rsel", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Udgifter", - "title_withdrawal": "Udgifter", - "title_revenue": "Indt\u00e6gter \/ indkomst", - "pref_1D": "En dag", - "pref_1W": "En uge", - "pref_1M": "En m\u00e5ned", - "pref_3M": "Tre m\u00e5neder (kvartal)", - "pref_6M": "Seks m\u00e5neder", - "pref_1Y": "Et \u00e5r", - "repeat_freq_yearly": "\u00e5rligt", - "repeat_freq_half-year": "hvert halve \u00e5r", - "repeat_freq_quarterly": "kvartalsvis", - "repeat_freq_monthly": "m\u00e5nedligt", - "repeat_freq_weekly": "ugentligt", - "single_split": "Opdel", - "asset_accounts": "Aktivkonti", - "expense_accounts": "Udgiftskonti", - "liabilities_accounts": "G\u00e6ld", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "Indt\u00e6gtskonti", - "description": "Description", - "category": "Kategori", - "title_deposit": "Indt\u00e6gter \/ indkomster", - "title_transfer": "Overf\u00f8rsler", - "title_transfers": "Overf\u00f8rsler", - "piggyBanks": "Spareb\u00f8sser", - "rules": "Regler", - "accounts": "Konti", - "categories": "Kategorier", - "tags": "Etiketter", - "object_groups_page_title": "Groups", - "reports": "Rapporter", - "webhooks": "Webhooks", - "currencies": "Currencies", - "administration": "Administration", - "profile": "Profile", - "source_account": "Kildekonto", - "destination_account": "Destinationskonto", - "amount": "Bel\u00f8b", - "date": "Date", - "time": "Time", - "preferences": "Preferences", - "transactions": "Transaktioner", - "balance": "Saldo", - "budgets": "Budgetter", - "subscriptions": "Abonnementer", - "welcome_back": "Hvad spiller?", - "bills_to_pay": "Regninger til betaling", - "net_worth": "Nettoformue", - "pref_last365": "Sidste \u00e5r", - "pref_last90": "Sidste 90 dage", - "pref_last30": "Sidste 30 dage", - "pref_last7": "Sidste 7 dage", - "pref_YTD": "\u00c5r til dato", - "pref_QTD": "Kvartal til dato", - "pref_MTD": "M\u00e5ned til dato" - } -} diff --git a/frontend/src/i18n/de_DE/index.js b/frontend/src/i18n/de_DE/index.js deleted file mode 100644 index a56d22aa18..0000000000 --- a/frontend/src/i18n/de_DE/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "de", - "month_and_day_fns": "d. MMMM Y" - }, - "form": { - "name": "Name", - "amount_min": "Mindestbetrag", - "amount_max": "H\u00f6chstbetrag", - "url": "URL", - "title": "Titel", - "first_date": "Erstes Datum", - "repetitions": "Wiederholungen", - "description": "Beschreibung", - "iban": "IBAN", - "skip": "\u00dcberspringen", - "date": "Datum" - }, - "list": { - "name": "Name", - "account_number": "Kontonummer", - "currentBalance": "Aktueller Kontostand", - "lastActivity": "Letzte Aktivit\u00e4t", - "active": "Aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Kostenrahmen", - "subscriptions": "Abonnements", - "transactions": "Buchungen", - "title_expenses": "Ausgaben", - "title_withdrawal": "Ausgaben", - "title_revenue": "Einnahmen \/ Einkommen", - "title_deposit": "Einnahmen \/ Einkommen", - "title_transfer": "Umbuchungen", - "title_transfers": "Umbuchungen", - "asset_accounts": "Bestandskonten", - "expense_accounts": "Ausgabekonten", - "revenue_accounts": "Einnahmenkonten", - "liabilities_accounts": "Verbindlichkeiten" - }, - "firefly": { - "administration_index": "Finanzverwaltung", - "actions": "Aktionen", - "edit": "Bearbeiten", - "delete": "L\u00f6schen", - "reconcile": "Abgleichen", - "create_new_asset": "Neues Bestandskonto erstellen", - "confirm_action": "Aktion best\u00e4tigen", - "new_budget": "Neues Budget", - "new_asset_account": "Neues Bestandskonto", - "newTransfer": "Neue Umbuchung", - "submission_options": "\u00dcbermittlungsoptionen", - "apply_rules_checkbox": "Regeln anwenden", - "fire_webhooks_checkbox": "Webhooks abfeuern", - "newDeposit": "Neue Einnahme", - "newWithdrawal": "Neue Ausgabe", - "bills_paid": "Rechnungen bezahlt", - "left_to_spend": "Verbleibend zum Ausgeben", - "no_budget": "(kein Budget)", - "budgeted": "Vorgesehen", - "spent": "Ausgegeben", - "no_bill": "(keine Belege)", - "rule_trigger_source_account_starts_choice": "Quellkonto-Name beginnt mit..", - "rule_trigger_source_account_ends_choice": "Quellkonto-Name endet mit..", - "rule_trigger_source_account_is_choice": "Quellkonto-Name lautet..", - "rule_trigger_source_account_contains_choice": "Quellkonto-Name enh\u00e4lt..", - "rule_trigger_account_id_choice": "Beide Konto IDs sind exakt..", - "rule_trigger_source_account_id_choice": "Quellkonto-ID ist genau..", - "rule_trigger_destination_account_id_choice": "Zielkonto-ID ist genau..", - "rule_trigger_account_is_cash_choice": "Beide Konten sind Bargeld", - "rule_trigger_source_is_cash_choice": "Quellkonto ist (bar)", - "rule_trigger_destination_is_cash_choice": "Zielkonto ist (bar)", - "rule_trigger_source_account_nr_starts_choice": "Quellkontonummer\/IBAN beginnt mit..", - "rule_trigger_source_account_nr_ends_choice": "Quellkontonummer\/IBAN endet auf..", - "rule_trigger_source_account_nr_is_choice": "Quellkontonummer\/IBAN ist..", - "rule_trigger_source_account_nr_contains_choice": "Quellkontonummer\/IBAN enth\u00e4lt..", - "rule_trigger_destination_account_starts_choice": "Zielkonto-Name beginnt mit..", - "rule_trigger_destination_account_ends_choice": "Zielkonto-Name endet auf..", - "rule_trigger_destination_account_is_choice": "Zielkonto-Name ist..", - "rule_trigger_destination_account_contains_choice": "Zielkonto-Name enth\u00e4lt..", - "rule_trigger_destination_account_nr_starts_choice": "Zielkontonummer\/IBAN beginnt mit..", - "rule_trigger_destination_account_nr_ends_choice": "Zielkontonummer\/IBAN endet auf..", - "rule_trigger_destination_account_nr_is_choice": "Zielkontonummer \/ IBAN ist..", - "rule_trigger_destination_account_nr_contains_choice": "Zielkontonummer \/ IBAN enth\u00e4lt..", - "rule_trigger_transaction_type_choice": "Buchung ist vom Typ..", - "rule_trigger_category_is_choice": "Kategorie ist..", - "rule_trigger_amount_less_choice": "Betrag ist kleiner oder gleich \u2026", - "rule_trigger_amount_is_choice": "Betrag ist..", - "rule_trigger_amount_more_choice": "Betrag ist gr\u00f6\u00dfer oder gleich \u2026", - "rule_trigger_description_starts_choice": "Beschreibung beginnt mit..", - "rule_trigger_description_ends_choice": "Beschreibung endet mit..", - "rule_trigger_description_contains_choice": "Beschreibung enth\u00e4lt..", - "rule_trigger_description_is_choice": "Beschreibung ist..", - "rule_trigger_date_on_choice": "Buchungsdatum lautet..", - "rule_trigger_date_before_choice": "Buchungsdatum ist vor..", - "rule_trigger_date_after_choice": "Buchungsdatum ist nach..", - "rule_trigger_created_at_on_choice": "Transaktion wurde gemacht am..", - "rule_trigger_updated_at_on_choice": "Transaktion wurde zuletzt bearbeitet am..", - "rule_trigger_budget_is_choice": "Budget ist..", - "rule_trigger_tag_is_choice": "Irgendein Schlagwort lautet..", - "rule_trigger_currency_is_choice": "Buchungsw\u00e4hrung ist..", - "rule_trigger_foreign_currency_is_choice": "Fremdw\u00e4hrung der Buchung ist..", - "rule_trigger_has_attachments_choice": "Hat mindestens so viele Anh\u00e4nge", - "rule_trigger_has_no_category_choice": "Ohne Kategorie", - "rule_trigger_has_any_category_choice": "Hat eine (beliebige) Kategorie", - "rule_trigger_has_no_budget_choice": "Enth\u00e4lt kein Budget", - "rule_trigger_has_any_budget_choice": "Enth\u00e4lt ein (beliebiges) Budget", - "rule_trigger_has_no_bill_choice": "Keine Rechnung zugeordnet", - "rule_trigger_has_any_bill_choice": "Hat eine (beliebige) Rechnung", - "rule_trigger_has_no_tag_choice": "Enth\u00e4lt keine Schlagw\u00f6rter", - "rule_trigger_has_any_tag_choice": "Enth\u00e4lt einen oder mehrere (beliebige) Schlagw\u00f6rter", - "rule_trigger_any_notes_choice": "Hat (beliebige) Notizen", - "rule_trigger_no_notes_choice": "Hat keine Notizen", - "rule_trigger_notes_is_choice": "Notizen lauten..", - "rule_trigger_notes_contains_choice": "Notizen beinhalten..", - "rule_trigger_notes_starts_choice": "Notizen beginnen mit..", - "rule_trigger_notes_ends_choice": "Notizen enden mit..", - "rule_trigger_bill_is_choice": "Rechnung ist..", - "rule_trigger_external_id_is_choice": "Externe ID ist..", - "rule_trigger_internal_reference_is_choice": "Interne Referenz ist..", - "rule_trigger_journal_id_choice": "Transaktions-Journal-ID ist..", - "rule_trigger_any_external_url_choice": "Buchung enth\u00e4lt eine (beliebige) externe URL", - "rule_trigger_no_external_url_choice": "Buchung hat keine externe URL", - "rule_trigger_id_choice": "Buchungskennung lautet..", - "rule_action_delete_transaction_choice": "Buchung L\u00d6SCHEN(!)", - "rule_action_set_category_choice": "Kategorie zuweisen\u00a0...", - "rule_action_clear_category_choice": "Bereinige jede Kategorie", - "rule_action_set_budget_choice": "Setze Budget auf ..", - "rule_action_clear_budget_choice": "Alle Budgets leeren", - "rule_action_add_tag_choice": "Schlagwort hinzuf\u00fcgen ..", - "rule_action_remove_tag_choice": "Schlagwort entfernen ..", - "rule_action_remove_all_tags_choice": "Alle Schlagw\u00f6rter entfernen", - "rule_action_set_description_choice": "Beschreibung festlegen auf ..", - "rule_action_update_piggy_choice": "Hinzuf\u00fcgen \/ Entfernen des Transaktionsbetrags zu \/ aus Sparschwein ..", - "rule_action_append_description_choice": "Beschreibung anh\u00e4ngen mit ..", - "rule_action_prepend_description_choice": "Beschreibung voranstellen mit ..", - "rule_action_set_source_account_choice": "Quellkonto festlegen auf ..", - "rule_action_set_destination_account_choice": "Zielkonto festlegen auf ..", - "rule_action_append_notes_choice": "Notizen anh\u00e4ngen mit ..", - "rule_action_prepend_notes_choice": "Notizen voranstellen mit ..", - "rule_action_clear_notes_choice": "Alle Notizen entfernen", - "rule_action_set_notes_choice": "Setze Notizen auf ..", - "rule_action_link_to_bill_choice": "Mit einer Rechnung verkn\u00fcpfen..", - "rule_action_convert_deposit_choice": "Buchung in eine Einnahme umwandeln", - "rule_action_convert_withdrawal_choice": "Buchung in eine Ausgabe umwandeln", - "rule_action_convert_transfer_choice": "Buchung in eine Umbuchung umwandeln", - "placeholder": "[Placeholder]", - "recurrences": "Dauerauftr\u00e4ge", - "title_expenses": "Ausgaben", - "title_withdrawal": "Ausgaben", - "title_revenue": "Einnahmen \/ Einkommen", - "pref_1D": "Ein Tag", - "pref_1W": "Eine Woche", - "pref_1M": "Ein Monat", - "pref_3M": "Drei Monate (Quartal)", - "pref_6M": "Sechs Monate", - "pref_1Y": "Ein Jahr", - "repeat_freq_yearly": "J\u00e4hrlich", - "repeat_freq_half-year": "halbj\u00e4hrlich", - "repeat_freq_quarterly": "viertelj\u00e4hrlich", - "repeat_freq_monthly": "monatlich", - "repeat_freq_weekly": "w\u00f6chentlich", - "single_split": "Teilen", - "asset_accounts": "Bestandskonten", - "expense_accounts": "Ausgabekonten", - "liabilities_accounts": "Verbindlichkeiten", - "undefined_accounts": "Konten", - "name": "Name", - "revenue_accounts": "Einnahmekonten", - "description": "Beschreibung", - "category": "Kategorie", - "title_deposit": "Einnahmen \/ Einkommen", - "title_transfer": "Umbuchungen", - "title_transfers": "Umbuchungen", - "piggyBanks": "Sparschweine", - "rules": "Regeln", - "accounts": "Konten", - "categories": "Kategorien", - "tags": "Schlagw\u00f6rter", - "object_groups_page_title": "Gruppen", - "reports": "Berichte", - "webhooks": "Webhooks", - "currencies": "W\u00e4hrungen", - "administration": "Verwaltung", - "profile": "Profil", - "source_account": "Quellkonto", - "destination_account": "Zielkonto", - "amount": "Betrag", - "date": "Datum", - "time": "Uhrzeit", - "preferences": "Einstellungen", - "transactions": "Buchungen", - "balance": "Kontostand", - "budgets": "Budgets", - "subscriptions": "Abonnements", - "welcome_back": "\u00dcberblick", - "bills_to_pay": "Unbezahlte Rechnungen", - "net_worth": "Eigenkapital", - "pref_last365": "Letztes Jahr", - "pref_last90": "Letzte 90 Tage", - "pref_last30": "Letzte 30\u00a0Tage", - "pref_last7": "Letzte 7 Tage", - "pref_YTD": "Jahr bis heute", - "pref_QTD": "Quartal bis heute", - "pref_MTD": "Monat bis heute" - } -} diff --git a/frontend/src/i18n/el_GR/index.js b/frontend/src/i18n/el_GR/index.js deleted file mode 100644 index 3e01706667..0000000000 --- a/frontend/src/i18n/el_GR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "el", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "\u038c\u03bd\u03bf\u03bc\u03b1", - "amount_min": "\u0395\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf \u03c0\u03bf\u03c3\u03cc", - "amount_max": "\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf \u03c0\u03bf\u03c3\u03cc", - "url": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL", - "title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2", - "first_date": "\u03a0\u03c1\u03ce\u03c4\u03b7 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1", - "repetitions": "\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2", - "description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", - "iban": "IBAN", - "skip": "\u03a0\u03b1\u03c1\u03ac\u03bb\u03b5\u03b9\u03c8\u03b7", - "date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1" - }, - "list": { - "name": "\u038c\u03bd\u03bf\u03bc\u03b1", - "account_number": "\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd", - "currentBalance": "\u03a4\u03c1\u03ad\u03c7\u03bf\u03bd \u03c5\u03c0\u03cc\u03bb\u03bf\u03b9\u03c0\u03bf", - "lastActivity": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03b4\u03c1\u03b1\u03c3\u03c4\u03b7\u03c1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1", - "active": "\u0395\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03cc;" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af", - "subscriptions": "\u03a3\u03c5\u03bd\u03b4\u03c1\u03bf\u03bc\u03ad\u03c2", - "transactions": "\u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", - "title_expenses": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_withdrawal": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_revenue": "\u0388\u03c3\u03bf\u03b4\u03b1", - "title_deposit": "\u0388\u03c3\u03bf\u03b4\u03b1", - "title_transfer": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "title_transfers": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "asset_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03bf\u03c5", - "expense_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af \u03b4\u03b1\u03c0\u03b1\u03bd\u03ce\u03bd", - "revenue_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af \u03b5\u03c3\u03cc\u03b4\u03c9\u03bd", - "liabilities_accounts": "\u03a5\u03c0\u03bf\u03c7\u03c1\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2" - }, - "firefly": { - "administration_index": "\u039f\u03b9\u03ba\u03bf\u03bd\u03bf\u03bc\u03b9\u03ba\u03ae \u03b4\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7", - "actions": "\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2", - "edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1", - "delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", - "reconcile": "\u03a4\u03b1\u03ba\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", - "create_new_asset": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03bd\u03ad\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03bf\u03c5", - "confirm_action": "\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2", - "new_budget": "\u039d\u03ad\u03bf\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc\u03c2", - "new_asset_account": "\u039d\u03ad\u03bf\u03c2 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03bf\u03c5", - "newTransfer": "\u039d\u03ad\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03c9\u03bd webhook", - "newDeposit": "\u039d\u03ad\u03b1 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7", - "newWithdrawal": "\u039d\u03ad\u03b1 \u03b4\u03b1\u03c0\u03ac\u03bd\u03b7", - "bills_paid": "\u03a0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03b1 \u03c0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1", - "left_to_spend": "\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ce\u03bd", - "no_budget": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc)", - "budgeted": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf", - "spent": "\u0394\u03b1\u03c0\u03b1\u03bd\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd", - "no_bill": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf)", - "rule_trigger_source_account_starts_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_ends_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_is_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_source_account_contains_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "\u03a4\u03bf ID \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03ba\u03c1\u03b9\u03b2\u03ce\u03c2..", - "rule_trigger_destination_account_id_choice": "\u03a4\u03bf ID \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03ba\u03c1\u03b9\u03b2\u03ce\u03c2..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "\u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 (\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ce\u03bd)", - "rule_trigger_destination_is_cash_choice": "\u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 (\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ce\u03bd)", - "rule_trigger_source_account_nr_starts_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_nr_ends_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_nr_is_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_source_account_nr_contains_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_destination_account_starts_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_ends_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_is_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_destination_account_contains_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_destination_account_nr_starts_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \/ IBAN \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_nr_ends_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \/ IBAN \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_nr_is_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \/ IBAN \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_destination_account_nr_contains_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \/ IBAN \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_transaction_type_choice": "\u0397 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03cd\u03c0\u03bf\u03c5..", - "rule_trigger_category_is_choice": "\u0397 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_description_ends_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_description_contains_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_description_is_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "\u0397 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03b9\u03bd \u03b1\u03c0\u03cc \u03c4\u03b9\u03c2..", - "rule_trigger_date_after_choice": "\u0397 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b5\u03c4\u03ac \u03b1\u03c0\u03cc \u03c4\u03b9\u03c2..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u039f \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_tag_is_choice": "\u039f\u03c0\u03bf\u03b9\u03b1\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_currency_is_choice": "\u03a4\u03bf \u03bd\u03cc\u03bc\u03b9\u03c3\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_foreign_currency_is_choice": "\u03a4\u03bf \u03be\u03ad\u03bd\u03bf \u03bd\u03cc\u03bc\u03b9\u03c3\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_has_attachments_choice": "\u0388\u03c7\u03b5\u03b9 \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd \u03c4\u03cc\u03c3\u03b1 \u03c3\u03c5\u03bd\u03b7\u03bc\u03bc\u03ad\u03bd\u03b1", - "rule_trigger_has_no_category_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", - "rule_trigger_has_any_category_choice": "\u0388\u03c7\u03b5\u03b9 \u03bc\u03af\u03b1(\u03bf\u03c0\u03bf\u03b9\u03b1\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", - "rule_trigger_has_no_budget_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc", - "rule_trigger_has_any_budget_choice": "\u0388\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1\u03bd (\u03bf\u03c0\u03bf\u03b9\u03bf\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc", - "rule_trigger_has_no_bill_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf", - "rule_trigger_has_any_bill_choice": "\u0388\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1 (\u03bf\u03c0\u03bf\u03b9\u03bf\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf", - "rule_trigger_has_no_tag_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1(\u03b5\u03c2)", - "rule_trigger_has_any_tag_choice": "\u0388\u03c7\u03b5\u03b9 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03b1\u03c0\u03cc \u03bc\u03af\u03b1 (\u03bf\u03c0\u03bf\u03b9\u03b5\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2", - "rule_trigger_any_notes_choice": "\u0388\u03c7\u03b5\u03b9 (\u03bf\u03c0\u03bf\u03b9\u03b5\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2", - "rule_trigger_no_notes_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2", - "rule_trigger_notes_is_choice": "\u039f\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_notes_contains_choice": "\u039f\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03bf\u03c5\u03bd..", - "rule_trigger_notes_starts_choice": "\u039f\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b1\u03c1\u03c7\u03af\u03b6\u03bf\u03c5\u03bd \u03bc\u03b5..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "\u03a4\u03bf \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "\u03a4\u03bf \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03bf\u03b3\u03b9\u03b1\u03ba\u03cc ID \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bf\u03c0\u03bf\u03b9\u03b1\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1\u03c2", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bf\u03c0\u03bf\u03b9\u03bf\u03c5\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03cd", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03b5\u03c4\u03b9\u03ba\u03b5\u03c4\u03ce\u03bd", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03bf\u03c0\u03bf\u03b9\u03bf\u03bd\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7", - "rule_action_convert_withdrawal_choice": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7", - "rule_action_convert_transfer_choice": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac", - "placeholder": "[Placeholder]", - "recurrences": "\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03b1\u03bc\u03b2\u03b1\u03bd\u03cc\u03bc\u03b5\u03bd\u03b5\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", - "title_expenses": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_withdrawal": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_revenue": "\u0388\u03c3\u03bf\u03b4\u03b1", - "pref_1D": "\u039c\u03af\u03b1 \u03b7\u03bc\u03ad\u03c1\u03b1", - "pref_1W": "\u039c\u03af\u03b1 \u03b5\u03b2\u03b4\u03bf\u03bc\u03ac\u03b4\u03b1", - "pref_1M": "\u0388\u03bd\u03b1 \u03bc\u03ae\u03bd\u03b1", - "pref_3M": "\u03a4\u03c1\u03b5\u03b9\u03c2 \u03bc\u03ae\u03bd\u03b5\u03c2 (\u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf)", - "pref_6M": "\u0388\u03be\u03b9 \u03bc\u03ae\u03bd\u03b5\u03c2 (\u03b5\u03be\u03ac\u03bc\u03b7\u03bd\u03bf)", - "pref_1Y": "\u0388\u03bd\u03b1 \u03ad\u03c4\u03bf\u03c2", - "repeat_freq_yearly": "\u03b5\u03c4\u03b7\u03c3\u03af\u03c9\u03c2", - "repeat_freq_half-year": "\u03b5\u03be\u03b1\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03c9\u03c2", - "repeat_freq_quarterly": "\u03c4\u03c1\u03b9\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03c9\u03c2", - "repeat_freq_monthly": "\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03c9\u03c2", - "repeat_freq_weekly": "\u03b5\u03b2\u03b4\u03bf\u03bc\u03b1\u03b4\u03b9\u03b1\u03af\u03c9\u03c2", - "single_split": "\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", - "asset_accounts": "\u039a\u03b5\u03c6\u03ac\u03bb\u03b1\u03b9\u03b1", - "expense_accounts": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "liabilities_accounts": "\u03a5\u03c0\u03bf\u03c7\u03c1\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2", - "undefined_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af", - "name": "\u038c\u03bd\u03bf\u03bc\u03b1", - "revenue_accounts": "\u0388\u03c3\u03bf\u03b4\u03b1", - "description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", - "category": "\u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", - "title_deposit": "\u0388\u03c3\u03bf\u03b4\u03b1", - "title_transfer": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "title_transfers": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "piggyBanks": "\u039a\u03bf\u03c5\u03bc\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03c2", - "rules": "\u039a\u03b1\u03bd\u03cc\u03bd\u03b5\u03c2", - "accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af", - "categories": "\u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b5\u03c2", - "tags": "\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2", - "object_groups_page_title": "\u039f\u03bc\u03ac\u03b4\u03b5\u03c2", - "reports": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "webhooks": "Webhooks", - "currencies": "\u039d\u03bf\u03bc\u03af\u03c3\u03bc\u03b1\u03c4\u03b1", - "administration": "\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7", - "profile": "\u03a0\u03c1\u03bf\u03c6\u03af\u03bb", - "source_account": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2", - "destination_account": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd", - "amount": "\u03a0\u03bf\u03c3\u03cc", - "date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1", - "time": "\u038f\u03c1\u03b1", - "preferences": "\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2", - "transactions": "\u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", - "balance": "\u0399\u03c3\u03bf\u03b6\u03cd\u03b3\u03b9\u03bf", - "budgets": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af", - "subscriptions": "\u03a3\u03c5\u03bd\u03b4\u03c1\u03bf\u03bc\u03ad\u03c2", - "welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;", - "bills_to_pay": "\u03a0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1 \u03c0\u03c1\u03bf\u03c2 \u03c0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ae", - "net_worth": "\u039a\u03b1\u03b8\u03b1\u03c1\u03ae \u03b1\u03be\u03af\u03b1", - "pref_last365": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ad\u03c4\u03bf\u03c2", - "pref_last90": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 90 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", - "pref_last30": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 30 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", - "pref_last7": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 7 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", - "pref_YTD": "\u0388\u03c4\u03bf\u03c2 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1", - "pref_QTD": "\u03a4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1", - "pref_MTD": "\u039c\u03ae\u03bd\u03b1\u03c2 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1" - } -} diff --git a/frontend/src/i18n/en_GB/index.js b/frontend/src/i18n/en_GB/index.js deleted file mode 100644 index 7792118ce5..0000000000 --- a/frontend/src/i18n/en_GB/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "en-gb", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Name", - "amount_min": "Minimum amount", - "amount_max": "Maximum amount", - "url": "URL", - "title": "Title", - "first_date": "First date", - "repetitions": "Repetitions", - "description": "Description", - "iban": "IBAN", - "skip": "Skip", - "date": "Date" - }, - "list": { - "name": "Name", - "account_number": "Account number", - "currentBalance": "Current balance", - "lastActivity": "Last activity", - "active": "Is active?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Actions", - "edit": "Edit", - "delete": "Delete", - "reconcile": "Reconcile", - "create_new_asset": "Create new asset account", - "confirm_action": "Confirm action", - "new_budget": "New budget", - "new_asset_account": "New asset account", - "newTransfer": "New transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "New deposit", - "newWithdrawal": "New expense", - "bills_paid": "Bills paid", - "left_to_spend": "Left to spend", - "no_budget": "(no budget)", - "budgeted": "Budgeted", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transaction is of type..", - "rule_trigger_category_is_choice": "Category is..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Description starts with..", - "rule_trigger_description_ends_choice": "Description ends with..", - "rule_trigger_description_contains_choice": "Description contains..", - "rule_trigger_description_is_choice": "Description is..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budget is..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaction currency is..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Has at least this many attachments", - "rule_trigger_has_no_category_choice": "Has no category", - "rule_trigger_has_any_category_choice": "Has a (any) category", - "rule_trigger_has_no_budget_choice": "Has no budget", - "rule_trigger_has_any_budget_choice": "Has a (any) budget", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Has no tag(s)", - "rule_trigger_has_any_tag_choice": "Has one or more (any) tags", - "rule_trigger_any_notes_choice": "Has (any) notes", - "rule_trigger_no_notes_choice": "Has no notes", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Clear any category", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Clear any budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Remove all tags", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Remove any notes", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Convert the transaction to a deposit", - "rule_action_convert_withdrawal_choice": "Convert the transaction to a withdrawal", - "rule_action_convert_transfer_choice": "Convert the transaction to a transfer", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "pref_1D": "One day", - "pref_1W": "One week", - "pref_1M": "One month", - "pref_3M": "Three months (quarter)", - "pref_6M": "Six months", - "pref_1Y": "One year", - "repeat_freq_yearly": "yearly", - "repeat_freq_half-year": "every half-year", - "repeat_freq_quarterly": "quarterly", - "repeat_freq_monthly": "monthly", - "repeat_freq_weekly": "weekly", - "single_split": "Split", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "Revenue accounts", - "description": "Description", - "category": "Category", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "piggyBanks": "Piggy banks", - "rules": "Rules", - "accounts": "Accounts", - "categories": "Categories", - "tags": "Tags", - "object_groups_page_title": "Groups", - "reports": "Reports", - "webhooks": "Webhooks", - "currencies": "Currencies", - "administration": "Administration", - "profile": "Profile", - "source_account": "Source account", - "destination_account": "Destination account", - "amount": "Amount", - "date": "Date", - "time": "Time", - "preferences": "Preferences", - "transactions": "Transactions", - "balance": "Balance", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "welcome_back": "What's playing?", - "bills_to_pay": "Bills to pay", - "net_worth": "Net worth", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/en_US/index.js b/frontend/src/i18n/en_US/index.js deleted file mode 100644 index cd7b5886d6..0000000000 --- a/frontend/src/i18n/en_US/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "en", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Name", - "amount_min": "Minimum amount", - "amount_max": "Maximum amount", - "url": "URL", - "title": "Title", - "first_date": "First date", - "repetitions": "Repetitions", - "description": "Description", - "iban": "IBAN", - "skip": "Skip", - "date": "Date" - }, - "list": { - "name": "Name", - "account_number": "Account number", - "currentBalance": "Current balance", - "lastActivity": "Last activity", - "active": "Is active?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Actions", - "edit": "Edit", - "delete": "Delete", - "reconcile": "Reconcile", - "create_new_asset": "Create new asset account", - "confirm_action": "Confirm action", - "new_budget": "New budget", - "new_asset_account": "New asset account", - "newTransfer": "New transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "New deposit", - "newWithdrawal": "New expense", - "bills_paid": "Bills paid", - "left_to_spend": "Left to spend", - "no_budget": "(no budget)", - "budgeted": "Budgeted", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transaction is of type..", - "rule_trigger_category_is_choice": "Category is..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Description starts with..", - "rule_trigger_description_ends_choice": "Description ends with..", - "rule_trigger_description_contains_choice": "Description contains..", - "rule_trigger_description_is_choice": "Description is..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budget is..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaction currency is..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Has at least this many attachments", - "rule_trigger_has_no_category_choice": "Has no category", - "rule_trigger_has_any_category_choice": "Has a (any) category", - "rule_trigger_has_no_budget_choice": "Has no budget", - "rule_trigger_has_any_budget_choice": "Has a (any) budget", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Has no tag(s)", - "rule_trigger_has_any_tag_choice": "Has one or more (any) tags", - "rule_trigger_any_notes_choice": "Has (any) notes", - "rule_trigger_no_notes_choice": "Has no notes", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Clear any category", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Clear any budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Remove all tags", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Remove any notes", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Convert the transaction to a deposit", - "rule_action_convert_withdrawal_choice": "Convert the transaction to a withdrawal", - "rule_action_convert_transfer_choice": "Convert the transaction to a transfer", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "pref_1D": "One day", - "pref_1W": "One week", - "pref_1M": "One month", - "pref_3M": "Three months (quarter)", - "pref_6M": "Six months", - "pref_1Y": "One year", - "repeat_freq_yearly": "yearly", - "repeat_freq_half-year": "every half-year", - "repeat_freq_quarterly": "quarterly", - "repeat_freq_monthly": "monthly", - "repeat_freq_weekly": "weekly", - "single_split": "Split", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "Revenue accounts", - "description": "Description", - "category": "Category", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "piggyBanks": "Piggy banks", - "rules": "Rules", - "accounts": "Accounts", - "categories": "Categories", - "tags": "Tags", - "object_groups_page_title": "Groups", - "reports": "Reports", - "webhooks": "Webhooks", - "currencies": "Currencies", - "administration": "Administration", - "profile": "Profile", - "source_account": "Source account", - "destination_account": "Destination account", - "amount": "Amount", - "date": "Date", - "time": "Time", - "preferences": "Preferences", - "transactions": "Transactions", - "balance": "Balance", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "welcome_back": "What's playing?", - "bills_to_pay": "Bills to pay", - "net_worth": "Net worth", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/es_ES/index.js b/frontend/src/i18n/es_ES/index.js deleted file mode 100644 index 94e06832a1..0000000000 --- a/frontend/src/i18n/es_ES/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "es", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nombre", - "amount_min": "Importe m\u00ednimo", - "amount_max": "Importe m\u00e1ximo", - "url": "URL", - "title": "T\u00edtulo", - "first_date": "Primera fecha", - "repetitions": "Repeticiones", - "description": "Descripci\u00f3n", - "iban": "IBAN", - "skip": "Saltar", - "date": "Fecha" - }, - "list": { - "name": "Nombre", - "account_number": "N\u00famero de cuenta", - "currentBalance": "Balance actual", - "lastActivity": "Actividad m\u00e1s reciente", - "active": "\u00bfEst\u00e1 Activo?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Presupuestos", - "subscriptions": "Suscripciones", - "transactions": "Transacciones", - "title_expenses": "Gastos", - "title_withdrawal": "Gastos", - "title_revenue": "Ingresos \/ salario", - "title_deposit": "Ingresos \/ salario", - "title_transfer": "Transferencias", - "title_transfers": "Transferencias", - "asset_accounts": "Cuentas de activos", - "expense_accounts": "Cuentas de gastos", - "revenue_accounts": "Cuentas de ingresos", - "liabilities_accounts": "Pasivos" - }, - "firefly": { - "administration_index": "Administraci\u00f3n financiera", - "actions": "Acciones", - "edit": "Editar", - "delete": "Eliminar", - "reconcile": "Reconciliar", - "create_new_asset": "Crear nueva cuenta de activos", - "confirm_action": "Confirmar acci\u00f3n", - "new_budget": "Nuevo presupuesto", - "new_asset_account": "Nueva cuenta de activo", - "newTransfer": "Nueva transferencia", - "submission_options": "Opciones de env\u00edo", - "apply_rules_checkbox": "Aplicar reglas", - "fire_webhooks_checkbox": "Disparar webhooks", - "newDeposit": "Nuevo ingreso", - "newWithdrawal": "Nuevo gasto", - "bills_paid": "Facturas pagadas", - "left_to_spend": "Disponible para gastar", - "no_budget": "(sin presupuesto)", - "budgeted": "Presupuestado", - "spent": "Gastado", - "no_bill": "(sin factura)", - "rule_trigger_source_account_starts_choice": "El nombre de la cuenta de origen comienza con..", - "rule_trigger_source_account_ends_choice": "El nombre de la cuenta de origen termina con..", - "rule_trigger_source_account_is_choice": "El nombre de la cuenta origen es..", - "rule_trigger_source_account_contains_choice": "El nombre de cuenta de origen contiene..", - "rule_trigger_account_id_choice": "El ID de cualquiera de las cuentas es exactamente..", - "rule_trigger_source_account_id_choice": "El ID de la cuenta de origen es exactamente..", - "rule_trigger_destination_account_id_choice": "El ID de la cuenta de destino es exactamente..", - "rule_trigger_account_is_cash_choice": "Cualquiera de las cuentas es efectivo", - "rule_trigger_source_is_cash_choice": "La cuenta de origen es de efectivo", - "rule_trigger_destination_is_cash_choice": "La cuenta de destino es de efectivo", - "rule_trigger_source_account_nr_starts_choice": "N\u00famero de la cuenta de origen \/ IBAN comienza con..", - "rule_trigger_source_account_nr_ends_choice": "N\u00famero \/ IBAN de la cuenta de origen termina con..", - "rule_trigger_source_account_nr_is_choice": "N\u00famero de la cuenta de origen \/ IBAN es..", - "rule_trigger_source_account_nr_contains_choice": "N\u00famero de cuenta de origen \/ IBAN contiene..", - "rule_trigger_destination_account_starts_choice": "El nombre de cuenta de destino comienza con..", - "rule_trigger_destination_account_ends_choice": "El nombre de cuenta de destino termina con...", - "rule_trigger_destination_account_is_choice": "El nombre de cuenta de destino es...", - "rule_trigger_destination_account_contains_choice": "El nombre de cuenta de destino contiene..", - "rule_trigger_destination_account_nr_starts_choice": "N\u00famero \/ IBAN de la cuenta de destino empieza con..", - "rule_trigger_destination_account_nr_ends_choice": "N\u00famero de la cuenta de destino \/ IBAN termina con..", - "rule_trigger_destination_account_nr_is_choice": "N\u00famero de la cuenta de destino \/ IBAN es..", - "rule_trigger_destination_account_nr_contains_choice": "El n\u00famero de la cuenta de destino \/ IBAN contiene..", - "rule_trigger_transaction_type_choice": "Transacci\u00f3n es del tipo..", - "rule_trigger_category_is_choice": "Categor\u00eda es..", - "rule_trigger_amount_less_choice": "La cantidad es menor o igual a ..", - "rule_trigger_amount_is_choice": "Cantidad es..", - "rule_trigger_amount_more_choice": "Cantidad es mayor o igual a..", - "rule_trigger_description_starts_choice": "Descripci\u00f3n comienza con..", - "rule_trigger_description_ends_choice": "Descripci\u00f3n termina con..", - "rule_trigger_description_contains_choice": "Descripci\u00f3n contiene..", - "rule_trigger_description_is_choice": "Descripci\u00f3n es..", - "rule_trigger_date_on_choice": "La fecha de la transacci\u00f3n es..", - "rule_trigger_date_before_choice": "La fecha de la transacci\u00f3n es anterior a..", - "rule_trigger_date_after_choice": "La fecha de la transacci\u00f3n es despu\u00e9s de..", - "rule_trigger_created_at_on_choice": "La transacci\u00f3n se realiz\u00f3 el..", - "rule_trigger_updated_at_on_choice": "La transacci\u00f3n fue editada por \u00faltima vez el..", - "rule_trigger_budget_is_choice": "Presupuesto es..", - "rule_trigger_tag_is_choice": "Cualquier etiqueta es..", - "rule_trigger_currency_is_choice": "La moneda de la transacci\u00f3n es..", - "rule_trigger_foreign_currency_is_choice": "La transacci\u00f3n en moneda extranjera es..", - "rule_trigger_has_attachments_choice": "Tiene al menos tantos archivos adjuntos", - "rule_trigger_has_no_category_choice": "No tiene categor\u00eda", - "rule_trigger_has_any_category_choice": "Tiene (cualquier) categor\u00eda", - "rule_trigger_has_no_budget_choice": "No tiene presupuesto", - "rule_trigger_has_any_budget_choice": "Tiene un (cualquier) presupuesto", - "rule_trigger_has_no_bill_choice": "No tiene factura", - "rule_trigger_has_any_bill_choice": "Tiene una (cualquier) factura", - "rule_trigger_has_no_tag_choice": "No tiene etiqueta(s)", - "rule_trigger_has_any_tag_choice": "Tiene una o mas (cualquier) etiquetas", - "rule_trigger_any_notes_choice": "Tiene (cualquier) notas", - "rule_trigger_no_notes_choice": "No tiene notas", - "rule_trigger_notes_is_choice": "Las notas son..", - "rule_trigger_notes_contains_choice": "Las notas contienen..", - "rule_trigger_notes_starts_choice": "Las notas comienzan con..", - "rule_trigger_notes_ends_choice": "Las notas terminan con..", - "rule_trigger_bill_is_choice": "La factura es..", - "rule_trigger_external_id_is_choice": "El ID externo es..", - "rule_trigger_internal_reference_is_choice": "La referencia interna es..", - "rule_trigger_journal_id_choice": "El ID del diario de transacciones es..", - "rule_trigger_any_external_url_choice": "La transacci\u00f3n tiene una (cualquiera) URL externa", - "rule_trigger_no_external_url_choice": "La transacci\u00f3n no tiene URL externa", - "rule_trigger_id_choice": "La ID de la transacci\u00f3n es..", - "rule_action_delete_transaction_choice": "ELIMINAR transacci\u00f3n(!)", - "rule_action_set_category_choice": "Establecer categor\u00eda ..", - "rule_action_clear_category_choice": "Eliminar cualquier categor\u00eda", - "rule_action_set_budget_choice": "Establecer presupuesto ..", - "rule_action_clear_budget_choice": "Eliminar cualquier presupuesto", - "rule_action_add_tag_choice": "A\u00f1adir etiqueta ..", - "rule_action_remove_tag_choice": "Quitar etiqueta ..", - "rule_action_remove_all_tags_choice": "Eliminar todas las etiquetas", - "rule_action_set_description_choice": "A\u00f1adir descripci\u00f3n ..", - "rule_action_update_piggy_choice": "A\u00f1adir \/ quitar el importe de la transacci\u00f3n de la hucha ..", - "rule_action_append_description_choice": "A\u00f1adir descripci\u00f3n con ..", - "rule_action_prepend_description_choice": "Anteponer descripci\u00f3n con ..", - "rule_action_set_source_account_choice": "Establecer cuenta de origen ..", - "rule_action_set_destination_account_choice": "Establecer cuenta de destino ..", - "rule_action_append_notes_choice": "A\u00f1adir notas con ..", - "rule_action_prepend_notes_choice": "Anteponer notas con ..", - "rule_action_clear_notes_choice": "Eliminar cualquier nota", - "rule_action_set_notes_choice": "Establecer nota ..", - "rule_action_link_to_bill_choice": "Enlazar a una factura ..", - "rule_action_convert_deposit_choice": "Convertir transacci\u00f3n en un ingreso", - "rule_action_convert_withdrawal_choice": "Convierta esta transacci\u00f3n en un gasto", - "rule_action_convert_transfer_choice": "Convierta la transacci\u00f3n a una transferencia", - "placeholder": "[Placeholder]", - "recurrences": "Transacciones Recurrentes", - "title_expenses": "Gastos", - "title_withdrawal": "Gastos", - "title_revenue": "Ingresos \/ salarios", - "pref_1D": "Un dia", - "pref_1W": "Una semana", - "pref_1M": "Un mes", - "pref_3M": "Tres meses (trimestre)", - "pref_6M": "Seis meses", - "pref_1Y": "Un a\u00f1o", - "repeat_freq_yearly": "anualmente", - "repeat_freq_half-year": "cada medio a\u00f1o", - "repeat_freq_quarterly": "trimestralmente", - "repeat_freq_monthly": "mensualmente", - "repeat_freq_weekly": "semanalmente", - "single_split": "Divisi\u00f3n", - "asset_accounts": "Cuenta de activos", - "expense_accounts": "Cuentas de gastos", - "liabilities_accounts": "Pasivos", - "undefined_accounts": "Cuentas", - "name": "Nombre", - "revenue_accounts": "Cuentas de ingresos", - "description": "Descripci\u00f3n", - "category": "Categoria", - "title_deposit": "Ingresos \/ salarios", - "title_transfer": "Transferencias", - "title_transfers": "Transferencias", - "piggyBanks": "Huchas", - "rules": "Reglas", - "accounts": "Cuentas", - "categories": "Categor\u00edas", - "tags": "Etiquetas", - "object_groups_page_title": "Grupos", - "reports": "Informes", - "webhooks": "Webhooks", - "currencies": "Divisas", - "administration": "Administraci\u00f3n", - "profile": "Perfil", - "source_account": "Cuenta origen", - "destination_account": "Cuenta destino", - "amount": "Cantidad", - "date": "Fecha", - "time": "Hora", - "preferences": "Preferencias", - "transactions": "Transacciones", - "balance": "Balance", - "budgets": "Presupuestos", - "subscriptions": "Suscripciones", - "welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?", - "bills_to_pay": "Facturas por pagar", - "net_worth": "Valor Neto", - "pref_last365": "A\u00f1o pasado", - "pref_last90": "\u00daltimos 90 d\u00edas", - "pref_last30": "\u00daltimos 30 d\u00edas", - "pref_last7": "\u00daltimos 7 d\u00edas", - "pref_YTD": "A\u00f1o hasta hoy", - "pref_QTD": "Trimestre hasta hoy", - "pref_MTD": "Mes hasta hoy" - } -} diff --git a/frontend/src/i18n/fi_FI/index.js b/frontend/src/i18n/fi_FI/index.js deleted file mode 100644 index e20ce8377e..0000000000 --- a/frontend/src/i18n/fi_FI/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "fi", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Nimi", - "amount_min": "V\u00e4himm\u00e4issumma", - "amount_max": "Enimm\u00e4issumma", - "url": "URL-osoite", - "title": "Otsikko", - "first_date": "Aloitusp\u00e4iv\u00e4", - "repetitions": "Toistot", - "description": "Kuvaus", - "iban": "IBAN", - "skip": "Ohita", - "date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4" - }, - "list": { - "name": "Nimi", - "account_number": "Tilinumero", - "currentBalance": "T\u00e4m\u00e4nhetkinen saldo", - "lastActivity": "Viimeisin tapahtuma", - "active": "Aktiivinen?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budjetit", - "subscriptions": "Tilaukset", - "transactions": "Tapahtumat", - "title_expenses": "Kustannukset", - "title_withdrawal": "Kustannukset", - "title_revenue": "Tuotto \/ ansio", - "title_deposit": "Tuotto \/ ansio", - "title_transfer": "Tilisiirrot", - "title_transfers": "Tilisiirrot", - "asset_accounts": "K\u00e4ytt\u00f6tilit", - "expense_accounts": "Kulutustilit", - "revenue_accounts": "Tuottotilit", - "liabilities_accounts": "Lainat" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Toiminnot", - "edit": "Muokkaa", - "delete": "Poista", - "reconcile": "T\u00e4sm\u00e4yt\u00e4", - "create_new_asset": "Luo uusi omaisuustili", - "confirm_action": "Vahvista toiminto", - "new_budget": "Uusi budjetti", - "new_asset_account": "Uusi omaisuustili", - "newTransfer": "Uusi siirto", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Uusi talletus", - "newWithdrawal": "Uusi kustannus", - "bills_paid": "Maksetut laskut", - "left_to_spend": "K\u00e4ytett\u00e4viss\u00e4", - "no_budget": "(ei budjettia)", - "budgeted": "Budjetoitu", - "spent": "K\u00e4ytetty", - "no_bill": "(ei laskua)", - "rule_trigger_source_account_starts_choice": "L\u00e4hdetilin nimi alkaa ...", - "rule_trigger_source_account_ends_choice": "L\u00e4hdetilin nimi p\u00e4\u00e4ttyy..", - "rule_trigger_source_account_is_choice": "L\u00e4hdetilin nimi on..", - "rule_trigger_source_account_contains_choice": "L\u00e4hdetilin nimi sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "L\u00e4hdetili ID on tarkalleen..", - "rule_trigger_destination_account_id_choice": "Kohdetilin ID on tarkalleen..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "L\u00e4hdetili on (k\u00e4teis) tili", - "rule_trigger_destination_is_cash_choice": "Kohdetili on (k\u00e4teis) tili", - "rule_trigger_source_account_nr_starts_choice": "L\u00e4hdetilin numero \/ IBAN alkaa..", - "rule_trigger_source_account_nr_ends_choice": "L\u00e4hdetilin numero \/ IBAN p\u00e4\u00e4ttyy..", - "rule_trigger_source_account_nr_is_choice": "L\u00e4hdetilin numero \/ IBAN on..", - "rule_trigger_source_account_nr_contains_choice": "L\u00e4hdetilin numero \/ IBAN sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_destination_account_starts_choice": "Kohdetilin nimi alkaa..", - "rule_trigger_destination_account_ends_choice": "Kohdetilin nimi p\u00e4\u00e4ttyy..", - "rule_trigger_destination_account_is_choice": "Kohdetilin nimi on..", - "rule_trigger_destination_account_contains_choice": "Kohdetilin nimi sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_destination_account_nr_starts_choice": "Kohdetilin numero \/ IBAN alkaa..", - "rule_trigger_destination_account_nr_ends_choice": "Kohdetilin numero \/ IBAN p\u00e4\u00e4ttyy..", - "rule_trigger_destination_account_nr_is_choice": "Kohdetilin numero \/ IBAN on..", - "rule_trigger_destination_account_nr_contains_choice": "Kohdetilin numero \/ IBAN sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_transaction_type_choice": "Tapahtuman tyyppi on ...", - "rule_trigger_category_is_choice": "Kategoria on ...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Summa on..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Kuvaus alkaa tekstill\u00e4 ...", - "rule_trigger_description_ends_choice": "Kuvaus p\u00e4\u00e4ttyy tekstiin ...", - "rule_trigger_description_contains_choice": "Kuvaus sis\u00e4lt\u00e4\u00e4 ...", - "rule_trigger_description_is_choice": "Kuvaus on ...", - "rule_trigger_date_on_choice": "Tapahtumap\u00e4iv\u00e4 on..", - "rule_trigger_date_before_choice": "Tapahtumap\u00e4iv\u00e4 on ennen..", - "rule_trigger_date_after_choice": "Tapahtumap\u00e4iv\u00e4 on j\u00e4lkeen..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budjetti on ...", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Tapahtuman valuutta on ...", - "rule_trigger_foreign_currency_is_choice": "Tapahtuman valuutta on..", - "rule_trigger_has_attachments_choice": "Tapahtumalla on v\u00e4hint\u00e4\u00e4n n\u00e4in monta liitett\u00e4", - "rule_trigger_has_no_category_choice": "Ei kategoriaa", - "rule_trigger_has_any_category_choice": "Mik\u00e4 tahansa kategoria", - "rule_trigger_has_no_budget_choice": "Ei budjettia", - "rule_trigger_has_any_budget_choice": "On budjetti (mik\u00e4 tahansa)", - "rule_trigger_has_no_bill_choice": "Ei laskua", - "rule_trigger_has_any_bill_choice": "On lasku (mik\u00e4 tahansa)", - "rule_trigger_has_no_tag_choice": "Ei t\u00e4gej\u00e4", - "rule_trigger_has_any_tag_choice": "On t\u00e4gi\/t\u00e4gej\u00e4 (mit\u00e4 tahansa)", - "rule_trigger_any_notes_choice": "On muistiinpano (mit\u00e4 tahansa)", - "rule_trigger_no_notes_choice": "Ei muistiinpanoja", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Lasku on..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Tapahtumatietueen tunnus on..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Tapahtumalla ei ole ulkoista URL-osoitetta", - "rule_trigger_id_choice": "Tapahtuman tunnus on..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Tyhjenn\u00e4 kategoria", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Tyhjenn\u00e4 budjetti", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Poista kaikki t\u00e4git", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Poista kaikki muistiinpanot", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Muuta tapahtuma talletukseksi", - "rule_action_convert_withdrawal_choice": "Muuta tapahtuma nostoksi", - "rule_action_convert_transfer_choice": "Muuta tapahtuma siirroksi", - "placeholder": "[Placeholder]", - "recurrences": "Toistuvat tapahtumat", - "title_expenses": "Kustannukset", - "title_withdrawal": "Kustannukset", - "title_revenue": "Tuotto \/ ansio", - "pref_1D": "Yksi p\u00e4iv\u00e4", - "pref_1W": "Yksi viikko", - "pref_1M": "Yksi kuukausi", - "pref_3M": "Kolme kuukautta (vuosinelj\u00e4nnes)", - "pref_6M": "Kuusi kuukautta", - "pref_1Y": "Yksi vuosi", - "repeat_freq_yearly": "vuosittain", - "repeat_freq_half-year": "puoli-vuosittain", - "repeat_freq_quarterly": "nelj\u00e4nnesvuosittain", - "repeat_freq_monthly": "kuukausittain", - "repeat_freq_weekly": "viikoittain", - "single_split": "Jako", - "asset_accounts": "K\u00e4ytt\u00f6tilit", - "expense_accounts": "Kulutustilit", - "liabilities_accounts": "Lainat", - "undefined_accounts": "Tilit", - "name": "Nimi", - "revenue_accounts": "Tuottotilit", - "description": "Kuvaus", - "category": "Kategoria", - "title_deposit": "Tuotto \/ ansio", - "title_transfer": "Tilisiirrot", - "title_transfers": "Tilisiirrot", - "piggyBanks": "S\u00e4\u00e4st\u00f6possut", - "rules": "S\u00e4\u00e4nn\u00f6t", - "accounts": "Tilit", - "categories": "Kategoriat", - "tags": "T\u00e4git", - "object_groups_page_title": "Ryhm\u00e4t", - "reports": "Raportit", - "webhooks": "Webhookit", - "currencies": "Valuutat", - "administration": "Yll\u00e4pito", - "profile": "Profiili", - "source_account": "L\u00e4hdetili", - "destination_account": "Kohdetili", - "amount": "Summa", - "date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4", - "time": "Aika", - "preferences": "Asetukset", - "transactions": "Tapahtumat", - "balance": "Saldo", - "budgets": "Budjetit", - "subscriptions": "Tilaukset", - "welcome_back": "Mit\u00e4 kuuluu?", - "bills_to_pay": "Laskuja maksettavana", - "net_worth": "Varallisuus", - "pref_last365": "Edellinen vuosi", - "pref_last90": "Viimeiset 90 p\u00e4iv\u00e4\u00e4", - "pref_last30": "Viimeiset 30 p\u00e4iv\u00e4\u00e4", - "pref_last7": "Viimeiset 7 p\u00e4iv\u00e4\u00e4", - "pref_YTD": "Vuoden alusta", - "pref_QTD": "Nelj\u00e4nnesvuoden alusta", - "pref_MTD": "Kuukauden alusta" - } -} diff --git a/frontend/src/i18n/fr_FR/index.js b/frontend/src/i18n/fr_FR/index.js deleted file mode 100644 index 44a684a21b..0000000000 --- a/frontend/src/i18n/fr_FR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "fr", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nom", - "amount_min": "Montant minimum", - "amount_max": "Montant maximum", - "url": "Liens", - "title": "Titre", - "first_date": "Date de d\u00e9but", - "repetitions": "R\u00e9p\u00e9titions", - "description": "Description", - "iban": "Num\u00e9ro IBAN", - "skip": "Ignorer", - "date": "Date" - }, - "list": { - "name": "Nom", - "account_number": "N\u00b0 de compte", - "currentBalance": "Solde courant", - "lastActivity": "Activit\u00e9 r\u00e9cente", - "active": "Actif ?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Abonnements", - "transactions": "Op\u00e9rations", - "title_expenses": "D\u00e9penses", - "title_withdrawal": "D\u00e9penses", - "title_revenue": "Recette \/ revenu", - "title_deposit": "Recette \/ revenu", - "title_transfer": "Transferts", - "title_transfers": "Transferts", - "asset_accounts": "Comptes d\u2019actif", - "expense_accounts": "Comptes de d\u00e9penses", - "revenue_accounts": "Comptes de recettes", - "liabilities_accounts": "Passifs" - }, - "firefly": { - "administration_index": "Administration financi\u00e8re", - "actions": "Actions", - "edit": "Modifier", - "delete": "Supprimer", - "reconcile": "Rapprocher", - "create_new_asset": "Cr\u00e9er un nouveau compte d\u2019actif", - "confirm_action": "Confirmer l'action", - "new_budget": "Nouveau budget", - "new_asset_account": "Nouveau compte d\u2019actif", - "newTransfer": "Nouveau transfert", - "submission_options": "Options de soumission", - "apply_rules_checkbox": "Appliquer les r\u00e8gles", - "fire_webhooks_checkbox": "Lancer les webhooks", - "newDeposit": "Nouveau d\u00e9p\u00f4t", - "newWithdrawal": "Nouvelle d\u00e9pense", - "bills_paid": "Factures pay\u00e9es", - "left_to_spend": "Reste \u00e0 d\u00e9penser", - "no_budget": "(pas de budget)", - "budgeted": "Budg\u00e9tis\u00e9", - "spent": "D\u00e9pens\u00e9", - "no_bill": "(aucune facture)", - "rule_trigger_source_account_starts_choice": "Le nom du compte source commence par..", - "rule_trigger_source_account_ends_choice": "Le nom du compte source se termine par..", - "rule_trigger_source_account_is_choice": "Le nom du compte source est..", - "rule_trigger_source_account_contains_choice": "Le nom du compte source contient..", - "rule_trigger_account_id_choice": "L'un des deux comptes a pour identifiant..", - "rule_trigger_source_account_id_choice": "L'ID du compte source est exactement..", - "rule_trigger_destination_account_id_choice": "L'ID du compte de destination est exactement..", - "rule_trigger_account_is_cash_choice": "L'un des deux comptes est en esp\u00e8ces", - "rule_trigger_source_is_cash_choice": "Le compte source est un compte (d'esp\u00e8ces)", - "rule_trigger_destination_is_cash_choice": "Le compte de destination est un compte (d'esp\u00e8ces)", - "rule_trigger_source_account_nr_starts_choice": "Le num\u00e9ro \/ IBAN du compte source commence par..", - "rule_trigger_source_account_nr_ends_choice": "Le num\u00e9ro \/ IBAN du compte source se termine par..", - "rule_trigger_source_account_nr_is_choice": "Le num\u00e9ro \/ IBAN du compte source est..", - "rule_trigger_source_account_nr_contains_choice": "Le num\u00e9ro \/ IBAN du compte source contient..", - "rule_trigger_destination_account_starts_choice": "Le nom du compte de destination commence par..", - "rule_trigger_destination_account_ends_choice": "Le nom du compte de destination se termine par..", - "rule_trigger_destination_account_is_choice": "Le nom du compte de destination est..", - "rule_trigger_destination_account_contains_choice": "Le nom du compte de destination contient..", - "rule_trigger_destination_account_nr_starts_choice": "Le num\u00e9ro \/ IBAN du compte de destination commence par..", - "rule_trigger_destination_account_nr_ends_choice": "Le num\u00e9ro \/ IBAN du compte de destination se termine par..", - "rule_trigger_destination_account_nr_is_choice": "Le num\u00e9ro \/ IBAN du compte de destination est..", - "rule_trigger_destination_account_nr_contains_choice": "Le num\u00e9ro \/ IBAN du compte de destination contient..", - "rule_trigger_transaction_type_choice": "L'op\u00e9ration est du type..", - "rule_trigger_category_is_choice": "La cat\u00e9gorie est..", - "rule_trigger_amount_less_choice": "Le montant est inf\u00e9rieur ou \u00e9gal \u00e0 ..", - "rule_trigger_amount_is_choice": "Le montant est..", - "rule_trigger_amount_more_choice": "Le montant est sup\u00e9rieur ou \u00e9gal \u00e0..", - "rule_trigger_description_starts_choice": "Le description commence par..", - "rule_trigger_description_ends_choice": "La description se termine par..", - "rule_trigger_description_contains_choice": "La description contient..", - "rule_trigger_description_is_choice": "La description est..", - "rule_trigger_date_on_choice": "La date de l'op\u00e9ration est..", - "rule_trigger_date_before_choice": "La date de l'op\u00e9ration se situe avant..", - "rule_trigger_date_after_choice": "La date de l'op\u00e9ration se situe apr\u00e8s..", - "rule_trigger_created_at_on_choice": "L'op\u00e9ration a \u00e9t\u00e9 cr\u00e9\u00e9e le..", - "rule_trigger_updated_at_on_choice": "L'op\u00e9ration a \u00e9t\u00e9 mise \u00e0 jour pour la derni\u00e8re fois le..", - "rule_trigger_budget_is_choice": "Le budget est..", - "rule_trigger_tag_is_choice": "Un tag est..", - "rule_trigger_currency_is_choice": "La devise de l'op\u00e9ration est..", - "rule_trigger_foreign_currency_is_choice": "La devise \u00e9trang\u00e8re de l'op\u00e9ration est..", - "rule_trigger_has_attachments_choice": "A au moins autant de pi\u00e8ces jointes", - "rule_trigger_has_no_category_choice": "N'a pas de cat\u00e9gorie", - "rule_trigger_has_any_category_choice": "A une cat\u00e9gorie", - "rule_trigger_has_no_budget_choice": "N'a pas de budget", - "rule_trigger_has_any_budget_choice": "A un (des) budget", - "rule_trigger_has_no_bill_choice": "N'a pas de facture", - "rule_trigger_has_any_bill_choice": "A (au moins) une facture", - "rule_trigger_has_no_tag_choice": "N'a pas de tag(s)", - "rule_trigger_has_any_tag_choice": "Dispose d'un ou de plusieurs tags", - "rule_trigger_any_notes_choice": "A une (ou plusieurs) note(s)", - "rule_trigger_no_notes_choice": "N'a pas de note", - "rule_trigger_notes_is_choice": "Les notes sont..", - "rule_trigger_notes_contains_choice": "Les notes contiennent..", - "rule_trigger_notes_starts_choice": "Les notes commencent par..", - "rule_trigger_notes_ends_choice": "Les notes se terminent par..", - "rule_trigger_bill_is_choice": "La facture est..", - "rule_trigger_external_id_is_choice": "L'ID externe est..", - "rule_trigger_internal_reference_is_choice": "La r\u00e9f\u00e9rence interne est..", - "rule_trigger_journal_id_choice": "L'ID du journal d'op\u00e9rations est..", - "rule_trigger_any_external_url_choice": "La transaction a une (quelconque) URL externe", - "rule_trigger_no_external_url_choice": "L'op\u00e9ration n'a pas d'URL externe", - "rule_trigger_id_choice": "L'ID de l'op\u00e9ration est..", - "rule_action_delete_transaction_choice": "SUPPRIMER l'op\u00e9ration(!)", - "rule_action_set_category_choice": "D\u00e9finir la cat\u00e9gorie \u00e0..", - "rule_action_clear_category_choice": "Effacer les cat\u00e9gories", - "rule_action_set_budget_choice": "D\u00e9finir le budget \u00e0..", - "rule_action_clear_budget_choice": "Effacer les budgets", - "rule_action_add_tag_choice": "Ajouter un tag..", - "rule_action_remove_tag_choice": "Retirer le tag..", - "rule_action_remove_all_tags_choice": "Supprimer tous les tags", - "rule_action_set_description_choice": "D\u00e9finir la description \u00e0..", - "rule_action_update_piggy_choice": "Ajouter\/supprimer un montant dans la tirelire..", - "rule_action_append_description_choice": "Suffixer la description avec..", - "rule_action_prepend_description_choice": "Pr\u00e9fixer la description avec..", - "rule_action_set_source_account_choice": "D\u00e9finir le compte source \u00e0..", - "rule_action_set_destination_account_choice": "D\u00e9finir le compte de destination \u00e0..", - "rule_action_append_notes_choice": "Ajouter aux notes ..", - "rule_action_prepend_notes_choice": "Ajouter au d\u00e9but des notes..", - "rule_action_clear_notes_choice": "Supprimer les notes", - "rule_action_set_notes_choice": "Remplacer les notes par..", - "rule_action_link_to_bill_choice": "Lier \u00e0 une facture..", - "rule_action_convert_deposit_choice": "Convertir cette op\u00e9ration en d\u00e9p\u00f4t", - "rule_action_convert_withdrawal_choice": "Convertir cette op\u00e9ration en d\u00e9pense", - "rule_action_convert_transfer_choice": "Convertir cette op\u00e9ration en transfert", - "placeholder": "[R\u00e9serv\u00e9]", - "recurrences": "Op\u00e9rations p\u00e9riodiques", - "title_expenses": "D\u00e9penses", - "title_withdrawal": "D\u00e9penses", - "title_revenue": "Recette \/ revenu", - "pref_1D": "Un jour", - "pref_1W": "Une semaine", - "pref_1M": "Un mois", - "pref_3M": "Trois mois (trimestre)", - "pref_6M": "Six mois", - "pref_1Y": "Un an", - "repeat_freq_yearly": "annuellement", - "repeat_freq_half-year": "semestriel", - "repeat_freq_quarterly": "trimestriel", - "repeat_freq_monthly": "mensuel", - "repeat_freq_weekly": "hebdomadaire", - "single_split": "Ventilation", - "asset_accounts": "Comptes d\u2019actif", - "expense_accounts": "Comptes de d\u00e9penses", - "liabilities_accounts": "Passifs", - "undefined_accounts": "Comptes", - "name": "Nom", - "revenue_accounts": "Comptes de recettes", - "description": "Description", - "category": "Cat\u00e9gorie", - "title_deposit": "Recette \/ revenu", - "title_transfer": "Transferts", - "title_transfers": "Transferts", - "piggyBanks": "Tirelires", - "rules": "R\u00e8gles", - "accounts": "Comptes", - "categories": "Cat\u00e9gories", - "tags": "Tags", - "object_groups_page_title": "Groupes", - "reports": "Rapports", - "webhooks": "Webhooks", - "currencies": "Devises", - "administration": "Administration", - "profile": "Profil", - "source_account": "Compte source", - "destination_account": "Compte de destination", - "amount": "Montant", - "date": "Date", - "time": "Heure", - "preferences": "Pr\u00e9f\u00e9rences", - "transactions": "Op\u00e9rations", - "balance": "Solde", - "budgets": "Budgets", - "subscriptions": "Abonnements", - "welcome_back": "Quoi de neuf ?", - "bills_to_pay": "Factures \u00e0 payer", - "net_worth": "Avoir net", - "pref_last365": "L'ann\u00e9e derni\u00e8re", - "pref_last90": "Les 90 derniers jours", - "pref_last30": "Les 30 derniers jours", - "pref_last7": "Les 7 derniers jours", - "pref_YTD": "Ann\u00e9e en cours", - "pref_QTD": "Ce trimestre", - "pref_MTD": "Depuis le d\u00e9but du mois" - } -} diff --git a/frontend/src/i18n/hu_HU/index.js b/frontend/src/i18n/hu_HU/index.js deleted file mode 100644 index 25123dff21..0000000000 --- a/frontend/src/i18n/hu_HU/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "hu", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "N\u00e9v", - "amount_min": "Minim\u00e1lis \u00f6sszeg", - "amount_max": "Maxim\u00e1lis \u00f6sszeg", - "url": "URL", - "title": "C\u00edm", - "first_date": "Els\u0151 d\u00e1tum", - "repetitions": "Ism\u00e9tl\u00e9sek", - "description": "Le\u00edr\u00e1s", - "iban": "IBAN", - "skip": "Kihagy\u00e1s", - "date": "D\u00e1tum" - }, - "list": { - "name": "N\u00e9v", - "account_number": "Account number", - "currentBalance": "Aktu\u00e1lis egyenleg", - "lastActivity": "Utols\u00f3 aktivit\u00e1s", - "active": "Akt\u00edv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "M\u0171veletek", - "edit": "Szerkeszt\u00e9s", - "delete": "T\u00f6rl\u00e9s", - "reconcile": "Egyeztet\u00e9s", - "create_new_asset": "\u00daj eszk\u00f6zsz\u00e1mla l\u00e9trehoz\u00e1sa", - "confirm_action": "Confirm action", - "new_budget": "\u00daj k\u00f6lts\u00e9gkeret", - "new_asset_account": "\u00daj eszk\u00f6zsz\u00e1mla", - "newTransfer": "\u00daj \u00e1tvezet\u00e9s", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u00daj bev\u00e9tel", - "newWithdrawal": "\u00daj k\u00f6lts\u00e9g", - "bills_paid": "Befizetett sz\u00e1ml\u00e1k", - "left_to_spend": "Elk\u00f6lthet\u0151", - "no_budget": "(nincs k\u00f6lts\u00e9gkeret)", - "budgeted": "Betervezett", - "spent": "Elk\u00f6lt\u00f6tt", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Forr\u00e1ssz\u00e1mla nev\u00e9nek eleje..", - "rule_trigger_source_account_ends_choice": "Forr\u00e1ssz\u00e1mla nev\u00e9nek v\u00e9ge..", - "rule_trigger_source_account_is_choice": "A forr\u00e1ssz\u00e1mla neve..", - "rule_trigger_source_account_contains_choice": "Forr\u00e1ssz\u00e1mla neve tartalmazza..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Forr\u00e1ssz\u00e1mla ID pontosan..", - "rule_trigger_destination_account_id_choice": "C\u00e9lsz\u00e1mla ID pontosan..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Forr\u00e1ssz\u00e1mla egy k\u00e9szp\u00e9nz sz\u00e1mla", - "rule_trigger_destination_is_cash_choice": "C\u00e9lsz\u00e1mla egy k\u00e9szp\u00e9nz sz\u00e1mla", - "rule_trigger_source_account_nr_starts_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN eleje..", - "rule_trigger_source_account_nr_ends_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN v\u00e9ge..", - "rule_trigger_source_account_nr_is_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1ma \/ IBAN..", - "rule_trigger_source_account_nr_contains_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1ma \/ IBAN tartalmazza..", - "rule_trigger_destination_account_starts_choice": "C\u00e9lsz\u00e1mla nev\u00e9nek eleje..", - "rule_trigger_destination_account_ends_choice": "C\u00e9lsz\u00e1mla nev\u00e9nek v\u00e9ge..", - "rule_trigger_destination_account_is_choice": "A c\u00e9lsz\u00e1mla neve..", - "rule_trigger_destination_account_contains_choice": "A c\u00e9lsz\u00e1mla neve tartalmazza..", - "rule_trigger_destination_account_nr_starts_choice": "C\u00e9lsz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN eleje..", - "rule_trigger_destination_account_nr_ends_choice": "C\u00e9lsz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN eleje..", - "rule_trigger_destination_account_nr_is_choice": "C\u00e9lsz\u00e1mla sz\u00e1ma \/ IBAN..", - "rule_trigger_destination_account_nr_contains_choice": "C\u00e9lsz\u00e1mla sz\u00e1ma \/ IBAN tartalmazza..", - "rule_trigger_transaction_type_choice": "A tranzakci\u00f3 t\u00edpusa..", - "rule_trigger_category_is_choice": "A kateg\u00f3ria..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Le\u00edr\u00e1s eleje..", - "rule_trigger_description_ends_choice": "Le\u00edr\u00e1s v\u00e9ge..", - "rule_trigger_description_contains_choice": "A le\u00edr\u00e1s tartalmazza..", - "rule_trigger_description_is_choice": "A le\u00edr\u00e1s pontosan..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Tranzakci\u00f3 d\u00e1tuma kor\u00e1bbi, mint..", - "rule_trigger_date_after_choice": "Tranzakci\u00f3 d\u00e1tuma k\u00e9s\u0151bbi, mint..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "A k\u00f6lts\u00e9gkeret..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "A tranzakci\u00f3 p\u00e9nzneme..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Legal\u00e1bb ennyi mell\u00e9klete van", - "rule_trigger_has_no_category_choice": "Nincs kateg\u00f3ri\u00e1ja", - "rule_trigger_has_any_category_choice": "Van kateg\u00f3ri\u00e1ja", - "rule_trigger_has_no_budget_choice": "Nincs k\u00f6lts\u00e9gkerete", - "rule_trigger_has_any_budget_choice": "Van k\u00f6lts\u00e9gkerete", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Nincsenek c\u00edmk\u00e9i", - "rule_trigger_has_any_tag_choice": "Van legal\u00e1bb egy c\u00edmk\u00e9je", - "rule_trigger_any_notes_choice": "Van megjegyz\u00e9se", - "rule_trigger_no_notes_choice": "Nincsenek megjegyz\u00e9sei", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "A sz\u00e1mla..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Minden kateg\u00f3ria t\u00f6rl\u00e9se", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Minden k\u00f6lts\u00e9gvet\u00e9s t\u00f6rl\u00e9se", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Minden c\u00edmke elt\u00e1vol\u00edt\u00e1sa", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Megjegyz\u00e9sek elt\u00e1vol\u00edt\u00e1sa", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "A tranzakci\u00f3 bev\u00e9tell\u00e9 konvert\u00e1l\u00e1sa", - "rule_action_convert_withdrawal_choice": "A tranzakci\u00f3 k\u00f6lts\u00e9gg\u00e9 konvert\u00e1l\u00e1sa", - "rule_action_convert_transfer_choice": "A tranzakci\u00f3 \u00e1tvezet\u00e9ss\u00e9 konvert\u00e1l\u00e1sa", - "placeholder": "[Placeholder]", - "recurrences": "Ism\u00e9tl\u0151d\u0151 tranzakci\u00f3k", - "title_expenses": "K\u00f6lts\u00e9gek", - "title_withdrawal": "K\u00f6lts\u00e9gek", - "title_revenue": "J\u00f6vedelem \/ bev\u00e9tel", - "pref_1D": "Egy nap", - "pref_1W": "Egy h\u00e9t", - "pref_1M": "Egy h\u00f3nap", - "pref_3M": "H\u00e1rom h\u00f3nap (negyed\u00e9v)", - "pref_6M": "Hat h\u00f3nap", - "pref_1Y": "Egy \u00e9v", - "repeat_freq_yearly": "\u00e9ves", - "repeat_freq_half-year": "f\u00e9l\u00e9vente", - "repeat_freq_quarterly": "negyed\u00e9ves", - "repeat_freq_monthly": "havi", - "repeat_freq_weekly": "heti", - "single_split": "Feloszt\u00e1s", - "asset_accounts": "Eszk\u00f6zsz\u00e1ml\u00e1k", - "expense_accounts": "K\u00f6lts\u00e9gsz\u00e1ml\u00e1k", - "liabilities_accounts": "K\u00f6telezetts\u00e9gek", - "undefined_accounts": "Accounts", - "name": "N\u00e9v", - "revenue_accounts": "J\u00f6vedelemsz\u00e1ml\u00e1k", - "description": "Le\u00edr\u00e1s", - "category": "Kateg\u00f3ria", - "title_deposit": "J\u00f6vedelem \/ bev\u00e9tel", - "title_transfer": "\u00c1tvezet\u00e9sek", - "title_transfers": "\u00c1tvezet\u00e9sek", - "piggyBanks": "Malacperselyek", - "rules": "Szab\u00e1lyok", - "accounts": "Sz\u00e1ml\u00e1k", - "categories": "Kateg\u00f3ri\u00e1k", - "tags": "C\u00edmk\u00e9k", - "object_groups_page_title": "Csoportok", - "reports": "Jelent\u00e9sek", - "webhooks": "Webhooks", - "currencies": "P\u00e9nznemek", - "administration": "Adminisztr\u00e1ci\u00f3", - "profile": "Profil", - "source_account": "Forr\u00e1s sz\u00e1mla", - "destination_account": "C\u00e9lsz\u00e1mla", - "amount": "\u00d6sszeg", - "date": "D\u00e1tum", - "time": "Time", - "preferences": "Be\u00e1ll\u00edt\u00e1sok", - "transactions": "Tranzakci\u00f3k", - "balance": "Egyenleg", - "budgets": "K\u00f6lts\u00e9gkeretek", - "subscriptions": "Subscriptions", - "welcome_back": "Mi a helyzet?", - "bills_to_pay": "Fizetend\u0151 sz\u00e1ml\u00e1k", - "net_worth": "Nett\u00f3 \u00e9rt\u00e9k", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/id_ID/index.js b/frontend/src/i18n/id_ID/index.js deleted file mode 100644 index c6c252d1f4..0000000000 --- a/frontend/src/i18n/id_ID/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "id", - "month_and_day_fns": "d MMMM, y" - }, - "form": { - "name": "Nama", - "amount_min": "Jumlah minimal", - "amount_max": "Jumlah maksimum", - "url": "URL", - "title": "Judul", - "first_date": "Tanggal pertama", - "repetitions": "Pengulangan", - "description": "Deskripsi", - "iban": "IBAN", - "skip": "Melewatkan", - "date": "Tanggal" - }, - "list": { - "name": "Nama", - "account_number": "Account number", - "currentBalance": "Saldo saat ini", - "lastActivity": "Aktifitas terakhir", - "active": "Aktif?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Anggaran", - "subscriptions": "Langganan", - "transactions": "Transaksi", - "title_expenses": "Pengeluaran", - "title_withdrawal": "Pengeluaran", - "title_revenue": "Penghasilan \/ pendapatan", - "title_deposit": "Penghasilan \/ pendapatan", - "title_transfer": "Transfer", - "title_transfers": "Transfer", - "asset_accounts": "Akun aset", - "expense_accounts": "Akun pengeluaran", - "revenue_accounts": "Akun pendapatan", - "liabilities_accounts": "Kewajiban" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Tindakan", - "edit": "Edit", - "delete": "Menghapus", - "reconcile": "Reconcile", - "create_new_asset": "Buat akun aset baru", - "confirm_action": "Confirm action", - "new_budget": "Anggaran baru", - "new_asset_account": "Akun aset baru", - "newTransfer": "Transfer baru", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Deposit baru", - "newWithdrawal": "Biaya baru", - "bills_paid": "Tagihan dibayar", - "left_to_spend": "Kiri untuk dibelanjakan", - "no_budget": "(no budget)", - "budgeted": "Dianggarkan", - "spent": "Menghabiskan", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transaksi adalah tipe..", - "rule_trigger_category_is_choice": "Kategori adalah..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Deskripsi dimulai dengan..", - "rule_trigger_description_ends_choice": "Deskripsi diakhiri dengan..", - "rule_trigger_description_contains_choice": "Deskripsi berisi..", - "rule_trigger_description_is_choice": "Deskripsi adalah..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Anggaran adalah..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaction currency is..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Paling tidak banyak keterikatan ini", - "rule_trigger_has_no_category_choice": "Tidak memiliki kategori", - "rule_trigger_has_any_category_choice": "Memiliki kategori (apapun)", - "rule_trigger_has_no_budget_choice": "Tidak memiliki anggaran", - "rule_trigger_has_any_budget_choice": "Memiliki anggaran (apapun)", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Tidak memiliki tag", - "rule_trigger_has_any_tag_choice": "Memiliki satu atau beberapa tag (apapun)", - "rule_trigger_any_notes_choice": "Telah ada catatan", - "rule_trigger_no_notes_choice": "Tidak memiliki catatan", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Kosongkan kategori apapun", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Kosongkan anggaran", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Hapus semua tag", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Hapus catatan apapun", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Convert the transaction to a deposit", - "rule_action_convert_withdrawal_choice": "Convert the transaction to a withdrawal", - "rule_action_convert_transfer_choice": "Convert the transaction to a transfer", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Beban", - "title_withdrawal": "Beban", - "title_revenue": "Pendapatan \/ penghasilan", - "pref_1D": "Suatu hari", - "pref_1W": "Satu minggu", - "pref_1M": "Satu bulan", - "pref_3M": "Tiga bulan (seperempat)", - "pref_6M": "Enam bulan", - "pref_1Y": "Satu tahun", - "repeat_freq_yearly": "tahunan", - "repeat_freq_half-year": "setiap setengah tahun", - "repeat_freq_quarterly": "triwulanan", - "repeat_freq_monthly": "bulanan", - "repeat_freq_weekly": "mingguan", - "single_split": "Pisah", - "asset_accounts": "Akun aset", - "expense_accounts": "Rekening pengeluaran", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "Nama", - "revenue_accounts": "Akun pendapatan", - "description": "Deskripsi", - "category": "Kategori", - "title_deposit": "Pendapatan \/ penghasilan", - "title_transfer": "Transfer", - "title_transfers": "Transfer", - "piggyBanks": "Celengan babi", - "rules": "Aturan", - "accounts": "Akun", - "categories": "Kategori", - "tags": "Tag", - "object_groups_page_title": "Groups", - "reports": "Laporan", - "webhooks": "Webhooks", - "currencies": "Mata uang", - "administration": "Administrasi", - "profile": "Profil", - "source_account": "Akun sumber", - "destination_account": "Akun tujuan", - "amount": "Jumlah", - "date": "Tanggal", - "time": "Time", - "preferences": "Preferensi", - "transactions": "Transaksi", - "balance": "Keseimbangan", - "budgets": "Anggaran", - "subscriptions": "Subscriptions", - "welcome_back": "Apa yang sedang dimainkan?", - "bills_to_pay": "Bills untuk membayar", - "net_worth": "Nilai bersih", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/index.js b/frontend/src/i18n/index.js deleted file mode 100644 index a7fe5684a5..0000000000 --- a/frontend/src/i18n/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import enUS from './en_US' - -export default { - 'en-US': enUS -} diff --git a/frontend/src/i18n/it_IT/index.js b/frontend/src/i18n/it_IT/index.js deleted file mode 100644 index afe8ea0a48..0000000000 --- a/frontend/src/i18n/it_IT/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "it", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nome", - "amount_min": "Importo minimo", - "amount_max": "Importo massimo", - "url": "URL", - "title": "Titolo", - "first_date": "Prima volta", - "repetitions": "Ripetizioni", - "description": "Descrizione", - "iban": "IBAN", - "skip": "Salta ogni", - "date": "Data" - }, - "list": { - "name": "Nome", - "account_number": "Numero conto", - "currentBalance": "Saldo corrente", - "lastActivity": "Ultima attivit\u00e0", - "active": "Attivo" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budget", - "subscriptions": "Abbonamenti", - "transactions": "Transazioni", - "title_expenses": "Uscite", - "title_withdrawal": "Prelievi", - "title_revenue": "Redditi \/ entrate", - "title_deposit": "Versamenti", - "title_transfer": "Trasferimenti", - "title_transfers": "Trasferimenti", - "asset_accounts": "Conti attivit\u00e0", - "expense_accounts": "Conti uscite", - "revenue_accounts": "Conti entrate", - "liabilities_accounts": "Passivit\u00e0" - }, - "firefly": { - "administration_index": "Amministrazione finanziaria", - "actions": "Azioni", - "edit": "Modifica", - "delete": "Elimina", - "reconcile": "Riconcilia", - "create_new_asset": "Crea un nuovo conto attivit\u00e0", - "confirm_action": "Conferma azione", - "new_budget": "Nuovo budget", - "new_asset_account": "Nuovo conto attivit\u00e0", - "newTransfer": "Nuovo trasferimento", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nuova entrata", - "newWithdrawal": "Nuova uscita", - "bills_paid": "Bollette pagate", - "left_to_spend": "Altro da spendere", - "no_budget": "(nessun budget)", - "budgeted": "Preventivato", - "spent": "Speso", - "no_bill": "(nessuna bolletta)", - "rule_trigger_source_account_starts_choice": "Il nome del conto di origine inizia con..", - "rule_trigger_source_account_ends_choice": "Il nome del conto di origine termina con..", - "rule_trigger_source_account_is_choice": "Il nome del conto di origine \u00e8..", - "rule_trigger_source_account_contains_choice": "Il nome del conto di origine contiene...", - "rule_trigger_account_id_choice": "Entrambi gli ID del conto sono esattamente..", - "rule_trigger_source_account_id_choice": "L'ID del conto di origine \u00e8 esattamente...", - "rule_trigger_destination_account_id_choice": "L'ID del conto di destinazione \u00e8 esattamente...", - "rule_trigger_account_is_cash_choice": "Entrambi i conti sono contanti", - "rule_trigger_source_is_cash_choice": "Il conte di origine \u00e8 un conto (in contanti)", - "rule_trigger_destination_is_cash_choice": "Il conto destinazione \u00e8 un conto (in contanti)", - "rule_trigger_source_account_nr_starts_choice": "Il numero del conto di origine \/ l'IBAN inizia con...", - "rule_trigger_source_account_nr_ends_choice": "Il numero del conto di origine \/ l'IBAN termina con...", - "rule_trigger_source_account_nr_is_choice": "Il numero del conto di origine \/ l'IBAN \u00e8...", - "rule_trigger_source_account_nr_contains_choice": "Il numero del conto di origine \/ l'IBAN contiene...", - "rule_trigger_destination_account_starts_choice": "Il nome del conto di destinazione inizia con...", - "rule_trigger_destination_account_ends_choice": "Il nome del conto di destinazione termina con...", - "rule_trigger_destination_account_is_choice": "Il nome del conto di destinazione \u00e8..", - "rule_trigger_destination_account_contains_choice": "Il nome del conto di destinazione contiene..", - "rule_trigger_destination_account_nr_starts_choice": "Il numero del conto di destinazione \/ l'IBAN inizia con..", - "rule_trigger_destination_account_nr_ends_choice": "Il numero del conto di destinazione \/ l'IBAN termina con..", - "rule_trigger_destination_account_nr_is_choice": "Il numero del conto di destinazione \/ l'IBAN \u00e8..", - "rule_trigger_destination_account_nr_contains_choice": "Il numero del conto di destinazione \/ l'IBAN contiene..", - "rule_trigger_transaction_type_choice": "La transazione \u00e8 di tipo...", - "rule_trigger_category_is_choice": "La categoria \u00e8...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "L'importo \u00e8..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "La descrizione inizia con...", - "rule_trigger_description_ends_choice": "La descrizione termina con...", - "rule_trigger_description_contains_choice": "La descrizione contiene...", - "rule_trigger_description_is_choice": "La descrizione \u00e8...", - "rule_trigger_date_on_choice": "La data della transizione \u00e8..", - "rule_trigger_date_before_choice": "La data della transazione \u00e8 antecedente al...", - "rule_trigger_date_after_choice": "La data della transazione \u00e8 successiva al...", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Il budget \u00e8...", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "La valuta della transazione \u00e8...", - "rule_trigger_foreign_currency_is_choice": "La valuta estera della transazione \u00e8...", - "rule_trigger_has_attachments_choice": "Ha almeno cos\u00ec tanti allegati", - "rule_trigger_has_no_category_choice": "Non ha categoria", - "rule_trigger_has_any_category_choice": "Ha una (qualsiasi) categoria", - "rule_trigger_has_no_budget_choice": "Non ha un budget", - "rule_trigger_has_any_budget_choice": "Ha un (qualsiasi) budget", - "rule_trigger_has_no_bill_choice": "Non ha bollette", - "rule_trigger_has_any_bill_choice": "Ha una (qualsiasi) bolletta", - "rule_trigger_has_no_tag_choice": "Non ha etichette", - "rule_trigger_has_any_tag_choice": "Ha una o pi\u00f9 etichette (qualsiasi)", - "rule_trigger_any_notes_choice": "Ha una (qualsiasi) nota", - "rule_trigger_no_notes_choice": "Non ha note", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "La bollett\u00e0 \u00e8...", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "L'ID journal della transazione \u00e8...", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "La transazione non ha URL esterno", - "rule_trigger_id_choice": "L'ID della transazione \u00e8...", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Rimuovi da tutte le categorie", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Rimuovi da tutti i budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Rimuovi tutte le etichette", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Rimuovi tutte le note", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Converti la transazione in un deposito", - "rule_action_convert_withdrawal_choice": "Converti la transazione in un prelievo", - "rule_action_convert_transfer_choice": "Converti la transazione in un trasferimento", - "placeholder": "[Placeholder]", - "recurrences": "Transazioni ricorrenti", - "title_expenses": "Spese", - "title_withdrawal": "Spese", - "title_revenue": "Entrate", - "pref_1D": "Un giorno", - "pref_1W": "Una settimana", - "pref_1M": "Un mese", - "pref_3M": "Tre mesi (trimestre)", - "pref_6M": "Sei mesi", - "pref_1Y": "Un anno", - "repeat_freq_yearly": "annualmente", - "repeat_freq_half-year": "semestralmente", - "repeat_freq_quarterly": "trimestralmente", - "repeat_freq_monthly": "mensilmente", - "repeat_freq_weekly": "settimanalmente", - "single_split": "Divisione", - "asset_accounts": "Conti attivit\u00e0", - "expense_accounts": "Conti uscite", - "liabilities_accounts": "Passivit\u00e0", - "undefined_accounts": "Conti", - "name": "Nome", - "revenue_accounts": "Conti entrate", - "description": "Descrizione", - "category": "Categoria", - "title_deposit": "Redditi \/ entrate", - "title_transfer": "Trasferimenti", - "title_transfers": "Trasferimenti", - "piggyBanks": "Salvadanai", - "rules": "Regole", - "accounts": "Conti", - "categories": "Categorie", - "tags": "Etichette", - "object_groups_page_title": "Gruppi", - "reports": "Resoconti", - "webhooks": "Webhook", - "currencies": "Valute", - "administration": "Amministrazione", - "profile": "Profilo", - "source_account": "Conto di origine", - "destination_account": "Conto destinazione", - "amount": "Importo", - "date": "Data", - "time": "Ora", - "preferences": "Preferenze", - "transactions": "Transazioni", - "balance": "Saldo", - "budgets": "Budget", - "subscriptions": "Abbonamenti", - "welcome_back": "La tua situazione finanziaria", - "bills_to_pay": "Bollette da pagare", - "net_worth": "Patrimonio", - "pref_last365": "Anno scorso", - "pref_last90": "Ultimi 90 giorni", - "pref_last30": "Ultimi 30 giorni", - "pref_last7": "Ultimi 7 giorni", - "pref_YTD": "Ultimo anno", - "pref_QTD": "Ultimo trimestre", - "pref_MTD": "Ultimo mese" - } -} diff --git a/frontend/src/i18n/ja_JP/index.js b/frontend/src/i18n/ja_JP/index.js deleted file mode 100644 index 508ea2e266..0000000000 --- a/frontend/src/i18n/ja_JP/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ja", - "month_and_day_fns": "y\u5e74 MMMM d\u65e5" - }, - "form": { - "name": "\u540d\u79f0", - "amount_min": "\u6700\u4f4e\u984d", - "amount_max": "\u4e0a\u9650\u984d", - "url": "URL", - "title": "\u30bf\u30a4\u30c8\u30eb", - "first_date": "\u6700\u521d\u306e\u65e5\u4ed8", - "repetitions": "\u30ea\u30d4\u30fc\u30c8", - "description": "\u8aac\u660e", - "iban": "IBAN", - "skip": "\u30b9\u30ad\u30c3\u30d7", - "date": "\u65e5\u4ed8" - }, - "list": { - "name": "\u540d\u79f0", - "account_number": "\u53e3\u5ea7\u756a\u53f7", - "currentBalance": "\u73fe\u5728\u306e\u6b8b\u9ad8", - "lastActivity": "\u6700\u7d42\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3", - "active": "\u6709\u52b9" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u4e88\u7b97", - "subscriptions": "\u8b1b\u8aad", - "transactions": "\u53d6\u5f15", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u53ce\u76ca \/ \u53ce\u5165", - "title_deposit": "\u53ce\u76ca \/ \u53ce\u5165", - "title_transfer": "\u9001\u91d1", - "title_transfers": "\u9001\u91d1", - "asset_accounts": "\u8cc7\u7523\u53e3\u5ea7", - "expense_accounts": "\u652f\u51fa\u53e3\u5ea7", - "revenue_accounts": "\u53ce\u5165\u53e3\u5ea7", - "liabilities_accounts": "\u8ca0\u50b5" - }, - "firefly": { - "administration_index": "\u8ca1\u52d9\u7ba1\u7406", - "actions": "\u64cd\u4f5c", - "edit": "\u7de8\u96c6", - "delete": "\u524a\u9664", - "reconcile": "\u7167\u5408", - "create_new_asset": "\u65b0\u3057\u3044\u8cc7\u7523\u53e3\u5ea7\u3092\u4f5c\u6210", - "confirm_action": "\u64cd\u4f5c\u3092\u78ba\u8a8d", - "new_budget": "\u65b0\u3057\u3044\u4e88\u7b97", - "new_asset_account": "\u65b0\u3057\u3044\u8cc7\u7523\u53e3\u5ea7", - "newTransfer": "\u65b0\u3057\u3044\u9001\u91d1", - "submission_options": "\u9001\u4fe1\u30aa\u30d7\u30b7\u30e7\u30f3", - "apply_rules_checkbox": "\u30eb\u30fc\u30eb\u3092\u9069\u7528", - "fire_webhooks_checkbox": "Webhook\u3092\u5b9f\u884c", - "newDeposit": "\u65b0\u3057\u3044\u5165\u91d1", - "newWithdrawal": "\u65b0\u3057\u3044\u652f\u51fa", - "bills_paid": "\u652f\u6255\u3044\u6e08\u307f\u8acb\u6c42", - "left_to_spend": "\u652f\u51fa\u3067\u304d\u308b\u6b8b\u308a", - "no_budget": "(\u4e88\u7b97\u306a\u3057)", - "budgeted": "\u4e88\u7b97\u8a2d\u5b9a", - "spent": "\u652f\u51fa", - "no_bill": "(\u8acb\u6c42\u306a\u3057)", - "rule_trigger_source_account_starts_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_source_account_ends_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c\u2026\u3067\u7d42\u308f\u308b", - "rule_trigger_source_account_is_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c...", - "rule_trigger_source_account_contains_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c\u2026\u3092\u542b\u3080", - "rule_trigger_account_id_choice": "\u3069\u3061\u3089\u304b\u306e\u53e3\u5ea7ID\u304c\u2026", - "rule_trigger_source_account_id_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7ID\u304c\u2026", - "rule_trigger_destination_account_id_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7ID\u304c\u2026", - "rule_trigger_account_is_cash_choice": "\u3069\u3061\u3089\u304b\u306e\u53e3\u5ea7\u304c\u73fe\u91d1", - "rule_trigger_source_is_cash_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u304c\u73fe\u91d1\u53e3\u5ea7", - "rule_trigger_destination_is_cash_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u304c\u73fe\u91d1\u53e3\u5ea7", - "rule_trigger_source_account_nr_starts_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026\u3067\u59cb\u307e\u308b", - "rule_trigger_source_account_nr_ends_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026\u3067\u7d42\u308f\u308b", - "rule_trigger_source_account_nr_is_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026", - "rule_trigger_source_account_nr_contains_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026\u3092\u542b\u3080", - "rule_trigger_destination_account_starts_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_destination_account_ends_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c...\u3067\u7d42\u308f\u308b", - "rule_trigger_destination_account_is_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c\u2026", - "rule_trigger_destination_account_contains_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c...\u3092\u542b\u3080", - "rule_trigger_destination_account_nr_starts_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_destination_account_nr_ends_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c...\u3067\u7d42\u308f\u308b", - "rule_trigger_destination_account_nr_is_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026", - "rule_trigger_destination_account_nr_contains_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c...\u3092\u542b\u3080", - "rule_trigger_transaction_type_choice": "\u53d6\u5f15\u7a2e\u5225\u304c\u2026", - "rule_trigger_category_is_choice": "\u30ab\u30c6\u30b4\u30ea\u304c\u2026", - "rule_trigger_amount_less_choice": "\u91d1\u984d\u304c...\u4ee5\u4e0b", - "rule_trigger_amount_is_choice": "\u91d1\u984d\u304c\u2026", - "rule_trigger_amount_more_choice": "\u91d1\u984d\u304c...\u4ee5\u4e0a", - "rule_trigger_description_starts_choice": "\u6982\u8981\u304c\u2026\u3067\u59cb\u307e\u308b", - "rule_trigger_description_ends_choice": "\u6982\u8981\u304c\u2026\u3067\u7d42\u308f\u308b", - "rule_trigger_description_contains_choice": "\u6982\u8981\u306b\u2026\u3092\u542b\u3080", - "rule_trigger_description_is_choice": "\u6982\u8981\u304c\u2026", - "rule_trigger_date_on_choice": "\u53d6\u5f15\u65e5\u304c\u2026", - "rule_trigger_date_before_choice": "\u53d6\u5f15\u65e5\u304c\u2026\u3088\u308a\u524d", - "rule_trigger_date_after_choice": "\u53d6\u5f15\u65e5\u304c\u2026\u3088\u308a\u5f8c", - "rule_trigger_created_at_on_choice": "\u53d6\u5f15\u4f5c\u6210\u65e5\u304c...", - "rule_trigger_updated_at_on_choice": "\u53d6\u5f15\u306e\u6700\u7d42\u7de8\u96c6\u65e5\u304c", - "rule_trigger_budget_is_choice": "\u4e88\u7b97\u304c\u2026", - "rule_trigger_tag_is_choice": "\u30bf\u30b0\u304c...", - "rule_trigger_currency_is_choice": "\u53d6\u5f15\u901a\u8ca8\u304c\u2026", - "rule_trigger_foreign_currency_is_choice": "\u53d6\u5f15\u5916\u56fd\u901a\u8ca8\u304c\u2026", - "rule_trigger_has_attachments_choice": "\u6b21\u306e\u500b\u6570\u4ee5\u4e0a\u306e\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b", - "rule_trigger_has_no_category_choice": "\u30ab\u30c6\u30b4\u30ea\u306a\u3057", - "rule_trigger_has_any_category_choice": "(\u4efb\u610f\u306e) \u30ab\u30c6\u30b4\u30ea\u304c\u3042\u308b", - "rule_trigger_has_no_budget_choice": "\u4e88\u7b97\u3092\u3082\u305f\u306a\u3044", - "rule_trigger_has_any_budget_choice": "\u4e88\u7b97\u304c\u3042\u308b\u53d6\u5f15", - "rule_trigger_has_no_bill_choice": "\u8acb\u6c42\u304c\u306a\u3044", - "rule_trigger_has_any_bill_choice": "\u8acb\u6c42\u304c\u3042\u308b", - "rule_trigger_has_no_tag_choice": "\u30bf\u30b0\u304c\u306a\u3044", - "rule_trigger_has_any_tag_choice": "\u4e00\u3064\u4ee5\u4e0a\u306e\u30bf\u30b0\u304c\u3042\u308b", - "rule_trigger_any_notes_choice": "\u5099\u8003\u304c\u3042\u308b", - "rule_trigger_no_notes_choice": "\u5099\u8003\u304c\u306a\u3044", - "rule_trigger_notes_is_choice": "\u5099\u8003\u304c...", - "rule_trigger_notes_contains_choice": "\u5099\u8003\u304c\u6b21\u3092\u542b\u3080", - "rule_trigger_notes_starts_choice": "\u5099\u8003\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_notes_ends_choice": "\u5099\u8003\u304c...\u3067\u7d42\u308f\u308b", - "rule_trigger_bill_is_choice": "\u8acb\u6c42\u304c\u2026", - "rule_trigger_external_id_is_choice": "\u5916\u90e8 ID \u304c\u2026", - "rule_trigger_internal_reference_is_choice": "\u5185\u90e8\u53c2\u7167\u304c\u2026", - "rule_trigger_journal_id_choice": "\u53d6\u5f15ID\u304c\u2026", - "rule_trigger_any_external_url_choice": "\u5916\u90e8URL\u304c\u3042\u308b\u53d6\u5f15", - "rule_trigger_no_external_url_choice": "\u53d6\u5f15\u306b\u5916\u90e8 URL \u304c\u306a\u3044", - "rule_trigger_id_choice": "\u53d6\u5f15ID\u304c\u2026", - "rule_action_delete_transaction_choice": "\u53d6\u5f15\u3092\u524a\u9664 (!)", - "rule_action_set_category_choice": "\u30ab\u30c6\u30b4\u30ea\u3092...\u306b\u8a2d\u5b9a", - "rule_action_clear_category_choice": "\u30ab\u30c6\u30b4\u30ea\u3092\u30af\u30ea\u30a2", - "rule_action_set_budget_choice": "\u4e88\u7b97\u3092...\u306b\u8a2d\u5b9a", - "rule_action_clear_budget_choice": "\u4e88\u7b97\u3092\u30af\u30ea\u30a2", - "rule_action_add_tag_choice": "\u30bf\u30b0\u2026\u3092\u8ffd\u52a0", - "rule_action_remove_tag_choice": "\u30bf\u30b0\u2026\u3092\u524a\u9664", - "rule_action_remove_all_tags_choice": "\u3059\u3079\u3066\u306e\u30bf\u30b0\u3092\u524a\u9664", - "rule_action_set_description_choice": "\u8aac\u660e\u3092...\u306b\u8a2d\u5b9a", - "rule_action_update_piggy_choice": "\u53d6\u5f15\u91d1\u984d\u3092\u8caf\u91d1\u7bb1...\u306b\u52a0\u7b97\/\u6e1b\u7b97\u3059\u308b", - "rule_action_append_description_choice": "\u6982\u8981\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0", - "rule_action_prepend_description_choice": "\u6982\u8981\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0", - "rule_action_set_source_account_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a", - "rule_action_set_destination_account_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a", - "rule_action_append_notes_choice": "\u5099\u8003\u306e\u7d42\u308f\u308a\u306b...\u3092\u8ffd\u52a0", - "rule_action_prepend_notes_choice": "\u5099\u8003\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0", - "rule_action_clear_notes_choice": "\u5099\u8003\u3092\u524a\u9664", - "rule_action_set_notes_choice": "\u5099\u8003\u306b...\u3092\u8a2d\u5b9a", - "rule_action_link_to_bill_choice": "\u8acb\u6c42...\u306b\u30ea\u30f3\u30af", - "rule_action_convert_deposit_choice": "\u53d6\u5f15\u3092\u5165\u91d1\u306b\u5909\u63db", - "rule_action_convert_withdrawal_choice": "\u53d6\u5f15\u3092\u51fa\u91d1\u306b\u5909\u63db", - "rule_action_convert_transfer_choice": "\u53d6\u5f15\u3092\u9001\u91d1\u306b\u5909\u63db", - "placeholder": "[Placeholder]", - "recurrences": "\u5b9a\u671f\u7684\u306a\u53d6\u5f15", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u53ce\u76ca \/ \u53ce\u5165", - "pref_1D": "1\u65e5", - "pref_1W": "1\u9031", - "pref_1M": "1\u30f5\u6708", - "pref_3M": "3\u30f6\u6708 (\u56db\u534a\u671f)", - "pref_6M": "6\u30f6\u6708", - "pref_1Y": "1\u5e74", - "repeat_freq_yearly": "\u6bce\u5e74", - "repeat_freq_half-year": "\u534a\u5e74\u3054\u3068", - "repeat_freq_quarterly": "\u56db\u534a\u671f\u3054\u3068", - "repeat_freq_monthly": "\u6bce\u6708", - "repeat_freq_weekly": "\u9031\u6bce", - "single_split": "\u5206\u5272", - "asset_accounts": "\u8cc7\u7523\u53e3\u5ea7", - "expense_accounts": "\u652f\u51fa\u53e3\u5ea7", - "liabilities_accounts": "\u50b5\u52d9", - "undefined_accounts": "\u53e3\u5ea7", - "name": "\u540d\u79f0", - "revenue_accounts": "\u53ce\u5165\u53e3\u5ea7", - "description": "\u6982\u8981", - "category": "\u30ab\u30c6\u30b4\u30ea", - "title_deposit": "\u53ce\u76ca \/ \u53ce\u5165", - "title_transfer": "\u9001\u91d1", - "title_transfers": "\u9001\u91d1", - "piggyBanks": "\u8caf\u91d1\u7bb1", - "rules": "\u30eb\u30fc\u30eb", - "accounts": "\u53e3\u5ea7", - "categories": "\u30ab\u30c6\u30b4\u30ea", - "tags": "\u30bf\u30b0", - "object_groups_page_title": "\u30b0\u30eb\u30fc\u30d7", - "reports": "\u30ec\u30dd\u30fc\u30c8", - "webhooks": "Webhook", - "currencies": "\u901a\u8ca8", - "administration": "\u7ba1\u7406", - "profile": "\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb", - "source_account": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7", - "destination_account": "\u9810\u3051\u5165\u308c\u53e3\u5ea7", - "amount": "\u91d1\u984d", - "date": "\u65e5\u4ed8", - "time": "\u6642\u523b", - "preferences": "\u8a2d\u5b9a", - "transactions": "\u53d6\u5f15", - "balance": "\u53ce\u652f", - "budgets": "\u4e88\u7b97", - "subscriptions": "\u8b1b\u8aad", - "welcome_back": "\u6982\u8981", - "bills_to_pay": "\u672a\u6255\u3044\u306e\u8acb\u6c42", - "net_worth": "\u7d14\u8cc7\u7523", - "pref_last365": "\u6628\u5e74", - "pref_last90": "\u904e\u53bb 90 \u65e5\u9593", - "pref_last30": "\u904e\u53bb 30 \u65e5\u9593", - "pref_last7": "\u904e\u53bb 7 \u65e5\u9593", - "pref_YTD": "\u5e74\u59cb\u304b\u3089\u4eca\u65e5\u307e\u3067", - "pref_QTD": "\u4eca\u56db\u534a\u671f", - "pref_MTD": "\u4eca\u6708" - } -} diff --git a/frontend/src/i18n/ko_KR/index.js b/frontend/src/i18n/ko_KR/index.js deleted file mode 100644 index c8eff4e54b..0000000000 --- a/frontend/src/i18n/ko_KR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ko", - "month_and_day_fns": "y\ub144 MMMM d\uc77c" - }, - "form": { - "name": "\uc774\ub984", - "amount_min": "\ucd5c\uc18c \uae08\uc561", - "amount_max": "\ucd5c\ub300 \uae08\uc561", - "url": "URL", - "title": "\uc81c\ubaa9", - "first_date": "\ucd5c\ucd08 \uc77c\uc790", - "repetitions": "\ubc18\ubcf5", - "description": "\uc124\uba85", - "iban": "IBAN", - "skip": "\uac74\ub108\ub6f0\uae30", - "date": "\ub0a0\uc9dc" - }, - "list": { - "name": "\uc774\ub984", - "account_number": "\uacc4\uc88c \ubc88\ud638", - "currentBalance": "\ud604\uc7ac \uc794\uace0", - "lastActivity": "\ub9c8\uc9c0\ub9c9 \ud65c\ub3d9", - "active": "\ud65c\uc131 \uc0c1\ud0dc\uc785\ub2c8\uae4c?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\uc608\uc0b0", - "subscriptions": "\uad6c\ub3c5", - "transactions": "\uac70\ub798", - "title_expenses": "\uc9c0\ucd9c", - "title_withdrawal": "\uc9c0\ucd9c", - "title_revenue": "\uc218\uc775 \/ \uc218\uc785", - "title_deposit": "\uc218\uc775 \/ \uc218\uc785", - "title_transfer": "\uc774\uccb4", - "title_transfers": "\uc774\uccb4", - "asset_accounts": "\uc790\uc0b0 \uacc4\uc815", - "expense_accounts": "\uc9c0\ucd9c \uacc4\uc815", - "revenue_accounts": "\uc218\uc775 \uacc4\uc815", - "liabilities_accounts": "\ubd80\ucc44" - }, - "firefly": { - "administration_index": "\uc7ac\uc815 \uad00\ub9ac", - "actions": "\uc561\uc158", - "edit": "\uc218\uc815", - "delete": "\uc0ad\uc81c", - "reconcile": "\uc870\uc815", - "create_new_asset": "\uc0c8 \uc790\uc0b0 \uacc4\uc815 \uc0dd\uc131", - "confirm_action": "\uc561\uc158 \ud655\uc778", - "new_budget": "\uc0c8 \uc608\uc0b0", - "new_asset_account": "\uc0c8 \uc790\uc0b0 \uacc4\uc815", - "newTransfer": "\uc2e0\uaddc \uc774\uccb4", - "submission_options": "\uc81c\ucd9c \uc635\uc158", - "apply_rules_checkbox": "\uaddc\uce59 \uc801\uc6a9", - "fire_webhooks_checkbox": "\uc6f9\ud6c5 \uc2e4\ud589", - "newDeposit": "\uc2e0\uaddc \uc785\uae08", - "newWithdrawal": "\uc2e0\uaddc \ube44\uc6a9", - "bills_paid": "\uccad\uad6c\uc11c \uacb0\uc81c", - "left_to_spend": "\ub0a8\uc740 \uc9c0\ucd9c", - "no_budget": "(\uc608\uc0b0 \uc5c6\uc74c)", - "budgeted": "\uc608\uc0b0", - "spent": "\uc9c0\ucd9c", - "no_bill": "(\uccad\uad6c\uc11c \uc5c6\uc74c)", - "rule_trigger_source_account_starts_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.", - "rule_trigger_source_account_ends_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \ub05d\ub0a9\ub2c8\ub2e4.", - "rule_trigger_source_account_is_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc740...", - "rule_trigger_source_account_contains_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc5d0\ub294 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4.", - "rule_trigger_account_id_choice": "\uacc4\uc815\uc911 \ud558\ub098\uc758 ID\ub294 \uc815\ud655\ud788..", - "rule_trigger_source_account_id_choice": "\uc18c\uc2a4 \uacc4\uc815 ID\ub294 \uc815\ud655\ud788..", - "rule_trigger_destination_account_id_choice": "\ub300\uc0c1 \uacc4\uc815 ID\ub294 \uc815\ud655\ud788..", - "rule_trigger_account_is_cash_choice": "\uacc4\uc815\uc911 \ud558\ub098\ub294 \ud604\uae08\uc785\ub2c8\ub2e4", - "rule_trigger_source_is_cash_choice": "\uc18c\uc2a4 \uacc4\uc815\uc740 (\ud604\uae08) \uacc4\uc815\uc785\ub2c8\ub2e4", - "rule_trigger_destination_is_cash_choice": "\ub300\uc0c1 \uacc4\uc815\uc740 (\ud604\uae08) \uacc4\uc815\uc785\ub2c8\ub2e4", - "rule_trigger_source_account_nr_starts_choice": "\uc18c\uc2a4 \uacc4\uc88c \ubc88\ud638\/IBAN\uc740...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.", - "rule_trigger_source_account_nr_ends_choice": "\uc18c\uc2a4 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740 ...\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_source_account_nr_is_choice": "\uc18c\uc2a4 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740..", - "rule_trigger_source_account_nr_contains_choice": "\uc18c\uc2a4 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740 ..\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_destination_account_starts_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.", - "rule_trigger_destination_account_ends_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_destination_account_is_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740..", - "rule_trigger_destination_account_contains_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740 ...\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_destination_account_nr_starts_choice": "\ub300\uc0c1 \uacc4\uc88c \ubc88\ud638 \/ IBAN\uc740...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4", - "rule_trigger_destination_account_nr_ends_choice": "\ub300\uc0c1 \uacc4\uc88c \ubc88\ud638 \/ IBAN\uc740...\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_destination_account_nr_is_choice": "\ub300\uc0c1 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740..", - "rule_trigger_destination_account_nr_contains_choice": "\ub300\uc0c1 \uacc4\uc88c \ubc88\ud638 \/ IBAN\uc740...\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_transaction_type_choice": "\uac70\ub798\ub294 .. \uc720\ud615\uc785\ub2c8\ub2e4", - "rule_trigger_category_is_choice": "\uce74\ud14c\uace0\ub9ac\ub294 ..", - "rule_trigger_amount_less_choice": "\uae08\uc561\uc774 .. \uc640 \uc791\uac70\ub098 \uac19\uc74c", - "rule_trigger_amount_is_choice": "\uae08\uc561\uc740..", - "rule_trigger_amount_more_choice": "\uae08\uc561\uc774 .. \uc640 \ud06c\uac70\ub098 \uac19\uc74c", - "rule_trigger_description_starts_choice": "\uc124\uba85\uc774 ..\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4", - "rule_trigger_description_ends_choice": "\uc124\uba85\uc774 ..\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_description_contains_choice": "\uc124\uba85\uc740 ..\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_description_is_choice": "\uc124\uba85\uc740..", - "rule_trigger_date_on_choice": "\uac70\ub798 \ub0a0\uc9dc\ub294..", - "rule_trigger_date_before_choice": "\uac70\ub798 \ub0a0\uc9dc\ub294 .. \uc774\uc804\uc785\ub2c8\ub2e4", - "rule_trigger_date_after_choice": "\uac70\ub798 \ub0a0\uc9dc\ub294 .. \uc774\ud6c4\uc785\ub2c8\ub2e4", - "rule_trigger_created_at_on_choice": "\uac70\ub798\uac00 \uc774\ub8e8\uc5b4\uc9c4 \ub0a0\uc9dc\ub294..", - "rule_trigger_updated_at_on_choice": "\uac70\ub798\uac00 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc218\uc815\ub41c \ub0a0\uc9dc\ub294...", - "rule_trigger_budget_is_choice": "\uc608\uc0b0\uc740..", - "rule_trigger_tag_is_choice": "\ubaa8\ub4e0 \ud0dc\uadf8\ub294...", - "rule_trigger_currency_is_choice": "\uac70\ub798 \ud1b5\ud654\ub294..", - "rule_trigger_foreign_currency_is_choice": "\uac70\ub798 \uc678\ud654 \ud1b5\ud654\ub294..", - "rule_trigger_has_attachments_choice": "\ucd5c\uc18c\ud55c \uc774 \uc815\ub3c4\uc758 \ucca8\ubd80 \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4.", - "rule_trigger_has_no_category_choice": "\uce74\ud14c\uace0\ub9ac\uac00 \uc5c6\uc74c", - "rule_trigger_has_any_category_choice": "\uce74\ud14c\uace0\ub9ac\uac00 \uc788\uc74c", - "rule_trigger_has_no_budget_choice": "\uc608\uc0b0\uc774 \uc5c6\uc74c", - "rule_trigger_has_any_budget_choice": "\uc608\uc0b0\uc774 \uc788\uc74c", - "rule_trigger_has_no_bill_choice": "\uccad\uad6c\uc11c\uac00 \uc5c6\uc74c", - "rule_trigger_has_any_bill_choice": "\uccad\uad6c\uc11c\uac00 \uc788\uc74c", - "rule_trigger_has_no_tag_choice": "\ud0dc\uadf8 \uc5c6\uc74c", - "rule_trigger_has_any_tag_choice": "\ud558\ub098 \uc774\uc0c1\uc758 \ud0dc\uadf8\uac00 \uc788\uc74c", - "rule_trigger_any_notes_choice": "\uba54\ubaa8\uac00 \uc788\uc74c", - "rule_trigger_no_notes_choice": "\uba54\ubaa8\uac00 \uc5c6\uc74c", - "rule_trigger_notes_is_choice": "\uba54\ubaa8\ub294..", - "rule_trigger_notes_contains_choice": "\ub178\ud2b8\ub294 \ub2e4\uc74c\uc744 \ud3ec\ud568", - "rule_trigger_notes_starts_choice": "\ub178\ud2b8\ub294 \ub2e4\uc74c\uc73c\ub85c \uc2dc\uc791", - "rule_trigger_notes_ends_choice": "\ub178\ud2b8\ub294 \ub2e4\uc74c\uc73c\ub85c \ub05d\ub0a8", - "rule_trigger_bill_is_choice": "\uccad\uad6c\uc11c\ub294..", - "rule_trigger_external_id_is_choice": "\uc678\ubd80 ID\ub294..", - "rule_trigger_internal_reference_is_choice": "\ub0b4\ubd80 \ucc38\uc870\ub294..", - "rule_trigger_journal_id_choice": "\uac70\ub798 \uc800\ub110 ID\ub294..", - "rule_trigger_any_external_url_choice": "\uac70\ub798\uc5d0 (\uc5b4\ub5a4) \uc678\ubd80 URL\uc774 \uc788\uc74c", - "rule_trigger_no_external_url_choice": "\uac70\ub798\uc5d0 \uc678\ubd80 URL\uc774 \uc5c6\uc2b5\ub2c8\ub2e4", - "rule_trigger_id_choice": "\uac70\ub798 ID\ub294..", - "rule_action_delete_transaction_choice": "\uac70\ub798 \uc0ad\uc81c(!)", - "rule_action_set_category_choice": "\uce74\ud14c\uace0\ub9ac\ub97c .. \ub85c \uc124\uc815", - "rule_action_clear_category_choice": "\uce74\ud14c\uace0\ub9ac \uc9c0\uc6b0\uae30", - "rule_action_set_budget_choice": "\uc608\uc0b0\uc744 .. \ub85c \uc124\uc815", - "rule_action_clear_budget_choice": "\uc608\uc0b0 \uc9c0\uc6b0\uae30", - "rule_action_add_tag_choice": "\ud0dc\uadf8 \ucd94\uac00...", - "rule_action_remove_tag_choice": "\ud0dc\uadf8 \uc81c\uac70 ..", - "rule_action_remove_all_tags_choice": "\ubaa8\ub4e0 \ud0dc\uadf8 \uc81c\uac70", - "rule_action_set_description_choice": "\uc124\uba85\uc744 ..\uc73c\ub85c \uc124\uc815", - "rule_action_update_piggy_choice": "\uc800\uae08\ud1b5\uc5d0 \uac70\ub798\uae08\uc561 \ucd94\uac00\/\uc81c\uac70 ..", - "rule_action_append_description_choice": "..\ub85c \uc124\uba85 \ucd94\uac00", - "rule_action_prepend_description_choice": "..\ub85c \uc124\uba85\uc55e\uc5d0 \ucd94\uac00", - "rule_action_set_source_account_choice": "\uc18c\uc2a4 \uacc4\uc815\uc744 ..\ub85c \uc124\uc815", - "rule_action_set_destination_account_choice": "\ub300\uc0c1 \uacc4\uc815\uc744 ..\ub85c \uc124\uc815", - "rule_action_append_notes_choice": "..\ub85c \uba54\ubaa8 \ucd94\uac00", - "rule_action_prepend_notes_choice": "\ub178\ud2b8 \uc55e\uc5d0 .. \ucd94\uac00", - "rule_action_clear_notes_choice": "\ub178\ud2b8 \uc81c\uac70", - "rule_action_set_notes_choice": "\ub178\ud2b8\ub97c ..\ub85c \uc124\uc815", - "rule_action_link_to_bill_choice": "\uccad\uad6c\uc11c \ub9c1\ud06c ..", - "rule_action_convert_deposit_choice": "\uac70\ub798\ub97c \uc785\uae08\uc73c\ub85c \uc804\ud658", - "rule_action_convert_withdrawal_choice": "\uac70\ub798\ub97c \ucd9c\uae08\uc73c\ub85c \uc804\ud658", - "rule_action_convert_transfer_choice": "\uac70\ub798\ub97c \uc774\uccb4\ub85c \uc804\ud658", - "placeholder": "[Placeholder]", - "recurrences": "\ubc18\ubcf5 \uac70\ub798", - "title_expenses": "\uc9c0\ucd9c", - "title_withdrawal": "\uc9c0\ucd9c", - "title_revenue": "\uc218\uc775 \/ \uc218\uc785", - "pref_1D": "\ud558\ub8e8", - "pref_1W": "\uc77c\uc8fc\uc77c", - "pref_1M": "\ud55c\ub2ec", - "pref_3M": "3\uac1c\uc6d4 (\ubd84\uae30)", - "pref_6M": "6\uac1c\uc6d4", - "pref_1Y": "1\ub144", - "repeat_freq_yearly": "\uc5f0\uac04", - "repeat_freq_half-year": "\ubc18\ub144\ub9c8\ub2e4", - "repeat_freq_quarterly": "\ubd84\uae30\ubcc4", - "repeat_freq_monthly": "\uc6d4\uac04", - "repeat_freq_weekly": "\uc8fc\uac04", - "single_split": "\ub098\ub204\uae30", - "asset_accounts": "\uc790\uc0b0 \uacc4\uc815", - "expense_accounts": "\uc9c0\ucd9c \uacc4\uc815", - "liabilities_accounts": "\ubd80\ucc44", - "undefined_accounts": "\uacc4\uc815", - "name": "\uc774\ub984", - "revenue_accounts": "\uc218\uc775 \uacc4\uc815", - "description": "\uc124\uba85", - "category": "\uce74\ud14c\uace0\ub9ac", - "title_deposit": "\uc218\uc775 \/ \uc218\uc785", - "title_transfer": "\uc774\uccb4", - "title_transfers": "\uc774\uccb4", - "piggyBanks": "\uc800\uae08\ud1b5", - "rules": "\uaddc\uce59", - "accounts": "\uacc4\uc815", - "categories": "\uce74\ud14c\uace0\ub9ac", - "tags": "\ud0dc\uadf8", - "object_groups_page_title": "\uadf8\ub8f9", - "reports": "\ubcf4\uace0\uc11c", - "webhooks": "\uc6f9\ud6c5", - "currencies": "\ud1b5\ud654", - "administration": "\uad00\ub9ac", - "profile": "\ud504\ub85c\ud544", - "source_account": "\uc18c\uc2a4 \uacc4\uc815", - "destination_account": "\ub300\uc0c1 \uacc4\uc815", - "amount": "\uae08\uc561", - "date": "\ub0a0\uc9dc", - "time": "\uc2dc\uac04", - "preferences": "\ud658\uacbd \uc124\uc815", - "transactions": "\uac70\ub798", - "balance": "\uc794\uace0", - "budgets": "\uc608\uc0b0", - "subscriptions": "\uad6c\ub3c5", - "welcome_back": "\ubb34\uc2a8 \uc77c\uc774\uc8e0?", - "bills_to_pay": "\ub0a9\ubd80\ud560 \uccad\uad6c\uc11c", - "net_worth": "\uc21c\uc790\uc0b0", - "pref_last365": "\uc9c0\ub09c \ud574", - "pref_last90": "\ucd5c\uadfc 90\uc77c", - "pref_last30": "\ucd5c\uadfc 30\uc77c", - "pref_last7": "\ucd5c\uadfc 7\uc77c", - "pref_YTD": "\uc5f0\uac04 \ub204\uacc4", - "pref_QTD": "\ubd84\uae30 \ub204\uacc4", - "pref_MTD": "\uc6d4\uac04 \ub204\uacc4" - } -} diff --git a/frontend/src/i18n/nb_NO/index.js b/frontend/src/i18n/nb_NO/index.js deleted file mode 100644 index b420682f54..0000000000 --- a/frontend/src/i18n/nb_NO/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "nb", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Navn", - "amount_min": "Minimumsbel\u00f8p", - "amount_max": "Maksimumsbel\u00f8p", - "url": "Nettadresse", - "title": "Tittel", - "first_date": "F\u00f8rste dato", - "repetitions": "Repetisjoner", - "description": "Beskrivelse", - "iban": "IBAN", - "skip": "Hopp over", - "date": "Dato" - }, - "list": { - "name": "Navn", - "account_number": "Kontonummer", - "currentBalance": "N\u00e5v\u00e6rende saldo", - "lastActivity": "Siste aktivitet", - "active": "Er aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budsjetter", - "subscriptions": "Abonnementer", - "transactions": "Transaksjoner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "asset_accounts": "Aktivakonto", - "expense_accounts": "Utgiftskonto", - "revenue_accounts": "Inntektskontoer", - "liabilities_accounts": "Gjeld" - }, - "firefly": { - "administration_index": "\u00d8konomisk administrasjon", - "actions": "Handlinger", - "edit": "Rediger", - "delete": "Slett", - "reconcile": "Avstem", - "create_new_asset": "Opprett ny aktivakonto", - "confirm_action": "Bekreft handling", - "new_budget": "Nytt budsjett", - "new_asset_account": "Ny aktivakonto", - "newTransfer": "Ny overf\u00f8ring", - "submission_options": "Alternativer for innsending", - "apply_rules_checkbox": "Bruk regler", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nytt innskudd", - "newWithdrawal": "Ny utgift", - "bills_paid": "Regninger betalt", - "left_to_spend": "Igjen \u00e5 bruke", - "no_budget": "(ingen budsjett)", - "budgeted": "Budsjettert", - "spent": "Brukt", - "no_bill": "(ingen regning)", - "rule_trigger_source_account_starts_choice": "Kildekonto navn starter med..", - "rule_trigger_source_account_ends_choice": "Kildenavnet slutter med..", - "rule_trigger_source_account_is_choice": "Kildekonto navn er..", - "rule_trigger_source_account_contains_choice": "Kildekonto navn inneholder..", - "rule_trigger_account_id_choice": "En av konto ID'er, er n\u00f8yaktig.", - "rule_trigger_source_account_id_choice": "Kildekonto-ID er n\u00f8yaktig..", - "rule_trigger_destination_account_id_choice": "M\u00e5lkonto ID er n\u00f8yaktig..", - "rule_trigger_account_is_cash_choice": "En av konto er kontant", - "rule_trigger_source_is_cash_choice": "Kildekonto er (kontant) konto", - "rule_trigger_destination_is_cash_choice": "M\u00e5lkonto er (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "Kildekontonummer \/ IBAN starter med..", - "rule_trigger_source_account_nr_ends_choice": "Kildekontonummer \/ IBAN slutter med..", - "rule_trigger_source_account_nr_is_choice": "Kildekontonummer \/ IBAN er..", - "rule_trigger_source_account_nr_contains_choice": "Kilde kontonummer \/ IBAN inneholder..", - "rule_trigger_destination_account_starts_choice": "M\u00e5lkontonavnet begynner med..", - "rule_trigger_destination_account_ends_choice": "M\u00e5lkontonavnet slutter med..", - "rule_trigger_destination_account_is_choice": "M\u00e5lkonto navn slutter med..", - "rule_trigger_destination_account_contains_choice": "M\u00e5lkontonavn inneholder..", - "rule_trigger_destination_account_nr_starts_choice": "M\u00e5lkontonummer \/ IBAN starter med..", - "rule_trigger_destination_account_nr_ends_choice": "M\u00e5lkontonummer \/ IBAN slutter med..", - "rule_trigger_destination_account_nr_is_choice": "M\u00e5lkontonummer \/ IBAN er..", - "rule_trigger_destination_account_nr_contains_choice": "M\u00e5lkontonummer \/ IBAN inneholder..", - "rule_trigger_transaction_type_choice": "Transaksjonen er av typen..", - "rule_trigger_category_is_choice": "Kategori er..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Bel\u00f8pet er..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivelse starter med..", - "rule_trigger_description_ends_choice": "Beskrivelse slutter med..", - "rule_trigger_description_contains_choice": "Beskrivelse inneholder..", - "rule_trigger_description_is_choice": "Beskrivelse er..", - "rule_trigger_date_on_choice": "Transaksjonsdato er..", - "rule_trigger_date_before_choice": "Transaksjons dato er f\u00f8r..", - "rule_trigger_date_after_choice": "Transaksjons dato er etter..", - "rule_trigger_created_at_on_choice": "Transaksjonen ble gjort p\u00e5..", - "rule_trigger_updated_at_on_choice": "Transaksjonen ble sist redigert den..", - "rule_trigger_budget_is_choice": "Budsjett er..", - "rule_trigger_tag_is_choice": "(En) tagg er..", - "rule_trigger_currency_is_choice": "Transaksjonsvaluta er..", - "rule_trigger_foreign_currency_is_choice": "Transaksjonens fremmed valuta er..", - "rule_trigger_has_attachments_choice": "Har minst s\u00e5 mange vedlegg", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har en (hvilken som helst) kategori", - "rule_trigger_has_no_budget_choice": "Har ingen budsjett", - "rule_trigger_has_any_budget_choice": "Har et (hvilket som helst) budsjett", - "rule_trigger_has_no_bill_choice": "Har ingen regning", - "rule_trigger_has_any_bill_choice": "Har en regning", - "rule_trigger_has_no_tag_choice": "Har ingen tagg(er)", - "rule_trigger_has_any_tag_choice": "Har en eller flere tagger", - "rule_trigger_any_notes_choice": "Har ett eller flere notater", - "rule_trigger_no_notes_choice": "Har ingen notater", - "rule_trigger_notes_is_choice": "Notater er..", - "rule_trigger_notes_contains_choice": "Notater inneholder..", - "rule_trigger_notes_starts_choice": "Notater begynner med..", - "rule_trigger_notes_ends_choice": "Notater som slutter med..", - "rule_trigger_bill_is_choice": "Regning er..", - "rule_trigger_external_id_is_choice": "Ekstern ID er..", - "rule_trigger_internal_reference_is_choice": "Intern referanse er..", - "rule_trigger_journal_id_choice": "Transaksjonens journal ID er..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaksjonen har ingen ekstern URL", - "rule_trigger_id_choice": "Transaksjons-ID er", - "rule_action_delete_transaction_choice": "SLETT transaksjon(!)", - "rule_action_set_category_choice": "Sett kategori til ..", - "rule_action_clear_category_choice": "T\u00f8m alle kategorier", - "rule_action_set_budget_choice": "Sett budsjett til ..", - "rule_action_clear_budget_choice": "T\u00f8m alle budsjetter", - "rule_action_add_tag_choice": "Legg til tagg ..", - "rule_action_remove_tag_choice": "Fjern tagg ..", - "rule_action_remove_all_tags_choice": "Fjern alle tagger", - "rule_action_set_description_choice": "Sett beskrivelse til ..", - "rule_action_update_piggy_choice": "Legg til \/ fjern transaksjonsbel\u00f8p i sparegris ..", - "rule_action_append_description_choice": "Legg til i beskrivelse ..", - "rule_action_prepend_description_choice": "Legg til foran beskrivelsen med ..", - "rule_action_set_source_account_choice": "Sett kildekonto til ..", - "rule_action_set_destination_account_choice": "Sett m\u00e5lkonto til ..", - "rule_action_append_notes_choice": "Legg til i notater med ..", - "rule_action_prepend_notes_choice": "Legg til foran i notater med ..", - "rule_action_clear_notes_choice": "Fjern notater", - "rule_action_set_notes_choice": "Sett notater til ..", - "rule_action_link_to_bill_choice": "Koble til en regning ..", - "rule_action_convert_deposit_choice": "Konverter transaksjonen til et innskudd", - "rule_action_convert_withdrawal_choice": "Konverter denne transaksjonen til et uttak", - "rule_action_convert_transfer_choice": "Konverter transaksjonen til en overf\u00f8ring", - "placeholder": "[Placeholder]", - "recurrences": "Gjentakende transaksjoner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "pref_1D": "\u00c9n dag", - "pref_1W": "\u00c9n uke", - "pref_1M": "En m\u00e5ned", - "pref_3M": "Tre m\u00e5neder (kvartal)", - "pref_6M": "Seks m\u00e5neder", - "pref_1Y": "Ett \u00e5r", - "repeat_freq_yearly": "\u00e5rlig", - "repeat_freq_half-year": "hvert halv\u00e5r", - "repeat_freq_quarterly": "kvartalsvis", - "repeat_freq_monthly": "m\u00e5nedlig", - "repeat_freq_weekly": "ukentlig", - "single_split": "Del opp", - "asset_accounts": "Aktivakontoer", - "expense_accounts": "Utgiftskontoer", - "liabilities_accounts": "Gjeldskonto", - "undefined_accounts": "Kontoer", - "name": "Navn", - "revenue_accounts": "Inntektskontoer", - "description": "Beskrivelse", - "category": "Kategori", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "piggyBanks": "Sparegriser", - "rules": "Regler", - "accounts": "Kontoer", - "categories": "Kategorier", - "tags": "Tagger", - "object_groups_page_title": "Grupper", - "reports": "Rapporter", - "webhooks": "Webhooks", - "currencies": "Valutaer", - "administration": "Administrasjon", - "profile": "Profil", - "source_account": "Kildekonto", - "destination_account": "Destinasjonskonto", - "amount": "Bel\u00f8p", - "date": "Dato", - "time": "Tid", - "preferences": "Innstillinger", - "transactions": "Transaksjoner", - "balance": "Saldo", - "budgets": "Budsjetter", - "subscriptions": "Abonnementer", - "welcome_back": "Hvordan g\u00e5r det?", - "bills_to_pay": "Regninger \u00e5 betale", - "net_worth": "Formue", - "pref_last365": "I fjor", - "pref_last90": "Siste 90 dager", - "pref_last30": "Siste 30 dagene", - "pref_last7": "Siste 7 dager", - "pref_YTD": "\u00c5r til dato", - "pref_QTD": "Kvartal til dato", - "pref_MTD": "M\u00e5ned til dato" - } -} diff --git a/frontend/src/i18n/nl_NL/index.js b/frontend/src/i18n/nl_NL/index.js deleted file mode 100644 index 9304e0817f..0000000000 --- a/frontend/src/i18n/nl_NL/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "nl", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Naam", - "amount_min": "Minimumbedrag", - "amount_max": "Maximumbedrag", - "url": "URL", - "title": "Titel", - "first_date": "Eerste datum", - "repetitions": "Herhalingen", - "description": "Omschrijving", - "iban": "IBAN", - "skip": "Overslaan", - "date": "Datum" - }, - "list": { - "name": "Naam", - "account_number": "Rekeningnummer", - "currentBalance": "Huidig saldo", - "lastActivity": "Laatste activiteit", - "active": "Actief?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgetten", - "subscriptions": "Abonnementen", - "transactions": "Transacties", - "title_expenses": "Uitgaven", - "title_withdrawal": "Uitgaven", - "title_revenue": "Inkomsten", - "title_deposit": "Inkomsten", - "title_transfer": "Overschrijvingen", - "title_transfers": "Overschrijvingen", - "asset_accounts": "Betaalrekeningen", - "expense_accounts": "Crediteuren", - "revenue_accounts": "Debiteuren", - "liabilities_accounts": "Passiva" - }, - "firefly": { - "administration_index": "Financi\u00eble administratie", - "actions": "Acties", - "edit": "Wijzig", - "delete": "Verwijder", - "reconcile": "Afstemmen", - "create_new_asset": "Nieuwe betaalrekening", - "confirm_action": "Actie bevestigen", - "new_budget": "Nieuw budget", - "new_asset_account": "Nieuwe betaalrekening", - "newTransfer": "Nieuwe overschrijving", - "submission_options": "Inzending opties", - "apply_rules_checkbox": "Regels toepassen", - "fire_webhooks_checkbox": "Webhooks starten", - "newDeposit": "Nieuwe inkomsten", - "newWithdrawal": "Nieuwe uitgave", - "bills_paid": "Betaalde contracten", - "left_to_spend": "Over om uit te geven", - "no_budget": "(geen budget)", - "budgeted": "Gebudgetteerd", - "spent": "Uitgegeven", - "no_bill": "(geen contract)", - "rule_trigger_source_account_starts_choice": "Bronrekeningnaam begint met..", - "rule_trigger_source_account_ends_choice": "Bronrekeningnaam eindigt op..", - "rule_trigger_source_account_is_choice": "Bronrekeningnaam is..", - "rule_trigger_source_account_contains_choice": "Bronrekeningnaam bevat..", - "rule_trigger_account_id_choice": "Bron- of doelrekening-ID is..", - "rule_trigger_source_account_id_choice": "Bronrekening ID is..", - "rule_trigger_destination_account_id_choice": "Doelrekening ID is..", - "rule_trigger_account_is_cash_choice": "Bron- of doelrekening is een cash-rekening", - "rule_trigger_source_is_cash_choice": "Bronrekening is (cash) account", - "rule_trigger_destination_is_cash_choice": "Doelrekening is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Bronrekeningnummer begint met..", - "rule_trigger_source_account_nr_ends_choice": "Bronrekeningnummer eindigt op..", - "rule_trigger_source_account_nr_is_choice": "Bronrekeningnummer \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Bronrekeningnummer \/ IBAN bevat..", - "rule_trigger_destination_account_starts_choice": "Doelrekeningnaam begint met..", - "rule_trigger_destination_account_ends_choice": "Doelrekeningnaam eindigt op..", - "rule_trigger_destination_account_is_choice": "Doelrekeningnaam is..", - "rule_trigger_destination_account_contains_choice": "Doelrekeningnaam bevat..", - "rule_trigger_destination_account_nr_starts_choice": "Doelrekeningnummer \/ IBAN begint met..", - "rule_trigger_destination_account_nr_ends_choice": "Doelrekeningnummer \/ IBAN eindigt op..", - "rule_trigger_destination_account_nr_is_choice": "Doelrekeningnummer \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Doelrekeningnummer \/ IBAN bevat..", - "rule_trigger_transaction_type_choice": "Transactietype is..", - "rule_trigger_category_is_choice": "Categorie is..", - "rule_trigger_amount_less_choice": "Bedrag is kleiner dan of gelijk aan ..", - "rule_trigger_amount_is_choice": "Bedrag is..", - "rule_trigger_amount_more_choice": "Bedrag is groter dan of gelijk aan..", - "rule_trigger_description_starts_choice": "Omschrijving begint met..", - "rule_trigger_description_ends_choice": "Omschrijving eindigt op..", - "rule_trigger_description_contains_choice": "Omschrijving bevat..", - "rule_trigger_description_is_choice": "Omschrijving is..", - "rule_trigger_date_on_choice": "Transactiedatum is..", - "rule_trigger_date_before_choice": "Transactiedatum is v\u00f3\u00f3r..", - "rule_trigger_date_after_choice": "Transactiedatum is na..", - "rule_trigger_created_at_on_choice": "Transactie is gemaakt op..", - "rule_trigger_updated_at_on_choice": "Transactie werd laatst gewijzigd op..", - "rule_trigger_budget_is_choice": "Budget is..", - "rule_trigger_tag_is_choice": "Een tag is..", - "rule_trigger_currency_is_choice": "Transactievaluta is..", - "rule_trigger_foreign_currency_is_choice": "Transactie vreemde valuta is..", - "rule_trigger_has_attachments_choice": "Heeft minstens zoveel bijlagen", - "rule_trigger_has_no_category_choice": "Heeft geen categorie", - "rule_trigger_has_any_category_choice": "Heeft een (welke dan ook) categorie", - "rule_trigger_has_no_budget_choice": "Heeft geen budget", - "rule_trigger_has_any_budget_choice": "Heeft een (welke dan ook) budget", - "rule_trigger_has_no_bill_choice": "Heeft geen contract", - "rule_trigger_has_any_bill_choice": "Heeft een (welke dan ook) contract", - "rule_trigger_has_no_tag_choice": "Heeft geen tag(s)", - "rule_trigger_has_any_tag_choice": "Heeft een of meer tags", - "rule_trigger_any_notes_choice": "Heeft (enige) notities", - "rule_trigger_no_notes_choice": "Heeft geen notities", - "rule_trigger_notes_is_choice": "Notities zijn..", - "rule_trigger_notes_contains_choice": "Notities bevatten..", - "rule_trigger_notes_starts_choice": "Notities beginnen met..", - "rule_trigger_notes_ends_choice": "Notities eindigen op..", - "rule_trigger_bill_is_choice": "Contract is..", - "rule_trigger_external_id_is_choice": "Externe ID is..", - "rule_trigger_internal_reference_is_choice": "Interne referentie is..", - "rule_trigger_journal_id_choice": "Transactiejournaal ID is..", - "rule_trigger_any_external_url_choice": "Transactie heeft een externe URL", - "rule_trigger_no_external_url_choice": "De transactie heeft geen externe URL", - "rule_trigger_id_choice": "Transactie-ID is..", - "rule_action_delete_transaction_choice": "VERWIJDER transactie(!)", - "rule_action_set_category_choice": "Stel categorie in op ..", - "rule_action_clear_category_choice": "Geef geen categorie", - "rule_action_set_budget_choice": "Stel budget in op ..", - "rule_action_clear_budget_choice": "Maak budget-veld leeg", - "rule_action_add_tag_choice": "Voeg tag toe ..", - "rule_action_remove_tag_choice": "Haal tag weg ..", - "rule_action_remove_all_tags_choice": "Haal alle tags weg", - "rule_action_set_description_choice": "Stel beschrijving in op ..", - "rule_action_update_piggy_choice": "Voeg toe \/ verwijder het transactiebedrag in spaarpotje ..", - "rule_action_append_description_choice": "Zet .. achter de omschrijving", - "rule_action_prepend_description_choice": "Zet .. voor de omschrijving", - "rule_action_set_source_account_choice": "Verander bronrekening naar ..", - "rule_action_set_destination_account_choice": "Verander doelrekening naar ..", - "rule_action_append_notes_choice": "Vul notitie aan met ..", - "rule_action_prepend_notes_choice": "Zet .. voor notitie", - "rule_action_clear_notes_choice": "Verwijder notitie", - "rule_action_set_notes_choice": "Stel notities in op ..", - "rule_action_link_to_bill_choice": "Link naar een contract ..", - "rule_action_convert_deposit_choice": "Verander de transactie in inkomsten", - "rule_action_convert_withdrawal_choice": "Verander de transactie in een uitgave", - "rule_action_convert_transfer_choice": "Verander de transactie in een overschrijving", - "placeholder": "[Placeholder]", - "recurrences": "Periodieke transacties", - "title_expenses": "Uitgaven", - "title_withdrawal": "Uitgaven", - "title_revenue": "Inkomsten", - "pref_1D": "E\u00e9n dag", - "pref_1W": "E\u00e9n week", - "pref_1M": "E\u00e9n maand", - "pref_3M": "Drie maanden (kwartaal)", - "pref_6M": "Zes maanden", - "pref_1Y": "E\u00e9n jaar", - "repeat_freq_yearly": "jaarlijks", - "repeat_freq_half-year": "elk half jaar", - "repeat_freq_quarterly": "elk kwartaal", - "repeat_freq_monthly": "maandelijks", - "repeat_freq_weekly": "wekelijks", - "single_split": "Split", - "asset_accounts": "Betaalrekeningen", - "expense_accounts": "Crediteuren", - "liabilities_accounts": "Passiva", - "undefined_accounts": "Rekeningen", - "name": "Naam", - "revenue_accounts": "Debiteuren", - "description": "Omschrijving", - "category": "Categorie", - "title_deposit": "Inkomsten", - "title_transfer": "Overschrijvingen", - "title_transfers": "Overschrijvingen", - "piggyBanks": "Spaarpotjes", - "rules": "Regels", - "accounts": "Rekeningen", - "categories": "Categorie\u00ebn", - "tags": "Tags", - "object_groups_page_title": "Groepen", - "reports": "Overzichten", - "webhooks": "Webhooks", - "currencies": "Valuta", - "administration": "Administratie", - "profile": "Profiel", - "source_account": "Bronrekening", - "destination_account": "Doelrekening", - "amount": "Bedrag", - "date": "Datum", - "time": "Tijd", - "preferences": "Voorkeuren", - "transactions": "Transacties", - "balance": "Saldo", - "budgets": "Budgetten", - "subscriptions": "Abonnementen", - "welcome_back": "Hoe staat het er voor?", - "bills_to_pay": "Openstaande contracten", - "net_worth": "Kapitaal", - "pref_last365": "Afgelopen jaar", - "pref_last90": "Afgelopen 90 dagen", - "pref_last30": "Afgelopen 30 dagen", - "pref_last7": "Afgelopen 7 dagen", - "pref_YTD": "Jaar tot nu", - "pref_QTD": "Kwartaal tot nu", - "pref_MTD": "Maand tot nu" - } -} diff --git a/frontend/src/i18n/nn_NO/index.js b/frontend/src/i18n/nn_NO/index.js deleted file mode 100644 index 3f1b40d011..0000000000 --- a/frontend/src/i18n/nn_NO/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "nn", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Namn", - "amount_min": "Minimumsbel\u00f8p", - "amount_max": "Maksimumsbel\u00f8p", - "url": "Nettadresse", - "title": "Tittel", - "first_date": "F\u00f8rste dato", - "repetitions": "Repetisjoner", - "description": "Beskriving", - "iban": "IBAN", - "skip": "Hopp over", - "date": "Dato" - }, - "list": { - "name": "Namn", - "account_number": "Kontonummer", - "currentBalance": "Noverande saldo", - "lastActivity": "Siste aktivitet", - "active": "Er aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budsjett", - "subscriptions": "Abonnementer", - "transactions": "Transaksjoner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "asset_accounts": "Aktivakonto", - "expense_accounts": "Utgiftskonto", - "revenue_accounts": "Inntektskontoar", - "liabilities_accounts": "Gjeld" - }, - "firefly": { - "administration_index": "\u00d8konomisk administrasjon", - "actions": "Handlinger", - "edit": "Rediger", - "delete": "Slett", - "reconcile": "Avstem", - "create_new_asset": "Opprett ny aktivakonto", - "confirm_action": "Bekreft handling", - "new_budget": "Nytt budsjett", - "new_asset_account": "Ny aktivakonto", - "newTransfer": "Ny overf\u00f8ring", - "submission_options": "Alternativer for innsending", - "apply_rules_checkbox": "Bruk reglar", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nytt innskot", - "newWithdrawal": "Ny utgift", - "bills_paid": "Rekningar betalt", - "left_to_spend": "Igjen \u00e5 bruka", - "no_budget": "(ingen budsjett)", - "budgeted": "Budsjettert", - "spent": "Brukt", - "no_bill": "(ingen rekning)", - "rule_trigger_source_account_starts_choice": "Kjeldekonto namn byrjar med..", - "rule_trigger_source_account_ends_choice": "Kjeldenamnet sluttar med..", - "rule_trigger_source_account_is_choice": "Kjeldekonto namn er..", - "rule_trigger_source_account_contains_choice": "Kjeldekonto namn inneheld..", - "rule_trigger_account_id_choice": "Ein av konto ID'er, er n\u00f8yaktig.", - "rule_trigger_source_account_id_choice": "Kjeldekonto-ID er n\u00f8yaktig..", - "rule_trigger_destination_account_id_choice": "M\u00e5lkonto ID er n\u00f8yaktig..", - "rule_trigger_account_is_cash_choice": "Ein av konto er kontant", - "rule_trigger_source_is_cash_choice": "Kjeldekonto er (kontant) konto", - "rule_trigger_destination_is_cash_choice": "M\u00e5lkonto er (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "Kjeldekontonummer \/ IBAN byrjar med..", - "rule_trigger_source_account_nr_ends_choice": "Kjeldekontonummer \/ IBAN sluttar med..", - "rule_trigger_source_account_nr_is_choice": "Kjeldekontonummer \/ IBAN er..", - "rule_trigger_source_account_nr_contains_choice": "Kjeldekontonummer \/ IBAN inneheld..", - "rule_trigger_destination_account_starts_choice": "M\u00e5lkontonamnet byrjar med..", - "rule_trigger_destination_account_ends_choice": "M\u00e5lkontonamnet sluttar med..", - "rule_trigger_destination_account_is_choice": "M\u00e5lkonto namn sluttar med..", - "rule_trigger_destination_account_contains_choice": "M\u00e5lkontonamn inneheld..", - "rule_trigger_destination_account_nr_starts_choice": "M\u00e5lkontonummer \/ IBAN byrjar med..", - "rule_trigger_destination_account_nr_ends_choice": "M\u00e5lkontonummer \/ IBAN sluttar med..", - "rule_trigger_destination_account_nr_is_choice": "M\u00e5lkontonummer \/ IBAN er..", - "rule_trigger_destination_account_nr_contains_choice": "M\u00e5lkontonummer \/ IBAN inneheld..", - "rule_trigger_transaction_type_choice": "Transaksjonen er av typen..", - "rule_trigger_category_is_choice": "Kategori er..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Bel\u00f8pet er..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivinga byrjar med..", - "rule_trigger_description_ends_choice": "Beskrivinga sluttar med..", - "rule_trigger_description_contains_choice": "Beskrivinga inneheld..", - "rule_trigger_description_is_choice": "Beskrivinga er..", - "rule_trigger_date_on_choice": "Transaksjonsdato er..", - "rule_trigger_date_before_choice": "Transaksjons dato er f\u00f8r..", - "rule_trigger_date_after_choice": "Transaksjons dato er etter..", - "rule_trigger_created_at_on_choice": "Transaksjonen vart gjort p\u00e5..", - "rule_trigger_updated_at_on_choice": "Transaksjonen vart sist redigert den..", - "rule_trigger_budget_is_choice": "Budsjett er..", - "rule_trigger_tag_is_choice": "(Ein) tagg er..", - "rule_trigger_currency_is_choice": "Transaksjonsvaluta er..", - "rule_trigger_foreign_currency_is_choice": "Transaksjonens fremmed valuta er..", - "rule_trigger_has_attachments_choice": "Har minst s\u00e5 mange vedlegg", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har ein (hvilken som helst) kategori", - "rule_trigger_has_no_budget_choice": "Har ingen budsjett", - "rule_trigger_has_any_budget_choice": "Har eit (kva som helst) budsjett", - "rule_trigger_has_no_bill_choice": "Har ingen rekning", - "rule_trigger_has_any_bill_choice": "Har ein rekning", - "rule_trigger_has_no_tag_choice": "Har ingen tagg(ar)", - "rule_trigger_has_any_tag_choice": "Har ein eller fleire tagger", - "rule_trigger_any_notes_choice": "Har notat", - "rule_trigger_no_notes_choice": "Har ikkje notat", - "rule_trigger_notes_is_choice": "Notat er..", - "rule_trigger_notes_contains_choice": "Notat inneheld..", - "rule_trigger_notes_starts_choice": "Notat byrjar med..", - "rule_trigger_notes_ends_choice": "Notat sluttar med..", - "rule_trigger_bill_is_choice": "Rekning er..", - "rule_trigger_external_id_is_choice": "Ekstern ID er..", - "rule_trigger_internal_reference_is_choice": "Intern referanse er..", - "rule_trigger_journal_id_choice": "Transaksjonens journal ID er..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaksjonen har ingen ekstern URL", - "rule_trigger_id_choice": "Transaksjons-ID er", - "rule_action_delete_transaction_choice": "SLETT transaksjon(!)", - "rule_action_set_category_choice": "Sett kategori til ..", - "rule_action_clear_category_choice": "T\u00f8m alle kategoriar", - "rule_action_set_budget_choice": "Sett budsjett til ..", - "rule_action_clear_budget_choice": "T\u00f8m alle budsjett", - "rule_action_add_tag_choice": "Legg til tagg ..", - "rule_action_remove_tag_choice": "Fjern tagg ..", - "rule_action_remove_all_tags_choice": "Fjern alle tagger", - "rule_action_set_description_choice": "Sett beskriving til ..", - "rule_action_update_piggy_choice": "Legg til \/ fjern transaksjonsbel\u00f8p i sparegris ..", - "rule_action_append_description_choice": "Legg til i beskriving ..", - "rule_action_prepend_description_choice": "Legg til foran beskrivinga med ..", - "rule_action_set_source_account_choice": "Sett kjeldekonto til ..", - "rule_action_set_destination_account_choice": "Sett m\u00e5lkonto til ..", - "rule_action_append_notes_choice": "Legg til notat med ..", - "rule_action_prepend_notes_choice": "Legg f\u00f8lgande framfor notat ..", - "rule_action_clear_notes_choice": "Fjern notat", - "rule_action_set_notes_choice": "Sett notat til ..", - "rule_action_link_to_bill_choice": "Koble til ein rekning ..", - "rule_action_convert_deposit_choice": "Konverter transaksjonen til eit innskot", - "rule_action_convert_withdrawal_choice": "Konverter denne transaksjonen til eit uttak", - "rule_action_convert_transfer_choice": "Konverter transaksjonen til ein overf\u00f8ring", - "placeholder": "[Placeholder]", - "recurrences": "Gjentakande transaksjonar", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "pref_1D": "\u00c9n dag", - "pref_1W": "\u00c9n veke", - "pref_1M": "Ein m\u00e5nad", - "pref_3M": "Tre m\u00e5neder (kvartal)", - "pref_6M": "Seks m\u00e5neder", - "pref_1Y": "Ett \u00e5r", - "repeat_freq_yearly": "\u00e5rlig", - "repeat_freq_half-year": "kvart halv\u00e5r", - "repeat_freq_quarterly": "kvartalsvis", - "repeat_freq_monthly": "m\u00e5nedlig", - "repeat_freq_weekly": "ukentlig", - "single_split": "Del opp", - "asset_accounts": "Aktivakontoar", - "expense_accounts": "Utgiftskontoar", - "liabilities_accounts": "Gjeldskonto", - "undefined_accounts": "Kontoar", - "name": "Namn", - "revenue_accounts": "Inntektskontoar", - "description": "Beskriving", - "category": "Kategori", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "piggyBanks": "Sparegriser", - "rules": "Regler", - "accounts": "Kontoar", - "categories": "Kategorier", - "tags": "Tagger", - "object_groups_page_title": "Grupper", - "reports": "Rapportar", - "webhooks": "Webhooks", - "currencies": "Valutaer", - "administration": "Administrasjon", - "profile": "Profil", - "source_account": "Kjeldekonto", - "destination_account": "M\u00e5lkonto", - "amount": "Bel\u00f8p", - "date": "Dato", - "time": "Tid", - "preferences": "Innstillinger", - "transactions": "Transaksjoner", - "balance": "Saldo", - "budgets": "Budsjett", - "subscriptions": "Abonnementer", - "welcome_back": "Korleis g\u00e5r det?", - "bills_to_pay": "Rekningar \u00e5 betala", - "net_worth": "Formue", - "pref_last365": "I fjor", - "pref_last90": "Siste 90 dager", - "pref_last30": "Siste 30 dagene", - "pref_last7": "Siste 7 dager", - "pref_YTD": "\u00c5r til dato", - "pref_QTD": "Kvartal til dato", - "pref_MTD": "M\u00e5ned til dato" - } -} diff --git a/frontend/src/i18n/pl_PL/index.js b/frontend/src/i18n/pl_PL/index.js deleted file mode 100644 index 97a56a93e5..0000000000 --- a/frontend/src/i18n/pl_PL/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "pl", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nazwa", - "amount_min": "Minimalna kwota", - "amount_max": "Maksymalna kwota", - "url": "URL", - "title": "Tytu\u0142", - "first_date": "Data pocz\u0105tkowa", - "repetitions": "Powt\u00f3rzenia", - "description": "Opis", - "iban": "IBAN", - "skip": "Pomi\u0144", - "date": "Data" - }, - "list": { - "name": "Nazwa", - "account_number": "Numer konta", - "currentBalance": "Bie\u017c\u0105ce saldo", - "lastActivity": "Ostatnia aktywno\u015b\u0107", - "active": "Jest aktywny?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Bud\u017cety", - "subscriptions": "Subskrypcje", - "transactions": "Transakcje", - "title_expenses": "Wydatki", - "title_withdrawal": "Wydatki", - "title_revenue": "Przychody \/ dochody", - "title_deposit": "Przych\u00f3d \/ doch\u00f3d", - "title_transfer": "Transfery", - "title_transfers": "Transfery", - "asset_accounts": "Konta aktyw\u00f3w", - "expense_accounts": "Konta wydatk\u00f3w", - "revenue_accounts": "Konta przychod\u00f3w", - "liabilities_accounts": "Zobowi\u0105zania" - }, - "firefly": { - "administration_index": "Zarz\u0105dzanie finansami", - "actions": "Akcje", - "edit": "Modyfikuj", - "delete": "Usu\u0144", - "reconcile": "Uzgodnij", - "create_new_asset": "Utw\u00f3rz nowe konto aktyw\u00f3w", - "confirm_action": "Potwierd\u017a akcj\u0119", - "new_budget": "Nowy bud\u017cet", - "new_asset_account": "Nowe konto aktyw\u00f3w", - "newTransfer": "Nowy transfer", - "submission_options": "Opcje zapisu", - "apply_rules_checkbox": "Zastosuj regu\u0142y", - "fire_webhooks_checkbox": "Uruchom webhooki", - "newDeposit": "Nowa wp\u0142ata", - "newWithdrawal": "Nowy wydatek", - "bills_paid": "Zap\u0142acone rachunki", - "left_to_spend": "Pozosta\u0142o do wydania", - "no_budget": "(brak bud\u017cetu)", - "budgeted": "Zabud\u017cetowano", - "spent": "Wydano", - "no_bill": "(brak rachunku)", - "rule_trigger_source_account_starts_choice": "Konto \u017ar\u00f3d\u0142owe si\u0119 zaczyna od..", - "rule_trigger_source_account_ends_choice": "Konto \u017ar\u00f3d\u0142owe ko\u0144czy si\u0119 na..", - "rule_trigger_source_account_is_choice": "Kontem \u017ar\u00f3d\u0142owym jest..", - "rule_trigger_source_account_contains_choice": "Nazwa konta \u017ar\u00f3d\u0142owego zawiera..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID konta \u017ar\u00f3d\u0142owego to dok\u0142adnie..", - "rule_trigger_destination_account_id_choice": "ID konta docelowego to dok\u0142adnie..", - "rule_trigger_account_is_cash_choice": "Dowolne konto jest kontem got\u00f3wkowym", - "rule_trigger_source_is_cash_choice": "Konto \u017ar\u00f3d\u0142owe to konto (got\u00f3wkowe)", - "rule_trigger_destination_is_cash_choice": "Konto docelowe to konto (got\u00f3wkowe)", - "rule_trigger_source_account_nr_starts_choice": "Numer \/ IBAN konta \u017ar\u00f3d\u0142owego zaczyna si\u0119 od..", - "rule_trigger_source_account_nr_ends_choice": "Numer konta \u017ar\u00f3d\u0142owego \/ IBAN ko\u0144czy si\u0119 na..", - "rule_trigger_source_account_nr_is_choice": "Numer konta \u017ar\u00f3d\u0142owego \/ IBAN to..", - "rule_trigger_source_account_nr_contains_choice": "Numer konta \u017ar\u00f3d\u0142owego \/ IBAN zawiera..", - "rule_trigger_destination_account_starts_choice": "Nazwa konta docelowego zaczyna si\u0119 od..", - "rule_trigger_destination_account_ends_choice": "Nazwa konta docelowego ko\u0144czy si\u0119 na..", - "rule_trigger_destination_account_is_choice": "Nazwa konta docelowego to..", - "rule_trigger_destination_account_contains_choice": "Nazwa konta docelowego zawiera..", - "rule_trigger_destination_account_nr_starts_choice": "Numer konta docelowego \/ IBAN zaczyna si\u0119 od..", - "rule_trigger_destination_account_nr_ends_choice": "Numer konta docelowego \/ IBAN ko\u0144czy si\u0119 na..", - "rule_trigger_destination_account_nr_is_choice": "Numer konta docelowego \/ IBAN to..", - "rule_trigger_destination_account_nr_contains_choice": "Numer konta docelowego \/ IBAN zawiera..", - "rule_trigger_transaction_type_choice": "Transakcja jest typu..", - "rule_trigger_category_is_choice": "Kategoria to..", - "rule_trigger_amount_less_choice": "Kwota jest mniejsza lub r\u00f3wna ..", - "rule_trigger_amount_is_choice": "Kwota to..", - "rule_trigger_amount_more_choice": "Kwota jest wi\u0119ksza lub r\u00f3wna..", - "rule_trigger_description_starts_choice": "Opis zaczyna si\u0119 od..", - "rule_trigger_description_ends_choice": "Opis ko\u0144czy si\u0119 na..", - "rule_trigger_description_contains_choice": "Opis zawiera..", - "rule_trigger_description_is_choice": "Opis to..", - "rule_trigger_date_on_choice": "Data transakcji to..", - "rule_trigger_date_before_choice": "Data transakcji jest przed..", - "rule_trigger_date_after_choice": "Data transakcji jest po..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Bud\u017cet to..", - "rule_trigger_tag_is_choice": "Dowolny tag to..", - "rule_trigger_currency_is_choice": "Waluta transakcji to..", - "rule_trigger_foreign_currency_is_choice": "Waluta obca transakcji to..", - "rule_trigger_has_attachments_choice": "Ma co najmniej podan\u0105 liczb\u0119 za\u0142\u0105cznik\u00f3w", - "rule_trigger_has_no_category_choice": "Brak kategorii", - "rule_trigger_has_any_category_choice": "Ma (dowoln\u0105) kategori\u0119", - "rule_trigger_has_no_budget_choice": "Brak bud\u017cetu", - "rule_trigger_has_any_budget_choice": "Ma (dowolny) bud\u017cet", - "rule_trigger_has_no_bill_choice": "Nie ma rachunku", - "rule_trigger_has_any_bill_choice": "Ma (dowolny) rachunek", - "rule_trigger_has_no_tag_choice": "Brak tag\u00f3w", - "rule_trigger_has_any_tag_choice": "Ma (dowolny) tag (lub kilka)", - "rule_trigger_any_notes_choice": "Ma (dowolne) notatki", - "rule_trigger_no_notes_choice": "Brak notatek", - "rule_trigger_notes_is_choice": "Notatki to..", - "rule_trigger_notes_contains_choice": "Notatki zawieraj\u0105..", - "rule_trigger_notes_starts_choice": "Notatki zaczynaj\u0105 si\u0119 od..", - "rule_trigger_notes_ends_choice": "Notatki ko\u0144cz\u0105 si\u0119 na..", - "rule_trigger_bill_is_choice": "Rachunek to..", - "rule_trigger_external_id_is_choice": "Zewn\u0119trzne ID to..", - "rule_trigger_internal_reference_is_choice": "Wewn\u0119trzne odwo\u0142anie to..", - "rule_trigger_journal_id_choice": "ID dziennika transakcji to..", - "rule_trigger_any_external_url_choice": "Transakcja ma (dowolny) zewn\u0119trzny adres URL", - "rule_trigger_no_external_url_choice": "Transakcja nie ma zewn\u0119trznego adresu URL", - "rule_trigger_id_choice": "Identyfikator transakcji to..", - "rule_action_delete_transaction_choice": "USU\u0143 transakcj\u0119(!)", - "rule_action_set_category_choice": "Ustaw kategori\u0119 na ..", - "rule_action_clear_category_choice": "Wyczy\u015b\u0107 wszystkie kategorie", - "rule_action_set_budget_choice": "Ustaw bud\u017cet na ..", - "rule_action_clear_budget_choice": "Wyczy\u015b\u0107 wszystkie bud\u017cety", - "rule_action_add_tag_choice": "Dodaj tag ..", - "rule_action_remove_tag_choice": "Usu\u0144 tag ..", - "rule_action_remove_all_tags_choice": "Usu\u0144 wszystkie tagi", - "rule_action_set_description_choice": "Ustaw opis na ..", - "rule_action_update_piggy_choice": "Dodaj \/ usu\u0144 kwot\u0119 transakcji w skarbonce ..", - "rule_action_append_description_choice": "Do\u0142\u0105cz do opisu ..", - "rule_action_prepend_description_choice": "Poprzed\u017a opis ..", - "rule_action_set_source_account_choice": "Ustaw konto \u017ar\u00f3d\u0142owe na ..", - "rule_action_set_destination_account_choice": "Ustaw konto docelowe na ..", - "rule_action_append_notes_choice": "Do\u0142\u0105cz do notatek ..", - "rule_action_prepend_notes_choice": "Poprzed\u017a notatki ..", - "rule_action_clear_notes_choice": "Usu\u0144 wszystkie notatki", - "rule_action_set_notes_choice": "Ustaw notatki na ..", - "rule_action_link_to_bill_choice": "Powi\u0105\u017c z rachunkiem ..", - "rule_action_convert_deposit_choice": "Konwertuj transakcj\u0119 na wp\u0142at\u0119", - "rule_action_convert_withdrawal_choice": "Konwertuj transakcj\u0119 na wyp\u0142at\u0119", - "rule_action_convert_transfer_choice": "Konwertuj transakcj\u0119 na transfer", - "placeholder": "[Placeholder]", - "recurrences": "Cykliczne transakcje", - "title_expenses": "Wydatki", - "title_withdrawal": "Wydatki", - "title_revenue": "Przych\u00f3d \/ doch\u00f3d", - "pref_1D": "Dzie\u0144", - "pref_1W": "Tydzie\u0144", - "pref_1M": "Miesi\u0105c", - "pref_3M": "Trzy miesi\u0105ce (kwarta\u0142)", - "pref_6M": "Sze\u015b\u0107 miesi\u0119cy", - "pref_1Y": "Rok", - "repeat_freq_yearly": "rocznie", - "repeat_freq_half-year": "co p\u00f3\u0142 roku", - "repeat_freq_quarterly": "kwartalnie", - "repeat_freq_monthly": "miesi\u0119cznie", - "repeat_freq_weekly": "tygodniowo", - "single_split": "Podzia\u0142", - "asset_accounts": "Konta aktyw\u00f3w", - "expense_accounts": "Konta wydatk\u00f3w", - "liabilities_accounts": "Zobowi\u0105zania", - "undefined_accounts": "Konta", - "name": "Nazwa", - "revenue_accounts": "Konta przychod\u00f3w", - "description": "Opis", - "category": "Kategoria", - "title_deposit": "Przych\u00f3d \/ doch\u00f3d", - "title_transfer": "Transfery", - "title_transfers": "Transfery", - "piggyBanks": "Skarbonki", - "rules": "Regu\u0142y", - "accounts": "Konta", - "categories": "Kategorie", - "tags": "Tagi", - "object_groups_page_title": "Grupy", - "reports": "Raporty", - "webhooks": "Webhooki", - "currencies": "Waluty", - "administration": "Administracja", - "profile": "Profil", - "source_account": "Konto \u017ar\u00f3d\u0142owe", - "destination_account": "Konto docelowe", - "amount": "Kwota", - "date": "Data", - "time": "Czas", - "preferences": "Preferencje", - "transactions": "Transakcje", - "balance": "Saldo", - "budgets": "Bud\u017cety", - "subscriptions": "Subskrypcje", - "welcome_back": "Co jest grane?", - "bills_to_pay": "Rachunki do zap\u0142acenia", - "net_worth": "Warto\u015b\u0107 netto", - "pref_last365": "Ostatni rok", - "pref_last90": "Ostatnie 90 dni", - "pref_last30": "Ostatnie 30 dni", - "pref_last7": "Ostatnie 7 dni", - "pref_YTD": "Rok do daty", - "pref_QTD": "Kwarta\u0142 do daty", - "pref_MTD": "Miesi\u0105c do daty" - } -} diff --git a/frontend/src/i18n/pt_BR/index.js b/frontend/src/i18n/pt_BR/index.js deleted file mode 100644 index b477d61600..0000000000 --- a/frontend/src/i18n/pt_BR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "pt-br", - "month_and_day_fns": "d [de] MMMM [de] y" - }, - "form": { - "name": "Nome", - "amount_min": "Valor M\u00ednimo", - "amount_max": "Valor M\u00e1ximo", - "url": "link", - "title": "T\u00edtulo", - "first_date": "Primeira data", - "repetitions": "Repeti\u00e7\u00f5es", - "description": "Descri\u00e7\u00e3o", - "iban": "IBAN", - "skip": "Pular", - "date": "Data" - }, - "list": { - "name": "Nome", - "account_number": "N\u00famero da conta", - "currentBalance": "Saldo atual", - "lastActivity": "\u00daltima atividade", - "active": "Est\u00e1 ativo?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Or\u00e7amentos", - "subscriptions": "Assinaturas", - "transactions": "Transa\u00e7\u00f5es", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receita \/ Renda", - "title_deposit": "Receita \/ Renda", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "asset_accounts": "Contas de ativos", - "expense_accounts": "Contas de despesas", - "revenue_accounts": "Contas de receitas", - "liabilities_accounts": "Passivos" - }, - "firefly": { - "administration_index": "Administra\u00e7\u00e3o financeira", - "actions": "A\u00e7\u00f5es", - "edit": "Editar", - "delete": "Apagar", - "reconcile": "Reconciliar", - "create_new_asset": "Criar nova conta de ativo", - "confirm_action": "Confirmar a\u00e7\u00e3o", - "new_budget": "Novo or\u00e7amento", - "new_asset_account": "Nova conta de ativo", - "newTransfer": "Nova transfer\u00eancia", - "submission_options": "Op\u00e7\u00f5es de envio", - "apply_rules_checkbox": "Aplicar regras", - "fire_webhooks_checkbox": "Acionar webhooks", - "newDeposit": "Novo dep\u00f3sito", - "newWithdrawal": "Nova despesa", - "bills_paid": "Faturas pagas", - "left_to_spend": "Restante para gastar", - "no_budget": "(sem or\u00e7amento)", - "budgeted": "Or\u00e7ado", - "spent": "Gasto", - "no_bill": "(sem fatura)", - "rule_trigger_source_account_starts_choice": "Nome da conta de origem come\u00e7a com..", - "rule_trigger_source_account_ends_choice": "O nome da conta de origem termina com..", - "rule_trigger_source_account_is_choice": "Nome da conta de origem \u00e9..", - "rule_trigger_source_account_contains_choice": "Nome da conta de origem cont\u00e9m..", - "rule_trigger_account_id_choice": "Ou ID da conta \u00e9 exatamente..", - "rule_trigger_source_account_id_choice": "ID da conta de origem \u00e9 igual a..", - "rule_trigger_destination_account_id_choice": "ID da conta de destino \u00e9 igual a..", - "rule_trigger_account_is_cash_choice": "Ou a conta \u00e9 dinheiro", - "rule_trigger_source_is_cash_choice": "Conta de origem \u00e9 (dinheiro)", - "rule_trigger_destination_is_cash_choice": "Conta de destino \u00e9 (dinheiro)", - "rule_trigger_source_account_nr_starts_choice": "N\u00famero da conta de origem (IBAN) come\u00e7a com..", - "rule_trigger_source_account_nr_ends_choice": "N\u00famero da conta de origem (IBAN) termina com..", - "rule_trigger_source_account_nr_is_choice": "N\u00famero da conta de origem (IBAN) \u00e9..", - "rule_trigger_source_account_nr_contains_choice": "N\u00famero da conta de origem (IBAN) cont\u00e9m..", - "rule_trigger_destination_account_starts_choice": "Nome da conta de destino come\u00e7a com..", - "rule_trigger_destination_account_ends_choice": "Nome da conta de destino termina com..", - "rule_trigger_destination_account_is_choice": "Nome da conta de destino \u00e9..", - "rule_trigger_destination_account_contains_choice": "Nome da conta de destino cont\u00e9m..", - "rule_trigger_destination_account_nr_starts_choice": "N\u00famero da conta de destino (IBAN) come\u00e7a com..", - "rule_trigger_destination_account_nr_ends_choice": "N\u00famero da conta de destino (IBAN) termina com..", - "rule_trigger_destination_account_nr_is_choice": "N\u00famero da conta de destino (IBAN) \u00e9..", - "rule_trigger_destination_account_nr_contains_choice": "N\u00famero da conta de destino (IBAN) cont\u00e9m..", - "rule_trigger_transaction_type_choice": "Transa\u00e7\u00e3o \u00e9 do tipo..", - "rule_trigger_category_is_choice": "A categoria \u00e9..", - "rule_trigger_amount_less_choice": "Valor \u00e9 menor ou igual a ..", - "rule_trigger_amount_is_choice": "Quantia \u00e9..", - "rule_trigger_amount_more_choice": "Valor \u00e9 maior ou igual a..", - "rule_trigger_description_starts_choice": "Descri\u00e7\u00e3o come\u00e7a com..", - "rule_trigger_description_ends_choice": "Descri\u00e7\u00e3o termina com..", - "rule_trigger_description_contains_choice": "Descri\u00e7\u00e3o cont\u00e9m..", - "rule_trigger_description_is_choice": "Descri\u00e7\u00e3o \u00e9..", - "rule_trigger_date_on_choice": "Data da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_date_before_choice": "A data da transa\u00e7\u00e3o \u00e9 anterior a...", - "rule_trigger_date_after_choice": "A data da transa\u00e7\u00e3o \u00e9 posterior a...", - "rule_trigger_created_at_on_choice": "Transa\u00e7\u00e3o foi feita em..", - "rule_trigger_updated_at_on_choice": "Transa\u00e7\u00e3o foi editada pela \u00faltima vez em..", - "rule_trigger_budget_is_choice": "O or\u00e7amento \u00e9..", - "rule_trigger_tag_is_choice": "Qualquer tag \u00e9..", - "rule_trigger_currency_is_choice": "A moeda da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_foreign_currency_is_choice": "A moeda estrangeira da transa\u00e7\u00e3o \u00e9...", - "rule_trigger_has_attachments_choice": "Tem pelo menos essa quantidade de anexos", - "rule_trigger_has_no_category_choice": "N\u00e3o tem categoria", - "rule_trigger_has_any_category_choice": "Tem uma categoria (qualquer)", - "rule_trigger_has_no_budget_choice": "N\u00e3o tem or\u00e7amento", - "rule_trigger_has_any_budget_choice": "Tem um or\u00e7amento (qualquer)", - "rule_trigger_has_no_bill_choice": "N\u00e3o tem nenhuma conta", - "rule_trigger_has_any_bill_choice": "Tem uma fatura (qualquer)", - "rule_trigger_has_no_tag_choice": "N\u00e3o tem tag(s)", - "rule_trigger_has_any_tag_choice": "Tem uma ou mais tags (qualquer)", - "rule_trigger_any_notes_choice": "Tem notas (qualquer)", - "rule_trigger_no_notes_choice": "N\u00e3o tem notas", - "rule_trigger_notes_is_choice": "As notas s\u00e3o..", - "rule_trigger_notes_contains_choice": "As notas cont\u00eam..", - "rule_trigger_notes_starts_choice": "As notas come\u00e7am com..", - "rule_trigger_notes_ends_choice": "As notas terminam com..", - "rule_trigger_bill_is_choice": "Fatura \u00e9..", - "rule_trigger_external_id_is_choice": "ID externo \u00e9..", - "rule_trigger_internal_reference_is_choice": "Refer\u00eancia interna \u00e9..", - "rule_trigger_journal_id_choice": "ID do livro de transa\u00e7\u00e3o \u00e9..", - "rule_trigger_any_external_url_choice": "A transa\u00e7\u00e3o tem uma URL externa (qualquer)", - "rule_trigger_no_external_url_choice": "A transa\u00e7\u00e3o n\u00e3o tem um link externo", - "rule_trigger_id_choice": "O identificador da transa\u00e7\u00e3o \u00e9..", - "rule_action_delete_transaction_choice": "EXCLUIR transa\u00e7\u00e3o(!)", - "rule_action_set_category_choice": "Definir a categoria para ..", - "rule_action_clear_category_choice": "Limpar qualquer categoria", - "rule_action_set_budget_choice": "Definir or\u00e7amento para ..", - "rule_action_clear_budget_choice": "Limpar qualquer or\u00e7amento", - "rule_action_add_tag_choice": "Adicionar tag ..", - "rule_action_remove_tag_choice": "Remover tag ..", - "rule_action_remove_all_tags_choice": "Remover todas as tags", - "rule_action_set_description_choice": "Definir descri\u00e7\u00e3o para ..", - "rule_action_update_piggy_choice": "Adicionar \/ remover o valor da transa\u00e7\u00e3o no cofrinho ..", - "rule_action_append_description_choice": "Adicionar descri\u00e7\u00e3o com ..", - "rule_action_prepend_description_choice": "Adicionar (ao come\u00e7o) descri\u00e7\u00e3o com ..", - "rule_action_set_source_account_choice": "Definir a conta de origem para ..", - "rule_action_set_destination_account_choice": "Definir a conta de destino para ..", - "rule_action_append_notes_choice": "Adicionar notas com ..", - "rule_action_prepend_notes_choice": "Adicionar (ao come\u00e7o) notas com ..", - "rule_action_clear_notes_choice": "Remover quaisquer notas", - "rule_action_set_notes_choice": "Defina notas para..", - "rule_action_link_to_bill_choice": "Vincular a uma fatura ..", - "rule_action_convert_deposit_choice": "Converter esta transfer\u00eancia em entrada", - "rule_action_convert_withdrawal_choice": "Converter esta transa\u00e7\u00e3o para uma sa\u00edda", - "rule_action_convert_transfer_choice": "Converter esta transa\u00e7\u00e3o para transfer\u00eancia", - "placeholder": "[Placeholder]", - "recurrences": "Transa\u00e7\u00f5es recorrentes", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receitas \/ Renda", - "pref_1D": "Um dia", - "pref_1W": "Uma semana", - "pref_1M": "Um m\u00eas", - "pref_3M": "Trimestral", - "pref_6M": "Semestral", - "pref_1Y": "Um ano", - "repeat_freq_yearly": "anual", - "repeat_freq_half-year": "cada semestre", - "repeat_freq_quarterly": "trimestral", - "repeat_freq_monthly": "mensal", - "repeat_freq_weekly": "semanal", - "single_split": "Divis\u00e3o", - "asset_accounts": "Contas de ativo", - "expense_accounts": "Contas de despesas", - "liabilities_accounts": "Passivos", - "undefined_accounts": "Contas", - "name": "Nome", - "revenue_accounts": "Contas de receitas", - "description": "Descri\u00e7\u00e3o", - "category": "Categoria", - "title_deposit": "Receita \/ Renda", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "piggyBanks": "Cofrinhos", - "rules": "Regras", - "accounts": "Contas", - "categories": "Categorias", - "tags": "Tags", - "object_groups_page_title": "Grupos", - "reports": "Relat\u00f3rios", - "webhooks": "Webhooks", - "currencies": "Moedas", - "administration": "Administra\u00e7\u00e3o", - "profile": "Perfil", - "source_account": "Conta origem", - "destination_account": "Conta destino", - "amount": "Valor", - "date": "Data", - "time": "Hor\u00e1rio", - "preferences": "Prefer\u00eancias", - "transactions": "Transa\u00e7\u00f5es", - "balance": "Saldo", - "budgets": "Or\u00e7amentos", - "subscriptions": "Assinaturas", - "welcome_back": "O que est\u00e1 acontecendo?", - "bills_to_pay": "Faturas a pagar", - "net_worth": "Valor L\u00edquido", - "pref_last365": "Ano passado", - "pref_last90": "\u00daltimos 90 dias", - "pref_last30": "\u00daltimos 30 dias", - "pref_last7": "\u00daltimos 7 dias", - "pref_YTD": "Ano at\u00e9 \u00e0 data", - "pref_QTD": "Trimestre at\u00e9 \u00e0 data", - "pref_MTD": "M\u00eas at\u00e9 a data" - } -} diff --git a/frontend/src/i18n/pt_PT/index.js b/frontend/src/i18n/pt_PT/index.js deleted file mode 100644 index 88586edaa0..0000000000 --- a/frontend/src/i18n/pt_PT/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "pt", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nome", - "amount_min": "Montante m\u00ednimo", - "amount_max": "Montante m\u00e1ximo", - "url": "URL", - "title": "T\u00edtulo", - "first_date": "Primeira data", - "repetitions": "Repeti\u00e7\u00f5es", - "description": "Descri\u00e7\u00e3o", - "iban": "IBAN", - "skip": "Pular", - "date": "Data" - }, - "list": { - "name": "Nome", - "account_number": "N\u00famero de conta", - "currentBalance": "Saldo atual", - "lastActivity": "\u00daltima atividade", - "active": "Esta ativo?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Or\u00e7amentos", - "subscriptions": "Subscri\u00e7\u00f5es", - "transactions": "Transa\u00e7\u00f5es", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receita \/ rendimento", - "title_deposit": "Receita \/ rendimento", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "asset_accounts": "Contas de ativos", - "expense_accounts": "Contas de despesas", - "revenue_accounts": "Contas de receitas", - "liabilities_accounts": "Passivos" - }, - "firefly": { - "administration_index": "Administra\u00e7\u00e3o financeira", - "actions": "A\u00e7\u00f5es", - "edit": "Editar", - "delete": "Eliminar", - "reconcile": "Reconciliar", - "create_new_asset": "Criar nova conta de activos", - "confirm_action": "Confirmar a\u00e7\u00e3o", - "new_budget": "Novo or\u00e7amento", - "new_asset_account": "Nova conta de ativos", - "newTransfer": "Nova transfer\u00eancia", - "submission_options": "Op\u00e7\u00f5es de submiss\u00e3o", - "apply_rules_checkbox": "Aplicar regras", - "fire_webhooks_checkbox": "Ativar webhooks", - "newDeposit": "Novo dep\u00f3sito", - "newWithdrawal": "Nova despesa", - "bills_paid": "Encargos pagos", - "left_to_spend": "Restante para gastar", - "no_budget": "(sem or\u00e7amento)", - "budgeted": "Or\u00e7amentado", - "spent": "Gasto", - "no_bill": "(sem encargo)", - "rule_trigger_source_account_starts_choice": "O nome da conta de origem come\u00e7a com..", - "rule_trigger_source_account_ends_choice": "O nome da conta de origem acaba com..", - "rule_trigger_source_account_is_choice": "O nome da conta de origem \u00e9..", - "rule_trigger_source_account_contains_choice": "Nome da conta de origem cont\u00e9m..", - "rule_trigger_account_id_choice": "Qualquer ID de conta \u00e9 exatamente..", - "rule_trigger_source_account_id_choice": "O ID da conta de origem \u00e9 exatamente..", - "rule_trigger_destination_account_id_choice": "O ID da conta de destino \u00e9 exatamente..", - "rule_trigger_account_is_cash_choice": "Qualquer uma das contas \u00e9 de caixa", - "rule_trigger_source_is_cash_choice": "A conta de origem \u00e9 uma conta (caixa)", - "rule_trigger_destination_is_cash_choice": "A conta de destino \u00e9 uma conta (caixa)", - "rule_trigger_source_account_nr_starts_choice": "N\u00famero \/ IBAN da conta de origem come\u00e7a com..", - "rule_trigger_source_account_nr_ends_choice": "N\u00famero \/ IBAN da conta de origem acaba com..", - "rule_trigger_source_account_nr_is_choice": "N\u00famero \/ IBAN da conta de origem \u00e9..", - "rule_trigger_source_account_nr_contains_choice": "O n\u00famero \/ IBAN da conta de origem cont\u00e9m..", - "rule_trigger_destination_account_starts_choice": "Nome da conta de destino come\u00e7a com..", - "rule_trigger_destination_account_ends_choice": "O nome da conta de destino acaba com..", - "rule_trigger_destination_account_is_choice": "O nome da conta de destino \u00e9..", - "rule_trigger_destination_account_contains_choice": "O nome da conta de destino cont\u00e9m..", - "rule_trigger_destination_account_nr_starts_choice": "O n\u00famero \/ IBAN da conta de destino come\u00e7a com..", - "rule_trigger_destination_account_nr_ends_choice": "O n\u00famero \/ IBAN da conta de destino acaba com..", - "rule_trigger_destination_account_nr_is_choice": "O n\u00famero \/ IBAN da conta de destino \u00e9..", - "rule_trigger_destination_account_nr_contains_choice": "O n\u00famero \/ IBAN da conta de destino cont\u00e9m..", - "rule_trigger_transaction_type_choice": "A transa\u00e7\u00e3o \u00e9 do tipo..", - "rule_trigger_category_is_choice": "A categoria \u00e9..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "O montante \u00e9..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "A descri\u00e7\u00e3o come\u00e7a com..", - "rule_trigger_description_ends_choice": "A descri\u00e7\u00e3o termina com..", - "rule_trigger_description_contains_choice": "A descri\u00e7\u00e3o cont\u00e9m..", - "rule_trigger_description_is_choice": "A descri\u00e7\u00e3o \u00e9..", - "rule_trigger_date_on_choice": "A data da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_date_before_choice": "A data da transa\u00e7\u00e3o \u00e9 anterior..", - "rule_trigger_date_after_choice": "A data da transa\u00e7\u00e3o \u00e9 ap\u00f3s..", - "rule_trigger_created_at_on_choice": "A transa\u00e7\u00e3o foi realizada em..", - "rule_trigger_updated_at_on_choice": "A transa\u00e7\u00e3o foi editada pela \u00faltima vez em..", - "rule_trigger_budget_is_choice": "O or\u00e7amento \u00e9..", - "rule_trigger_tag_is_choice": "Uma etiqueta \u00e9..", - "rule_trigger_currency_is_choice": "A moeda da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_foreign_currency_is_choice": "A moeda estrangeira da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_has_attachments_choice": "Tem, pelo menos, esta quantidade de anexos", - "rule_trigger_has_no_category_choice": "N\u00e3o tem categoria", - "rule_trigger_has_any_category_choice": "Tem (pelo menos) uma categoria", - "rule_trigger_has_no_budget_choice": "N\u00e3o tem or\u00e7amento", - "rule_trigger_has_any_budget_choice": "Tem (pelo menos) um or\u00e7amento", - "rule_trigger_has_no_bill_choice": "N\u00e3o tem encargo", - "rule_trigger_has_any_bill_choice": "Tem (pelo menos) um encargo", - "rule_trigger_has_no_tag_choice": "N\u00e3o tem etiquetas", - "rule_trigger_has_any_tag_choice": "Tem uma ou mais etiquetas (quaisquer)", - "rule_trigger_any_notes_choice": "Tem notas (quaisquer)", - "rule_trigger_no_notes_choice": "N\u00e3o tem notas", - "rule_trigger_notes_is_choice": "As notas s\u00e3o..", - "rule_trigger_notes_contains_choice": "As notas cont\u00eam..", - "rule_trigger_notes_starts_choice": "As notas comecam com..", - "rule_trigger_notes_ends_choice": "As notas terminam com..", - "rule_trigger_bill_is_choice": "O encargo \u00e9..", - "rule_trigger_external_id_is_choice": "O ID Externo \u00e9..", - "rule_trigger_internal_reference_is_choice": "A refer\u00eancia interna \u00e9..", - "rule_trigger_journal_id_choice": "O ID do di\u00e1rio de transa\u00e7\u00f5es \u00e9..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "A transa\u00e7\u00e3o n\u00e3o tem nenhum URL externo", - "rule_trigger_id_choice": "ID da transa\u00e7\u00e3o \u00e9..", - "rule_action_delete_transaction_choice": "APAGAR transa\u00e7\u00e3o(!)", - "rule_action_set_category_choice": "Atribuir a categoria..", - "rule_action_clear_category_choice": "Limpar qualquer categoria", - "rule_action_set_budget_choice": "Atribuir o or\u00e7amento..", - "rule_action_clear_budget_choice": "Limpar qualquer or\u00e7amento", - "rule_action_add_tag_choice": "Adicionar etiqueta..", - "rule_action_remove_tag_choice": "Remover etiqueta..", - "rule_action_remove_all_tags_choice": "Remover todas as etiquetas", - "rule_action_set_description_choice": "Atribuir a descri\u00e7\u00e3o..", - "rule_action_update_piggy_choice": "Adicionar \/ remover montante da transa\u00e7\u00e3o ao mealheiro..", - "rule_action_append_description_choice": "Acrescentar ao final da descri\u00e7\u00e3o..", - "rule_action_prepend_description_choice": "Acrescentar ao in\u00edcio da descri\u00e7\u00e3o..", - "rule_action_set_source_account_choice": "Atribuir a conta de origem..", - "rule_action_set_destination_account_choice": "Atribuir a conta de destino..", - "rule_action_append_notes_choice": "Acrescentar ao final das notas..", - "rule_action_prepend_notes_choice": "Preceder notas com..", - "rule_action_clear_notes_choice": "Remover todas as notas", - "rule_action_set_notes_choice": "Atribuir as notas..", - "rule_action_link_to_bill_choice": "Ligar a encargo..", - "rule_action_convert_deposit_choice": "Converter a transa\u00e7\u00e3o num dep\u00f3sito", - "rule_action_convert_withdrawal_choice": "Converter a transa\u00e7\u00e3o num levantamento", - "rule_action_convert_transfer_choice": "Converter a transa\u00e7\u00e3o numa transfer\u00eancia", - "placeholder": "[Placeholder]", - "recurrences": "Transa\u00e7\u00f5es recorrentes", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receita \/ rendimento", - "pref_1D": "Um dia", - "pref_1W": "Uma semana", - "pref_1M": "Um m\u00eas", - "pref_3M": "Tr\u00eas meses (trimestre)", - "pref_6M": "Seis meses", - "pref_1Y": "Um ano", - "repeat_freq_yearly": "anualmente", - "repeat_freq_half-year": "a cada meio ano", - "repeat_freq_quarterly": "trimestral", - "repeat_freq_monthly": "mensalmente", - "repeat_freq_weekly": "semanalmente", - "single_split": "Divis\u00e3o", - "asset_accounts": "Conta de ativos", - "expense_accounts": "Conta de despesas", - "liabilities_accounts": "Conta de passivos", - "undefined_accounts": "Contas", - "name": "Nome", - "revenue_accounts": "Conta de receitas", - "description": "Descri\u00e7\u00e3o", - "category": "Categoria", - "title_deposit": "Receita \/ rendimento", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "piggyBanks": "Mealheiros", - "rules": "Regras", - "accounts": "Contas", - "categories": "Categorias", - "tags": "Etiquetas", - "object_groups_page_title": "Grupos", - "reports": "Relat\u00f3rios", - "webhooks": "Webhooks", - "currencies": "Moedas", - "administration": "Administra\u00e7\u00e3o", - "profile": "Perfil", - "source_account": "Conta de origem", - "destination_account": "Conta de destino", - "amount": "Montante", - "date": "Data", - "time": "Hora", - "preferences": "Prefer\u00eancias", - "transactions": "Transa\u00e7\u00f5es", - "balance": "Saldo", - "budgets": "Or\u00e7amentos", - "subscriptions": "Subscri\u00e7\u00f5es", - "welcome_back": "Painel de controlo", - "bills_to_pay": "Encargos a pagar", - "net_worth": "Posi\u00e7\u00e3o global", - "pref_last365": "No ano passado", - "pref_last90": "\u00daltimos 90 dias", - "pref_last30": "\u00daltimos 30 dias", - "pref_last7": "\u00daltimos 7 dias", - "pref_YTD": "Ano corrente", - "pref_QTD": "Trimestre corrente", - "pref_MTD": "M\u00eas corrente" - } -} diff --git a/frontend/src/i18n/ro_RO/index.js b/frontend/src/i18n/ro_RO/index.js deleted file mode 100644 index d51ad62b74..0000000000 --- a/frontend/src/i18n/ro_RO/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ro", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Nume", - "amount_min": "Suma minim\u0103", - "amount_max": "suma maxim\u0103", - "url": "URL", - "title": "Titlu", - "first_date": "Prima dat\u0103", - "repetitions": "Repet\u0103ri", - "description": "Descriere", - "iban": "IBAN", - "skip": "Sari peste", - "date": "Dat\u0103" - }, - "list": { - "name": "Nume", - "account_number": "Account number", - "currentBalance": "Sold curent", - "lastActivity": "Ultima activitate", - "active": "Este activ?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Ac\u021biuni", - "edit": "Editeaz\u0103", - "delete": "\u0218terge", - "reconcile": "Reconcilia", - "create_new_asset": "Crea\u021bi un nou cont de active", - "confirm_action": "Confirm action", - "new_budget": "Buget nou", - "new_asset_account": "Cont nou de activ", - "newTransfer": "Transfer nou", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Depozit nou", - "newWithdrawal": "Cheltuieli noi", - "bills_paid": "Facturile pl\u0103tite", - "left_to_spend": "Ramas de cheltuit", - "no_budget": "(nici un buget)", - "budgeted": "Bugetat", - "spent": "Cheltuit", - "no_bill": "(f\u0103r\u0103 factur\u0103)", - "rule_trigger_source_account_starts_choice": "Numele contului surs\u0103 \u00eencepe cu..", - "rule_trigger_source_account_ends_choice": "Numele contului surs\u0103 se termin\u0103 cu..", - "rule_trigger_source_account_is_choice": "Numele contului surs\u0103 este..", - "rule_trigger_source_account_contains_choice": "Numele contului surs\u0103 con\u021bine..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID-ul contului surs\u0103 este exact..", - "rule_trigger_destination_account_id_choice": "ID-ul contului destina\u021biei este exact..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Contul surs\u0103 este (numerar)", - "rule_trigger_destination_is_cash_choice": "Contul destina\u021biei este (numerar)", - "rule_trigger_source_account_nr_starts_choice": "Num\u0103rul contului surs\u0103\/IBAN \u00eencepe cu..", - "rule_trigger_source_account_nr_ends_choice": "Num\u0103rul contului surs\u0103\/ IBAN se \u00eencheie cu..", - "rule_trigger_source_account_nr_is_choice": "Num\u0103rul contului surs\u0103\/ IBAN este..", - "rule_trigger_source_account_nr_contains_choice": "Num\u0103rul contului surs\u0103\/ IBAN con\u021bine..", - "rule_trigger_destination_account_starts_choice": "Numele contului de destina\u021bie \u00eencepe cu..", - "rule_trigger_destination_account_ends_choice": "Numele contului de destina\u021bie se \u00eencheie cu..", - "rule_trigger_destination_account_is_choice": "Numele contului destina\u021bie este..", - "rule_trigger_destination_account_contains_choice": "Numele contului destina\u021biei con\u021bine..", - "rule_trigger_destination_account_nr_starts_choice": "Num\u0103rul contului destina\u021biei\/IBAN \u00eencepe cu..", - "rule_trigger_destination_account_nr_ends_choice": "Num\u0103rul contului de destina\u021bie\/IBAN se \u00eencheie cu..", - "rule_trigger_destination_account_nr_is_choice": "Num\u0103rul contului destina\u021biei\/IBAN este..", - "rule_trigger_destination_account_nr_contains_choice": "Num\u0103rul contului de destina\u021bie\/IBAN con\u021bine..", - "rule_trigger_transaction_type_choice": "Tranzac\u021bia este de tip..", - "rule_trigger_category_is_choice": "Categoria este..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Descrierea \u00eencepe cu..", - "rule_trigger_description_ends_choice": "Descrierea se termin\u0103 cu..", - "rule_trigger_description_contains_choice": "Descrierea con\u021bine..", - "rule_trigger_description_is_choice": "Descrierea este..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Data tranzac\u021biei este dinainte..", - "rule_trigger_date_after_choice": "Data tranzac\u021biei este dup\u0103..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Bugetul este..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Moneda tranzac\u021biei este..", - "rule_trigger_foreign_currency_is_choice": "Tranzac\u021bia valutar\u0103 este..", - "rule_trigger_has_attachments_choice": "Are cel pu\u021bin at\u00e2tea ata\u0219amente", - "rule_trigger_has_no_category_choice": "Nu are nici o categorie", - "rule_trigger_has_any_category_choice": "Are o (orice) categorie", - "rule_trigger_has_no_budget_choice": "Nu are niciun buget", - "rule_trigger_has_any_budget_choice": "Are un (orice) buget", - "rule_trigger_has_no_bill_choice": "Nu are factur\u0103", - "rule_trigger_has_any_bill_choice": "Are o (orice) factur\u0103", - "rule_trigger_has_no_tag_choice": "Nu are etichet\u0103 (e)", - "rule_trigger_has_any_tag_choice": "Are una sau mai multe etichete", - "rule_trigger_any_notes_choice": "Are (orice) noti\u021be", - "rule_trigger_no_notes_choice": "Nu are noti\u021be", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Factura este..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "ID-ul jurnalului de tranzac\u021bie este..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u0218terge\u021bi any category", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u0218terge\u021bi any budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Elimina\u021bi toate etichetele", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Elimina\u021bi orice noti\u021b\u0103", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Transforma\u021bi tranzac\u021bia \u00eentr-un depozit", - "rule_action_convert_withdrawal_choice": "Transforma\u021bi tranzac\u021bia \u00eentr-o retragere", - "rule_action_convert_transfer_choice": "Transforma\u021bi tranzac\u021bia \u00eentr-un transfer", - "placeholder": "[Placeholder]", - "recurrences": "Tranzac\u021bii recurente", - "title_expenses": "Cheltuieli", - "title_withdrawal": "Cheltuieli", - "title_revenue": "Venituri", - "pref_1D": "O zi", - "pref_1W": "O saptam\u00e2n\u0103", - "pref_1M": "O lun\u0103", - "pref_3M": "Trei luni (trimestru)", - "pref_6M": "\u0218ase luni", - "pref_1Y": "Un an", - "repeat_freq_yearly": "anual", - "repeat_freq_half-year": "fiecare jum\u0103tate de an", - "repeat_freq_quarterly": "trimestrial", - "repeat_freq_monthly": "lunar", - "repeat_freq_weekly": "s\u0103pt\u0103m\u00e2nal", - "single_split": "\u00cemparte", - "asset_accounts": "Conturile de active", - "expense_accounts": "Conturi de cheltuieli", - "liabilities_accounts": "Provizioane", - "undefined_accounts": "Accounts", - "name": "Nume", - "revenue_accounts": "Conturi de venituri", - "description": "Descriere", - "category": "Categorie", - "title_deposit": "Venituri", - "title_transfer": "Transferuri", - "title_transfers": "Transferuri", - "piggyBanks": "Pu\u0219culi\u021b\u0103", - "rules": "Reguli", - "accounts": "Conturi", - "categories": "Categorii", - "tags": "Etichete", - "object_groups_page_title": "Grupuri", - "reports": "Rapoarte", - "webhooks": "Webhook-uri", - "currencies": "Monede", - "administration": "Administrare", - "profile": "Profil", - "source_account": "Contul surs\u0103", - "destination_account": "Contul de destina\u021bie", - "amount": "Sum\u0103", - "date": "Dat\u0103", - "time": "Timp", - "preferences": "Preferin\u021be", - "transactions": "Tranzac\u021bii", - "balance": "Balant\u0103", - "budgets": "Buget", - "subscriptions": "Subscriptions", - "welcome_back": "Ce se red\u0103?", - "bills_to_pay": "Facturile de plat\u0103", - "net_worth": "Valoarea net\u0103", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/ru_RU/index.js b/frontend/src/i18n/ru_RU/index.js deleted file mode 100644 index 7a9fd1561b..0000000000 --- a/frontend/src/i18n/ru_RU/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ru", - "month_and_day_fns": "D MMMM YYYY" - }, - "form": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "amount_min": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430", - "amount_max": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430", - "url": "\u0421\u0441\u044b\u043b\u043a\u0430", - "title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", - "first_date": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0430\u0442\u0430", - "repetitions": "\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "iban": "IBAN", - "skip": "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c", - "date": "\u0414\u0430\u0442\u0430" - }, - "list": { - "name": "\u0418\u043c\u044f", - "account_number": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430", - "currentBalance": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441", - "lastActivity": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c", - "active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442", - "subscriptions": "\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_withdrawal": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_revenue": "\u0414\u043e\u0445\u043e\u0434\u044b \/ \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f", - "title_deposit": "\u0414\u043e\u0445\u043e\u0434\u044b \/ \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f", - "title_transfer": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434", - "title_transfers": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u044b", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430", - "expense_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432", - "revenue_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0434\u043e\u0445\u043e\u0434\u043e\u0432", - "liabilities_accounts": "\u0414\u043e\u043b\u0433\u0438" - }, - "firefly": { - "administration_index": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438", - "actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", - "edit": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c", - "delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c", - "reconcile": "\u0421\u0432\u0435\u0440\u0438\u0442\u044c", - "create_new_asset": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0447\u0451\u0442", - "confirm_action": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", - "new_budget": "\u041d\u043e\u0432\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442", - "new_asset_account": "\u041d\u043e\u0432\u044b\u0439 \u0441\u0447\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043e\u0432", - "newTransfer": "\u041d\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434", - "submission_options": "\u041e\u043f\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438", - "apply_rules_checkbox": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u0445\u043e\u0434", - "newWithdrawal": "\u041d\u043e\u0432\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434", - "bills_paid": "\u041e\u043f\u043b\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430", - "left_to_spend": "\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c", - "no_budget": "(\u0432\u043d\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0430)", - "budgeted": "\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0431\u044e\u0434\u0436\u0435\u0442\u0435", - "spent": "\u0420\u0430\u0441\u0445\u043e\u0434", - "no_bill": "(\u043d\u0435\u0442 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443)", - "rule_trigger_source_account_starts_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_source_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_is_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430..", - "rule_trigger_source_account_contains_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441..", - "rule_trigger_destination_account_id_choice": "ID \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441..", - "rule_trigger_account_is_cash_choice": "\u041b\u044e\u0431\u043e\u0439 \u0441\u0447\u0435\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u043d\u044b\u043c\u0438", - "rule_trigger_source_is_cash_choice": "\u0421\u0447\u0451\u0442-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a - \u044d\u0442\u043e (\u043d\u0430\u043b\u0438\u0447\u043d\u044b\u0439) \u0441\u0447\u0451\u0442", - "rule_trigger_destination_is_cash_choice": "\u0421\u0447\u0451\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - \u044d\u0442\u043e (\u043d\u0430\u043b\u0438\u0447\u043d\u044b\u0439) \u0441\u0447\u0451\u0442", - "rule_trigger_source_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_source_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN..", - "rule_trigger_source_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_destination_account_starts_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_destination_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_is_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f..", - "rule_trigger_destination_account_contains_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_destination_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \/ IBAN \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_destination_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \/ IBAN \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \/ IBAN..", - "rule_trigger_destination_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \/ IBAN \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_transaction_type_choice": "\u0422\u0438\u043f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 =", - "rule_trigger_category_is_choice": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f =", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "\u0421\u0443\u043c\u043c\u0430..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441...", - "rule_trigger_description_ends_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430...", - "rule_trigger_description_contains_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442...", - "rule_trigger_description_is_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 =", - "rule_trigger_date_on_choice": "\u0414\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438..", - "rule_trigger_date_before_choice": "\u0414\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e...", - "rule_trigger_date_after_choice": "\u0414\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435..", - "rule_trigger_created_at_on_choice": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0430..", - "rule_trigger_updated_at_on_choice": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438..", - "rule_trigger_budget_is_choice": "\u0411\u044e\u0434\u0436\u0435\u0442 =", - "rule_trigger_tag_is_choice": "\u041b\u044e\u0431\u043e\u0439 \u0442\u0435\u0433..", - "rule_trigger_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 -", - "rule_trigger_foreign_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 -", - "rule_trigger_has_attachments_choice": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439", - "rule_trigger_has_no_category_choice": "\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "rule_trigger_has_any_category_choice": "\u0421\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 (\u043b\u044e\u0431\u043e\u0439) \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0435\u0439", - "rule_trigger_has_no_budget_choice": "\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430", - "rule_trigger_has_any_budget_choice": "\u0421\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 (\u043b\u044e\u0431\u044b\u043c) \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c", - "rule_trigger_has_no_bill_choice": "\u041d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0447\u0435\u0442\u043e\u0432", - "rule_trigger_has_any_bill_choice": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 (\u043b\u044e\u0431\u043e\u0439) \u0441\u0447\u0451\u0442", - "rule_trigger_has_no_tag_choice": "\u041d\u0435\u0442 \u043c\u0435\u0442\u043e\u043a", - "rule_trigger_has_any_tag_choice": "\u0415\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e (\u043b\u044e\u0431\u044b\u0445) \u043c\u0435\u0442\u043e\u043a", - "rule_trigger_any_notes_choice": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 (\u043b\u044e\u0431\u044b\u0435) \u0437\u0430\u043c\u0435\u0442\u043a\u0438", - "rule_trigger_no_notes_choice": "\u041d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u043e\u043a", - "rule_trigger_notes_is_choice": "\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f..", - "rule_trigger_notes_contains_choice": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442..", - "rule_trigger_notes_starts_choice": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441..", - "rule_trigger_notes_ends_choice": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_bill_is_choice": "\u0421\u0447\u0451\u0442 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 = ..", - "rule_trigger_external_id_is_choice": "\u0412\u043d\u0435\u0448\u043d\u0438\u0439 ID..", - "rule_trigger_internal_reference_is_choice": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0430..", - "rule_trigger_journal_id_choice": "ID \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "\u0423 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e URL", - "rule_trigger_id_choice": "ID \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0435\u0442\u043a\u0438...", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0437\u0430\u043c\u0435\u0442\u043a\u0438", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u0434\u043e\u0445\u043e\u0434", - "rule_action_convert_withdrawal_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u0440\u0430\u0441\u0445\u043e\u0434", - "rule_action_convert_transfer_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434", - "placeholder": "[Placeholder]", - "recurrences": "\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_withdrawal": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_revenue": "\u0414\u043e\u0445\u043e\u0434", - "pref_1D": "\u041e\u0434\u0438\u043d \u0434\u0435\u043d\u044c", - "pref_1W": "\u041e\u0434\u043d\u0430 \u043d\u0435\u0434\u0435\u043b\u044f", - "pref_1M": "\u041e\u0434\u0438\u043d \u043c\u0435\u0441\u044f\u0446", - "pref_3M": "\u0422\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 (\u043a\u0432\u0430\u0440\u0442\u0430\u043b)", - "pref_6M": "\u0428\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432", - "pref_1Y": "\u041e\u0434\u0438\u043d \u0433\u043e\u0434", - "repeat_freq_yearly": "\u0435\u0436\u0435\u0433\u043e\u0434\u043d\u043e", - "repeat_freq_half-year": "\u0440\u0430\u0437 \u0432 \u043f\u043e\u043b\u0433\u043e\u0434\u0430", - "repeat_freq_quarterly": "\u0440\u0430\u0437 \u0432 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "repeat_freq_monthly": "\u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e", - "repeat_freq_weekly": "\u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e", - "single_split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430", - "expense_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432", - "liabilities_accounts": "\u0414\u043e\u043b\u0433\u0438", - "undefined_accounts": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "revenue_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0434\u043e\u0445\u043e\u0434\u043e\u0432", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "title_deposit": "\u0414\u043e\u0445\u043e\u0434", - "title_transfer": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u044b", - "title_transfers": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u044b", - "piggyBanks": "\u041a\u043e\u043f\u0438\u043b\u043a\u0438", - "rules": "\u041f\u0440\u0430\u0432\u0438\u043b\u0430", - "accounts": "\u0421\u0447\u0435\u0442\u0430", - "categories": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "tags": "\u041c\u0435\u0442\u043a\u0438", - "object_groups_page_title": "\u0413\u0440\u0443\u043f\u043f\u044b", - "reports": "\u041e\u0442\u0447\u0451\u0442\u044b", - "webhooks": "\u0412\u0435\u0431-\u0445\u0443\u043a\u0438", - "currencies": "\u0412\u0430\u043b\u044e\u0442\u044b", - "administration": "\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", - "profile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c", - "source_account": "\u0421\u0447\u0451\u0442-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a", - "destination_account": "\u0421\u0447\u0451\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f", - "amount": "\u0421\u0443\u043c\u043c\u0430", - "date": "\u0414\u0430\u0442\u0430", - "time": "\u0412\u0440\u0435\u043c\u044f", - "preferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "balance": "\u0411a\u043ba\u043dc", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442", - "subscriptions": "\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438", - "welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?", - "bills_to_pay": "\u0421\u0447\u0435\u0442\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435", - "net_worth": "\u041c\u043e\u0438 \u0441\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u044f", - "pref_last365": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0433\u043e\u0434", - "pref_last90": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 90 \u0434\u043d\u0435\u0439", - "pref_last30": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 30 \u0434\u043d\u0435\u0439", - "pref_last7": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 7 \u0434\u043d\u0435\u0439", - "pref_YTD": "\u0417\u0430 \u0433\u043e\u0434 \u0434\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f", - "pref_QTD": "\u041a\u0432\u0430\u0440\u0442\u0430\u043b \u0434\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f", - "pref_MTD": "\u041c\u0435\u0441\u044f\u0446 \u0434\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f" - } -} diff --git a/frontend/src/i18n/sk_SK/index.js b/frontend/src/i18n/sk_SK/index.js deleted file mode 100644 index 0611c91eea..0000000000 --- a/frontend/src/i18n/sk_SK/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "sk", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "N\u00e1zov", - "amount_min": "Minim\u00e1lna suma", - "amount_max": "Maxim\u00e1lna suma", - "url": "URL", - "title": "N\u00e1zov", - "first_date": "Prv\u00fd d\u00e1tum", - "repetitions": "Opakovan\u00ed", - "description": "Popis", - "iban": "IBAN", - "skip": "Presko\u010di\u0165", - "date": "D\u00e1tum" - }, - "list": { - "name": "Meno\/N\u00e1zov", - "account_number": "Account number", - "currentBalance": "Aktu\u00e1lny zostatok", - "lastActivity": "Posledn\u00e1 aktivita", - "active": "Akt\u00edvne?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Akcie", - "edit": "Upravi\u0165", - "delete": "Odstr\u00e1ni\u0165", - "reconcile": "Vy\u00fa\u010dtova\u0165", - "create_new_asset": "Vytvori\u0165 nov\u00fd \u00fa\u010det akt\u00edv", - "confirm_action": "Confirm action", - "new_budget": "Nov\u00fd rozpo\u010det", - "new_asset_account": "Nov\u00fd \u00fa\u010det akt\u00edv", - "newTransfer": "Nov\u00fd p\u0159evod", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nov\u00fd vklad", - "newWithdrawal": "Nov\u00fd v\u00fddavok", - "bills_paid": "Zaplaten\u00e9 \u00fa\u010dty", - "left_to_spend": "Zost\u00e1va k \u00fatrate", - "no_budget": "(\u017eiadny rozpo\u010det)", - "budgeted": "Rozpo\u010dtovan\u00e9", - "spent": "Utraten\u00e9", - "no_bill": "(\u017eiadny \u00fa\u010det)", - "rule_trigger_source_account_starts_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu za\u010d\u00edna..", - "rule_trigger_source_account_ends_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu kon\u010d\u00ed..", - "rule_trigger_source_account_is_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu je..", - "rule_trigger_source_account_contains_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu obsahuje..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID zdrojov\u00e9ho \u00fa\u010dtu je presne..", - "rule_trigger_destination_account_id_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu je presne..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Zdrojov\u00fd \u00fa\u010det je (hotovostn\u00fd) \u00fa\u010det", - "rule_trigger_destination_is_cash_choice": "Cie\u013eov\u00fd \u00fa\u010det je (hotovostn\u00fd) \u00fa\u010det", - "rule_trigger_source_account_nr_starts_choice": "\u010c\u00edslo cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN za\u010d\u00edna..", - "rule_trigger_source_account_nr_ends_choice": "\u010c\u00edslo zdrojov\u00e9ho \u00fa\u010dtu \/ IBAN kon\u010d\u00ed..", - "rule_trigger_source_account_nr_is_choice": "\u010c\u00edslo zdrojov\u00e9ho \u00fa\u010dtu \/ IBAN je..", - "rule_trigger_source_account_nr_contains_choice": "\u010c\u00edslo zdrojov\u00e9ho \u00fa\u010dtu \/ IBAN obsahuje..", - "rule_trigger_destination_account_starts_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu za\u010d\u00edna..", - "rule_trigger_destination_account_ends_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu kon\u010d\u00ed..", - "rule_trigger_destination_account_is_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu je..", - "rule_trigger_destination_account_contains_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu obsahuje..", - "rule_trigger_destination_account_nr_starts_choice": "\u010c\u00edslo cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN za\u010d\u00edna..", - "rule_trigger_destination_account_nr_ends_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN kon\u010d\u00ed..", - "rule_trigger_destination_account_nr_is_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN je..", - "rule_trigger_destination_account_nr_contains_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN obsahuje..", - "rule_trigger_transaction_type_choice": "Transakcia je typu..", - "rule_trigger_category_is_choice": "Kateg\u00f3ria je..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Popis za\u010d\u00edna..", - "rule_trigger_description_ends_choice": "Popis kon\u010d\u00ed..", - "rule_trigger_description_contains_choice": "Popis obsahuje..", - "rule_trigger_description_is_choice": "Popis je..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "D\u00e1tum transakcie je pred..", - "rule_trigger_date_after_choice": "D\u00e1tum transakcie je po..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Rozpo\u010det je\u2026", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Mena transakcie je..", - "rule_trigger_foreign_currency_is_choice": "Cudzia mena transakcie je..", - "rule_trigger_has_attachments_choice": "M\u00e1 po\u010det pr\u00edloh minim\u00e1lne", - "rule_trigger_has_no_category_choice": "Nem\u00e1 \u017eiadnu kateg\u00f3riu", - "rule_trigger_has_any_category_choice": "M\u00e1 (\u013eubovo\u013en\u00fa) kateg\u00f3riu", - "rule_trigger_has_no_budget_choice": "Nem\u00e1 \u017eiadny rozpo\u010det", - "rule_trigger_has_any_budget_choice": "M\u00e1 (\u013eubovo\u013en\u00fd) rozpo\u010det", - "rule_trigger_has_no_bill_choice": "Nem\u00e1 \u017eiadny \u00fa\u010det", - "rule_trigger_has_any_bill_choice": "M\u00e1 (\u013eubovo\u013en\u00fd) \u00fa\u010det", - "rule_trigger_has_no_tag_choice": "Nem\u00e1 \u017eiadne \u0161t\u00edtky", - "rule_trigger_has_any_tag_choice": "M\u00e1 jeden alebo viac \u0161t\u00edtkov", - "rule_trigger_any_notes_choice": "M\u00e1 (ak\u00e9ko\u013evek) pozn\u00e1mky", - "rule_trigger_no_notes_choice": "Nem\u00e1 \u017eiadne pozn\u00e1mky", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "\u00da\u010det je..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "ID denn\u00edka transakci\u00ed je..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Odstr\u00e1ni\u0165 v\u0161etky kateg\u00f3rie", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Odste\u00e1ni\u0165 v\u0161etky rozpo\u010dty", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Odstr\u00e1ni\u0165 v\u0161etky \u0161t\u00edtky", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Odstr\u00e1ni\u0165 v\u0161etky pozn\u00e1mky", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Zmeni\u0165 t\u00fato transakciu na vklad", - "rule_action_convert_withdrawal_choice": "Zmeni\u0165 transakciu na v\u00fdb\u011br", - "rule_action_convert_transfer_choice": "Zmeni\u0165 t\u00fato transakciu na prevod", - "placeholder": "[Placeholder]", - "recurrences": "Opakovan\u00e9 transakcie", - "title_expenses": "V\u00fddavky", - "title_withdrawal": "V\u00fddavky", - "title_revenue": "Zisky \/ pr\u00edjmy", - "pref_1D": "Jeden de\u0148", - "pref_1W": "Jeden t\u00fd\u017ede\u0148", - "pref_1M": "Jeden mesiac", - "pref_3M": "Tri mesiace (\u0161tvr\u0165rok)", - "pref_6M": "\u0160es\u0165 mesiacov", - "pref_1Y": "Jeden rok", - "repeat_freq_yearly": "ro\u010dne", - "repeat_freq_half-year": "polro\u010dne", - "repeat_freq_quarterly": "\u0161tvr\u0165ro\u010dne", - "repeat_freq_monthly": "mesa\u010dne", - "repeat_freq_weekly": "t\u00fd\u017edenne", - "single_split": "Roz\u00fa\u010dtova\u0165", - "asset_accounts": "\u00da\u010dty akt\u00edv", - "expense_accounts": "V\u00fddavkov\u00e9 \u00fa\u010dty", - "liabilities_accounts": "Z\u00e1v\u00e4zky", - "undefined_accounts": "Accounts", - "name": "N\u00e1zov", - "revenue_accounts": "V\u00fdnosov\u00e9 \u00fa\u010dty", - "description": "Popis", - "category": "Kateg\u00f3ria", - "title_deposit": "Zisky \/ pr\u00edjmy", - "title_transfer": "Prevody", - "title_transfers": "Prevody", - "piggyBanks": "Pokladni\u010dky", - "rules": "Pravidl\u00e1", - "accounts": "\u00da\u010dty", - "categories": "Kateg\u00f3rie", - "tags": "\u0160t\u00edtky", - "object_groups_page_title": "Skupiny", - "reports": "V\u00fdkazy", - "webhooks": "Webhooky", - "currencies": "Meny", - "administration": "Spr\u00e1va", - "profile": "Profil", - "source_account": "Zdrojov\u00fd \u00fa\u010det", - "destination_account": "Cie\u013eov\u00fd \u00fa\u010det", - "amount": "Suma", - "date": "D\u00e1tum", - "time": "\u010cas", - "preferences": "Mo\u017enosti", - "transactions": "Transakcie", - "balance": "Zostatok", - "budgets": "Rozpo\u010dty", - "subscriptions": "Subscriptions", - "welcome_back": "Ako to ide?", - "bills_to_pay": "\u00da\u010dty na \u00fahradu", - "net_worth": "\u010cist\u00e9 imanie", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/sl_SI/index.js b/frontend/src/i18n/sl_SI/index.js deleted file mode 100644 index 6a47659bc3..0000000000 --- a/frontend/src/i18n/sl_SI/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "sl", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Ime", - "amount_min": "Najni\u017eji znesek", - "amount_max": "Najvi\u0161ji znesek", - "url": "URL", - "title": "Naslov", - "first_date": "Prvi datum", - "repetitions": "Ponovitve", - "description": "Opis", - "iban": "IBAN", - "skip": "Presko\u010di", - "date": "Datum" - }, - "list": { - "name": "ime", - "account_number": "\u0160tevilka ra\u010duna", - "currentBalance": "trenutno stanje", - "lastActivity": "zadnja aktivnost", - "active": "Aktiviran?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Prora\u010duni", - "subscriptions": "Naro\u010dnine", - "transactions": "Transakcije", - "title_expenses": "Stro\u0161ki", - "title_withdrawal": "Stro\u0161ki", - "title_revenue": "Dohodki \/ prihodki", - "title_deposit": "Dohodki \/ prihodki", - "title_transfer": "Prenosi", - "title_transfers": "Prenosi", - "asset_accounts": "Premo\u017eenjski ra\u010duni", - "expense_accounts": "Ra\u010duni stro\u0161kov", - "revenue_accounts": "Ra\u010dun prihodkov", - "liabilities_accounts": "Obveznosti" - }, - "firefly": { - "administration_index": "Finan\u010dna administracija", - "actions": "Dejanja", - "edit": "uredi", - "delete": "izbri\u0161i", - "reconcile": "Poravnaj", - "create_new_asset": "ustvari nov premo\u017eenjski ra\u010dun", - "confirm_action": "Potrdi dejanje", - "new_budget": "nov bud\u017eet", - "new_asset_account": "nov premo\u017eenjski ra\u010dun", - "newTransfer": "Nov prenos", - "submission_options": "Submission options", - "apply_rules_checkbox": "Uporabi pravila", - "fire_webhooks_checkbox": "Spro\u017ei Webhooke", - "newDeposit": "Nov polog", - "newWithdrawal": "Nov stro\u0161ek", - "bills_paid": "Pla\u010dani trajniki", - "left_to_spend": "Preostala poraba", - "no_budget": "(brez prora\u010duna)", - "budgeted": "Prora\u010dun", - "spent": "Porabljeno", - "no_bill": "(ni ra\u010duna)", - "rule_trigger_source_account_starts_choice": "Ime izvornega ra\u010duna se za\u010dne z ...", - "rule_trigger_source_account_ends_choice": "Ime izvornega ra\u010duna se kon\u010da s\/z ...", - "rule_trigger_source_account_is_choice": "Ime izvornega ra\u010duna je ...", - "rule_trigger_source_account_contains_choice": "Ime izvornega ra\u010duna vsebuje ...", - "rule_trigger_account_id_choice": "ID ra\u010duna je natan\u010dno ...", - "rule_trigger_source_account_id_choice": "ID izvornega ra\u010duna je to\u010dno ...", - "rule_trigger_destination_account_id_choice": "ID ciljnega ra\u010duna je to\u010dno ...", - "rule_trigger_account_is_cash_choice": "Kateri koli ra\u010dun je gotovina", - "rule_trigger_source_is_cash_choice": "Izvorni ra\u010dun je gotovinski ra\u010dun", - "rule_trigger_destination_is_cash_choice": "Ciljni ra\u010dun je (gotovinski) ra\u010dun", - "rule_trigger_source_account_nr_starts_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN se za\u010dne z ...", - "rule_trigger_source_account_nr_ends_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN se kon\u010da z ...", - "rule_trigger_source_account_nr_is_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN je ...", - "rule_trigger_source_account_nr_contains_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN vsebuje ...", - "rule_trigger_destination_account_starts_choice": "Ime ciljnega ra\u010duna se za\u010dne z ...", - "rule_trigger_destination_account_ends_choice": "Ime ciljnega ra\u010duna se kon\u010da z ...", - "rule_trigger_destination_account_is_choice": "Ime ciljnega ra\u010duna je ...", - "rule_trigger_destination_account_contains_choice": "Ime ciljnega ra\u010duna vsebuje ...", - "rule_trigger_destination_account_nr_starts_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN se za\u010dne s\/z ...", - "rule_trigger_destination_account_nr_ends_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN se kon\u010da s\/z ...", - "rule_trigger_destination_account_nr_is_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN je ...", - "rule_trigger_destination_account_nr_contains_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN vsebuje ...", - "rule_trigger_transaction_type_choice": "Tip transakcije je..", - "rule_trigger_category_is_choice": "Kategorija je..", - "rule_trigger_amount_less_choice": "Znesek je manj\u0161i ali enak ...", - "rule_trigger_amount_is_choice": "Znesek je..", - "rule_trigger_amount_more_choice": "Znesek je ve\u010dji ali enak ...", - "rule_trigger_description_starts_choice": "Opis se za\u010dne s\/z..", - "rule_trigger_description_ends_choice": "Opis se kon\u010da z..", - "rule_trigger_description_contains_choice": "Opis vsebuje..", - "rule_trigger_description_is_choice": "Opis je..", - "rule_trigger_date_on_choice": "Datum transakcije je ...", - "rule_trigger_date_before_choice": "Datum transakcije je pred ...", - "rule_trigger_date_after_choice": "Datum transakcije je po ...", - "rule_trigger_created_at_on_choice": "Transakcija je bila izvedena dne ...", - "rule_trigger_updated_at_on_choice": "Transakcija je bila nazadnje urejena ...", - "rule_trigger_budget_is_choice": "Prora\u010dun je..", - "rule_trigger_tag_is_choice": "Vsaka oznaka je ...", - "rule_trigger_currency_is_choice": "Valuta transakcije je..", - "rule_trigger_foreign_currency_is_choice": "Tuja valuta transakcije je ...", - "rule_trigger_has_attachments_choice": "Ima vsaj toliko priponk", - "rule_trigger_has_no_category_choice": "Nima kategorije", - "rule_trigger_has_any_category_choice": "Ima kategorijo", - "rule_trigger_has_no_budget_choice": "Nima prora\u010duna", - "rule_trigger_has_any_budget_choice": "Ima (katerikoli) prora\u010dun", - "rule_trigger_has_no_bill_choice": "Nima ra\u010duna", - "rule_trigger_has_any_bill_choice": "Ima (kateri koli) trajnik", - "rule_trigger_has_no_tag_choice": "Nima oznak", - "rule_trigger_has_any_tag_choice": "Ima eno ali ve\u010d oznak", - "rule_trigger_any_notes_choice": "Ima zaznamke", - "rule_trigger_no_notes_choice": "Nima zaznamkov", - "rule_trigger_notes_is_choice": "Opombe so..", - "rule_trigger_notes_contains_choice": "Opombe vsebujejo ...", - "rule_trigger_notes_starts_choice": "Opombe se za\u010dnejo s\/z ...", - "rule_trigger_notes_ends_choice": "Opombe se kon\u010dajo s\/z ...", - "rule_trigger_bill_is_choice": "Ra\u010dun je..", - "rule_trigger_external_id_is_choice": "Zunanji ID je ...", - "rule_trigger_internal_reference_is_choice": "Notranja referenca je ..", - "rule_trigger_journal_id_choice": "ID dnevnika transakcij je ...", - "rule_trigger_any_external_url_choice": "Transakcija ima (kateri koli) zunanji URL", - "rule_trigger_no_external_url_choice": "Transakcija nima zunanjega URL-ja", - "rule_trigger_id_choice": "ID transakcije je ...", - "rule_action_delete_transaction_choice": "IZBRI\u0160ITE transakcijo (!)", - "rule_action_set_category_choice": "Nastavi kategorijo na ...", - "rule_action_clear_category_choice": "Po\u010disti kategorijo", - "rule_action_set_budget_choice": "Nastavi prora\u010dun na ...", - "rule_action_clear_budget_choice": "Po\u010disti prora\u010dun", - "rule_action_add_tag_choice": "Dodaj oznako ..", - "rule_action_remove_tag_choice": "Odstrani oznako ...", - "rule_action_remove_all_tags_choice": "Odstrani vse oznake", - "rule_action_set_description_choice": "Nastavi opis na ...", - "rule_action_update_piggy_choice": "Dodaj\/odstrani znesek transakcije v hranilniku ...", - "rule_action_append_description_choice": "Za opis dodaj ...", - "rule_action_prepend_description_choice": "Pred opis dodaj ...", - "rule_action_set_source_account_choice": "Nastavi izvorni ra\u010dun na ...", - "rule_action_set_destination_account_choice": "Nastavi ciljni ra\u010dun na ...", - "rule_action_append_notes_choice": "Za opombo dodaj ...", - "rule_action_prepend_notes_choice": "Pred opombo dodaj ...", - "rule_action_clear_notes_choice": "Odstrani opombe", - "rule_action_set_notes_choice": "Nastavi opombe na ...", - "rule_action_link_to_bill_choice": "Pove\u017ei s trajnikom ...", - "rule_action_convert_deposit_choice": "Pretvori transakcijo v polog", - "rule_action_convert_withdrawal_choice": "Pretvori transakcijo v odliv", - "rule_action_convert_transfer_choice": "Pretvori transakcijo v prenos", - "placeholder": "[Placeholder]", - "recurrences": "Ponavljajo\u010de transakcije", - "title_expenses": "stro\u0161ki", - "title_withdrawal": "stro\u0161ki", - "title_revenue": "Dohodki \/ prihodki", - "pref_1D": "En dan", - "pref_1W": "En teden", - "pref_1M": "En mesec", - "pref_3M": "Trije meseci (\u010detrtletje)", - "pref_6M": "\u0160est mesecev", - "pref_1Y": "Eno leto", - "repeat_freq_yearly": "letno", - "repeat_freq_half-year": "polletno", - "repeat_freq_quarterly": "\u010detrtletno", - "repeat_freq_monthly": "mese\u010dno", - "repeat_freq_weekly": "tedensko", - "single_split": "Razdeli", - "asset_accounts": "premo\u017eenjski ra\u010duni", - "expense_accounts": "Ra\u010duni stro\u0161kov", - "liabilities_accounts": "Obveznosti", - "undefined_accounts": "Ra\u010duni", - "name": "Ime", - "revenue_accounts": "Ra\u010dun prihodkov", - "description": "Opis", - "category": "Kategorija", - "title_deposit": "Dohodki \/ prihodki", - "title_transfer": "Prenosi", - "title_transfers": "Prenosi", - "piggyBanks": "Hranilniki", - "rules": "Pravila", - "accounts": "Ra\u010duni", - "categories": "Kategorije", - "tags": "Oznake", - "object_groups_page_title": "Skupine", - "reports": "Poro\u010dila", - "webhooks": "Spletne kljuke (Webhooks)", - "currencies": "Valute", - "administration": "Administracija", - "profile": "Profil", - "source_account": "Izvorni ra\u010dun", - "destination_account": "Ciljni ra\u010dun", - "amount": "Znesek", - "date": "Datum", - "time": "\u010cas", - "preferences": "Mo\u017enosti", - "transactions": "Transakcije", - "balance": "Stanje", - "budgets": "Prora\u010duni", - "subscriptions": "Naro\u010dnine", - "welcome_back": "Kaj dogaja?", - "bills_to_pay": "Trajnik za pla\u010dilo", - "net_worth": "Neto vrednost", - "pref_last365": "Zadnje leto", - "pref_last90": "Zadnjih 90 dni", - "pref_last30": "Zadnjih 30 dni", - "pref_last7": "Zadnjih 7 dni", - "pref_YTD": "Leto do datuma", - "pref_QTD": "\u010cetrtletje do danes", - "pref_MTD": "Mesec do datuma" - } -} diff --git a/frontend/src/i18n/sv_SE/index.js b/frontend/src/i18n/sv_SE/index.js deleted file mode 100644 index efb52b5b93..0000000000 --- a/frontend/src/i18n/sv_SE/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "sv", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Namn", - "amount_min": "Minsta belopp", - "amount_max": "H\u00f6gsta belopp", - "url": "L\u00e4nk", - "title": "Titel", - "first_date": "F\u00f6rsta datum", - "repetitions": "Upprepningar", - "description": "Beskrivning", - "iban": "IBAN", - "skip": "Hoppa \u00f6ver", - "date": "Datum" - }, - "list": { - "name": "Namn", - "account_number": "Kontonummer", - "currentBalance": "Nuvarande saldo", - "lastActivity": "Senaste aktivitet", - "active": "\u00c4r aktiv?" - }, - "breadcrumbs": { - "placeholder": "Platsh\u00e5llare", - "budgets": "Budgetar", - "subscriptions": "Prenumerationer", - "transactions": "Transaktioner", - "title_expenses": "Utgifter", - "title_withdrawal": "Uttag", - "title_revenue": "Int\u00e4kter \/ inkomst", - "title_deposit": "Int\u00e4kter \/ inkomst", - "title_transfer": "\u00d6verf\u00f6ringar", - "title_transfers": "\u00d6verf\u00f6ringar", - "asset_accounts": "Tillg\u00e5ngskonton", - "expense_accounts": "Kostnadskonto", - "revenue_accounts": "Int\u00e4ktskonton", - "liabilities_accounts": "Skulder" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u00c5tg\u00e4rder", - "edit": "Redigera", - "delete": "Ta bort", - "reconcile": "Avst\u00e4mning", - "create_new_asset": "Skapa ett nytt tillg\u00e5ngskonto", - "confirm_action": "Bekr\u00e4fta \u00e5tg\u00e4rd", - "new_budget": "Ny budget", - "new_asset_account": "Nytt tillg\u00e5ngskonto", - "newTransfer": "Ny \u00f6verf\u00f6ring", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Ny ins\u00e4ttning", - "newWithdrawal": "Ny utgift", - "bills_paid": "R\u00e4kningar betalda", - "left_to_spend": "\u00c5terst\u00e5r att spendera", - "no_budget": "(ingen budget)", - "budgeted": "Budgeterat", - "spent": "Spenderat", - "no_bill": "(ingen r\u00e4kning)", - "rule_trigger_source_account_starts_choice": "K\u00e4llkontonamn b\u00f6rjar med..", - "rule_trigger_source_account_ends_choice": "K\u00e4llkontonamn slutar med..", - "rule_trigger_source_account_is_choice": "K\u00e4llkontonamn \u00e4r..", - "rule_trigger_source_account_contains_choice": "K\u00e4llkontonamn inneh\u00e5ller..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "K\u00e4llkonto-ID \u00e4r exakt..", - "rule_trigger_destination_account_id_choice": "Destination konto-ID \u00e4r exakt..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "K\u00e4llkonto \u00e4r (kontant) konto", - "rule_trigger_destination_is_cash_choice": "Destinationskonto \u00e4r (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "K\u00e4llkontonummer \/ IBAN b\u00f6rjar med..", - "rule_trigger_source_account_nr_ends_choice": "K\u00e4llkontonummer \/ IBAN slutar med..", - "rule_trigger_source_account_nr_is_choice": "K\u00e4llkontonummer \/ IBAN \u00e4r..", - "rule_trigger_source_account_nr_contains_choice": "K\u00e4llkontonummer \/ IBAN inneh\u00e5ller..", - "rule_trigger_destination_account_starts_choice": "Destinationskontonamn b\u00f6rjar med..", - "rule_trigger_destination_account_ends_choice": "Destinationskontonamn slutar med..", - "rule_trigger_destination_account_is_choice": "Destinationskontonamn \u00e4r..", - "rule_trigger_destination_account_contains_choice": "Destinationenskontonamn inneh\u00e5ller..", - "rule_trigger_destination_account_nr_starts_choice": "Destinationskontonummer\/IBAN b\u00f6rjar med..", - "rule_trigger_destination_account_nr_ends_choice": "Destinationskontonummer \/ IBAN slutar med..", - "rule_trigger_destination_account_nr_is_choice": "Destinationskontonummer \/ IBAN \u00e4r..", - "rule_trigger_destination_account_nr_contains_choice": "Destinationskontonummer \/ IBAN inneh\u00e5ller..", - "rule_trigger_transaction_type_choice": "Transaktion \u00e4r av typen..", - "rule_trigger_category_is_choice": "Kategori \u00e4r..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivning b\u00f6rjar med..", - "rule_trigger_description_ends_choice": "Beskrivning slutar med..", - "rule_trigger_description_contains_choice": "Beskrivningen inneh\u00e5ller..", - "rule_trigger_description_is_choice": "Beskrivning \u00e4r..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaktionsdatum \u00e4r innan..", - "rule_trigger_date_after_choice": "Transaktionsdatum \u00e4r efter..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budget \u00e4r..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaktionsvalutan \u00e4r..", - "rule_trigger_foreign_currency_is_choice": "Transaktion med utl\u00e4ndsk valuta \u00e4r..", - "rule_trigger_has_attachments_choice": "Har minst s\u00e5 m\u00e5nga bilagor", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har en (valfri) kategori", - "rule_trigger_has_no_budget_choice": "Saknar budget", - "rule_trigger_has_any_budget_choice": "Har (valfri) budget", - "rule_trigger_has_no_bill_choice": "Har ingen r\u00e4kning", - "rule_trigger_has_any_bill_choice": "Har en (valfri) r\u00e4kning", - "rule_trigger_has_no_tag_choice": "Saknar etikett(er)", - "rule_trigger_has_any_tag_choice": "Har en eller flera (valfria) etiketter", - "rule_trigger_any_notes_choice": "Har (valfria) anteckningar", - "rule_trigger_no_notes_choice": "Har inga anteckningar", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Faktura \u00e4r..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaktionsjournal-ID \u00e4r..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaktionen saknar extern URL", - "rule_trigger_id_choice": "Transaktions-ID \u00e4r..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Rensa alla kategorier", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Rensa alla budgetar", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Ta bort alla etiketter", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Ta bort alla anteckningar", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Konvertera transaktionen till en ins\u00e4ttning", - "rule_action_convert_withdrawal_choice": "Konvertera transaktionen till ett uttag", - "rule_action_convert_transfer_choice": "G\u00f6r transaktionen till en \u00f6verf\u00f6ring", - "placeholder": "[Platsh\u00e5llare]", - "recurrences": "\u00c5terkommande transaktioner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Int\u00e4kter \/ inkomst", - "pref_1D": "En dag", - "pref_1W": "En vecka", - "pref_1M": "En m\u00e5nad", - "pref_3M": "Tre m\u00e5nader (kvartal)", - "pref_6M": "Sex m\u00e5nader", - "pref_1Y": "Ett \u00e5r", - "repeat_freq_yearly": "\u00e5rligen", - "repeat_freq_half-year": "varje halv\u00e5r", - "repeat_freq_quarterly": "kvartal", - "repeat_freq_monthly": "m\u00e5nadsvis", - "repeat_freq_weekly": "veckovis", - "single_split": "Dela", - "asset_accounts": "Tillg\u00e5ngskonton", - "expense_accounts": "Kostnadskonto", - "liabilities_accounts": "Skulder", - "undefined_accounts": "Konton", - "name": "Namn", - "revenue_accounts": "Int\u00e4ktskonton", - "description": "Beskrivning", - "category": "Kategori", - "title_deposit": "Int\u00e4kter \/ inkomst", - "title_transfer": "\u00d6verf\u00f6ringar", - "title_transfers": "\u00d6verf\u00f6ringar", - "piggyBanks": "Spargrisar", - "rules": "Regler", - "accounts": "Konton", - "categories": "Kategorier", - "tags": "Etiketter", - "object_groups_page_title": "Grupper", - "reports": "Rapporter", - "webhooks": "Webhookar", - "currencies": "Valutor", - "administration": "Administration", - "profile": "Profil", - "source_account": "K\u00e4llkonto", - "destination_account": "Till konto", - "amount": "Belopp", - "date": "Datum", - "time": "Tid", - "preferences": "Inst\u00e4llningar", - "transactions": "Transaktioner", - "balance": "Saldo", - "budgets": "Budgetar", - "subscriptions": "Prenumerationer", - "welcome_back": "Vad spelas?", - "bills_to_pay": "R\u00e4kningar\n att betala", - "net_worth": "Nettof\u00f6rm\u00f6genhet", - "pref_last365": "F\u00f6reg\u00e5ende \u00e5r", - "pref_last90": "Senaste 90 dagarna", - "pref_last30": "Senaste 30 dagarna", - "pref_last7": "Senaste 7 dagarna", - "pref_YTD": "Hittills i \u00e5r", - "pref_QTD": "Kvartal hittills", - "pref_MTD": "M\u00e5nad hittills" - } -} diff --git a/frontend/src/i18n/tr_TR/index.js b/frontend/src/i18n/tr_TR/index.js deleted file mode 100644 index abee567e93..0000000000 --- a/frontend/src/i18n/tr_TR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "tr", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "\u0130sim", - "amount_min": "Minimum tutar", - "amount_max": "Minimum tutar", - "url": "URL", - "title": "Ba\u015fl\u0131k", - "first_date": "First date", - "repetitions": "Repetitions", - "description": "Tan\u0131mlama", - "iban": "IBAN numaras\u0131", - "skip": "Atla", - "date": "Tarih" - }, - "list": { - "name": "\u0130sim", - "account_number": "Account number", - "currentBalance": "Cari bakiye", - "lastActivity": "Son Etkinlik", - "active": "Aktif mi?" - }, - "breadcrumbs": { - "placeholder": "[Tutucu]", - "budgets": "B\u00fct\u00e7eler", - "subscriptions": "Abonelik", - "transactions": "\u0130\u015flemler", - "title_expenses": "Masraflar", - "title_withdrawal": "Masraflar", - "title_revenue": "Gelir \/ kazan\u00e7", - "title_deposit": "Gelir \/kazan\u00e7", - "title_transfer": "Aktarmalar", - "title_transfers": "Aktarmalar", - "asset_accounts": "Varl\u0131k hesaplar\u0131", - "expense_accounts": "Gider hesab\u0131", - "revenue_accounts": "Kazan\u00e7 hesab\u0131", - "liabilities_accounts": "Sorumluluk" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Eylemler", - "edit": "D\u00fczenle", - "delete": "Sil", - "reconcile": "Reconcile", - "create_new_asset": "Yeni varl\u0131k hesab\u0131 olu\u015ftur", - "confirm_action": "Confirm action", - "new_budget": "Yeni b\u00fct\u00e7e", - "new_asset_account": "Yeni varl\u0131k hesab\u0131", - "newTransfer": "Yeni Transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Yeni mevduat", - "newWithdrawal": "Yeni gider", - "bills_paid": "\u00d6denen Faturalar", - "left_to_spend": "Harcama i\u00e7in b\u0131rak\u0131ld\u0131", - "no_budget": "(b\u00fct\u00e7e yok)", - "budgeted": "B\u00fct\u00e7elenen", - "spent": "Harcanan", - "no_bill": "(hay\u0131r bill)", - "rule_trigger_source_account_starts_choice": "Kaynak hesap ad\u0131 ile ba\u015flar..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Kaynak hesap ad\u0131d\u0131r..", - "rule_trigger_source_account_contains_choice": "Kaynak hesap ad\u0131 i\u00e7erir..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Kaynak hesap kimli\u011fi tam olarak..", - "rule_trigger_destination_account_id_choice": "Hedef hesap kimli\u011fi tam olarak..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Kaynak hesap (nakit) hesapt\u0131r", - "rule_trigger_destination_is_cash_choice": "Hedef hesap (nakit) hesapt\u0131r", - "rule_trigger_source_account_nr_starts_choice": "Kaynak hesap numaras\u0131 \/ IBAN ile ba\u015flar..", - "rule_trigger_source_account_nr_ends_choice": "Kaynak hesap numaras\u0131 \/ IBAN ile biter..", - "rule_trigger_source_account_nr_is_choice": "Kaynak hesap numaras\u0131 \/ IBAN..", - "rule_trigger_source_account_nr_contains_choice": "Kaynak hesap numaras\u0131 \/ IBAN i\u00e7erir..", - "rule_trigger_destination_account_starts_choice": "Hedef hesap ad\u0131 ile ba\u015flar..", - "rule_trigger_destination_account_ends_choice": "Hedef hesap ad\u0131 ile biter..", - "rule_trigger_destination_account_is_choice": "Hedef hesap ad\u0131d\u0131r..", - "rule_trigger_destination_account_contains_choice": "Hedef hesap ad\u0131 i\u00e7erir..", - "rule_trigger_destination_account_nr_starts_choice": "Hedef hesap numaras\u0131 \/ IBAN ile ba\u015flar..", - "rule_trigger_destination_account_nr_ends_choice": "Hedef hesap numaras\u0131 \/ IBAN ile biter..", - "rule_trigger_destination_account_nr_is_choice": "Hedef hesap numaras\u0131 \/ IBAN'd\u0131r..", - "rule_trigger_destination_account_nr_contains_choice": "Hedef hesap numaras\u0131 \/ IBAN i\u00e7erir..", - "rule_trigger_transaction_type_choice": "\u0130\u015flem t\u00fcr\u00fc..", - "rule_trigger_category_is_choice": "Kategori..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "A\u00e7\u0131klama ba\u015fl\u0131yor..", - "rule_trigger_description_ends_choice": "A\u00e7\u0131klama bitiyor..", - "rule_trigger_description_contains_choice": "A\u00e7\u0131klama i\u00e7erir..", - "rule_trigger_description_is_choice": "A\u00e7\u0131klama..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "\u0130\u015flem tarihi \u00f6ncedir..", - "rule_trigger_date_after_choice": "\u0130\u015flem tarihi sonrad\u0131r..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "B\u00fct\u00e7e..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "\u0130\u015flem d\u00f6vizi..", - "rule_trigger_foreign_currency_is_choice": "\u0130\u015flem d\u00f6vizdir..", - "rule_trigger_has_attachments_choice": "En son bir \u00e7ok eklentileri var", - "rule_trigger_has_no_category_choice": "Kategorisi yok", - "rule_trigger_has_any_category_choice": "Bir kategorisi var", - "rule_trigger_has_no_budget_choice": "B\u00fct\u00e7e yok", - "rule_trigger_has_any_budget_choice": "Bir b\u00fct\u00e7esi var", - "rule_trigger_has_no_bill_choice": "Faturas\u0131 yok", - "rule_trigger_has_any_bill_choice": "(Herhangi) bir faturas\u0131 var m\u0131", - "rule_trigger_has_no_tag_choice": "Etiket yok", - "rule_trigger_has_any_tag_choice": "Bir veya bir\u00e7ok etiketleri var", - "rule_trigger_any_notes_choice": "Notlar\u0131 var", - "rule_trigger_no_notes_choice": "Notu yok", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill \u00f6yle..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "\u0130\u015flem g\u00fcnl\u00fc\u011f\u00fc kimli\u011fidir..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "\u0130\u015flemin harici URL'si yok", - "rule_trigger_id_choice": "\u0130\u015flem kimli\u011fidir..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "T\u00fcm kategoriyi temizle", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Herhangi bir b\u00fct\u00e7eyi temizle", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "T\u00fcm etiketleri kald\u0131r", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Herhangi bir notu kald\u0131r", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u0130\u015flemi mevduata d\u00f6n\u00fc\u015ft\u00fcr", - "rule_action_convert_withdrawal_choice": "\u0130\u015flemi para \u00e7ekmeye d\u00f6n\u00fc\u015ft\u00fcr", - "rule_action_convert_transfer_choice": "\u0130\u015flemi transfere d\u00f6n\u00fc\u015ft\u00fcr", - "placeholder": "[Placeholder]", - "recurrences": "Tekrar Eden \u0130\u015flemler", - "title_expenses": "Giderler", - "title_withdrawal": "Giderler", - "title_revenue": "Gelir \/ Gelir", - "pref_1D": "Bir g\u00fcn", - "pref_1W": "Bir hafta", - "pref_1M": "Bir ay", - "pref_3M": "\u00dc\u00e7 ay (\u00e7eyrek)", - "pref_6M": "Alt\u0131 ay", - "pref_1Y": "Bir y\u0131l", - "repeat_freq_yearly": "y\u0131ll\u0131k", - "repeat_freq_half-year": "her yar\u0131 y\u0131l", - "repeat_freq_quarterly": "\u00fc\u00e7 ayl\u0131k", - "repeat_freq_monthly": "ayl\u0131k", - "repeat_freq_weekly": "haftal\u0131k", - "single_split": "B\u00f6l", - "asset_accounts": "Varl\u0131k hesaplar\u0131", - "expense_accounts": "Gider hesaplar\u0131", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "\u0130sim", - "revenue_accounts": "Gelir hesaplar\u0131", - "description": "A\u00e7\u0131klama", - "category": "Kategori", - "title_deposit": "Gelir \/ Gelir", - "title_transfer": "Transferler", - "title_transfers": "Transferler", - "piggyBanks": "Kumbara", - "rules": "Kurallar", - "accounts": "Hesaplar", - "categories": "Kategoriler", - "tags": "Etiketler", - "object_groups_page_title": "Groups", - "reports": "Raporlar", - "webhooks": "Web kancalar\u0131", - "currencies": "Kurlar", - "administration": "Y\u00f6netim", - "profile": "Profil", - "source_account": "Kaynak hesap", - "destination_account": "Hedef hesap", - "amount": "Miktar", - "date": "Tarih", - "time": "Time", - "preferences": "Tercihler", - "transactions": "\u0130\u015flemler", - "balance": "Denge", - "budgets": "B\u00fct\u00e7eler", - "subscriptions": "Abonelik", - "welcome_back": "Neler oluyor?", - "bills_to_pay": "\u00d6denecek fatura", - "net_worth": "Net de\u011fer", - "pref_last365": "Ge\u00e7en y\u0131l", - "pref_last90": "Son 90 g\u00fcn", - "pref_last30": "Son 30 g\u00fcn", - "pref_last7": "Son 7 g\u00fcn", - "pref_YTD": "Y\u0131ldan bug\u00fcne", - "pref_QTD": "Bug\u00fcne kadar tarih", - "pref_MTD": "Bug\u00fcne kadar ay" - } -} diff --git a/frontend/src/i18n/uk_UA/index.js b/frontend/src/i18n/uk_UA/index.js deleted file mode 100644 index 9bcdd9c0a0..0000000000 --- a/frontend/src/i18n/uk_UA/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "uk", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "\u041d\u0430\u0437\u0432\u0430", - "amount_min": "\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0430 \u0441\u0443\u043c\u0430", - "amount_max": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0441\u0443\u043c\u0430", - "url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430", - "title": "\u041d\u0430\u0437\u0432\u0430", - "first_date": "\u041f\u0435\u0440\u0448\u0430 \u0434\u0430\u0442\u0430", - "repetitions": "\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u043d\u044f", - "description": "\u041e\u043f\u0438\u0441", - "iban": "IBAN", - "skip": "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0438", - "date": "\u0414\u0430\u0442\u0430" - }, - "list": { - "name": "\u041d\u0430\u0437\u0432\u0430", - "account_number": "\u041d\u043e\u043c\u0435\u0440 \u0440\u0430\u0445\u0443\u043d\u043a\u0443", - "currentBalance": "\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441", - "lastActivity": "\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044f", - "active": "\u0427\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442", - "subscriptions": "\u041f\u0456\u0434\u043f\u0438\u0441\u043a\u0430", - "transactions": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u0457", - "title_expenses": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_withdrawal": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_revenue": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0431\u0443\u0442\u043e\u043a", - "title_deposit": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0431\u0443\u0442\u043e\u043a", - "title_transfer": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437\u0438", - "title_transfers": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437\u0438", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u0440\u0430\u0445\u0443\u043d\u043a\u0438", - "expense_accounts": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438 \u0432\u0438\u0442\u0440\u0430\u0442", - "revenue_accounts": "\u0414\u0436\u0435\u0440\u0435\u043b\u0430 \u0434\u043e\u0445\u043e\u0434\u0456\u0432", - "liabilities_accounts": "\u0417\u043e\u0431\u043e\u0432'\u044f\u0437\u0430\u043d\u043d\u044f" - }, - "firefly": { - "administration_index": "\u0424\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0456\u043d\u043d\u044f", - "actions": "\u0414\u0456\u0457", - "edit": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438", - "delete": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438", - "reconcile": "Reconcile", - "create_new_asset": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0456\u0432", - "confirm_action": "\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u0434\u0456\u044e", - "new_budget": "\u041d\u043e\u0432\u0438\u0439 \u0431\u044e\u0434\u0436\u0435\u0442", - "new_asset_account": "\u041d\u043e\u0432\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0456\u0432", - "newTransfer": "\u041d\u043e\u0432\u0438\u0439 \u043f\u0435\u0440\u0435\u043a\u0430\u0437", - "submission_options": "Submission options", - "apply_rules_checkbox": "\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u041d\u043e\u0432\u0456 \u043d\u0430\u0434\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f", - "newWithdrawal": "\u041d\u043e\u0432\u0456 \u0432\u0438\u0442\u0440\u0430\u0442\u0438", - "bills_paid": "\u041e\u043f\u043b\u0430\u0447\u0435\u043d\u0456 \u0440\u0430\u0445\u0443\u043d\u043a\u0438", - "left_to_spend": "Left to spend", - "no_budget": "(\u043f\u043e\u0437\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c)", - "budgeted": "Budgeted", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "\u0406\u043c'\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437 \": value\"..", - "rule_trigger_source_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_is_choice": "\u0406\u043c'\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_source_account_contains_choice": "\u041d\u0430\u0437\u0432\u0430 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_account_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0454 \u0442\u043e\u0447\u043d\u043e\u044e..", - "rule_trigger_source_account_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0433\u043e \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0454 \u0442\u043e\u0447\u043d\u043e\u044e..", - "rule_trigger_destination_account_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0454 \u0442\u043e\u0447\u043d\u043e\u044e..", - "rule_trigger_account_is_cash_choice": "\u0411\u0443\u0434\u044c-\u044f\u043a\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0454 \u0433\u043e\u0442\u0456\u0432\u043a\u043e\u0432\u0438\u043c", - "rule_trigger_source_is_cash_choice": "\u0414\u0436\u0435\u0440\u0435\u043b\u043e\u043c \u0440\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u0454 \u200b\u200b(\u0433\u043e\u0442\u0456\u0432\u043a\u043e\u0432\u0438\u0439) \u0440\u0430\u0445\u0443\u043d\u043e\u043a", - "rule_trigger_destination_is_cash_choice": "\u0420\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0454 \u200b\u200b(\u0433\u043e\u0442\u0456\u0432\u043a\u043e\u0432\u0438\u0439) \u0440\u0430\u0445\u0443\u043d\u043e\u043a", - "rule_trigger_source_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \/ IBAN \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_source_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \/ IBAN \u0454..", - "rule_trigger_source_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \/ IBAN \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_destination_account_starts_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_destination_account_ends_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_is_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a-\u043e\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0447..", - "rule_trigger_destination_account_contains_choice": "\u0406\u043c'\u044f \u0440\u0430\u0445\u0443\u043d\u043e\u043a\u0443-\u043e\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0447\u0430 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_destination_account_nr_starts_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_destination_account_nr_ends_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_nr_is_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN..", - "rule_trigger_destination_account_nr_contains_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_transaction_type_choice": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u044f \u043c\u0430\u0454 \u0442\u0438\u043f..", - "rule_trigger_category_is_choice": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f \u0454..", - "rule_trigger_amount_less_choice": "\u0421\u0443\u043c\u0430 \u043c\u0435\u043d\u0448\u0430 \u0430\u0431\u043e \u0434\u043e\u0440\u0456\u0432\u043d\u044e\u0454 ..", - "rule_trigger_amount_is_choice": "\u0421\u0443\u043c\u0430..", - "rule_trigger_amount_more_choice": "\u0421\u0443\u043c\u0430 \u0431\u0456\u043b\u044c\u0448\u0435 \u0430\u0431\u043e \u0434\u043e\u0440\u0456\u0432\u043d\u044e\u0454..", - "rule_trigger_description_starts_choice": "\u041e\u043f\u0438\u0441 \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_description_ends_choice": "\u041e\u043f\u0438\u0441 \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_description_contains_choice": "\u041e\u043f\u0438\u0441 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_description_is_choice": "\u041e\u043f\u0438\u0441..", - "rule_trigger_date_on_choice": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457..", - "rule_trigger_date_before_choice": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u0440\u0430\u043d\u0456\u0448\u0435..", - "rule_trigger_date_after_choice": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u043f\u0456\u0437\u043d\u0456\u0448\u0435..", - "rule_trigger_created_at_on_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u0431\u0443\u043b\u0430 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u0430..", - "rule_trigger_updated_at_on_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u0431\u0443\u043b\u0430 \u0432\u0456\u0434\u0440\u0435\u0434\u0430\u0433\u043e\u0432\u0430\u043d\u0430..", - "rule_trigger_budget_is_choice": "\u0411\u044e\u0434\u0436\u0435\u0442..", - "rule_trigger_tag_is_choice": "\u0411\u0443\u0434\u044c-\u044f\u043a\u0430 \u043c\u0456\u0442\u043a\u0430..", - "rule_trigger_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0439 \u0454..", - "rule_trigger_foreign_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457 \u0454..", - "rule_trigger_has_attachments_choice": "\u041c\u0430\u0454 \u043f\u0440\u0438\u043d\u0430\u0439\u043c\u043d\u0456 \u0446\u044e \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u0435\u043d\u044c", - "rule_trigger_has_no_category_choice": "\u0411\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457", - "rule_trigger_has_any_category_choice": "\u041c\u0430\u0454 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0443) \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e", - "rule_trigger_has_no_budget_choice": "\u041d\u0435\u043c\u0430\u0454 \u043f\u043e\u0432'\u044f\u0437\u0430\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0443", - "rule_trigger_has_any_budget_choice": "\u041c\u0430\u0454 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0438\u0439) \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_trigger_has_no_bill_choice": "\u041d\u0435 \u043c\u0430\u0454 \u0440\u0430\u0445\u0443\u043d\u043a\u0456\u0432 \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438", - "rule_trigger_has_any_bill_choice": "\u041c\u0430\u0454 (\u044f\u043a\u0438\u0439\u0441\u044c) \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438", - "rule_trigger_has_no_tag_choice": "\u041d\u0435\u043c\u0430\u0454 \u0442\u0435\u0433\u0456\u0432", - "rule_trigger_has_any_tag_choice": "\u0404 \u043e\u0434\u0438\u043d \u0430\u0431\u043e \u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0435\u0433\u0456\u0432 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0438\u0445)", - "rule_trigger_any_notes_choice": "\u041c\u0430\u0454 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0456) \u043d\u043e\u0442\u0430\u0442\u043a\u0438", - "rule_trigger_no_notes_choice": "\u041d\u043e\u0442\u0430\u0442\u043a\u0438 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456", - "rule_trigger_notes_is_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438..", - "rule_trigger_notes_contains_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438 \u043c\u0456\u0441\u0442\u044f\u0442\u044c..", - "rule_trigger_notes_starts_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438 \u043f\u043e\u0447\u0438\u043d\u0430\u044e\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_notes_ends_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0443\u044e\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_bill_is_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438..", - "rule_trigger_external_id_is_choice": "\u0417\u043e\u0432\u043d\u0456\u0448\u043d\u0456\u0439 ID \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_internal_reference_is_choice": "\u0412\u043d\u0443\u0442\u0440\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f - \u0446\u0435..", - "rule_trigger_journal_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0439 \u0454..", - "rule_trigger_any_external_url_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u043c\u0430\u0454 (\u044f\u043a\u0443\u0441\u044c) \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u044e URL-\u0430\u0434\u0440\u0435\u0441\u0443", - "rule_trigger_no_external_url_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u043d\u0435 \u043c\u0430\u0454 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u044c\u043e\u0457 URL-\u0430\u0434\u0440\u0435\u0441\u0438", - "rule_trigger_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457..", - "rule_action_delete_transaction_choice": "\u0412\u0418\u0414\u0410\u041b\u0418\u0422\u0418 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044e(!)", - "rule_action_set_category_choice": "\u041e\u0431\u0440\u0430\u0442\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e..", - "rule_action_clear_category_choice": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457", - "rule_action_set_budget_choice": "\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u0431\u044e\u0434\u0436\u0435\u0442..", - "rule_action_clear_budget_choice": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456 \u0431\u044e\u0434\u0436\u0435\u0442\u0438", - "rule_action_add_tag_choice": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0435\u0433..", - "rule_action_remove_tag_choice": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0435\u0433..", - "rule_action_remove_all_tags_choice": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0443\u0441\u0456 \u0442\u0435\u0433\u0438", - "rule_action_set_description_choice": "\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u043e\u043f\u0438\u0441 \u043d\u0430..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0446\u0456\u043b\u044c\u043e\u0432\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a..", - "rule_action_append_notes_choice": "\u0414\u043e\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0442\u0430\u0442\u043a\u0438 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e ..", - "rule_action_prepend_notes_choice": "\u0414\u043e\u0434\u0430\u0439\u0442\u0435 \u0434\u043e \u043d\u043e\u0442\u0430\u0442\u043e\u043a ..", - "rule_action_clear_notes_choice": "\u0412\u0438\u0434\u0430\u043b\u0456\u0442\u044c \u0431\u0443\u0434\u044c-\u044f\u043a\u0456 \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438", - "rule_action_set_notes_choice": "\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043d\u043e\u0442\u0430\u0442\u043a\u0438 \u0434\u043e ..", - "rule_action_link_to_bill_choice": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438 ..", - "rule_action_convert_deposit_choice": "\u041f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044e \u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442", - "rule_action_convert_withdrawal_choice": "\u041f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044e \u043d\u0430 \u0437\u043d\u044f\u0442\u0442\u044f", - "rule_action_convert_transfer_choice": "\u041f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0437", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_withdrawal": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_revenue": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0445\u0456\u0434", - "pref_1D": "\u041e\u0434\u0438\u043d \u0434\u0435\u043d\u044c", - "pref_1W": "\u041e\u0434\u0438\u043d \u0442\u0438\u0436\u0434\u0435\u043d\u044c", - "pref_1M": "\u041e\u0434\u0438\u043d \u043c\u0456\u0441\u044f\u0446\u044c", - "pref_3M": "\u0422\u0440\u0438 \u043c\u0456\u0441\u044f\u0446\u0456 (\u043a\u0432\u0430\u0440\u0442\u0430\u043b)", - "pref_6M": "\u0428\u0456\u0441\u0442\u044c \u043c\u0456\u0441\u044f\u0446\u0456\u0432", - "pref_1Y": "\u041e\u0434\u0438\u043d \u0440\u0456\u043a", - "repeat_freq_yearly": "\u0437\u0430 \u0440\u043e\u043a\u0430\u043c\u0438", - "repeat_freq_half-year": "\u043a\u043e\u0436\u043d\u0438\u0445 \u043f\u0456\u0432\u0440\u043e\u043a\u0443", - "repeat_freq_quarterly": "\u0437\u0430 \u043a\u0432\u0430\u0440\u0442\u0430\u043b\u0430\u043c\u0438", - "repeat_freq_monthly": "\u0449\u043e\u043c\u0456\u0441\u044f\u0446\u044f", - "repeat_freq_weekly": "\u0449\u043e\u0442\u0438\u0436\u043d\u044f", - "single_split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u0440\u0430\u0445\u0443\u043d\u043a\u0438", - "expense_accounts": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438 \u0432\u0438\u0442\u0440\u0430\u0442", - "liabilities_accounts": "\u041f\u0430\u0441\u0438\u0432\u0438", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "\u0414\u0436\u0435\u0440\u0435\u043b\u0430 \u0434\u043e\u0445\u043e\u0434\u0456\u0432", - "description": "\u041e\u043f\u0438\u0441", - "category": "Category", - "title_deposit": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0445\u0456\u0434", - "title_transfer": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437", - "title_transfers": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437\u0438", - "piggyBanks": "\u0421\u043a\u0430\u0440\u0431\u043d\u0438\u0447\u043a\u0438", - "rules": "\u041f\u0440\u0430\u0432\u0438\u043b\u0430", - "accounts": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438", - "categories": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457", - "tags": "\u0422\u0435\u0433\u0438", - "object_groups_page_title": "Groups", - "reports": "\u0417\u0432\u0456\u0442\u0438", - "webhooks": "\u0412\u0435\u0431-\u0433\u0430\u043a\u0438", - "currencies": "\u0412\u0430\u043b\u044e\u0442\u0438", - "administration": "Administration", - "profile": "\u041f\u0440\u043e\u0444\u0456\u043b\u044c", - "source_account": "\u0412\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a", - "destination_account": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", - "amount": "\u0421\u0443\u043c\u0430", - "date": "\u0414\u0430\u0442\u0430", - "time": "Time", - "preferences": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457", - "balance": "Balance", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438", - "subscriptions": "\u041f\u0456\u0434\u043f\u0438\u0441\u043a\u0438", - "welcome_back": "\u0429\u043e \u0432 \u0433\u0430\u043c\u0430\u043d\u0446\u0456?", - "bills_to_pay": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438 \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438", - "net_worth": "\u0427\u0438\u0441\u0442\u0456 \u0430\u043a\u0442\u0438\u0432\u0438", - "pref_last365": "\u041c\u0438\u043d\u0443\u043b\u0438\u0439 \u0440\u0456\u043a", - "pref_last90": "\u041e\u0441\u0442\u0430\u043d\u043d\u0456 90 \u0434\u043d\u0456\u0432", - "pref_last30": "\u041e\u0441\u0442\u0430\u043d\u043d\u0456 30 \u0434\u043d\u0456\u0432", - "pref_last7": "\u041e\u0441\u0442\u0430\u043d\u043d\u0456 7 \u0434\u043d\u0456\u0432", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/vi_VN/index.js b/frontend/src/i18n/vi_VN/index.js deleted file mode 100644 index fbb1050ad0..0000000000 --- a/frontend/src/i18n/vi_VN/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "vi", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "T\u00ean", - "amount_min": "S\u1ed1 ti\u1ec1n t\u1ed1i thi\u1ec3u", - "amount_max": "S\u1ed1 ti\u1ec1n t\u1ed1i \u0111a", - "url": "URL", - "title": "Ti\u00eau \u0111\u1ec1", - "first_date": "Ng\u00e0y \u0111\u1ea7u ti\u00ean", - "repetitions": "S\u1ef1 l\u1eb7p l\u1ea1i", - "description": "M\u00f4 t\u1ea3", - "iban": "IBAN", - "skip": "B\u1ecf qua", - "date": "Ng\u00e0y" - }, - "list": { - "name": "T\u00ean", - "account_number": "Account number", - "currentBalance": "S\u1ed1 d\u01b0 hi\u1ec7n t\u1ea1i", - "lastActivity": "Ho\u1ea1t \u0111\u1ed9ng cu\u1ed1i c\u00f9ng", - "active": "\u0110ang ho\u1ea1t \u0111\u1ed9ng?" - }, - "breadcrumbs": { - "placeholder": "Gi\u1eef ch\u1ed7", - "budgets": "Ng\u00e2n s\u00e1ch", - "subscriptions": "\u0110\u0103ng k\u00fd nh\u1eadn th\u00f4ng tin", - "transactions": "Giao d\u1ecbch", - "title_expenses": "Chi ph\u00ed", - "title_withdrawal": "Chi ph\u00ed", - "title_revenue": "Thu nh\u1eadp doanh thu", - "title_deposit": "Thu nh\u1eadp doanh thu", - "title_transfer": "Chuy\u1ec3n", - "title_transfers": "Chuy\u1ec3n", - "asset_accounts": "T\u00e0i kho\u1ea3n t\u00e0i s\u1ea3n", - "expense_accounts": "T\u00e0i kho\u1ea3n chi ph\u00ed", - "revenue_accounts": "T\u00e0i kho\u1ea3n thu nh\u1eadp", - "liabilities_accounts": "N\u1ee3 ph\u1ea3i tr\u1ea3" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "H\u00e0nh \u0111\u1ed9ng", - "edit": "S\u1eeda", - "delete": "X\u00f3a", - "reconcile": "\u0110\u1ed1i chi\u1ebfu", - "create_new_asset": "T\u1ea1o t\u00e0i kho\u1ea3n m\u1edbi", - "confirm_action": "Confirm action", - "new_budget": "Ng\u00e2n s\u00e1ch m\u1edbi", - "new_asset_account": "t\u00e0i kho\u1ea3n m\u1edbi", - "newTransfer": "Chuy\u1ec3n kho\u1ea3n m\u1edbi", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Ti\u1ec1n g\u1eedi m\u1edbi", - "newWithdrawal": "Chi ph\u00ed m\u1edbi", - "bills_paid": "H\u00f3a \u0111\u01a1n thanh to\u00e1n", - "left_to_spend": "C\u00f2n l\u1ea1i \u0111\u1ec3 chi ti\u00eau", - "no_budget": "(kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch)", - "budgeted": "Ng\u00e2n s\u00e1ch", - "spent": "\u0110\u00e3 chi", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "T\u00ean t\u00e0i kho\u1ea3n ch\u1ee9a..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "S\u1ed1 t\u00e0i kho\u1ea3n ngu\u1ed3n \/ IBAN l\u00e0..", - "rule_trigger_source_account_nr_contains_choice": "S\u1ed1 t\u00e0i kho\u1ea3n ngu\u1ed3n \/ IBAN ch\u1ee9a..", - "rule_trigger_destination_account_starts_choice": "T\u00ean t\u00e0i kho\u1ea3n \u0111\u00edch b\u1eaft \u0111\u1ea7u b\u1eb1ng..", - "rule_trigger_destination_account_ends_choice": "T\u00ean t\u00e0i kho\u1ea3n \u0111\u00edch k\u1ebft th\u00fac b\u1eb1ng..", - "rule_trigger_destination_account_is_choice": "T\u00ean t\u00e0i kho\u1ea3n \u0111\u00edch l\u00e0..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Giao d\u1ecbch thu\u1ed9c lo\u1ea1i..", - "rule_trigger_category_is_choice": "Danh m\u1ee5c l\u00e0..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "M\u00f4 t\u1ea3 b\u1eaft \u0111\u1ea7u b\u1eb1ng..", - "rule_trigger_description_ends_choice": "M\u00f4 t\u1ea3 k\u1ebft th\u00fac b\u1eb1ng..", - "rule_trigger_description_contains_choice": "M\u00f4 t\u1ea3 c\u00f3 ch\u1ee9a..", - "rule_trigger_description_is_choice": "M\u00f4 t\u1ea3 l\u00e0..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Ng\u00e0y giao d\u1ecbch tr\u01b0\u1edbc..", - "rule_trigger_date_after_choice": "Ng\u00e0y giao d\u1ecbch sau..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Ng\u00e2n s\u00e1ch l\u00e0..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Ti\u1ec1n t\u1ec7 giao d\u1ecbch l\u00e0..", - "rule_trigger_foreign_currency_is_choice": "Giao d\u1ecbch ngo\u1ea1i t\u1ec7 l\u00e0..", - "rule_trigger_has_attachments_choice": "C\u00f3 \u00edt nh\u1ea5t nhi\u1ec1u t\u1ec7p \u0111\u00ednh k\u00e8m n\u00e0y", - "rule_trigger_has_no_category_choice": "Kh\u00f4ng c\u00f3 danh m\u1ee5c", - "rule_trigger_has_any_category_choice": "C\u00f3 m\u1ed9t danh m\u1ee5c (b\u1ea5t k\u1ef3)", - "rule_trigger_has_no_budget_choice": "Kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch", - "rule_trigger_has_any_budget_choice": "C\u00f3 ng\u00e2n s\u00e1ch (b\u1ea5t k\u1ef3)", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Kh\u00f4ng c\u00f3 nh\u00e3n", - "rule_trigger_has_any_tag_choice": "C\u00f3 m\u1ed9t ho\u1eb7c nhi\u1ec1u nh\u00e3n(b\u1ea5t k\u1ef3)", - "rule_trigger_any_notes_choice": "C\u00f3 (b\u1ea5t k\u1ef3) ghi ch\u00fa", - "rule_trigger_no_notes_choice": "Kh\u00f4ng c\u00f3 ghi ch\u00fa", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "H\u00f3a \u0111\u01a1n l\u00e0..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "X\u00f3a m\u1ecdi danh m\u1ee5c", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "X\u00f3a m\u1ecdi ng\u00e2n s\u00e1ch", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "X\u00f3a t\u1ea5t c\u1ea3 c\u00e1c nh\u00e3n", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "X\u00f3a m\u1ecdi ghi ch\u00fa", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Chuy\u1ec3n \u0111\u1ed5i giao d\u1ecbch th\u00e0nh ti\u1ec1n g\u1eedi", - "rule_action_convert_withdrawal_choice": "Chuy\u1ec3n \u0111\u1ed5i giao d\u1ecbch sang r\u00fat ti\u1ec1n", - "rule_action_convert_transfer_choice": "Chuy\u1ec3n \u0111\u1ed5i giao d\u1ecbch sang chuy\u1ec3n kho\u1ea3n", - "placeholder": "[Placeholder]", - "recurrences": "Giao d\u1ecbch \u0111\u1ecbnh k\u1ef3", - "title_expenses": "Chi ph\u00ed", - "title_withdrawal": "Chi ph\u00ed", - "title_revenue": "Thu nh\u1eadp doanh thu", - "pref_1D": "M\u1ed9t ng\u00e0y", - "pref_1W": "M\u1ed9t tu\u1ea7n", - "pref_1M": "M\u1ed9t th\u00e1ng", - "pref_3M": "Ba th\u00e1ng (qu\u00fd)", - "pref_6M": "S\u00e1u th\u00e1ng", - "pref_1Y": "M\u1ed9t n\u0103m", - "repeat_freq_yearly": "h\u00e0ng n\u0103m", - "repeat_freq_half-year": "m\u1ed7i n\u1eeda n\u0103m", - "repeat_freq_quarterly": "h\u00e0ng qu\u00fd", - "repeat_freq_monthly": "h\u00e0ng th\u00e1ng", - "repeat_freq_weekly": "h\u00e0ng tu\u1ea7n", - "single_split": "Chia ra", - "asset_accounts": "t\u00e0i kho\u1ea3n", - "expense_accounts": "T\u00e0i kho\u1ea3n chi ph\u00ed", - "liabilities_accounts": "N\u1ee3", - "undefined_accounts": "Accounts", - "name": "T\u00ean", - "revenue_accounts": "T\u00e0i kho\u1ea3n doanh thu", - "description": "S\u1ef1 mi\u00eau t\u1ea3", - "category": "Danh m\u1ee5c", - "title_deposit": "Thu nh\u1eadp doanh thu", - "title_transfer": "Chuy\u1ec3n", - "title_transfers": "Chuy\u1ec3n", - "piggyBanks": "Heo \u0111\u1ea5t", - "rules": "Quy t\u1eafc", - "accounts": "T\u00e0i kho\u1ea3n", - "categories": "Danh m\u1ee5c", - "tags": "Nh\u00e3n", - "object_groups_page_title": "C\u00e1c Nh\u00f3m", - "reports": "B\u00e1o c\u00e1o", - "webhooks": "Webhooks", - "currencies": "Ti\u1ec1n t\u1ec7", - "administration": "Qu\u1ea3n tr\u1ecb", - "profile": "H\u1ed3 s\u01a1", - "source_account": "Ngu\u1ed3n t\u00e0i kho\u1ea3n", - "destination_account": "T\u00e0i kho\u1ea3n \u0111\u00edch", - "amount": "S\u1ed1 ti\u1ec1n", - "date": "Ng\u00e0y", - "time": "Time", - "preferences": "C\u00e1 nh\u00e2n", - "transactions": "Giao d\u1ecbch", - "balance": "Ti\u1ec1n c\u00f2n l\u1ea1i", - "budgets": "Ng\u00e2n s\u00e1ch", - "subscriptions": "Subscriptions", - "welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?", - "bills_to_pay": "H\u00f3a \u0111\u01a1n ph\u1ea3i tr\u1ea3", - "net_worth": "T\u00e0i s\u1ea3n th\u1ef1c", - "pref_last365": "N\u0103m tr\u01b0\u1edbc", - "pref_last90": "90 ng\u00e0y cu\u1ed1i", - "pref_last30": "30 ng\u00e0y cu\u1ed1i", - "pref_last7": "7 ng\u00e0y tr\u01b0\u1edbc", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/zh_CN/index.js b/frontend/src/i18n/zh_CN/index.js deleted file mode 100644 index 3aa37b3759..0000000000 --- a/frontend/src/i18n/zh_CN/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "zh-cn", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "\u540d\u79f0", - "amount_min": "\u6700\u5c0f\u91d1\u989d", - "amount_max": "\u6700\u5927\u91d1\u989d", - "url": "\u7f51\u5740", - "title": "\u6807\u9898", - "first_date": "\u521d\u6b21\u65e5\u671f", - "repetitions": "\u91cd\u590d", - "description": "\u63cf\u8ff0", - "iban": "\u56fd\u9645\u94f6\u884c\u8d26\u6237\u53f7\u7801 IBAN", - "skip": "\u8df3\u8fc7", - "date": "\u65e5\u671f" - }, - "list": { - "name": "\u540d\u79f0", - "account_number": "\u8d26\u6237\u53f7\u7801", - "currentBalance": "\u76ee\u524d\u4f59\u989d", - "lastActivity": "\u4e0a\u6b21\u6d3b\u52a8", - "active": "\u662f\u5426\u542f\u7528\uff1f" - }, - "breadcrumbs": { - "placeholder": "[Placeholder][\u5360\u4f4d\u7b26]", - "budgets": "\u9884\u7b97", - "subscriptions": "\u8ba2\u9605\u5217\u8868", - "transactions": "\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u6536\u76ca\/\u6536\u5165", - "title_deposit": "\u6536\u76ca\/\u6536\u5165", - "title_transfer": "\u8f6c\u8d26", - "title_transfers": "\u8f6c\u8d26", - "asset_accounts": "\u8d44\u4ea7\u8d26\u6237", - "expense_accounts": "\u652f\u51fa\u8d26\u6237", - "revenue_accounts": "\u6536\u5165\u8d26\u6237", - "liabilities_accounts": "\u503a\u52a1" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u64cd\u4f5c", - "edit": "\u7f16\u8f91", - "delete": "\u5220\u9664", - "reconcile": "\u5bf9\u8d26", - "create_new_asset": "\u521b\u5efa\u65b0\u8d44\u4ea7\u8d26\u6237", - "confirm_action": "\u786e\u8ba4\u64cd\u4f5c", - "new_budget": "\u65b0\u9884\u7b97", - "new_asset_account": "\u65b0\u8d44\u4ea7\u8d26\u6237", - "newTransfer": "\u65b0\u8f6c\u8d26", - "submission_options": "Submission options", - "apply_rules_checkbox": "\u5e94\u7528\u89c4\u5219", - "fire_webhooks_checkbox": "\u89e6\u53d1 webhook", - "newDeposit": "\u65b0\u6536\u5165", - "newWithdrawal": "\u65b0\u652f\u51fa", - "bills_paid": "\u5df2\u4ed8\u8d26\u5355", - "left_to_spend": "\u5269\u4f59\u652f\u51fa", - "no_budget": "(\u65e0\u9884\u7b97)", - "budgeted": "\u9884\u7b97\u4e0a\u9650", - "spent": "\u652f\u51fa", - "no_bill": "(\u65e0\u8d26\u5355)", - "rule_trigger_source_account_starts_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u5f00\u5934\u4e3a...", - "rule_trigger_source_account_ends_choice": "\u6765\u6e90\u8d26\u6237\u7ed3\u5c3e\u4e3a\u2026", - "rule_trigger_source_account_is_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u4e3a...", - "rule_trigger_source_account_contains_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u5305\u542b...", - "rule_trigger_account_id_choice": "\u5176\u4e2d\u4e00\u4e2a\u8d26\u6237ID\u4e3a...", - "rule_trigger_source_account_id_choice": "\u6765\u6e90\u8d26\u6237 ID \u4e3a...", - "rule_trigger_destination_account_id_choice": "\u76ee\u6807\u8d26\u6237 ID \u4e3a...", - "rule_trigger_account_is_cash_choice": "\u5176\u4e2d\u4e00\u4e2a\u8d26\u6237\u662f\u73b0\u91d1\u8d26\u6237", - "rule_trigger_source_is_cash_choice": "\u6765\u6e90\u8d26\u6237\u4e3a (\u73b0\u91d1) \u8d26\u6237", - "rule_trigger_destination_is_cash_choice": "\u76ee\u6807\u8d26\u6237\u4e3a (\u73b0\u91d1) \u8d26\u6237", - "rule_trigger_source_account_nr_starts_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5f00\u5934\u4e3a...", - "rule_trigger_source_account_nr_ends_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u7ed3\u5c3e\u4e3a...", - "rule_trigger_source_account_nr_is_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u4e3a...", - "rule_trigger_source_account_nr_contains_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5305\u542b...", - "rule_trigger_destination_account_starts_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u5f00\u5934\u4e3a...", - "rule_trigger_destination_account_ends_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u7ed3\u5c3e\u4e3a...", - "rule_trigger_destination_account_is_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u4e3a...", - "rule_trigger_destination_account_contains_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u5305\u542b...", - "rule_trigger_destination_account_nr_starts_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5f00\u5934\u4e3a...", - "rule_trigger_destination_account_nr_ends_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u7ed3\u5c3e\u4e3a...", - "rule_trigger_destination_account_nr_is_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u4e3a...", - "rule_trigger_destination_account_nr_contains_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5305\u542b...", - "rule_trigger_transaction_type_choice": "\u4ea4\u6613\u7c7b\u578b\u4e3a\u2026", - "rule_trigger_category_is_choice": "\u5206\u7c7b\u4e3a...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "\u91d1\u989d\u662f...", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u63cf\u8ff0\u5f00\u5934\u4e3a...", - "rule_trigger_description_ends_choice": "\u63cf\u8ff0\u7ed3\u5c3e\u4e3a...", - "rule_trigger_description_contains_choice": "\u63cf\u8ff0\u5305\u542b\u2026", - "rule_trigger_description_is_choice": "\u63cf\u8ff0\u4e3a\u2026", - "rule_trigger_date_on_choice": "\u4ea4\u6613\u65e5\u671f\u4e3a...", - "rule_trigger_date_before_choice": "\u4ea4\u6613\u65e5\u671f\u65e9\u4e8e...", - "rule_trigger_date_after_choice": "\u4ea4\u6613\u65e5\u671f\u665a\u4e8e...", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u9884\u7b97\u4e3a\u2026", - "rule_trigger_tag_is_choice": "\u5176\u4e2d\u4e00\u4e2a\u6807\u7b7e\u4e3a...", - "rule_trigger_currency_is_choice": "\u4ea4\u6613\u8d27\u5e01\u4e3a\u2026", - "rule_trigger_foreign_currency_is_choice": "\u4ea4\u6613\u5916\u5e01\u4e3a...", - "rule_trigger_has_attachments_choice": "\u81f3\u5c11\u6709\u8fd9\u4e48\u591a\u9644\u4ef6", - "rule_trigger_has_no_category_choice": "\u65e0\u5206\u7c7b", - "rule_trigger_has_any_category_choice": "\u6709\u4e00\u4e2a (\u4efb\u4f55) \u5206\u7c7b", - "rule_trigger_has_no_budget_choice": "\u6ca1\u6709\u9884\u7b97", - "rule_trigger_has_any_budget_choice": "\u6709\u4e00\u4e2a (\u4efb\u4f55) \u9884\u7b97", - "rule_trigger_has_no_bill_choice": "\u672a\u6709\u8d26\u5355", - "rule_trigger_has_any_bill_choice": "\u6709\u4e00\u4e2a\uff08\u4efb\u4f55\uff09\u8d26\u5355", - "rule_trigger_has_no_tag_choice": "\u6ca1\u6709\u6807\u7b7e", - "rule_trigger_has_any_tag_choice": "\u6709\u4e00\u4e2a\u6216\u591a\u4e2a (\u4efb\u4f55) \u6807\u7b7e", - "rule_trigger_any_notes_choice": "\u6709 (\u4efb\u610f) \u5907\u6ce8", - "rule_trigger_no_notes_choice": "\u65e0\u5907\u6ce8", - "rule_trigger_notes_is_choice": "\u5907\u6ce8\u4e3a...", - "rule_trigger_notes_contains_choice": "\u5907\u6ce8\u5305\u542b...", - "rule_trigger_notes_starts_choice": "\u5907\u6ce8\u5f00\u5934\u4e3a...", - "rule_trigger_notes_ends_choice": "\u5907\u6ce8\u7ed3\u5c3e\u4e3a...", - "rule_trigger_bill_is_choice": "\u8d26\u5355\u662f...", - "rule_trigger_external_id_is_choice": "\u5916\u90e8ID\u4e3a...", - "rule_trigger_internal_reference_is_choice": "\u5185\u90e8\u5f15\u7528\u4e3a...", - "rule_trigger_journal_id_choice": "\u4ea4\u6613\u65e5\u5fd7 ID \u4e3a...", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "\u4ea4\u6613\u6ca1\u6709\u5916\u90e8\u94fe\u63a5", - "rule_trigger_id_choice": "\u4ea4\u6613ID\u4e3a...", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u6e05\u7a7a\u4efb\u4f55\u5206\u7c7b", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u6e05\u7a7a\u4efb\u4f55\u9884\u7b97", - "rule_action_add_tag_choice": "\u6dfb\u52a0\u6807\u7b7e..", - "rule_action_remove_tag_choice": "\u79fb\u9664\u6807\u7b7e..", - "rule_action_remove_all_tags_choice": "\u79fb\u9664\u6240\u6709\u6807\u7b7e", - "rule_action_set_description_choice": "\u8bbe\u7f6e\u63cf\u8ff0\u4e3a", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u79fb\u9664\u6240\u6709\u5907\u6ce8", - "rule_action_set_notes_choice": "\u8bbe\u7f6e\u5907\u6ce8\u4e3a..", - "rule_action_link_to_bill_choice": "\u5173\u8054\u81f3\u8d26\u5355\u2026", - "rule_action_convert_deposit_choice": "\u8f6c\u6362\u4ea4\u6613\u4e3a\u6536\u5165", - "rule_action_convert_withdrawal_choice": "\u8f6c\u6362\u4ea4\u6613\u4e3a\u652f\u51fa", - "rule_action_convert_transfer_choice": "\u8f6c\u6362\u4ea4\u6613\u4e3a\u8f6c\u8d26", - "placeholder": "[Placeholder]", - "recurrences": "\u5b9a\u671f\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u6536\u5165", - "pref_1D": "1\u5929", - "pref_1W": "1\u5468", - "pref_1M": "1\u4e2a\u6708", - "pref_3M": "3\u4e2a\u6708 (1\u5b63\u5ea6)", - "pref_6M": "6\u4e2a\u6708", - "pref_1Y": "1\u5e74", - "repeat_freq_yearly": "\u6bcf\u5e74", - "repeat_freq_half-year": "\u6bcf\u534a\u5e74", - "repeat_freq_quarterly": "\u6bcf\u5b63", - "repeat_freq_monthly": "\u6bcf\u6708", - "repeat_freq_weekly": "\u6bcf\u5468", - "single_split": "\u62c6\u5206", - "asset_accounts": "\u8d44\u4ea7\u8d26\u6237", - "expense_accounts": "\u652f\u51fa\u8d26\u6237", - "liabilities_accounts": "\u503a\u52a1\u8d26\u6237", - "undefined_accounts": "\u8d26\u6237", - "name": "\u540d\u79f0", - "revenue_accounts": "\u6536\u5165\u8d26\u6237", - "description": "\u63cf\u8ff0", - "category": "\u5206\u7c7b", - "title_deposit": "\u6536\u5165", - "title_transfer": "\u8f6c\u8d26", - "title_transfers": "\u8f6c\u8d26", - "piggyBanks": "\u5b58\u94b1\u7f50", - "rules": "\u89c4\u5219", - "accounts": "\u8d26\u6237", - "categories": "\u5206\u7c7b", - "tags": "\u6807\u7b7e", - "object_groups_page_title": "\u7ec4", - "reports": "\u62a5\u8868", - "webhooks": "Webhooks", - "currencies": "\u8d27\u5e01", - "administration": "\u7ba1\u7406", - "profile": "\u4e2a\u4eba\u6863\u6848", - "source_account": "\u6765\u6e90\u8d26\u6237", - "destination_account": "\u76ee\u6807\u8d26\u6237", - "amount": "\u91d1\u989d", - "date": "\u65e5\u671f", - "time": "\u65f6\u95f4", - "preferences": "\u504f\u597d\u8bbe\u5b9a", - "transactions": "\u4ea4\u6613", - "balance": "\u4f59\u989d", - "budgets": "\u9884\u7b97", - "subscriptions": "Subscriptions", - "welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f", - "bills_to_pay": "\u5f85\u4ed8\u8d26\u5355", - "net_worth": "\u51c0\u8d44\u4ea7", - "pref_last365": "\u6700\u8fd1\u4e00\u5e74", - "pref_last90": "\u6700\u8fd190\u5929", - "pref_last30": "\u6700\u8fd1 30 \u5929", - "pref_last7": "\u6700\u8fd17\u5929", - "pref_YTD": "\u4eca\u5e74\u81f3\u4eca", - "pref_QTD": "\u672c\u5b63\u5ea6\u81f3\u4eca", - "pref_MTD": "\u672c\u6708\u81f3\u4eca" - } -} diff --git a/frontend/src/i18n/zh_TW/index.js b/frontend/src/i18n/zh_TW/index.js deleted file mode 100644 index 0eaa5c8736..0000000000 --- a/frontend/src/i18n/zh_TW/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "zh-tw", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "\u540d\u7a31", - "amount_min": "\u6700\u5c0f\u91d1\u984d", - "amount_max": "\u6700\u5927\u91d1\u984d", - "url": "URL", - "title": "\u6a19\u984c", - "first_date": "\u521d\u6b21\u65e5\u671f", - "repetitions": "\u91cd\u8907", - "description": "\u63cf\u8ff0", - "iban": "\u570b\u969b\u9280\u884c\u5e33\u6236\u865f\u78bc (IBAN)", - "skip": "\u7565\u904e", - "date": "\u65e5\u671f" - }, - "list": { - "name": "\u540d\u7a31", - "account_number": "\u5e33\u6236\u865f\u78bc", - "currentBalance": "\u76ee\u524d\u9918\u984d", - "lastActivity": "\u4e0a\u6b21\u6d3b\u52d5", - "active": "\u662f\u5426\u555f\u7528\uff1f" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u9810\u7b97", - "subscriptions": "\u8a02\u95b1", - "transactions": "\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "\u8f49\u5e33", - "title_transfers": "\u8f49\u5e33", - "asset_accounts": "\u8cc7\u7522\u5e33\u6236", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u64cd\u4f5c", - "edit": "\u7de8\u8f2f", - "delete": "\u522a\u9664", - "reconcile": "Reconcile", - "create_new_asset": "\u5efa\u7acb\u65b0\u8cc7\u7522\u5e33\u6236", - "confirm_action": "Confirm action", - "new_budget": "\u65b0\u9810\u7b97", - "new_asset_account": "\u65b0\u8cc7\u7522\u5e33\u6236", - "newTransfer": "\u65b0\u8f49\u5e33", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u65b0\u5b58\u6b3e", - "newWithdrawal": "\u65b0\u652f\u51fa", - "bills_paid": "\u5df2\u7e73\u5e33\u55ae", - "left_to_spend": "\u5269\u9918\u53ef\u82b1\u8cbb", - "no_budget": "(\u7121\u9810\u7b97)", - "budgeted": "\u5df2\u5217\u5165\u9810\u7b97", - "spent": "\u652f\u51fa", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "\u8f49\u5e33\u985e\u578b\u70ba\u2026", - "rule_trigger_category_is_choice": "\u985e\u5225...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u63cf\u8ff0\u4ee5\u2026\u958b\u982d", - "rule_trigger_description_ends_choice": "\u63cf\u8ff0\u4ee5\u2026\u4f5c\u7d50", - "rule_trigger_description_contains_choice": "\u63cf\u8ff0\u5305\u542b\u2026", - "rule_trigger_description_is_choice": "\u63cf\u8ff0\u662f\u2026", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u9810\u7b97\u70ba\u2026", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "\u8f49\u5e33\u8ca8\u5e63\u70ba\u2026", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "\u81f3\u5c11\u6709\u9019\u9ebc\u591a\u9644\u52a0\u6a94\u6848", - "rule_trigger_has_no_category_choice": "\u7121\u5206\u985e", - "rule_trigger_has_any_category_choice": "\u6709\u4e00\u500b (\u4efb\u4f55) \u5206\u985e", - "rule_trigger_has_no_budget_choice": "\u6c92\u6709\u9810\u7b97", - "rule_trigger_has_any_budget_choice": "\u6709\u4e00\u500b (\u4efb\u4f55) \u9810\u7b97", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "\u6c92\u6709\u6a19\u7c64", - "rule_trigger_has_any_tag_choice": "\u6709\u4e00\u500b\u6216\u591a\u500b (\u4efb\u4f55) \u6a19\u7c64", - "rule_trigger_any_notes_choice": "\u6709 (\u4efb\u4f55) \u8a3b\u91cb", - "rule_trigger_no_notes_choice": "\u6c92\u6709\u8a3b\u91cb", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u6e05\u7a7a\u4efb\u4f55\u5206\u985e", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u6e05\u7a7a\u4efb\u4f55\u9810\u7b97", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u79fb\u9664\u6240\u6709\u6a19\u7c64", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u79fb\u9664\u4efb\u4f55\u8a3b\u91cb", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u8f49\u63db\u4ea4\u6613\u70ba\u5b58\u6b3e", - "rule_action_convert_withdrawal_choice": "\u8f49\u63db\u4ea4\u6613\u81f3\u63d0\u6b3e", - "rule_action_convert_transfer_choice": "\u8f49\u63db\u4ea4\u6613\u81f3\u8f49\u5e33", - "placeholder": "[Placeholder]", - "recurrences": "\u9031\u671f\u6027\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u6536\u5165", - "pref_1D": "1 \u5929", - "pref_1W": "1 \u9031", - "pref_1M": "1 \u500b\u6708", - "pref_3M": "3\u500b\u6708 (\u5b63)", - "pref_6M": "6\u500b\u6708", - "pref_1Y": "1\u5e74", - "repeat_freq_yearly": "\u6bcf\u5e74", - "repeat_freq_half-year": "\u6bcf\u534a\u5e74", - "repeat_freq_quarterly": "\u6bcf\u5b63", - "repeat_freq_monthly": "\u6bcf\u6708", - "repeat_freq_weekly": "\u6bcf\u9031", - "single_split": "Split", - "asset_accounts": "\u8cc7\u7522\u5e33\u6236", - "expense_accounts": "\u652f\u51fa\u5e33\u6236", - "liabilities_accounts": "\u50b5\u52d9", - "undefined_accounts": "Accounts", - "name": "\u540d\u7a31", - "revenue_accounts": "\u6536\u5165\u5e33\u6236", - "description": "\u63cf\u8ff0", - "category": "\u5206\u985e", - "title_deposit": "\u6536\u5165", - "title_transfer": "\u8f49\u5e33", - "title_transfers": "\u8f49\u5e33", - "piggyBanks": "\u5c0f\u8c6c\u64b2\u6eff", - "rules": "\u898f\u5247", - "accounts": "\u5e33\u6236", - "categories": "\u5206\u985e", - "tags": "\u6a19\u7c64", - "object_groups_page_title": "Groups", - "reports": "\u5831\u8868", - "webhooks": "Webhooks", - "currencies": "\u8ca8\u5e63", - "administration": "\u7ba1\u7406", - "profile": "\u500b\u4eba\u6a94\u6848", - "source_account": "\u4f86\u6e90\u5e33\u6236", - "destination_account": "\u76ee\u6a19\u5e33\u6236", - "amount": "\u91d1\u984d", - "date": "\u65e5\u671f", - "time": "Time", - "preferences": "\u504f\u597d\u8a2d\u5b9a", - "transactions": "\u4ea4\u6613", - "balance": "\u9918\u984d", - "budgets": "\u9810\u7b97", - "subscriptions": "Subscriptions", - "welcome_back": "What's playing?", - "bills_to_pay": "\u5f85\u4ed8\u5e33\u55ae", - "net_worth": "\u6de8\u503c", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/index.template.html b/frontend/src/index.template.html deleted file mode 100644 index fafca50d10..0000000000 --- a/frontend/src/index.template.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - <%= productName %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue deleted file mode 100644 index a09beb3158..0000000000 --- a/frontend/src/layouts/MainLayout.vue +++ /dev/null @@ -1,391 +0,0 @@ - - - - - - - - diff --git a/frontend/src/pages/Error404.vue b/frontend/src/pages/Error404.vue deleted file mode 100644 index 7b1f15688b..0000000000 --- a/frontend/src/pages/Error404.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - - - diff --git a/frontend/src/pages/Index.vue b/frontend/src/pages/Index.vue deleted file mode 100644 index 315111d840..0000000000 --- a/frontend/src/pages/Index.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - diff --git a/frontend/src/pages/accounts/Create.vue b/frontend/src/pages/accounts/Create.vue deleted file mode 100644 index a6cdba9ba8..0000000000 --- a/frontend/src/pages/accounts/Create.vue +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/accounts/Edit.vue b/frontend/src/pages/accounts/Edit.vue deleted file mode 100644 index d5ad30b194..0000000000 --- a/frontend/src/pages/accounts/Edit.vue +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/accounts/Index.vue b/frontend/src/pages/accounts/Index.vue deleted file mode 100644 index af04e4caef..0000000000 --- a/frontend/src/pages/accounts/Index.vue +++ /dev/null @@ -1,259 +0,0 @@ - - - - - diff --git a/frontend/src/pages/accounts/Reconcile.vue b/frontend/src/pages/accounts/Reconcile.vue deleted file mode 100644 index af32e40eaf..0000000000 --- a/frontend/src/pages/accounts/Reconcile.vue +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/accounts/Show.vue b/frontend/src/pages/accounts/Show.vue deleted file mode 100644 index 904239b9fd..0000000000 --- a/frontend/src/pages/accounts/Show.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/administration/Index.vue b/frontend/src/pages/administration/Index.vue deleted file mode 100644 index 0f0c4db408..0000000000 --- a/frontend/src/pages/administration/Index.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/budgets/Create.vue b/frontend/src/pages/budgets/Create.vue deleted file mode 100644 index 0564a9dd09..0000000000 --- a/frontend/src/pages/budgets/Create.vue +++ /dev/null @@ -1,193 +0,0 @@ - - - - - diff --git a/frontend/src/pages/budgets/Edit.vue b/frontend/src/pages/budgets/Edit.vue deleted file mode 100644 index e2c8bdef6b..0000000000 --- a/frontend/src/pages/budgets/Edit.vue +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/budgets/Index.vue b/frontend/src/pages/budgets/Index.vue deleted file mode 100644 index dc1ac75caf..0000000000 --- a/frontend/src/pages/budgets/Index.vue +++ /dev/null @@ -1,217 +0,0 @@ - - - - - diff --git a/frontend/src/pages/budgets/Show.vue b/frontend/src/pages/budgets/Show.vue deleted file mode 100644 index c97f02da9a..0000000000 --- a/frontend/src/pages/budgets/Show.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/categories/Create.vue b/frontend/src/pages/categories/Create.vue deleted file mode 100644 index 94ce83a203..0000000000 --- a/frontend/src/pages/categories/Create.vue +++ /dev/null @@ -1,192 +0,0 @@ - - - - - diff --git a/frontend/src/pages/categories/Edit.vue b/frontend/src/pages/categories/Edit.vue deleted file mode 100644 index ba9f1e3b34..0000000000 --- a/frontend/src/pages/categories/Edit.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/categories/Index.vue b/frontend/src/pages/categories/Index.vue deleted file mode 100644 index fe607eb147..0000000000 --- a/frontend/src/pages/categories/Index.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - - - diff --git a/frontend/src/pages/categories/Show.vue b/frontend/src/pages/categories/Show.vue deleted file mode 100644 index 637c226586..0000000000 --- a/frontend/src/pages/categories/Show.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/currencies/Create.vue b/frontend/src/pages/currencies/Create.vue deleted file mode 100644 index e6de6b2c23..0000000000 --- a/frontend/src/pages/currencies/Create.vue +++ /dev/null @@ -1,227 +0,0 @@ - - - - - diff --git a/frontend/src/pages/currencies/Edit.vue b/frontend/src/pages/currencies/Edit.vue deleted file mode 100644 index dc9fce03fe..0000000000 --- a/frontend/src/pages/currencies/Edit.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/currencies/Index.vue b/frontend/src/pages/currencies/Index.vue deleted file mode 100644 index 155089e53b..0000000000 --- a/frontend/src/pages/currencies/Index.vue +++ /dev/null @@ -1,217 +0,0 @@ - - - - - diff --git a/frontend/src/pages/currencies/Show.vue b/frontend/src/pages/currencies/Show.vue deleted file mode 100644 index 2a11cf0bbc..0000000000 --- a/frontend/src/pages/currencies/Show.vue +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/dashboard/Dashboard.vue b/frontend/src/pages/dashboard/Dashboard.vue deleted file mode 100644 index 01e5f89368..0000000000 --- a/frontend/src/pages/dashboard/Dashboard.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - - - diff --git a/frontend/src/pages/dashboard/HomeChart.vue b/frontend/src/pages/dashboard/HomeChart.vue deleted file mode 100644 index b9571df099..0000000000 --- a/frontend/src/pages/dashboard/HomeChart.vue +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/development/Index.vue b/frontend/src/pages/development/Index.vue deleted file mode 100644 index 4d24ccff4a..0000000000 --- a/frontend/src/pages/development/Index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/export/Index.vue b/frontend/src/pages/export/Index.vue deleted file mode 100644 index a3bba747f1..0000000000 --- a/frontend/src/pages/export/Index.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/groups/Edit.vue b/frontend/src/pages/groups/Edit.vue deleted file mode 100644 index 4e63dd65f1..0000000000 --- a/frontend/src/pages/groups/Edit.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/groups/Index.vue b/frontend/src/pages/groups/Index.vue deleted file mode 100644 index 6f7162b8b8..0000000000 --- a/frontend/src/pages/groups/Index.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - diff --git a/frontend/src/pages/groups/Show.vue b/frontend/src/pages/groups/Show.vue deleted file mode 100644 index bb9463a898..0000000000 --- a/frontend/src/pages/groups/Show.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/piggy-banks/Create.vue b/frontend/src/pages/piggy-banks/Create.vue deleted file mode 100644 index c861cbd857..0000000000 --- a/frontend/src/pages/piggy-banks/Create.vue +++ /dev/null @@ -1,272 +0,0 @@ - - - - - diff --git a/frontend/src/pages/piggy-banks/Edit.vue b/frontend/src/pages/piggy-banks/Edit.vue deleted file mode 100644 index 40d78c0651..0000000000 --- a/frontend/src/pages/piggy-banks/Edit.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/piggy-banks/Index.vue b/frontend/src/pages/piggy-banks/Index.vue deleted file mode 100644 index 122c37a6d7..0000000000 --- a/frontend/src/pages/piggy-banks/Index.vue +++ /dev/null @@ -1,208 +0,0 @@ - - - - - diff --git a/frontend/src/pages/piggy-banks/Show.vue b/frontend/src/pages/piggy-banks/Show.vue deleted file mode 100644 index 0bab3c0067..0000000000 --- a/frontend/src/pages/piggy-banks/Show.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/preferences/Index.vue b/frontend/src/pages/preferences/Index.vue deleted file mode 100644 index c88965c1f9..0000000000 --- a/frontend/src/pages/preferences/Index.vue +++ /dev/null @@ -1,413 +0,0 @@ - - - - - diff --git a/frontend/src/pages/profile/Data.vue b/frontend/src/pages/profile/Data.vue deleted file mode 100644 index b1728c923d..0000000000 --- a/frontend/src/pages/profile/Data.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - - - diff --git a/frontend/src/pages/profile/Index.vue b/frontend/src/pages/profile/Index.vue deleted file mode 100644 index ad6ff78a6d..0000000000 --- a/frontend/src/pages/profile/Index.vue +++ /dev/null @@ -1,169 +0,0 @@ - - - - - diff --git a/frontend/src/pages/recurring/Create.vue b/frontend/src/pages/recurring/Create.vue deleted file mode 100644 index 27162ba00c..0000000000 --- a/frontend/src/pages/recurring/Create.vue +++ /dev/null @@ -1,590 +0,0 @@ - - - - - diff --git a/frontend/src/pages/recurring/Edit.vue b/frontend/src/pages/recurring/Edit.vue deleted file mode 100644 index e435cb3f9b..0000000000 --- a/frontend/src/pages/recurring/Edit.vue +++ /dev/null @@ -1,606 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/recurring/Index.vue b/frontend/src/pages/recurring/Index.vue deleted file mode 100644 index 443045da9c..0000000000 --- a/frontend/src/pages/recurring/Index.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - - - diff --git a/frontend/src/pages/recurring/Show.vue b/frontend/src/pages/recurring/Show.vue deleted file mode 100644 index 1b549e9473..0000000000 --- a/frontend/src/pages/recurring/Show.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/reports/Default.vue b/frontend/src/pages/reports/Default.vue deleted file mode 100644 index 9201b62109..0000000000 --- a/frontend/src/pages/reports/Default.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/reports/Index.vue b/frontend/src/pages/reports/Index.vue deleted file mode 100644 index 8667ec25ce..0000000000 --- a/frontend/src/pages/reports/Index.vue +++ /dev/null @@ -1,157 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rule-groups/Create.vue b/frontend/src/pages/rule-groups/Create.vue deleted file mode 100644 index 9e7d005968..0000000000 --- a/frontend/src/pages/rule-groups/Create.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rule-groups/Edit.vue b/frontend/src/pages/rule-groups/Edit.vue deleted file mode 100644 index fd2fe528b5..0000000000 --- a/frontend/src/pages/rule-groups/Edit.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/rules/Create.vue b/frontend/src/pages/rules/Create.vue deleted file mode 100644 index 77ff629b52..0000000000 --- a/frontend/src/pages/rules/Create.vue +++ /dev/null @@ -1,593 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rules/Edit.vue b/frontend/src/pages/rules/Edit.vue deleted file mode 100644 index dc620d768f..0000000000 --- a/frontend/src/pages/rules/Edit.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/rules/Index.vue b/frontend/src/pages/rules/Index.vue deleted file mode 100644 index f636e5f44c..0000000000 --- a/frontend/src/pages/rules/Index.vue +++ /dev/null @@ -1,232 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rules/Show.vue b/frontend/src/pages/rules/Show.vue deleted file mode 100644 index 8d8111b184..0000000000 --- a/frontend/src/pages/rules/Show.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/subscriptions/Create.vue b/frontend/src/pages/subscriptions/Create.vue deleted file mode 100644 index fa17e4c1e9..0000000000 --- a/frontend/src/pages/subscriptions/Create.vue +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/subscriptions/Edit.vue b/frontend/src/pages/subscriptions/Edit.vue deleted file mode 100644 index a122e9d35d..0000000000 --- a/frontend/src/pages/subscriptions/Edit.vue +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/subscriptions/Index.vue b/frontend/src/pages/subscriptions/Index.vue deleted file mode 100644 index 1f67f71ec3..0000000000 --- a/frontend/src/pages/subscriptions/Index.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - diff --git a/frontend/src/pages/subscriptions/Show.vue b/frontend/src/pages/subscriptions/Show.vue deleted file mode 100644 index ae5df5896c..0000000000 --- a/frontend/src/pages/subscriptions/Show.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/system/Index.vue b/frontend/src/pages/system/Index.vue deleted file mode 100644 index 0ca511f7d9..0000000000 --- a/frontend/src/pages/system/Index.vue +++ /dev/null @@ -1,211 +0,0 @@ - - - - - diff --git a/frontend/src/pages/tags/Index.vue b/frontend/src/pages/tags/Index.vue deleted file mode 100644 index b51bf8e3ae..0000000000 --- a/frontend/src/pages/tags/Index.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - - - diff --git a/frontend/src/pages/tags/Show.vue b/frontend/src/pages/tags/Show.vue deleted file mode 100644 index 5e2b63cea5..0000000000 --- a/frontend/src/pages/tags/Show.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/transactions/Create.vue b/frontend/src/pages/transactions/Create.vue deleted file mode 100644 index cfd7bdb62f..0000000000 --- a/frontend/src/pages/transactions/Create.vue +++ /dev/null @@ -1,436 +0,0 @@ - - - - - diff --git a/frontend/src/pages/transactions/Edit.vue b/frontend/src/pages/transactions/Edit.vue deleted file mode 100644 index 12a8160320..0000000000 --- a/frontend/src/pages/transactions/Edit.vue +++ /dev/null @@ -1,447 +0,0 @@ - - - - - diff --git a/frontend/src/pages/transactions/Index.vue b/frontend/src/pages/transactions/Index.vue deleted file mode 100644 index e318467b7b..0000000000 --- a/frontend/src/pages/transactions/Index.vue +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/transactions/Show.vue b/frontend/src/pages/transactions/Show.vue deleted file mode 100644 index ead8b9a430..0000000000 --- a/frontend/src/pages/transactions/Show.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/webhooks/Create.vue b/frontend/src/pages/webhooks/Create.vue deleted file mode 100644 index 916c0409c7..0000000000 --- a/frontend/src/pages/webhooks/Create.vue +++ /dev/null @@ -1,280 +0,0 @@ - - - - - diff --git a/frontend/src/pages/webhooks/Edit.vue b/frontend/src/pages/webhooks/Edit.vue deleted file mode 100644 index 78e7e29da5..0000000000 --- a/frontend/src/pages/webhooks/Edit.vue +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/webhooks/Index.vue b/frontend/src/pages/webhooks/Index.vue deleted file mode 100644 index 5ffd05425d..0000000000 --- a/frontend/src/pages/webhooks/Index.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - - diff --git a/frontend/src/pages/webhooks/Show.vue b/frontend/src/pages/webhooks/Show.vue deleted file mode 100644 index cca5c24c84..0000000000 --- a/frontend/src/pages/webhooks/Show.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - diff --git a/frontend/src/quasar.d.ts b/frontend/src/quasar.d.ts deleted file mode 100644 index 965b8e0bdd..0000000000 --- a/frontend/src/quasar.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * quasar.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// Forces TS to apply `@quasar/app` augmentations of `quasar` package -// Removing this would break `quasar/wrappers` imports as those typings are declared -// into `@quasar/app` -// As a side effect, since `@quasar/app` reference `quasar` to augment it, -// this declaration also apply `quasar` own -// augmentations (eg. adds `$q` into Vue component context) -/// diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js deleted file mode 100644 index ab2e3e075a..0000000000 --- a/frontend/src/router/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {route} from 'quasar/wrappers' -import {createMemoryHistory, createRouter, createWebHashHistory, createWebHistory} from 'vue-router' -import routes from './routes' - -/* - * If not building with SSR mode, you can - * directly export the Router instantiation; - * - * The function below can be async too; either use - * async/await or return a Promise which resolves - * with the Router instance. - */ - -export default route(function (/* { store, ssrContext } */) { - const createHistory = process.env.SERVER - ? createMemoryHistory - : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory) - - const Router = createRouter({ - scrollBehavior: () => ({left: 0, top: 0}), - routes, - - // Leave this as is and make changes in quasar.conf.js instead! - // quasar.conf.js -> build -> vueRouterMode - // quasar.conf.js -> build -> publicPath - history: createHistory(process.env.MODE === 'ssr' ? void 0 : process.env.VUE_ROUTER_BASE) - }) - - return Router -}) diff --git a/frontend/src/router/routes.js b/frontend/src/router/routes.js deleted file mode 100644 index 931efdf39e..0000000000 --- a/frontend/src/router/routes.js +++ /dev/null @@ -1,989 +0,0 @@ -/* - * routes.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -const routes = [ - { - path: '/', - component: () => import('layouts/MainLayout.vue'), - children: [{ - path: '', - component: () => import('pages/Index.vue'), - name: 'index', - meta: {dateSelector: true, pageTitle: 'firefly.welcome_back',} - }] - }, - // beta - { - path: '/development', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/development/Index.vue'), - name: 'development.index', - meta: { - pageTitle: 'firefly.development' - } - } - ] - }, - // beta - { - path: '/export', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/export/Index.vue'), - name: 'export.index', - meta: { - pageTitle: 'firefly.export' - } - } - ] - }, - // budgets - { - path: '/budgets', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Index.vue'), - name: 'budgets.index', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'budgets', route: 'budgets.index', params: []} - ] - } - } - ] - }, - { - path: '/budgets/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Show.vue'), - name: 'budgets.show', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'placeholder', route: 'budgets.show', params: []} - ] - } - } - ] - }, - { - path: '/budgets/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Edit.vue'), - name: 'budgets.edit', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'placeholder', route: 'budgets.show', params: []} - ] - } - } - ] - }, - { - path: '/budgets/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Create.vue'), - name: 'budgets.create', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'placeholder', route: 'budgets.show', params: []} - ] - } - } - ] - }, - // subscriptions - { - path: '/subscriptions', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Index.vue'), - name: 'subscriptions.index', - meta: { - pageTitle: 'firefly.subscriptions', - breadcrumbs: [{title: 'placeholder', route: 'subscriptions.index', params: []}] - } - } - ] - }, - { - path: '/subscriptions/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Show.vue'), - name: 'subscriptions.show', - meta: { - pageTitle: 'firefly.subscriptions', - breadcrumbs: [ - {title: 'placeholder', route: 'subscriptions.index'}, - ] - } - } - ] - }, - { - path: '/subscriptions/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Edit.vue'), - name: 'subscriptions.edit', - meta: { - pageTitle: 'firefly.subscriptions', - breadcrumbs: [ - {title: 'placeholder', route: 'subscriptions.index'}, - ] - } - } - ] - }, - { - path: '/subscriptions/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Create.vue'), - name: 'subscriptions.create', - meta: { - dateSelector: false, - pageTitle: 'firefly.subscriptions', - } - } - ] - }, - // piggy banks - { - path: '/piggy-banks', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Index.vue'), - name: 'piggy-banks.index', - meta: { - pageTitle: 'firefly.piggyBanks', - breadcrumbs: [{title: 'piggy-banks', route: 'piggy-banks.index', params: []}] - } - - } - ] - }, - { - path: '/piggy-banks/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Create.vue'), - name: 'piggy-banks.create', - meta: { - pageTitle: 'firefly.piggy-banks', - breadcrumbs: [ - {title: 'placeholder', route: 'piggy-banks.create', params: []} - ] - } - } - ] - }, - { - path: '/piggy-banks/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Show.vue'), - name: 'piggy-banks.show', - meta: { - pageTitle: 'firefly.piggy-banks', - breadcrumbs: [ - {title: 'placeholder', route: 'piggy-banks.index'}, - ] - } - } - ] - }, - { - path: '/piggy-banks/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Edit.vue'), - name: 'piggy-banks.edit', - meta: { - pageTitle: 'firefly.piggy-banks', - breadcrumbs: [ - {title: 'placeholder', route: 'piggy-banks.index'}, - ] - } - } - ] - }, - - // transactions (single) - { - path: '/transactions/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Show.vue'), - name: 'transactions.show', - meta: { - pageTitle: 'firefly.transactions', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'transactions.show', params: []} - ] - } - } - ] - }, - // transactions (create) - { - path: '/transactions/create/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Create.vue'), - name: 'transactions.create', - meta: { - dateSelector: false, - pageTitle: 'firefly.transactions', - } - } - ] - }, - // transactions (index) - { - path: '/transactions/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Index.vue'), - name: 'transactions.index', - meta: { - dateSelector: false, - pageTitle: 'firefly.transactions', - breadcrumbs: [ - {title: 'transactions'}, - ] - } - } - ] - }, - { - path: '/transactions/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Edit.vue'), - name: 'transactions.edit', - meta: { - pageTitle: 'firefly.transactions', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'transactions.show', params: []} - ] - } - } - ] - }, - - // rules - { - path: '/rules', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Index.vue'), - name: 'rules.index', - meta: { - pageTitle: 'firefly.rules', - } - } - ] - }, - { - path: '/rules/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Show.vue'), - name: 'rules.show', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'transactions.show', params: []} - ] - } - } - ] - }, - { - path: '/rules/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Create.vue'), - name: 'rules.create', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - { - path: '/rules/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Edit.vue'), - name: 'rules.edit', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'rules.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - { - path: '/rule-groups/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rule-groups/Edit.vue'), - name: 'rule-groups.edit', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - { - path: '/rule-groups/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rule-groups/Create.vue'), - name: 'rule-groups.create', - meta: { - pageTitle: 'firefly.rule-groups', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - - // recurring transactions - { - path: '/recurring', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Index.vue'), - name: 'recurring.index', - meta: { - pageTitle: 'firefly.recurrences', - } - } - ] - }, - { - path: '/recurring/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Create.vue'), - name: 'recurring.create', - meta: { - pageTitle: 'firefly.recurrences', - breadcrumbs: [ - {title: 'placeholder', route: 'recurrences.create', params: []} - ] - } - } - ] - }, - { - path: '/recurring/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Show.vue'), - name: 'recurring.show', - meta: { - pageTitle: 'firefly.recurrences', - breadcrumbs: [ - {title: 'placeholder', route: 'recurrences.index'}, - ] - } - } - ] - }, - { - path: '/recurring/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Edit.vue'), - name: 'recurring.edit', - meta: { - pageTitle: 'firefly.recurrences', - breadcrumbs: [ - {title: 'placeholder', route: 'recurrences.index'}, - ] - } - } - ] - }, - - // accounts - // account (single) - { - path: '/accounts/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Show.vue'), - name: 'accounts.show', - meta: { - pageTitle: 'firefly.accounts', - breadcrumbs: [ - {title: 'placeholder', route: 'accounts.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'accounts.show', params: []} - ] - } - } - ] - }, - { - path: '/accounts/reconcile/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Reconcile.vue'), - name: 'accounts.reconcile', - meta: { - pageTitle: 'firefly.accounts', - breadcrumbs: [ - {title: 'placeholder', route: 'accounts.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'accounts.reconcile', params: []} - ] - } - } - ] - }, - { - path: '/accounts/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Edit.vue'), - name: 'accounts.edit', - meta: { - pageTitle: 'firefly.accounts', - breadcrumbs: [ - {title: 'placeholder', route: 'accounts.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'accounts.edit', params: []} - ] - } - } - ] - }, - { - path: '/accounts/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Index.vue'), - name: 'accounts.index', - meta: { - pageTitle: 'firefly.accounts', - } - } - ] - }, - { - path: '/accounts/create/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Create.vue'), - name: 'accounts.create', - meta: { - pageTitle: 'firefly.accounts', - } - } - ] - }, - - // categories - { - path: '/categories', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Index.vue'), - name: 'categories.index', - meta: { - pageTitle: 'firefly.categories', - } - } - ] - }, - { - path: '/categories/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Show.vue'), - name: 'categories.show', - meta: { - pageTitle: 'firefly.categories', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - { - path: '/categories/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Edit.vue'), - name: 'categories.edit', - meta: { - pageTitle: 'firefly.categories', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - { - path: '/categories/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Create.vue'), - name: 'categories.create', - meta: { - pageTitle: 'firefly.categories', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - // tags - { - path: '/tags', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/tags/Index.vue'), - name: 'tags.index', - meta: { - pageTitle: 'firefly.tags', - } - } - ] - }, - { - path: '/tags/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/tags/Show.vue'), - name: 'tags.show', - meta: { - pageTitle: 'firefly.tags', - breadcrumbs: [ - {title: 'placeholder', route: 'tags.show', params: []} - ] - } - } - ] - }, - - // groups - { - path: '/groups', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/groups/Index.vue'), - name: 'groups.index', - meta: { - pageTitle: 'firefly.object_groups_page_title' - } - } - ] - }, - { - path: '/groups/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/groups/Show.vue'), - name: 'groups.show', - meta: { - pageTitle: 'firefly.groups', - breadcrumbs: [ - {title: 'placeholder', route: 'groups.show', params: []} - ] - } - } - ] - }, - { - path: '/groups/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/groups/Edit.vue'), - name: 'groups.edit', - meta: { - pageTitle: 'firefly.groups', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - // reports - { - path: '/reports', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/reports/Index.vue'), - name: 'reports.index', - meta: { - pageTitle: 'firefly.reports' - } - } - ] - }, - { - path: '/report/default/:accounts/:start/:end', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/reports/Default.vue'), - name: 'reports.default', - meta: { - pageTitle: 'firefly.reports' - } - } - ] - }, - - // webhooks - { - path: '/webhooks', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Index.vue'), - name: 'webhooks.index', - meta: { - pageTitle: 'firefly.webhooks' - } - } - ] - }, - { - path: '/webhooks/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Show.vue'), - name: 'webhooks.show', - meta: { - pageTitle: 'firefly.webhooks', - breadcrumbs: [ - {title: 'placeholder', route: 'groups.show', params: []} - ] - } - } - ] - }, - { - path: '/webhooks/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Edit.vue'), - name: 'webhooks.edit', - meta: { - pageTitle: 'firefly.webhooks', - breadcrumbs: [ - {title: 'placeholder', route: 'groups.show', params: []} - ] - } - } - ] - }, - { - path: '/webhooks/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Create.vue'), - name: 'webhooks.create', - meta: { - pageTitle: 'firefly.webhooks', - breadcrumbs: [ - {title: 'placeholder', route: 'webhooks.show', params: []} - ] - } - } - ] - }, - - // currencies - { - path: '/currencies', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Index.vue'), - name: 'currencies.index', - meta: { - pageTitle: 'firefly.currencies' - } - } - ] - }, - { - path: '/currencies/show/:code', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Show.vue'), - name: 'currencies.show', - meta: { - pageTitle: 'firefly.currencies', - breadcrumbs: [ - {title: 'placeholder', route: 'currencies.show', params: []} - ] - } - } - ] - }, - { - path: '/currencies/edit/:code', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Edit.vue'), - name: 'currencies.edit', - meta: { - pageTitle: 'firefly.currencies', - breadcrumbs: [ - {title: 'placeholder', route: 'currencies.show', params: []} - ] - } - } - ] - }, - { - path: '/currencies/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Create.vue'), - name: 'currencies.create', - meta: { - pageTitle: 'firefly.currencies', - breadcrumbs: [ - {title: 'placeholder', route: 'currencies.create', params: []} - ] - } - } - ] - }, - // financial administration - { - path: '/administrations', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/administration/Index.vue'), - name: 'administration.index', - meta: { - pageTitle: 'firefly.administration_index' - } - } - ] - }, - - // profile - { - path: '/profile', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/profile/Index.vue'), - name: 'profile.index', - meta: { - pageTitle: 'firefly.profile' - } - } - ] - }, - { - path: '/profile/data', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/profile/Data.vue'), - name: 'profile.data', - meta: { - pageTitle: 'firefly.profile_data' - } - } - ] - }, - - // preferences - { - path: '/preferences', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/preferences/Index.vue'), - name: 'preferences.index', - meta: { - pageTitle: 'firefly.preferences' - } - } - ] - }, - - // administration (system settings) - { - path: '/system', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/system/Index.vue'), - name: 'system.index', - meta: { - pageTitle: 'firefly.system' - } - } - ] - }, - - // Always leave this as last one, - // but you can also remove it - { - path: '/:catchAll(.*)*', - component: () => import('pages/Error404.vue') - } -] - -export default routes diff --git a/frontend/src/shims-vue.d.ts b/frontend/src/shims-vue.d.ts deleted file mode 100644 index db6b5f9d21..0000000000 --- a/frontend/src/shims-vue.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * shims-vue.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// Mocks all files ending in `.vue` showing them as plain Vue instances -/* eslint-disable */ -declare module '*.vue' { - import type {DefineComponent} from 'vue'; - const component: DefineComponent<{}, {}, any>; - export default component; -} diff --git a/frontend/src/store/fireflyiii/actions.js b/frontend/src/store/fireflyiii/actions.js deleted file mode 100644 index 8bb7353cfa..0000000000 --- a/frontend/src/store/fireflyiii/actions.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * actions.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* -export function someAction (context) { -} -*/ - - -export function refreshCacheKey(context) { - let cacheKey = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8); - context.commit('setCacheKey', cacheKey); -} - -export function resetRange(context) { - let defaultRange = context.getters.getDefaultRange; - context.commit('setRange', defaultRange); -} - diff --git a/frontend/src/store/fireflyiii/getters.js b/frontend/src/store/fireflyiii/getters.js deleted file mode 100644 index b098eb63b7..0000000000 --- a/frontend/src/store/fireflyiii/getters.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * getters.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* -export function someGetter (state) { -} -*/ - -export function getViewRange(state) { - return state.viewRange; -} - -export function getListPageSize(state) { - return state.listPageSize; -} - -export function getCurrencyCode(state) { - return state.currencyCode; -} - -export function getCurrencyId(state) { - return state.currencyId; -} - -export function getRange(state) { - return state.range; -} - -export function getDefaultRange(state) { - return state.defaultRange; -} - -export function getCacheKey(state) { - return state.cacheKey; -} diff --git a/frontend/src/store/fireflyiii/index.js b/frontend/src/store/fireflyiii/index.js deleted file mode 100644 index 809ed856ac..0000000000 --- a/frontend/src/store/fireflyiii/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import state from './state' -import * as getters from './getters' -import * as mutations from './mutations' -import * as actions from './actions' - -export default { - namespaced: true, - state, - getters, - mutations, - actions -} diff --git a/frontend/src/store/fireflyiii/mutations.js b/frontend/src/store/fireflyiii/mutations.js deleted file mode 100644 index 859f0ab85d..0000000000 --- a/frontend/src/store/fireflyiii/mutations.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * mutations.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* -export function someMutation (state) { -} -*/ - -export const updateViewRange = (state, viewRange) => { - state.viewRange = viewRange; -} - -export const updateListPageSize = (state, value) => { - state.listPageSize = value; -} - -export const setRange = (state, value) => { - state.range = value; -} - -export const setDefaultRange = (state, value) => { - state.defaultRange = value; -} - -export const setCurrencyCode = (state, value) => { - state.currencyCode = value; -} -export const setCurrencyId = (state, value) => { - state.currencyId = value; -} - -export const setCacheKey = (state, value) => { - state.cacheKey = value; -} diff --git a/frontend/src/store/fireflyiii/state.js b/frontend/src/store/fireflyiii/state.js deleted file mode 100644 index 1438189613..0000000000 --- a/frontend/src/store/fireflyiii/state.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * state.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default function () { - return { - drawerState: true, - viewRange: '1M', - listPageSize: 10, - range: { - start: null, - end: null - }, - defaultRange: { - start: null, - end: null - }, - currencyCode: 'AAA', - currencyId: '0', - cacheKey: 'initial' - } -} diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js deleted file mode 100644 index 95b9655bc4..0000000000 --- a/frontend/src/store/index.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {store} from 'quasar/wrappers' -import {createStore} from 'vuex' - -// import example from './module-example' -import fireflyiii from './fireflyiii' -/* - * If not building with SSR mode, you can - * directly export the Store instantiation; - * - * The function below can be async too; either use - * async/await or return a Promise which resolves - * with the Store instance. - */ - -export default store(function (/* { ssrContext } */) { - return createStore({ - modules: { - // example - fireflyiii - }, - - // enable strict mode (adds overhead!) - // for dev mode and --debug builds only - strict: process.env.DEBUGGING - }) -}) diff --git a/frontend/src/store/module-example/actions.ts b/frontend/src/store/module-example/actions.ts deleted file mode 100644 index 1f2ba6653a..0000000000 --- a/frontend/src/store/module-example/actions.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * actions.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {ActionTree} from 'vuex'; -import {StateInterface} from '../index'; -import {ExampleStateInterface} from './state'; - -const actions: ActionTree = { - someAction(/* context */) { - // your code - } -}; - -export default actions; diff --git a/frontend/src/store/module-example/getters.ts b/frontend/src/store/module-example/getters.ts deleted file mode 100644 index 9e4ecae55d..0000000000 --- a/frontend/src/store/module-example/getters.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * getters.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {GetterTree} from 'vuex'; -import {StateInterface} from '../index'; -import {ExampleStateInterface} from './state'; - -const getters: GetterTree = { - someAction(/* context */) { - // your code - } -}; - -export default getters; diff --git a/frontend/src/store/module-example/index.ts b/frontend/src/store/module-example/index.ts deleted file mode 100644 index 6407dee003..0000000000 --- a/frontend/src/store/module-example/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * index.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {Module} from 'vuex'; -import {StateInterface} from '../index'; -import state, {ExampleStateInterface} from './state'; -import actions from './actions'; -import getters from './getters'; -import mutations from './mutations'; - -const exampleModule: Module = { - namespaced: true, - actions, - getters, - mutations, - state -}; - -export default exampleModule; diff --git a/frontend/src/store/module-example/mutations.ts b/frontend/src/store/module-example/mutations.ts deleted file mode 100644 index af0e5f70c0..0000000000 --- a/frontend/src/store/module-example/mutations.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * mutations.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {MutationTree} from 'vuex'; -import {ExampleStateInterface} from './state'; - -const mutation: MutationTree = { - someMutation(/* state: ExampleStateInterface */) { - // your code - } -}; - -export default mutation; diff --git a/frontend/src/store/module-example/state.ts b/frontend/src/store/module-example/state.ts deleted file mode 100644 index 53cf3ed434..0000000000 --- a/frontend/src/store/module-example/state.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * state.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export interface ExampleStateInterface { - prop: boolean; -} - -function state(): ExampleStateInterface { - return { - prop: false - } -} - -export default state; diff --git a/frontend/src/store/store-flag.d.ts b/frontend/src/store/store-flag.d.ts deleted file mode 100644 index f7f914fd5a..0000000000 --- a/frontend/src/store/store-flag.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * store-flag.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* eslint-disable */ -// THIS FEATURE-FLAG FILE IS AUTOGENERATED, -// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING -import "quasar/dist/types/feature-flag"; - -declare module "quasar/dist/types/feature-flag" { - interface QuasarFeatureFlags { - store: true; - } -} diff --git a/frontend/src/stores/fireflyiii.js b/frontend/src/stores/fireflyiii.js deleted file mode 100644 index 842a18e7e2..0000000000 --- a/frontend/src/stores/fireflyiii.js +++ /dev/null @@ -1,221 +0,0 @@ -/* - * fireflyiii.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {defineStore} from 'pinia'; -import { - endOfDay, - endOfMonth, - endOfQuarter, - endOfWeek, - startOfDay, - startOfMonth, - startOfQuarter, - startOfWeek, - startOfYear, - subDays -} from "date-fns"; - -export const useFireflyIIIStore = defineStore('firefly-iii', { - state: () => ({ - drawerState: true, - viewRange: '1M', - listPageSize: 10, - locale: 'en-US', - range: { - start: null, end: null - }, - defaultRange: { - start: null, - end: null - }, - currencyCode: 'AAA', - currencyId: '0', - cacheKey: 'initial' - }), - - getters: { - getViewRange(state) { - return state.viewRange; - }, - getLocale(state) { - return state.locale; - }, - - getListPageSize(state) { - return state.listPageSize; - }, - - getCurrencyCode(state) { - return state.currencyCode; - }, getCurrencyId(state) { - return state.currencyId; - }, - - getRange(state) { - return state.range; - }, getDefaultRange(state) { - return state.defaultRange; - }, - - getCacheKey(state) { - return state.cacheKey; - } - }, - - actions: { - // actions - refreshCacheKey() { - let cacheKey = Math.random().toString(36).replace(/[^a-z]+/g, '').slice(0, 8); - this.setCacheKey(cacheKey); - }, - - resetRange() { - let defaultRange = this.defaultRange; - this.setRange(defaultRange); - }, - - setDatesFromViewRange() { - let start; - let end; - let viewRange = this.viewRange; - - let today = new Date; - switch (viewRange) { - case 'last365': - start = startOfDay(subDays(today, 365)); - end = endOfDay(today); - break; - case 'last90': - start = startOfDay(subDays(today, 90)); - end = endOfDay(today); - break; - case 'last30': - start = startOfDay(subDays(today, 30)); - end = endOfDay(today); - break; - case 'last7': - start = startOfDay(subDays(today, 7)); - end = endOfDay(today); - break; - case 'YTD': - start = startOfYear(today); - end = endOfDay(today); - break; - case 'QTD': - start = startOfQuarter(today); - end = endOfDay(today); - break; - case 'MTD': - start = startOfMonth(today); - end = endOfDay(today); - break; - case '1D': - // today: - start = startOfDay(today); - end = endOfDay(today); - break; - case '1W': - // this week: - start = startOfDay(startOfWeek(today, {weekStartsOn: 1})); - end = endOfDay(endOfWeek(today, {weekStartsOn: 1})); - break; - case '1M': - // this month: - start = startOfDay(startOfMonth(today)); - end = endOfDay(endOfMonth(today)); - break; - case '3M': - // this quarter - start = startOfDay(startOfQuarter(today)); - end = endOfDay(endOfQuarter(today)); - break; - case '6M': - // this half-year - if (today.getMonth() <= 5) { - start = new Date(today); - start.setMonth(0); - start.setDate(1); - start = startOfDay(start); - end = new Date(today); - end.setMonth(5); - end.setDate(30); - end = endOfDay(start); - } - if (today.getMonth() > 5) { - start = new Date(today); - start.setMonth(6); - start.setDate(1); - start = startOfDay(start); - end = new Date(today); - end.setMonth(11); - end.setDate(31); - end = endOfDay(start); - } - break; - case '1Y': - // this year - start = new Date(today); - start.setMonth(0); - start.setDate(1); - start = startOfDay(start); - - end = new Date(today); - end.setMonth(11); - end.setDate(31); - end = endOfDay(end); - break; - } - this.setRange({start: start, end: end}); - this.setDefaultRange({start: start, end: end}); - }, - - // mutators - - updateViewRange(viewRange) { - this.viewRange = viewRange; - }, - - updateListPageSize(value) { - this.listPageSize = value; - }, - setLocale(value) { - this.locale = value; - }, - - setRange(value) { - this.range = value; - return value; - }, - - setDefaultRange(value) { - this.defaultRange = value; - }, - - setCurrencyCode(value) { - this.currencyCode = value; - }, setCurrencyId(value) { - this.currencyId = value; - }, - - setCacheKey(value) { - this.cacheKey = value; - } - } -}) diff --git a/frontend/src/stores/index.js b/frontend/src/stores/index.js deleted file mode 100644 index 637bd95b24..0000000000 --- a/frontend/src/stores/index.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {store} from 'quasar/wrappers' -import {createPinia} from 'pinia' - -/* - * If not building with SSR mode, you can - * directly export the Store instantiation; - * - * The function below can be async too; either use - * async/await or return a Promise which resolves - * with the Store instance. - */ - -export default store((/* { ssrContext } */) => { - const pinia = createPinia() - - // You can add Pinia plugins here - // pinia.use(SomePiniaPlugin) - - return pinia -}) diff --git a/frontend/src/stores/store-flag.d.ts b/frontend/src/stores/store-flag.d.ts deleted file mode 100644 index f7f914fd5a..0000000000 --- a/frontend/src/stores/store-flag.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * store-flag.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* eslint-disable */ -// THIS FEATURE-FLAG FILE IS AUTOGENERATED, -// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING -import "quasar/dist/types/feature-flag"; - -declare module "quasar/dist/types/feature-flag" { - interface QuasarFeatureFlags { - store: true; - } -} diff --git a/frontend/src/stores/teststore.js b/frontend/src/stores/teststore.js deleted file mode 100644 index 4dc39e04ef..0000000000 --- a/frontend/src/stores/teststore.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * teststore.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {defineStore} from 'pinia'; - -export const useCounterStore = defineStore('counter', { - state: () => ({ - counter: 0 - }), - - getters: { - doubleCount(state) { - return state.counter * 2 - } - }, - - actions: { - increment() { - this.counter++ - } - } -}) diff --git a/frontend/src/support/transactions/calculate-type.js b/frontend/src/support/transactions/calculate-type.js deleted file mode 100644 index 7fbd2f7d15..0000000000 --- a/frontend/src/support/transactions/calculate-type.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * calculate-type.js - * Copyright (c) 2023 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default class CalculateType { - calculateType(source, destination) { - const srcEmpty = this.empty(source); - const dstEmpty = this.empty(destination); - // both are null or '' - if (srcEmpty && dstEmpty) { - return 'unknown'; - } - - // source has data, dest has not - if (typeof source === 'object' && null !== source && dstEmpty) { - if (source.type === 'Asset account' || source.type === 'Loan' || source.type === 'Debt' || source.type === 'Mortgage') { - return 'withdrawal'; - } - if (source.type === 'Revenue account') { - return 'deposit'; - } - } - // dst has data, source has not - if (typeof destination === 'object' && null !== destination && srcEmpty) { - if (destination.type === 'Asset account') { - return 'deposit'; - } - } - // both have data: - if (!srcEmpty && !dstEmpty) { - if (source.type === 'Asset account' && destination.type === 'Expense account') { - return 'withdrawal'; - } - if (source.type === destination.type) { - return 'transfer'; - } - } - - console.error('Cannot handle'); - console.log(source); - console.log(destination); - } - - empty(value) { - if (null === value || '' === value) { - return true; - } - if (null !== value && typeof value === 'object') { - return false; - } - return true; - } -} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json deleted file mode 100644 index 4b67725f2c..0000000000 --- a/frontend/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@quasar/app-webpack/tsconfig-preset", - "compilerOptions": { - "baseUrl": "." - } -} diff --git a/frontend/yarn.lock b/frontend/yarn.lock deleted file mode 100644 index c535394fae..0000000000 --- a/frontend/yarn.lock +++ /dev/null @@ -1,6683 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" - integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== - -"@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== - -"@babel/core@^7.12.0": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/eslint-parser@^7.13.14": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz#48d3485091d6e36915358e4c0d0b2ebe6da90462" - integrity sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA== - dependencies: - eslint-scope "^5.1.1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.0" - -"@babel/generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.9.6": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" - integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-wrap-function@^7.16.7", "@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.10.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" - integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.4": - version "7.16.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" - integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== - -"@babel/parser@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" - integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== - -"@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.5.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-decorators@^7.4.4": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz#67a1653be9c77ce5b6c318aa90c8287b87831619" - integrity sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.9" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" - -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.16.7", "@babel/plugin-proposal-export-namespace-from@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-function-sent@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.16.7.tgz#a258face9ce63ee0c14e396c9b96f171a340de89" - integrity sha512-iJ4DQ1TblymT9ylXSxRG9JH+kYWEHcKdKz47kQqZ9Qij6HOOjTbP9ksG1RFtM+CMnmLJaaG/P+YCvgqUt+5hTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.7" - "@babel/plugin-syntax-function-sent" "^7.16.7" - -"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== - dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-throw-expressions@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.16.7.tgz#d3512286f634a06f7271abecce752e1655b9ab03" - integrity sha512-BbjL/uDt7c+OKA7k2YbZIPtOb6qmrzXPybjqrGreP8wMMzTPKjjiK+moqgpElsIXv1XHmlk9PQWdOHD5sL93KA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-throw-expressions" "^7.16.7" - -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" - integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-function-sent@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.16.7.tgz#46ff4ac849881dbeaa5c5ab60cd1041ffc606095" - integrity sha512-W2fOJmlqHJ0kalyP8kAA0Jx5Hn87OX5qZwjtII3uqi+VpIdLTJLAHH8d4qIt5eqflLALFf6ehVT6+mnFJ2d7AA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-import-meta@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-throw-expressions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.16.7.tgz#5fd64f4d58d653499cc1077bb58594e18da5a514" - integrity sha512-6Kw78ssLHIADvVsqLOLLxuxH4SG55A2tqn0Og2tQQq6X/06HBWLClg6quL+oTfyeVEsPnFYTSECkajseotTnbA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-destructuring@^7.16.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" - integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" - integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== - dependencies: - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" - integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== - dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - -"@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-regenerator@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c" - integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ== - dependencies: - regenerator-transform "^0.15.0" - -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-runtime@^7.9.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/preset-env@^7.9.0": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.0": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.4.4": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@intlify/core-base@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.1.9.tgz#e4e8c951010728e4af3a0d13d74cf3f9e7add7f6" - integrity sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw== - dependencies: - "@intlify/devtools-if" "9.1.9" - "@intlify/message-compiler" "9.1.9" - "@intlify/message-resolver" "9.1.9" - "@intlify/runtime" "9.1.9" - "@intlify/shared" "9.1.9" - "@intlify/vue-devtools" "9.1.9" - -"@intlify/devtools-if@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz#a30e1dd1256ff2c5c98d8d75d075384fba898e5d" - integrity sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ== - dependencies: - "@intlify/shared" "9.1.9" - -"@intlify/message-compiler@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz#1193cbd224a71c2fb981455b8534a3c766d2948d" - integrity sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ== - dependencies: - "@intlify/message-resolver" "9.1.9" - "@intlify/shared" "9.1.9" - source-map "0.6.1" - -"@intlify/message-resolver@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz#3155ccd2f5e6d0dc16cad8b7f1d8e97fcda05bfc" - integrity sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA== - -"@intlify/runtime@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/runtime/-/runtime-9.1.9.tgz#2c12ce29518a075629efed0a8ed293ee740cb285" - integrity sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg== - dependencies: - "@intlify/message-compiler" "9.1.9" - "@intlify/message-resolver" "9.1.9" - "@intlify/shared" "9.1.9" - -"@intlify/shared@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.9.tgz#0baaf96128b85560666bec784ffb01f6623cc17a" - integrity sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw== - -"@intlify/vue-devtools@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz#2be8f4dbe7f7ed4115676eb32348141d411e426b" - integrity sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og== - dependencies: - "@intlify/message-resolver" "9.1.9" - "@intlify/runtime" "9.1.9" - "@intlify/shared" "9.1.9" - -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/types@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" - integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== - dependencies: - "@jest/schemas" "^29.0.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.14": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" - integrity sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== - -"@popperjs/core@^2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" - integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== - -"@quasar/app-webpack@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@quasar/app-webpack/-/app-webpack-3.9.2.tgz#cbf28e2ef84a94a0507f2f17218b29a2ebf6dd88" - integrity sha512-F/LyEXExcnw1niVjuLoSaRLBS2rlmsQJxuOWed6qL9Xnh+KzW1S/V1FxtDtJOQCjbI2S9YvOP6wcmuB6xEiatg== - dependencies: - "@quasar/babel-preset-app" "2.0.2" - "@quasar/render-ssr-error" "^1.0.1" - "@quasar/ssr-helpers" "2.2.2" - "@types/chrome" "^0.0.208" - "@types/compression" "^1.7.2" - "@types/cordova" "0.0.34" - "@types/express" "4.17.15" - "@types/webpack-bundle-analyzer" "4.6.0" - archiver "5.3.1" - autoprefixer "10.4.13" - browserslist "^4.12.0" - chalk "4.1.2" - chokidar "3.5.3" - ci-info "3.7.1" - compression-webpack-plugin "10.0.0" - copy-webpack-plugin "11.0.0" - cross-spawn "7.0.3" - css-loader "6.7.3" - css-minimizer-webpack-plugin "4.2.2" - cssnano "5.1.14" - dot-prop "6.0.1" - elementtree "0.1.7" - error-stack-parser "2.1.4" - express "4.18.2" - fast-glob "3.2.12" - file-loader "6.2.0" - fork-ts-checker-webpack-plugin "6.5.0" - fs-extra "11.1.0" - hash-sum "2.0.0" - html-minifier "4.0.0" - html-webpack-plugin "5.5.0" - inquirer "8.2.2" - isbinaryfile "5.0.0" - launch-editor-middleware "2.6.0" - lodash "^4.17.21" - log-update "4.0.0" - mini-css-extract-plugin "2.7.2" - minimist "1.2.7" - node-loader "2.0.0" - null-loader "4.0.1" - open "8.4.0" - postcss "^8.4.4" - postcss-loader "7.0.2" - postcss-rtlcss "4.0.1" - register-service-worker "1.7.2" - sass "1.32.12" - sass-loader "13.2.0" - semver "7.3.8" - table "6.8.1" - terser-webpack-plugin "5.3.6" - ts-loader "9.4.2" - typescript "4.9.4" - url-loader "4.1.1" - vue-loader "17.0.1" - vue-style-loader "4.1.3" - webpack "^5.58.1" - webpack-bundle-analyzer "4.7.0" - webpack-chain "6.5.1" - webpack-dev-server "4.11.1" - webpack-merge "5.8.0" - webpack-node-externals "3.0.0" - -"@quasar/babel-preset-app@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@quasar/babel-preset-app/-/babel-preset-app-2.0.2.tgz#0ba6c7600c0f0d4b65305361eaf9da27420bb5cc" - integrity sha512-2mM4d3F53vSLwgqEoRqN2imgiEjQTO1rPrfwmo3uBvM+rJRFc4TUOqZrbIoGhKSIb4V+PTvWeFDl4pgej8eHoA== - dependencies: - "@babel/core" "^7.12.0" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/plugin-proposal-class-properties" "^7.5.5" - "@babel/plugin-proposal-decorators" "^7.4.4" - "@babel/plugin-proposal-export-namespace-from" "^7.2.0" - "@babel/plugin-proposal-function-sent" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-numeric-separator" "^7.2.0" - "@babel/plugin-proposal-throw-expressions" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-import-meta" "^7.2.0" - "@babel/plugin-transform-runtime" "^7.9.0" - "@babel/preset-env" "^7.9.0" - "@babel/runtime" "^7.9.0" - babel-loader "^9.1.2" - babel-plugin-dynamic-import-node "^2.3.0" - babel-plugin-module-resolver "^5.0.0" - core-js "^3.6.5" - core-js-compat "^3.6.5" - -"@quasar/extras@^1.16.5": - version "1.16.5" - resolved "https://registry.yarnpkg.com/@quasar/extras/-/extras-1.16.5.tgz#77fd7b8e77e45a2798067a1e4aeafb39a95daf51" - integrity sha512-3VAJS9NECr1OSHX674+3YvEMIlHclr81aZrEkoBtVqr+sX4In22Up44toua+qNFsxnoATPqzpwKOJxA3iAF71Q== - -"@quasar/render-ssr-error@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@quasar/render-ssr-error/-/render-ssr-error-1.0.1.tgz#5400b51c1bc55f4ee7bfb62ecb6f7c7d0f88ce7f" - integrity sha512-4Shxl079hew/yZnIsDtWpRD8enOmqMjMu/s2bkGN0QBvlsRkpWv9pwOz5geJXZxBa17q1S4txvByBxkhPfhWaQ== - dependencies: - stack-trace "^1.0.0-pre2" - -"@quasar/ssr-helpers@2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@quasar/ssr-helpers/-/ssr-helpers-2.2.2.tgz#3e707090063d6e0b10596c9f59cdbdc0a2c96652" - integrity sha512-lz30NGk5Qrl8YCOg3kg+1cqI+muFNs6cAokJcNjx4sR9MKsB25hgL8kUkWXhknPqfWHWnOujB1LR6AefdVaTUQ== - dependencies: - serialize-javascript "^6.0.0" - -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/chrome@^0.0.208": - version "0.0.208" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.208.tgz#c52992e46723c783d3fd84a8b90dd8b3e87af67f" - integrity sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw== - dependencies: - "@types/filesystem" "*" - "@types/har-format" "*" - -"@types/compression@^1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.7.2.tgz#7cc1cdb01b4730eea284615a68fc70a2cdfd5e71" - integrity sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg== - dependencies: - "@types/express" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/cordova@0.0.34": - version "0.0.34" - resolved "https://registry.yarnpkg.com/@types/cordova/-/cordova-0.0.34.tgz#ea7addf74ecec3d7629827a0c39e2c9addc73d04" - integrity sha1-6nrd907Ow9dimCegw54smt3HPQQ= - -"@types/eslint-scope@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" - integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.28" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express-serve-static-core@^4.17.31": - version "4.17.32" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" - integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/express@4.17.15": - version "4.17.15" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" - integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.31" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/filesystem@*": - version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.32.tgz#307df7cc084a2293c3c1a31151b178063e0a8edf" - integrity sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ== - dependencies: - "@types/filewriter" "*" - -"@types/filewriter@*": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" - integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== - -"@types/har-format@*": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.8.tgz#e6908b76d4c88be3db642846bb8b455f0bfb1c4e" - integrity sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ== - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-proxy@^1.17.8": - version "1.17.8" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" - integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/node@*": - version "17.0.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" - integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== - -"@types/node@^12.20.21": - version "12.20.39" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.39.tgz#ef3cb119eaba80e9f1012c78b9384a7489a18bf6" - integrity sha512-U7PMwkDmc3bnL0e4U8oA0POpi1vfsYDc+DEUS2+rPxm9NlLcW1dBa5JcRhO633PoPUcCSWMNXrMsqhmAVEo+IQ== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/retry@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" - integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/webpack-bundle-analyzer@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.0.tgz#8863d62d2432126c2b3a9239cafa469215981c24" - integrity sha512-XeQmQCCXdZdap+A/60UKmxW5Mz31Vp9uieGlHB3T4z/o2OLVLtTI3bvTuS6A2OWd/rbAAQiGGWIEFQACu16szA== - dependencies: - "@types/node" "*" - tapable "^2.2.0" - webpack "^5" - -"@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.20" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.20.tgz#107f0fcc13bd4a524e352b41c49fe88aab5c54d5" - integrity sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^4.16.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== - dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.16.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== - dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" - -"@vue/compiler-core@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.26.tgz#9ab92ae624da51f7b6064f4679c2d4564f437cc8" - integrity sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/shared" "3.2.26" - estree-walker "^2.0.2" - source-map "^0.6.1" - -"@vue/compiler-dom@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.26.tgz#c7a7b55d50a7b7981dd44fc28211df1450482667" - integrity sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg== - dependencies: - "@vue/compiler-core" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/compiler-sfc@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.26.tgz#3ce76677e4aa58311655a3bea9eb1cb804d2273f" - integrity sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.26" - "@vue/compiler-dom" "3.2.26" - "@vue/compiler-ssr" "3.2.26" - "@vue/reactivity-transform" "3.2.26" - "@vue/shared" "3.2.26" - estree-walker "^2.0.2" - magic-string "^0.25.7" - postcss "^8.1.10" - source-map "^0.6.1" - -"@vue/compiler-ssr@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.26.tgz#fd049523341fbf4ab5e88e25eef566d862894ba7" - integrity sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag== - dependencies: - "@vue/compiler-dom" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/devtools-api@^6.0.0-beta.18", "@vue/devtools-api@^6.0.0-beta.7": - version "6.0.0-beta.21.1" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.21.1.tgz#f1410f53c42aa67fa3b01ca7bdba891f69d7bc97" - integrity sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw== - -"@vue/devtools-api@^6.1.4": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" - integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== - -"@vue/reactivity-transform@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.26.tgz#6d8f20a4aa2d19728f25de99962addbe7c4d03e9" - integrity sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.26" - "@vue/shared" "3.2.26" - estree-walker "^2.0.2" - magic-string "^0.25.7" - -"@vue/reactivity@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.26.tgz#d529191e581521c3c12e29ef986d4c8a933a0f83" - integrity sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ== - dependencies: - "@vue/shared" "3.2.26" - -"@vue/runtime-core@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.26.tgz#5c59cc440ed7a39b6dbd4c02e2d21c8d1988f0de" - integrity sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ== - dependencies: - "@vue/reactivity" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/runtime-dom@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.26.tgz#84d3ae2584488747717c2e072d5d9112c0d2e6c2" - integrity sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ== - dependencies: - "@vue/runtime-core" "3.2.26" - "@vue/shared" "3.2.26" - csstype "^2.6.8" - -"@vue/server-renderer@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.26.tgz#f16a4b9fbcc917417b4cea70c99afce2701341cf" - integrity sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w== - dependencies: - "@vue/compiler-ssr" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/shared@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.26.tgz#7acd1621783571b9a82eca1f041b4a0a983481d9" - integrity sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA== - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.0.4, acorn@^8.5.0: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -acorn@^8.7.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -apexcharts@^3.32.1: - version "3.32.1" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.32.1.tgz#6aa8db07f0b9432c9a9564530bda775617ec6eb3" - integrity sha512-8rcB7u616lXXANG49h9vwyX0gZh0DWi4D23VnE8IU5grjaxW69IiXYldn+jB9Av407w8RVZjUv1xUpk0JlxxMg== - dependencies: - svg.draggable.js "^2.2.2" - svg.easing.js "^2.0.0" - svg.filter.js "^2.0.2" - svg.pathmorphing.js "^0.1.3" - svg.resize.js "^1.4.3" - svg.select.js "^3.0.1" - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" - integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.3" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" - integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@10.4.13: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axios-cache-adapter@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/axios-cache-adapter/-/axios-cache-adapter-2.7.3.tgz#0d1eefa0f25b88f42a95c7528d7345bde688181d" - integrity sha512-A+ZKJ9lhpjthOEp4Z3QR/a9xC4du1ALaAsejgRGrH9ef6kSDxdFrhRpulqsh9khsEnwXxGfgpUuDp1YXMNMEiQ== - dependencies: - cache-control-esm "1.0.0" - md5 "^2.2.1" - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-loader@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c" - integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA== - dependencies: - find-cache-dir "^3.3.2" - schema-utils "^4.0.0" - -babel-plugin-dynamic-import-node@^2.3.0, babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-module-resolver@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" - integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== - dependencies: - find-babel-config "^2.0.0" - glob "^8.0.3" - pkg-up "^3.1.0" - reselect "^4.1.7" - resolve "^1.22.1" - -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" - type-is "~1.6.18" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.11.tgz#5418e5c1ac91c89a406f853a942e7892829c0d89" - integrity sha512-drMprzr2rDTCtgEE3VgdA9uUFaUHF+jXduwYSThHJnKMYM+FhI9Z3ph+TX3xy0LtgYHae6CHYPJ/2UnK8nQHcA== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.4" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.19.1: - version "4.20.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" - integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== - dependencies: - caniuse-lite "^1.0.30001317" - electron-to-chromium "^1.4.84" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cache-control-esm@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cache-control-esm/-/cache-control-esm-1.0.0.tgz#417647ecf1837a5e74155f55d5a4ae32a84e2581" - integrity sha512-Fa3UV4+eIk4EOih8FTV6EEsVKO0W5XWtNs6FC3InTfVz+EjurjPfDXY5wZDo/lxjDxg5RjNcurLyxEJBcEUx9g== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: - version "1.0.30001446" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz#6d4ba828ab19f49f9bcd14a8430d30feebf1e0c5" - integrity sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw== - -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@3.7.1, ci-info@^3.2.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" - integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== - -clean-css@^4.2.1: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -clean-css@^5.2.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59" - integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== - dependencies: - source-map "~0.6.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" - integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== - -colorette@^2.0.10: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== - -commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" - integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression-webpack-plugin@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-10.0.0.tgz#3496af1b0dc792e13efc474498838dbff915c823" - integrity sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg== - dependencies: - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -core-js-compat@^3.20.2, core-js-compat@^3.21.0, core-js-compat@^3.6.5: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" - integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== - dependencies: - browserslist "^4.19.1" - semver "7.0.0" - -core-js@^3.6.5: - version "3.20.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.1.tgz#eb1598047b7813572f1dc24b7c6a95528c99eef3" - integrity sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" - integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -cross-spawn@7.0.3, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -css-declaration-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== - -css-loader@6.7.3: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.19" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - -css-minimizer-webpack-plugin@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" - integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== - dependencies: - cssnano "^5.1.8" - jest-worker "^29.1.2" - postcss "^8.4.17" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.13: - version "5.2.13" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz#e7353b0c57975d1bdd97ac96e68e5c1b8c68e990" - integrity sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.3" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.1" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@5.1.14, cssnano@^5.1.8: - version "5.1.14" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.14.tgz#07b0af6da73641276fe5a6d45757702ebae2eb05" - integrity sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw== - dependencies: - cssnano-preset-default "^5.2.13" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^2.6.8: - version "2.6.19" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa" - integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ== - -date-fns@^2.28.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - -electron-to-chromium@^1.4.84: - version "1.4.107" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz#564257014ab14033b4403a309c813123c58a3fb9" - integrity sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg== - -elementtree@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0" - integrity sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA= - dependencies: - sax "1.1.4" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.0.0: - version "5.9.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9" - integrity sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-plugin-vue@^7.0.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz#98c21885a6bfdf0713c3a92957a5afeaaeed9253" - integrity sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw== - dependencies: - eslint-utils "^2.1.0" - natural-compare "^1.4.0" - semver "^6.3.0" - vue-eslint-parser "^7.10.0" - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.14.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -express@^4.17.3: - version "4.17.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" - integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.19.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.4.2" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.9.7" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.17.2" - serve-static "1.14.2" - setprototypeof "1.2.0" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@3.2.12, fast-glob@^3.2.11: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-babel-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" - integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== - dependencies: - json5 "^2.1.1" - path-exists "^4.0.0" - -find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== - -follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== - -fork-ts-checker-webpack-plugin@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz#0282b335fa495a97e167f69018f566ea7d2a2b5e" - integrity sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^13.1.1: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-sum@2.0.0, hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-minifier@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" - integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== - dependencies: - camel-case "^3.0.0" - clean-css "^4.2.1" - commander "^2.19.0" - he "^1.2.0" - param-case "^2.1.1" - relateurl "^0.2.7" - uglify-js "^3.5.1" - -html-webpack-plugin@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" - integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== - -http-proxy-middleware@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz#03af0f4676d172ae775cb5c33f592f40e1a4e07a" - integrity sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4, ignore@^5.1.8: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inquirer@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.2.tgz#1310517a87a0814d25336c78a20b44c3d9b7629d" - integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isbinaryfile@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" - integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -jest-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" - integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== - dependencies: - "@jest/types" "^29.3.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.1.2: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.3.1.tgz#e9462161017a9bb176380d721cab022661da3d6b" - integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== - dependencies: - "@types/node" "*" - jest-util "^29.3.1" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.1, json5@^2.1.2, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== - -launch-editor-middleware@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz#2ba4fe4b695d7fe3d44dee86b6d46d57b8332dfd" - integrity sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA== - dependencies: - launch-editor "^2.6.0" - -launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.7.3" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.0.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -md5@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memfs@^3.1.2, memfs@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" - integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== - dependencies: - fs-monkey "1.0.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" - integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist@1.2.7, minimist@^1.2.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mrmime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" - integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.4: - version "7.2.4" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19" - integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562" - integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q== - dependencies: - loader-utils "^2.0.0" - -node-releases@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" - integrity sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw== - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== - dependencies: - boolbase "^1.0.0" - -null-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" - integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@8.4.0, open@^8.0.9: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-retry@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" - integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== - dependencies: - "@types/retry" "^0.12.0" - retry "^0.13.1" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -param-case@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pinia@^2.0.14: - version "2.0.16" - resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.16.tgz#0105db595f5f792e17c04692e36807d8ea62f5cc" - integrity sha512-9/LMVO+/epny1NBfC77vnps4g3JRezxhhoF1xLUk8mZkUIxVnwfEAIRiAX8mYBTD/KCwZqnDMqXc8w3eU0FQGg== - dependencies: - "@vue/devtools-api" "^6.1.4" - vue-demi "*" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-colormin@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" - integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-loader@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.2.tgz#b53ff44a26fba3688eee92a048c7f2d4802e23bb" - integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.8" - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz#8f97679e67cc8d08677a6519afca41edf2220894" - integrity sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz#c18b7dfb88aee24b1f8e4936541c29adbd35224e" - integrity sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-rtlcss@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-rtlcss/-/postcss-rtlcss-4.0.1.tgz#aec5261a8fc6878f33bceb4c9de3e15945e6f4ab" - integrity sha512-x92gkPeo4Mt9K6oP02EghAkQkq3/dr19SWGQZdEOWfmFnjoUvET5+aoTr85eM+JH+hupSSXZhc+kqVrvAJrkvg== - dependencies: - rtlcss "4.0.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.1.10, postcss@^8.4.17, postcss@^8.4.19, postcss@^8.4.4, postcss@^8.4.6: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@6.9.7: - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -quasar@^2.12.3: - version "2.12.3" - resolved "https://registry.yarnpkg.com/quasar/-/quasar-2.12.3.tgz#dd898cce1bbaf9e02310cc7e777c9c42a836a003" - integrity sha512-9KK5TXWGsZ6XFF6MJQ0E98yp++D1PagqSJrKpE91A6QnZ1gng4KtkFI5iPyuqXciFpXvxniiLsZtxD5ZICHvPw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== - dependencies: - minimatch "^3.0.4" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -register-service-worker@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2" - integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -reselect@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" - integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.14.2: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rtlcss@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.0.0.tgz#ba73233b9c79fbf66eb867f2ae937713acbf2b40" - integrity sha512-j6oypPP+mgFwDXL1JkLCtm6U/DQntMUqlv5SOhpgHhdIE+PmBcjrtAHIpXfbIup47kD5Sgja9JDsDF1NNOsBwQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - postcss "^8.4.6" - strip-json-comments "^3.1.1" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-loader@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3" - integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@1.32.12: - version "1.32.12" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.12.tgz#a2a47ad0f1c168222db5206444a30c12457abb9f" - integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sax@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9" - integrity sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk= - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "1.8.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" - integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-trace@^1.0.0-pre2: - version "1.0.0-pre2" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-1.0.0-pre2.tgz#46a83a79f1b287807e9aaafc6a5dd8bcde626f9c" - integrity sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -string-width@^4.1.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg.draggable.js@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba" - integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== - dependencies: - svg.js "^2.0.1" - -svg.easing.js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12" - integrity sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI= - dependencies: - svg.js ">=2.3.x" - -svg.filter.js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203" - integrity sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM= - dependencies: - svg.js "^2.2.5" - -svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d" - integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== - -svg.pathmorphing.js@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65" - integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww== - dependencies: - svg.js "^2.4.0" - -svg.resize.js@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332" - integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== - dependencies: - svg.js "^2.6.5" - svg.select.js "^2.1.2" - -svg.select.js@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73" - integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== - dependencies: - svg.js "^2.2.5" - -svg.select.js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917" - integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== - dependencies: - svg.js "^2.6.5" - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -table@6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -table@^6.0.9: - version "6.7.5" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238" - integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -terser-webpack-plugin@5.3.6: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser-webpack-plugin@^5.1.3: - version "5.3.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" - integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== - dependencies: - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - terser "^5.7.2" - -terser@^5.10.0, terser@^5.7.2: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.14.1: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - -ts-loader@9.4.2: - version "9.4.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.2.tgz#80a45eee92dd5170b900b3d00abcfa14949aeb78" - integrity sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3, tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -uglify-js@^3.5.1: - version "3.15.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.4.tgz#fa95c257e88f85614915b906204b9623d4fa340d" - integrity sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vue-demi@*: - version "0.13.5" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.5.tgz#d5eddbc9eaefb89ce5995269d1fa6b0486312092" - integrity sha512-tO3K2bML3AwiHmVHeKCq6HLef2st4zBXIV5aEkoJl6HZ+gJWxWv2O8wLH8qrA3SX3lDoTDHNghLX1xZg83MXvw== - -vue-eslint-parser@^7.10.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf" - integrity sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg== - dependencies: - debug "^4.1.1" - eslint-scope "^5.1.1" - eslint-visitor-keys "^1.1.0" - espree "^6.2.1" - esquery "^1.4.0" - lodash "^4.17.21" - semver "^6.3.0" - -vue-i18n@^9.0.0: - version "9.1.9" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.1.9.tgz#cb53e06ab5cc5b7eed59332f151caf48d47be9bb" - integrity sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA== - dependencies: - "@intlify/core-base" "9.1.9" - "@intlify/shared" "9.1.9" - "@intlify/vue-devtools" "9.1.9" - "@vue/devtools-api" "^6.0.0-beta.7" - -vue-loader@17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-17.0.1.tgz#c0ee8875e0610a0c2d13ba9b4d50a9c8442e7a3a" - integrity sha512-/OOyugJnImKCkAKrAvdsWMuwoCqGxWT5USLsjohzWbMgOwpA5wQmzQiLMzZd7DjhIfunzAGIApTOgIylz/kwcg== - dependencies: - chalk "^4.1.0" - hash-sum "^2.0.0" - loader-utils "^2.0.0" - -vue-router@^4.0.0: - version "4.0.12" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.12.tgz#8dc792cddf5bb1abcc3908f9064136de7e13c460" - integrity sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg== - dependencies: - "@vue/devtools-api" "^6.0.0-beta.18" - -vue-style-loader@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue3-apexcharts@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/vue3-apexcharts/-/vue3-apexcharts-1.4.1.tgz#ea561308430a1c5213b7f17c44ba3c845f6c490d" - integrity sha512-96qP8JDqB9vwU7bkG5nVU+E0UGQn7yYQVqUUCLQMYWDuQyu2vE77H/UFZ1yI+hwzlSTBKT9BqnNG8JsFegB3eg== - -vue@3: - version "3.2.26" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.26.tgz#5db575583ecae495c7caa5c12fd590dffcbb763e" - integrity sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg== - dependencies: - "@vue/compiler-dom" "3.2.26" - "@vue/compiler-sfc" "3.2.26" - "@vue/runtime-dom" "3.2.26" - "@vue/server-renderer" "3.2.26" - "@vue/shared" "3.2.26" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webpack-bundle-analyzer@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" - integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg== - dependencies: - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" - -webpack-chain@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" - integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.1" - -webpack-dev-middleware@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" - integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== - dependencies: - colorette "^2.0.10" - memfs "^3.4.1" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@4.11.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" - -webpack-merge@5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-node-externals@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" - integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5, webpack@^5.58.1: - version "5.76.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c" - integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^7.3.1: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - -ws@^8.4.2: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.0" From 41089a0a0a7b958f22547064222cd449f5252ba0 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 08:22:53 +0200 Subject: [PATCH 21/48] Rename workflows. --- .github/workflows/cleanup.yml | 18 ++-- .github/workflows/closed-issues.yml | 2 +- .github/workflows/depsreview.yaml | 2 +- .github/workflows/label-actions.yml | 2 +- .github/workflows/laravel.yml | 146 ---------------------------- .github/workflows/lock.yml | 2 +- .github/workflows/qodana.yml | 35 ------- .github/workflows/sonarcloud.yml | 4 +- .github/workflows/stale.yml | 8 +- 9 files changed, 19 insertions(+), 200 deletions(-) delete mode 100644 .github/workflows/laravel.yml delete mode 100644 .github/workflows/qodana.yml diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index 5f820b0c40..a67f4c107e 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -1,6 +1,6 @@ # This workflow prunes old workflow runs for an entire repository. -name: Prune old builds +name: "Chore - prune old builds" on: schedule: @@ -22,14 +22,14 @@ jobs: repo: context.repo.repo, status: 'cancelled', }); - + const skipped = await github.rest.actions.listWorkflowRunsForRepo({ owner: context.repo.owner, per_page: 100, repo: context.repo.repo, status: 'skipped', }); - + for (const response of [cancelled, skipped]) { for (const run of response.data.workflow_runs) { console.log(`Run id ${run.id} of '${run.name}' is a cancelled/skipped run. Deleting...`); @@ -50,10 +50,10 @@ jobs: const ms_in_day = 86400000; const now = Date.now(); const pages = 5; - + // we don't want to prune old runs from test.yml // because we track the duration of runs over time - + const workflows = [ 'cleanup.yml', 'closed-issues.yml', @@ -64,9 +64,9 @@ jobs: 'sonarcloud.yml', 'stale.yml' ] - + let runs_to_delete = []; - + for (const workflow of workflows) { for (let page = 0; page < pages; page += 1) { let response = await github.rest.actions.listWorkflowRuns({ @@ -76,7 +76,7 @@ jobs: repo: context.repo.repo, workflow_id: workflow }); - + if (response.data.workflow_runs.length > 0) { for (const run of response.data.workflow_runs) { if (now - Date.parse(run.created_at) > ms_in_day * days_to_expiration) { @@ -86,7 +86,7 @@ jobs: } } } - + for (const run of runs_to_delete) { console.log(`Run id ${run[0]} of '${run[1]}' is older than ${days_to_expiration} days. Deleting...`); try { diff --git a/.github/workflows/closed-issues.yml b/.github/workflows/closed-issues.yml index 22a9c3438f..43c68d6e92 100644 --- a/.github/workflows/closed-issues.yml +++ b/.github/workflows/closed-issues.yml @@ -1,4 +1,4 @@ -name: "Reply to closed issue" +name: "Issues - reply to closed issue" on: issues: types: diff --git a/.github/workflows/depsreview.yaml b/.github/workflows/depsreview.yaml index d5ed859514..29d9f8de8b 100644 --- a/.github/workflows/depsreview.yaml +++ b/.github/workflows/depsreview.yaml @@ -1,4 +1,4 @@ -name: 'Dependency Review' +name: 'Code - dependency review' on: [ pull_request ] permissions: diff --git a/.github/workflows/label-actions.yml b/.github/workflows/label-actions.yml index caf1a31cc1..115647bdef 100644 --- a/.github/workflows/label-actions.yml +++ b/.github/workflows/label-actions.yml @@ -1,4 +1,4 @@ -name: 'Label Actions' +name: 'Issues - reply to specific labels' on: issues: diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml deleted file mode 100644 index 75babbfe2d..0000000000 --- a/.github/workflows/laravel.yml +++ /dev/null @@ -1,146 +0,0 @@ -name: Firefly III - -on: - push: - branches-ignore: - - '**' - -jobs: - prepare: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Prepare dependencies - run: | - set -euxo pipefail - export PATH=$PATH:$HOME/.composer/vendor/bin/ - composer global require hirak/prestissimo --no-plugins --no-scripts - composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - touch ./storage/database/database.sqlite - - name: Prepare Firefly III - run: | - chmod -R 777 storage bootstrap/cache - php artisan migrate --seed - php artisan firefly-iii:upgrade-database - - name: Upload database - uses: actions/upload-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Upload cache - uses: actions/upload-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Upload composer cache - uses: actions/upload-artifact@v2 - with: - name: composer - path: ~/.composer - - laravel-tests: - - runs-on: ubuntu-latest - - needs: - - prepare - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Download database - uses: actions/download-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Download cache - uses: actions/download-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Download vendor - uses: actions/download-artifact@v2 - with: - name: composer - path: ~/.composer - - name: Install composer - run: composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - - name: PHPUnit tests - uses: php-actions/phpunit@v1 - with: - config: phpunit.xml - memory: 512M - - coding-standards: - - runs-on: ubuntu-latest - - needs: - - prepare - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Download database - uses: actions/download-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Download cache - uses: actions/download-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Download vendor - uses: actions/download-artifact@v2 - with: - name: composer - path: ~/.composer - - name: install depenencies - run: | - composer global require nette/coding-standard - composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - - name: Execute code standard - run: /home/runner/.composer/vendor/bin/ecs check app tests --config ./.ci/firefly-iii-standard.yml - - phpstan: - - runs-on: ubuntu-latest - - needs: - - prepare - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Download database - uses: actions/download-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Download cache - uses: actions/download-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Download vendor - uses: actions/download-artifact@v2 - with: - name: composer - path: ~/.composer - - name: Install depenencies - run: | - composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - - name: Execute PHPStan - run: vendor/bin/phpstan analyse -c .ci/phpstan.neon diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index f01515c30d..f80cc38ef4 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -1,4 +1,4 @@ -name: Lock old issues +name: 'Issues - Lock old issues' on: workflow_dispatch: diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml deleted file mode 100644 index da78ebabe8..0000000000 --- a/.github/workflows/qodana.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Qodana -on: - workflow_dispatch: - push: - branches: - - main - - develop -jobs: - qodana: - runs-on: ubuntu-latest - name: 'Qodana Scan' - steps: - - name: Setup PHP with no coverage driver - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - extensions: bcmath, intl - env: - update: true - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Install dependencies - run: | - composer install --no-scripts - cp .env.example .env - php artisan key:generate - php artisan clear-compiled - php artisan ide-helper:generate; - - - name: 'Qodana Scan' - uses: JetBrains/qodana-action@main - env: - QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index e9ba1b9b27..9ca453e11c 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,6 +1,6 @@ -name: Sonarcloud +name: 'Code - Run Sonarcloud' on: - pull_request: + pull_request: push: branches: - main diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 817763ac59..0b9bf683fb 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,4 +1,4 @@ -name: "Close stale issues" +name: "Issues - close stale issues" on: schedule: - cron: "30 1 * * *" @@ -20,13 +20,13 @@ jobs: stale-issue-message: > Hi there! This is an automatic reply. `Share and enjoy` - This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. - + This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. + Thank you for your contributions. stale-pr-message: > Hi there! This is an automatic reply. `Share and enjoy` - This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. + This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. days-before-stale: 14 From 8627ee391a2acfa59c94ee37a73ecc9e2e777752 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 08:50:35 +0200 Subject: [PATCH 22/48] Add missing command --- .../Commands/Upgrade/UpgradeDatabase.php | 1 + composer.lock | 90 +++++++++---------- 2 files changed, 46 insertions(+), 45 deletions(-) diff --git a/app/Console/Commands/Upgrade/UpgradeDatabase.php b/app/Console/Commands/Upgrade/UpgradeDatabase.php index 45f073768f..544881ea18 100644 --- a/app/Console/Commands/Upgrade/UpgradeDatabase.php +++ b/app/Console/Commands/Upgrade/UpgradeDatabase.php @@ -72,6 +72,7 @@ class UpgradeDatabase extends Command // also just in case, some integrity commands: 'firefly-iii:create-group-memberships', 'firefly-iii:upgrade-group-information', + 'firefly-iii:upgrade-currency-preferences' ]; $args = []; if ($this->option('force')) { diff --git a/composer.lock b/composer.lock index b6d92a0c99..60e94b4f95 100644 --- a/composer.lock +++ b/composer.lock @@ -4395,16 +4395,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.23", + "version": "3.0.33", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "866cc78fbd82462ffd880e3f65692afe928bed50" + "reference": "33fa69b2514a61138dd48e7a49f99445711e0ad0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/866cc78fbd82462ffd880e3f65692afe928bed50", - "reference": "866cc78fbd82462ffd880e3f65692afe928bed50", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/33fa69b2514a61138dd48e7a49f99445711e0ad0", + "reference": "33fa69b2514a61138dd48e7a49f99445711e0ad0", "shasum": "" }, "require": { @@ -4485,7 +4485,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.23" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.33" }, "funding": [ { @@ -4501,7 +4501,7 @@ "type": "tidelift" } ], - "time": "2023-09-18T17:22:01+00:00" + "time": "2023-10-21T14:00:39+00:00" }, { "name": "pragmarx/google2fa", @@ -6464,16 +6464,16 @@ }, { "name": "symfony/http-client", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d" + "reference": "ab8446f997efb9913627e9da10fa784d2182fe92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/213e564da4cbf61acc9728d97e666bcdb868c10d", - "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/ab8446f997efb9913627e9da10fa784d2182fe92", + "reference": "ab8446f997efb9913627e9da10fa784d2182fe92", "shasum": "" }, "require": { @@ -6536,7 +6536,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.3.5" + "source": "https://github.com/symfony/http-client/tree/v6.3.6" }, "funding": [ { @@ -6552,7 +6552,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T15:57:12+00:00" + "time": "2023-10-06T10:08:56+00:00" }, { "name": "symfony/http-client-contracts", @@ -6634,16 +6634,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957" + "reference": "c186627f52febe09c6d5270b04f8462687a250a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b50f5e281d722cb0f4c296f908bacc3e2b721957", - "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c186627f52febe09c6d5270b04f8462687a250a6", + "reference": "c186627f52febe09c6d5270b04f8462687a250a6", "shasum": "" }, "require": { @@ -6653,12 +6653,12 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "symfony/cache": "<6.3" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", + "symfony/cache": "^6.3", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", @@ -6691,7 +6691,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.5" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.6" }, "funding": [ { @@ -6707,20 +6707,20 @@ "type": "tidelift" } ], - "time": "2023-09-04T21:33:54+00:00" + "time": "2023-10-17T11:32:53+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc" + "reference": "4945f5001b06ff9080cd3d8f1f9f069094c0d156" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f991a964368bee8d883e8d57ced4fe9fff04dfc", - "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4945f5001b06ff9080cd3d8f1f9f069094c0d156", + "reference": "4945f5001b06ff9080cd3d8f1f9f069094c0d156", "shasum": "" }, "require": { @@ -6804,7 +6804,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.5" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.6" }, "funding": [ { @@ -6820,7 +6820,7 @@ "type": "tidelift" } ], - "time": "2023-09-30T06:37:04+00:00" + "time": "2023-10-21T13:12:51+00:00" }, { "name": "symfony/mailer", @@ -6904,16 +6904,16 @@ }, { "name": "symfony/mailgun-mailer", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "b467aba49c8240a71f7027c213d9d140ba1abce7" + "reference": "8d9741467c53750dc8ccda23a1cdb91cda732571" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/b467aba49c8240a71f7027c213d9d140ba1abce7", - "reference": "b467aba49c8240a71f7027c213d9d140ba1abce7", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/8d9741467c53750dc8ccda23a1cdb91cda732571", + "reference": "8d9741467c53750dc8ccda23a1cdb91cda732571", "shasum": "" }, "require": { @@ -6953,7 +6953,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailgun-mailer/tree/v6.3.6" }, "funding": [ { @@ -6969,7 +6969,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T17:30:10+00:00" + "time": "2023-10-12T13:32:47+00:00" }, { "name": "symfony/mime", @@ -8196,16 +8196,16 @@ }, { "name": "symfony/translation", - "version": "v6.3.3", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" + "reference": "869b26c7a9d4b8a48afdd77ab36031909c87e3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "url": "https://api.github.com/repos/symfony/translation/zipball/869b26c7a9d4b8a48afdd77ab36031909c87e3a2", + "reference": "869b26c7a9d4b8a48afdd77ab36031909c87e3a2", "shasum": "" }, "require": { @@ -8271,7 +8271,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.3" + "source": "https://github.com/symfony/translation/tree/v6.3.6" }, "funding": [ { @@ -8287,7 +8287,7 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-10-17T11:32:53+00:00" }, { "name": "symfony/translation-contracts", @@ -8443,16 +8443,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5" + "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3d9999376be5fea8de47752837a3e1d1c5f69ef5", - "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/999ede244507c32b8e43aebaa10e9fce20de7c97", + "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97", "shasum": "" }, "require": { @@ -8507,7 +8507,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.5" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.6" }, "funding": [ { @@ -8523,7 +8523,7 @@ "type": "tidelift" } ], - "time": "2023-09-12T10:11:35+00:00" + "time": "2023-10-12T18:45:56+00:00" }, { "name": "therobfonz/laravel-mandrill-driver", From 691682bc0cf9bc88c5f8480b5a3c500f029c7ada Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 09:52:43 +0200 Subject: [PATCH 23/48] Fix bad math in piggy bank order code --- .../PiggyBank/ModifiesPiggyBanks.php | 6 +++--- public/v1/js/ff/piggy-banks/index.js | 18 +++++++++--------- resources/views/list/piggy-banks.twig | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php index b8e8392e26..216d666d49 100644 --- a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php +++ b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php @@ -313,13 +313,13 @@ trait ModifiesPiggyBanks public function setOrder(PiggyBank $piggyBank, int $newOrder): bool { $oldOrder = (int)$piggyBank->order; - Log::debug(sprintf('Will move piggy bank #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); + //Log::debug(sprintf('Will move piggy bank #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); if ($newOrder > $oldOrder) { $this->user->piggyBanks()->where('piggy_banks.order', '<=', $newOrder)->where('piggy_banks.order', '>', $oldOrder) ->where('piggy_banks.id', '!=', $piggyBank->id) ->decrement('piggy_banks.order'); $piggyBank->order = $newOrder; - Log::debug(sprintf('Order of piggy #%d ("%s") is now %d', $piggyBank->id, $piggyBank->name, $newOrder)); + Log::debug(sprintf('[1] Order of piggy #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); $piggyBank->save(); return true; @@ -329,7 +329,7 @@ trait ModifiesPiggyBanks ->where('piggy_banks.id', '!=', $piggyBank->id) ->increment('piggy_banks.order'); $piggyBank->order = $newOrder; - Log::debug(sprintf('Order of piggy #%d ("%s") is now %d', $piggyBank->id, $piggyBank->name, $newOrder)); + Log::debug(sprintf('[2] Order of piggy #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); $piggyBank->save(); return true; diff --git a/public/v1/js/ff/piggy-banks/index.js b/public/v1/js/ff/piggy-banks/index.js index b0ca3466a9..ce2a282532 100644 --- a/public/v1/js/ff/piggy-banks/index.js +++ b/public/v1/js/ff/piggy-banks/index.js @@ -90,25 +90,25 @@ function stopSorting() { var holder = $(v); var parentBody = holder.parent(); var objectGroupTitle = parentBody.data('title'); - var position = parseInt(holder.data('position')); var originalOrder = parseInt(holder.data('order')); + var newOrder = i+1; var name = holder.data('name'); var id = holder.data('id'); - var newOrder; - if (position === i) { + if (originalOrder=== newOrder) { // not changed, position is what it should be. + console.log('"' + name + '" ("' + objectGroupTitle + '") has not moved.'); return; } - if (position < i) { + if (originalOrder < newOrder) { // position is less. - console.log('"' + name + '" ("' + objectGroupTitle + '") has moved down from position ' + originalOrder + ' to ' + (i + 1)); + console.log('"' + name + '" ("' + objectGroupTitle + '") has moved down from position ' + originalOrder + ' to ' + newOrder); } - if (position > i) { - console.log('"' + name + '" ("' + objectGroupTitle + '") has moved up from position ' + originalOrder + ' to ' + (i + 1)); + if (originalOrder > newOrder) { + console.log('"' + name + '" ("' + objectGroupTitle + '") has moved up from position ' + originalOrder + ' to ' + newOrder); } // update position: - holder.data('position', i); - newOrder = i+1; + //holder.data('position', newPosition); + holder.data('order', newOrder); $.post('piggy-banks/set-order/' + id, {order: newOrder, objectGroupTitle: objectGroupTitle, _token: token}) }); diff --git a/resources/views/list/piggy-banks.twig b/resources/views/list/piggy-banks.twig index 8289c43d04..f3917bcf5e 100644 --- a/resources/views/list/piggy-banks.twig +++ b/resources/views/list/piggy-banks.twig @@ -19,7 +19,7 @@
{% for piggy in objectGroup.piggy_banks %} - + From 5eaf1f4438dde18f807f9655a855891724330f4d Mon Sep 17 00:00:00 2001 From: root Date: Sun, 22 Oct 2023 14:45:58 +0200 Subject: [PATCH 24/48] Hide duplicated webhook create button When there are no webhooks yet the button below the table will be hidden --- resources/assets/js/components/webhooks/Index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/js/components/webhooks/Index.vue b/resources/assets/js/components/webhooks/Index.vue index f8196b16b3..8d846a227f 100644 --- a/resources/assets/js/components/webhooks/Index.vue +++ b/resources/assets/js/components/webhooks/Index.vue @@ -80,7 +80,7 @@
   {{ 'currency'|_ }} {{ 'number_of_decimals'|_ }} 
+ {% if isOwner %} + {% endif %} + {# Disable the currency. #} + {% if currency.userEnabled %} + + + {{ 'disable_currency'|_ }} + {% endif %} + + {# Enable the currency. #} + {% if not currency.userEnabled %} + + + {{ 'enable_currency'|_ }} + {% endif %} + + {# Make currency default. #} + {% if currency.id != defaultCurrency.id %} + + {% endif %}
- {% if currency.enabled == false %} + {% if currency.userEnabled == false %} {% endif %} {{ currency.name }} ({{ currency.code }}) ({{ currency.symbol|raw }}) {% if currency.id == defaultCurrency.id %} {{ 'default_currency'|_ }} {% endif %} - {% if currency.enabled == false %} + {% if currency.userEnabled == false %} + + {{ 'currency_is_disabled'|_ }} + {% endif %} + + {% if currency.userEnabled == false %} -
{{ 'currency_is_disabled'|_ }} {% endif %}
{{ currency.decimal_places }} -
- {% if currency.id != defaultCurrency.id %} - - {% endif %} - {% if currency.enabled %} - - - {{ 'disable_currency'|_ }} - {% endif %} - {% if not currency.enabled %} - - - {{ 'enable_currency'|_ }} - {% endif %} -
-
{{ objectGroup.object_group_title }}
- From a86a582d0f2cd00566e0c394839d5aa49abbb4b5 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 16:27:03 +0200 Subject: [PATCH 25/48] Rebuild frontend --- public/v1/js/app.js | 2 +- public/v1/js/app.js.LICENSE.txt | 4 ++-- public/v1/js/create_transaction.js | 2 +- public/v1/js/edit_transaction.js | 2 +- public/v1/js/profile.js | 2 +- public/v1/js/webhooks/create.js | 2 +- public/v1/js/webhooks/edit.js | 2 +- public/v1/js/webhooks/index.js | 2 +- public/v1/js/webhooks/show.js | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/public/v1/js/app.js b/public/v1/js/app.js index 989eee8a83..62a7c53d32 100644 --- a/public/v1/js/app.js +++ b/public/v1/js/app.js @@ -1,2 +1,2 @@ /*! For license information please see app.js.LICENSE.txt */ -(()=>{var t={3002:()=>{if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var n=!1,i=this;t(this).one("bsTransitionEnd",(function(){n=!0}));return setTimeout((function(){n||t(i).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',n=function(n){t(n).on("click",e,this.close)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.close=function(e){var i=t(this),o=i.attr("data-target");o||(o=(o=i.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,"")),o="#"===o?[]:o;var r=t(document).find(o);function s(){r.detach().trigger("closed.bs.alert").remove()}e&&e.preventDefault(),r.length||(r=i.closest(".alert")),r.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(r.removeClass("in"),t.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",s).emulateTransitionEnd(n.TRANSITION_DURATION):s())};var i=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var i=t(this),o=i.data("bs.alert");o||i.data("bs.alert",o=new n(this)),"string"==typeof e&&o[e].call(i)}))},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=i,this},t(document).on("click.bs.alert.data-api",e,n.prototype.close)}(jQuery),function(t){"use strict";var e=function(n,i){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,i),this.isLoading=!1};function n(n){return this.each((function(){var i=t(this),o=i.data("bs.button"),r="object"==typeof n&&n;o||i.data("bs.button",o=new e(this,r)),"toggle"==n?o.toggle():n&&o.setState(n)}))}e.VERSION="3.4.1",e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var n="disabled",i=this.$element,o=i.is("input")?"val":"html",r=i.data();e+="Text",null==r.resetText&&i.data("resetText",i[o]()),setTimeout(t.proxy((function(){i[o](null==r[e]?this.options[e]:r[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n).prop(n,!1))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=n,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(e){var i=t(e.target).closest(".btn");n.call(i,"toggle"),t(e.target).is('input[type="radio"], input[type="checkbox"]')||(e.preventDefault(),i.is("input,button")?i.trigger("focus"):i.find("input:visible,button:visible").first().trigger("focus"))})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))}))}(jQuery),function(t){"use strict";var e=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};function n(n){return this.each((function(){var i=t(this),o=i.data("bs.carousel"),r=t.extend({},e.DEFAULTS,i.data(),"object"==typeof n&&n),s="string"==typeof n?n:r.slide;o||i.data("bs.carousel",o=new e(this,r)),"number"==typeof n?o.to(n):s?o[s]():r.interval&&o.pause().cycle()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=600,e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},e.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},e.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if(("prev"==t&&0===n||"next"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var i=(n+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(i)},e.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",(function(){e.to(t)})):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",this.$items.eq(t))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide("next")},e.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},e.prototype.slide=function(n,i){var o=this.$element.find(".item.active"),r=i||this.getItemForDirection(n,o),s=this.interval,a="next"==n?"left":"right",l=this;if(r.hasClass("active"))return this.sliding=!1;var c=r[0],u=t.Event("slide.bs.carousel",{relatedTarget:c,direction:a});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(r)]);p&&p.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:c,direction:a});return t.support.transition&&this.$element.hasClass("slide")?(r.addClass(n),"object"==typeof r&&r.length&&r[0].offsetWidth,o.addClass(a),r.addClass(a),o.one("bsTransitionEnd",(function(){r.removeClass([n,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout((function(){l.$element.trigger(d)}),0)})).emulateTransitionEnd(e.TRANSITION_DURATION)):(o.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(d)),s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=n,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var o=function(e){var i=t(this),o=i.attr("href");o&&(o=o.replace(/.*(?=#[^\s]+$)/,""));var r=i.attr("data-target")||o,s=t(document).find(r);if(s.hasClass("carousel")){var a=t.extend({},s.data(),i.data()),l=i.attr("data-slide-to");l&&(a.interval=!1),n.call(s,a),l&&s.data("bs.carousel").to(l),e.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",o).on("click.bs.carousel.data-api","[data-slide-to]",o),t(window).on("load",(function(){t('[data-ride="carousel"]').each((function(){var e=t(this);n.call(e,e.data())}))}))}(jQuery),function(t){"use strict";var e=function(n,i){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+n.id+'"],[data-toggle="collapse"][data-target="#'+n.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(e){var n,i=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(i)}function i(n){return this.each((function(){var i=t(this),o=i.data("bs.collapse"),r=t.extend({},e.DEFAULTS,i.data(),"object"==typeof n&&n);!o&&r.toggle&&/show|hide/.test(n)&&(r.toggle=!1),o||i.data("bs.collapse",o=new e(this,r)),"string"==typeof n&&o[n]()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var n,o=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(o&&o.length&&(n=o.data("bs.collapse"))&&n.transitioning)){var r=t.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){o&&o.length&&(i.call(o,"hide"),n||o.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return a.call(this);var l=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(a,this)).emulateTransitionEnd(e.TRANSITION_DURATION)[s](this.$element[0][l])}}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var n=t.Event("hide.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return o.call(this);this.$element[i](0).one("bsTransitionEnd",t.proxy(o,this)).emulateTransitionEnd(e.TRANSITION_DURATION)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},e.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy((function(e,i){var o=t(i);this.addAriaAndCollapsedClass(n(o),o)}),this)).end()},e.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var o=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=o,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(e){var o=t(this);o.attr("data-target")||e.preventDefault();var r=n(o),s=r.data("bs.collapse")?"toggle":o.data();i.call(r,s)}))}(jQuery),function(t){"use strict";var e='[data-toggle="dropdown"]',n=function(e){t(e).on("click.bs.dropdown",this.toggle)};function i(e){var n=e.attr("data-target");n||(n=(n=e.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==n?t(document).find(n):null;return i&&i.length?i:e.parent()}function o(n){n&&3===n.which||(t(".dropdown-backdrop").remove(),t(e).each((function(){var e=t(this),o=i(e),r={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(o[0],n.target)||(o.trigger(n=t.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(e.attr("aria-expanded","false"),o.removeClass("open").trigger(t.Event("hidden.bs.dropdown",r)))))})))}n.VERSION="3.4.1",n.prototype.toggle=function(e){var n=t(this);if(!n.is(".disabled, :disabled")){var r=i(n),s=r.hasClass("open");if(o(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",o);var a={relatedTarget:this};if(r.trigger(e=t.Event("show.bs.dropdown",a)),e.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger(t.Event("shown.bs.dropdown",a))}return!1}},n.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var o=t(this);if(n.preventDefault(),n.stopPropagation(),!o.is(".disabled, :disabled")){var r=i(o),s=r.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&r.find(e).trigger("focus"),o.trigger("click");var a=r.find(".dropdown-menu li:not(.disabled):visible a");if(a.length){var l=a.index(n.target);38==n.which&&l>0&&l--,40==n.which&&ldocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},e.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},e.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:i},l.prototype.init=function(e,n,i){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),r=o.length;r--;){var s=o[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",l="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(n){var i=this.$element.data();for(var o in i)i.hasOwnProperty(o)&&-1!==t.inArray(o,e)&&delete i[o];return(n=t.extend({},this.getDefaults(),i,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=a(n.template,n.whiteList,n.sanitizeFn)),n},l.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,(function(t,i){n[t]!=i&&(e[t]=i)})),e},l.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){"in"==n.hoverState&&n.show()}),n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},l.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){"out"==n.hoverState&&n.hide()}),n.options.delay.hide)}},l.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var i=this,o=this.tip(),r=this.getUID(this.type);this.setContent(),o.attr("id",r),this.$element.attr("aria-describedby",r),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,c=a.test(s);c&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(t(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),p=o[0].offsetWidth,d=o[0].offsetHeight;if(c){var f=s,h=this.getPosition(this.$viewport);s="bottom"==s&&u.bottom+d>h.bottom?"top":"top"==s&&u.top-dh.width?"left":"left"==s&&u.left-ps.top+s.height&&(o.top=s.top+s.height-l)}else{var c=e.left-r,u=e.left+r+n;cs.right&&(o.left=s.left+s.width-u)}return o},l.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},l.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data("bs."+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},l.prototype.sanitizeHtml=function(t){return a(t,this.options.whiteList,this.options.sanitizeFn)};var c=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var n=t(this),i=n.data("bs.tooltip"),o="object"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||n.data("bs.tooltip",i=new l(this,o)),"string"==typeof e&&i[e]())}))},t.fn.tooltip.Constructor=l,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=c,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.4.1",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),(e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype)).constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();if(this.options.html){var i=typeof n;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===i&&(n=this.sanitizeHtml(n))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===i?"html":"append"](n)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(n);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=t.fn.popover;t.fn.popover=function(n){return this.each((function(){var i=t(this),o=i.data("bs.popover"),r="object"==typeof n&&n;!o&&/destroy|hide/.test(n)||(o||i.data("bs.popover",o=new e(this,r)),"string"==typeof n&&o[n]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t){"use strict";function e(n,i){this.$body=t(document.body),this.$scrollElement=t(n).is(document.body)?t(window):t(n),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each((function(){var i=t(this),o=i.data("bs.scrollspy"),r="object"==typeof n&&n;o||i.data("bs.scrollspy",o=new e(this,r)),"string"==typeof n&&o[n]()}))}e.VERSION="3.4.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var e=t(this),o=e.data("target")||e.attr("href"),r=/^#./.test(o)&&t(o);return r&&r.length&&r.is(":visible")&&[[r[n]().top+i,o]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){e.offsets.push(this[0]),e.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,r=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=i)return s!=(t=r[r.length-1])&&this.activate(t);if(s&&e=o[t]&&(void 0===o[t+1]||e .active"),s=o&&t.support.transition&&(r.length&&r.hasClass("fade")||!!i.find("> .fade").length);function a(){r.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),n.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(n[0].offsetWidth,n.addClass("in")):n.removeClass("fade"),n.parent(".dropdown-menu").length&&n.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),o&&o()}r.length&&s?r.one("bsTransitionEnd",a).emulateTransitionEnd(e.TRANSITION_DURATION):a(),r.removeClass("in")};var i=t.fn.tab;t.fn.tab=n,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var o=function(e){e.preventDefault(),n.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',o).on("click.bs.tab.data-api",'[data-toggle="pill"]',o)}(jQuery),function(t){"use strict";var e=function(n,i){this.options=t.extend({},e.DEFAULTS,i);var o=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=o.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var i=t(this),o=i.data("bs.affix"),r="object"==typeof n&&n;o||i.data("bs.affix",o=new e(this,r)),"string"==typeof n&&o[n]()}))}e.VERSION="3.4.1",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,n,i){var o=this.$target.scrollTop(),r=this.$element.offset(),s=this.$target.height();if(null!=n&&"top"==this.affixed)return o=t-i&&"bottom"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var n=this.$element.height(),i=this.options.offset,o=i.top,r=i.bottom,s=Math.max(t(document).height(),t(document.body).height());"object"!=typeof i&&(r=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var a=this.getState(s,n,o,r);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var l="affix"+(a?"-"+a:""),c=t.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-n-r})}};var i=t.fn.affix;t.fn.affix=n,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",(function(){t('[data-spy="affix"]').each((function(){var e=t(this),i=e.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),n.call(e,i)}))}))}(jQuery)},9755:function(t,e){var n;!function(e,n){"use strict";"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,(function(i,o){"use strict";var r=[],s=Object.getPrototypeOf,a=r.slice,l=r.flat?function(t){return r.flat.call(t)}:function(t){return r.concat.apply([],t)},c=r.push,u=r.indexOf,p={},d=p.toString,f=p.hasOwnProperty,h=f.toString,g=h.call(Object),v={},m=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType&&"function"!=typeof t.item},y=function(t){return null!=t&&t===t.window},b=i.document,x={type:!0,src:!0,nonce:!0,noModule:!0};function w(t,e,n){var i,o,r=(n=n||b).createElement("script");if(r.text=t,e)for(i in x)(o=e[i]||e.getAttribute&&e.getAttribute(i))&&r.setAttribute(i,o);n.head.appendChild(r).parentNode.removeChild(r)}function T(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?p[d.call(t)]||"object":typeof t}var C="3.7.0",E=/HTML$/i,S=function(t,e){return new S.fn.init(t,e)};function k(t){var e=!!t&&"length"in t&&t.length,n=T(t);return!m(t)&&!y(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function $(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}S.fn=S.prototype={jquery:C,constructor:S,length:0,toArray:function(){return a.call(this)},get:function(t){return null==t?a.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=S.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return S.each(this,t)},map:function(t){return this.pushStack(S.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(S.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|"+j+")"+j+"*"),W=new RegExp(j+"|>"),U=new RegExp(P),B=new RegExp("^"+I+"$"),_={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+L),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+j+"*(even|odd|(([+-]|)(\\d*)n|)"+j+"*(?:([+-]|)"+j+"*(\\d+)|))"+j+"*\\)|)","i"),bool:new RegExp("^(?:"+k+")$","i"),needsContext:new RegExp("^"+j+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+j+"*((?:-\\d)?\\d*)"+j+"*\\)|)(?=[^-]|$)","i")},z=/^(?:input|select|textarea|button)$/i,V=/^h\d$/i,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,X=/[+~]/,G=new RegExp("\\\\[\\da-fA-F]{1,6}"+j+"?|\\\\([^\\r\\n\\f])","g"),Y=function(t,e){var n="0x"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},J=function(){lt()},K=dt((function(t){return!0===t.disabled&&$(t,"fieldset")}),{dir:"parentNode",next:"legend"});try{g.apply(r=a.call(R.childNodes),R.childNodes),r[R.childNodes.length].nodeType}catch(t){g={apply:function(t,e){H.apply(t,a.call(e))},call:function(t){H.apply(t,a.call(arguments,1))}}}function Z(t,e,n,i){var o,r,s,a,c,u,f,h=e&&e.ownerDocument,y=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==y&&9!==y&&11!==y)return n;if(!i&&(lt(e),e=e||l,p)){if(11!==y&&(c=Q.exec(t)))if(o=c[1]){if(9===y){if(!(s=e.getElementById(o)))return n;if(s.id===o)return g.call(n,s),n}else if(h&&(s=h.getElementById(o))&&Z.contains(e,s)&&s.id===o)return g.call(n,s),n}else{if(c[2])return g.apply(n,e.getElementsByTagName(t)),n;if((o=c[3])&&e.getElementsByClassName)return g.apply(n,e.getElementsByClassName(o)),n}if(!(C[t+" "]||d&&d.test(t))){if(f=t,h=e,1===y&&(W.test(t)||F.test(t))){for((h=X.test(t)&&at(e.parentNode)||e)==e&&v.scope||((a=e.getAttribute("id"))?a=S.escapeSelector(a):e.setAttribute("id",a=m)),r=(u=ut(t)).length;r--;)u[r]=(a?"#"+a:":scope")+" "+pt(u[r]);f=u.join(",")}try{return g.apply(n,h.querySelectorAll(f)),n}catch(e){C(t,!0)}finally{a===m&&e.removeAttribute("id")}}}return yt(t.replace(O,"$1"),e,n,i)}function tt(){var t=[];return function n(i,o){return t.push(i+" ")>e.cacheLength&&delete n[t.shift()],n[i+" "]=o}}function et(t){return t[m]=!0,t}function nt(t){var e=l.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function it(t){return function(e){return $(e,"input")&&e.type===t}}function ot(t){return function(e){return($(e,"input")||$(e,"button"))&&e.type===t}}function rt(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&K(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function st(t){return et((function(e){return e=+e,et((function(n,i){for(var o,r=t([],n.length,e),s=r.length;s--;)n[o=r[s]]&&(n[o]=!(i[o]=n[o]))}))}))}function at(t){return t&&void 0!==t.getElementsByTagName&&t}function lt(t){var n,i=t?t.ownerDocument||t:R;return i!=l&&9===i.nodeType&&i.documentElement?(c=(l=i).documentElement,p=!S.isXMLDoc(l),h=c.matches||c.webkitMatchesSelector||c.msMatchesSelector,R!=l&&(n=l.defaultView)&&n.top!==n&&n.addEventListener("unload",J),v.getById=nt((function(t){return c.appendChild(t).id=S.expando,!l.getElementsByName||!l.getElementsByName(S.expando).length})),v.disconnectedMatch=nt((function(t){return h.call(t,"*")})),v.scope=nt((function(){return l.querySelectorAll(":scope")})),v.cssHas=nt((function(){try{return l.querySelector(":has(*,:jqfake)"),!1}catch(t){return!0}})),v.getById?(e.filter.ID=function(t){var e=t.replace(G,Y);return function(t){return t.getAttribute("id")===e}},e.find.ID=function(t,e){if(void 0!==e.getElementById&&p){var n=e.getElementById(t);return n?[n]:[]}}):(e.filter.ID=function(t){var e=t.replace(G,Y);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},e.find.ID=function(t,e){if(void 0!==e.getElementById&&p){var n,i,o,r=e.getElementById(t);if(r){if((n=r.getAttributeNode("id"))&&n.value===t)return[r];for(o=e.getElementsByName(t),i=0;r=o[i++];)if((n=r.getAttributeNode("id"))&&n.value===t)return[r]}return[]}}),e.find.TAG=function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):e.querySelectorAll(t)},e.find.CLASS=function(t,e){if(void 0!==e.getElementsByClassName&&p)return e.getElementsByClassName(t)},d=[],nt((function(t){var e;c.appendChild(t).innerHTML="",t.querySelectorAll("[selected]").length||d.push("\\["+j+"*(?:value|"+k+")"),t.querySelectorAll("[id~="+m+"-]").length||d.push("~="),t.querySelectorAll("a#"+m+"+*").length||d.push(".#.+[+~]"),t.querySelectorAll(":checked").length||d.push(":checked"),(e=l.createElement("input")).setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),c.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(e=l.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||d.push("\\["+j+"*name"+j+"*="+j+"*(?:''|\"\")")})),v.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),E=function(t,e){if(t===e)return s=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n||(1&(n=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!v.sortDetached&&e.compareDocumentPosition(t)===n?t===l||t.ownerDocument==R&&Z.contains(R,t)?-1:e===l||e.ownerDocument==R&&Z.contains(R,e)?1:o?u.call(o,t)-u.call(o,e):0:4&n?-1:1)},l):l}for(t in Z.matches=function(t,e){return Z(t,null,null,e)},Z.matchesSelector=function(t,e){if(lt(t),p&&!C[e+" "]&&(!d||!d.test(e)))try{var n=h.call(t,e);if(n||v.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){C(e,!0)}return Z(e,l,null,[t]).length>0},Z.contains=function(t,e){return(t.ownerDocument||t)!=l&<(t),S.contains(t,e)},Z.attr=function(t,n){(t.ownerDocument||t)!=l&<(t);var i=e.attrHandle[n.toLowerCase()],o=i&&f.call(e.attrHandle,n.toLowerCase())?i(t,n,!p):void 0;return void 0!==o?o:t.getAttribute(n)},Z.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},S.uniqueSort=function(t){var e,n=[],i=0,r=0;if(s=!v.sortStable,o=!v.sortStable&&a.call(t,0),A.call(t,E),s){for(;e=t[r++];)e===t[r]&&(i=n.push(r));for(;i--;)N.call(t,n[i],1)}return o=null,t},S.fn.uniqueSort=function(){return this.pushStack(S.uniqueSort(a.apply(this)))},e=S.expr={cacheLength:50,createPseudo:et,match:_,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(G,Y),t[3]=(t[3]||t[4]||t[5]||"").replace(G,Y),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||Z.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&Z.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return _.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&U.test(n)&&(e=ut(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(G,Y).toLowerCase();return"*"===t?function(){return!0}:function(t){return $(t,e)}},CLASS:function(t){var e=x[t+" "];return e||(e=new RegExp("(^|"+j+")"+t+"("+j+"|$)"))&&x(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(i){var o=Z.attr(i,t);return null==o?"!="===e:!e||(o+="","="===e?o===n:"!="===e?o!==n:"^="===e?n&&0===o.indexOf(n):"*="===e?n&&o.indexOf(n)>-1:"$="===e?n&&o.slice(-n.length)===n:"~="===e?(" "+o.replace(q," ")+" ").indexOf(n)>-1:"|="===e&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,i,o){var r="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===i&&0===o?function(t){return!!t.parentNode}:function(e,n,l){var c,u,p,d,f,h=r!==s?"nextSibling":"previousSibling",g=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!l&&!a,x=!1;if(g){if(r){for(;h;){for(p=e;p=p[h];)if(a?$(p,v):1===p.nodeType)return!1;f=h="only"===t&&!f&&"nextSibling"}return!0}if(f=[s?g.firstChild:g.lastChild],s&&b){for(x=(d=(c=(u=g[m]||(g[m]={}))[t]||[])[0]===y&&c[1])&&c[2],p=d&&g.childNodes[d];p=++d&&p&&p[h]||(x=d=0)||f.pop();)if(1===p.nodeType&&++x&&p===e){u[t]=[y,d,x];break}}else if(b&&(x=d=(c=(u=e[m]||(e[m]={}))[t]||[])[0]===y&&c[1]),!1===x)for(;(p=++d&&p&&p[h]||(x=d=0)||f.pop())&&(!(a?$(p,v):1===p.nodeType)||!++x||(b&&((u=p[m]||(p[m]={}))[t]=[y,x]),p!==e)););return(x-=o)===i||x%i==0&&x/i>=0}}},PSEUDO:function(t,n){var i,o=e.pseudos[t]||e.setFilters[t.toLowerCase()]||Z.error("unsupported pseudo: "+t);return o[m]?o(n):o.length>1?(i=[t,t,"",n],e.setFilters.hasOwnProperty(t.toLowerCase())?et((function(t,e){for(var i,r=o(t,n),s=r.length;s--;)t[i=u.call(t,r[s])]=!(e[i]=r[s])})):function(t){return o(t,0,i)}):o}},pseudos:{not:et((function(t){var e=[],n=[],i=mt(t.replace(O,"$1"));return i[m]?et((function(t,e,n,o){for(var r,s=i(t,null,o,[]),a=t.length;a--;)(r=s[a])&&(t[a]=!(e[a]=r))})):function(t,o,r){return e[0]=t,i(e,null,r,n),e[0]=null,!n.pop()}})),has:et((function(t){return function(e){return Z(t,e).length>0}})),contains:et((function(t){return t=t.replace(G,Y),function(e){return(e.textContent||S.text(e)).indexOf(t)>-1}})),lang:et((function(t){return B.test(t||"")||Z.error("unsupported lang: "+t),t=t.replace(G,Y).toLowerCase(),function(e){var n;do{if(n=p?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(t){var e=i.location&&i.location.hash;return e&&e.slice(1)===t.id},root:function(t){return t===c},focus:function(t){return t===function(){try{return l.activeElement}catch(t){}}()&&l.hasFocus()&&!!(t.type||t.href||~t.tabIndex)},enabled:rt(!1),disabled:rt(!0),checked:function(t){return $(t,"input")&&!!t.checked||$(t,"option")&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!e.pseudos.empty(t)},header:function(t){return V.test(t.nodeName)},input:function(t){return z.test(t.nodeName)},button:function(t){return $(t,"input")&&"button"===t.type||$(t,"button")},text:function(t){var e;return $(t,"input")&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:st((function(){return[0]})),last:st((function(t,e){return[e-1]})),eq:st((function(t,e,n){return[n<0?n+e:n]})),even:st((function(t,e){for(var n=0;ne?e:n;--i>=0;)t.push(i);return t})),gt:st((function(t,e,n){for(var i=n<0?n+e:n;++i1?function(e,n,i){for(var o=t.length;o--;)if(!t[o](e,n,i))return!1;return!0}:t[0]}function ht(t,e,n,i,o){for(var r,s=[],a=0,l=t.length,c=null!=e;a-1&&(r[c]=!(s[c]=d))}}else f=ht(f===s?f.splice(m,f.length):f),o?o(null,s,f,l):g.apply(s,f)}))}function vt(t){for(var i,o,r,s=t.length,a=e.relative[t[0].type],l=a||e.relative[" "],c=a?1:0,p=dt((function(t){return t===i}),l,!0),d=dt((function(t){return u.call(i,t)>-1}),l,!0),f=[function(t,e,o){var r=!a&&(o||e!=n)||((i=e).nodeType?p(t,e,o):d(t,e,o));return i=null,r}];c1&&ft(f),c>1&&pt(t.slice(0,c-1).concat({value:" "===t[c-2].type?"*":""})).replace(O,"$1"),o,c0,r=t.length>0,s=function(s,a,c,u,d){var f,h,v,m=0,b="0",x=s&&[],w=[],T=n,C=s||r&&e.find.TAG("*",d),E=y+=null==T?1:Math.random()||.1,k=C.length;for(d&&(n=a==l||a||d);b!==k&&null!=(f=C[b]);b++){if(r&&f){for(h=0,a||f.ownerDocument==l||(lt(f),c=!p);v=t[h++];)if(v(f,a||l,c)){g.call(u,f);break}d&&(y=E)}o&&((f=!v&&f)&&m--,s&&x.push(f))}if(m+=b,o&&b!==m){for(h=0;v=i[h++];)v(x,w,a,c);if(s){if(m>0)for(;b--;)x[b]||w[b]||(w[b]=D.call(u));w=ht(w)}g.apply(u,w),d&&!s&&w.length>0&&m+i.length>1&&S.uniqueSort(u)}return d&&(y=E,n=T),x};return o?et(s):s}(s,r)),a.selector=t}return a}function yt(t,n,i,o){var r,s,a,l,c,u="function"==typeof t&&t,d=!o&&ut(t=u.selector||t);if(i=i||[],1===d.length){if((s=d[0]=d[0].slice(0)).length>2&&"ID"===(a=s[0]).type&&9===n.nodeType&&p&&e.relative[s[1].type]){if(!(n=(e.find.ID(a.matches[0].replace(G,Y),n)||[])[0]))return i;u&&(n=n.parentNode),t=t.slice(s.shift().value.length)}for(r=_.needsContext.test(t)?0:s.length;r--&&(a=s[r],!e.relative[l=a.type]);)if((c=e.find[l])&&(o=c(a.matches[0].replace(G,Y),X.test(s[0].type)&&at(n.parentNode)||n))){if(s.splice(r,1),!(t=o.length&&pt(s)))return g.apply(i,o),i;break}}return(u||mt(t,d))(o,n,!p,i,!n||X.test(t)&&at(n.parentNode)||n),i}ct.prototype=e.filters=e.pseudos,e.setFilters=new ct,v.sortStable=m.split("").sort(E).join("")===m,lt(),v.sortDetached=nt((function(t){return 1&t.compareDocumentPosition(l.createElement("fieldset"))})),S.find=Z,S.expr[":"]=S.expr.pseudos,S.unique=S.uniqueSort,Z.compile=mt,Z.select=yt,Z.setDocument=lt,Z.escape=S.escapeSelector,Z.getText=S.text,Z.isXML=S.isXMLDoc,Z.selectors=S.expr,Z.support=S.support,Z.uniqueSort=S.uniqueSort}();var P=function(t,e,n){for(var i=[],o=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&S(t).is(n))break;i.push(t)}return i},q=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},M=S.expr.match.needsContext,F=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function W(t,e,n){return m(e)?S.grep(t,(function(t,i){return!!e.call(t,i,t)!==n})):e.nodeType?S.grep(t,(function(t){return t===e!==n})):"string"!=typeof e?S.grep(t,(function(t){return u.call(e,t)>-1!==n})):S.filter(e,t,n)}S.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?S.find.matchesSelector(i,t)?[i]:[]:S.find.matches(t,S.grep(e,(function(t){return 1===t.nodeType})))},S.fn.extend({find:function(t){var e,n,i=this.length,o=this;if("string"!=typeof t)return this.pushStack(S(t).filter((function(){for(e=0;e1?S.uniqueSort(n):n},filter:function(t){return this.pushStack(W(this,t||[],!1))},not:function(t){return this.pushStack(W(this,t||[],!0))},is:function(t){return!!W(this,"string"==typeof t&&M.test(t)?S(t):t||[],!1).length}});var U,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(t,e,n){var i,o;if(!t)return this;if(n=n||U,"string"==typeof t){if(!(i="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:B.exec(t))||!i[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(i[1]){if(e=e instanceof S?e[0]:e,S.merge(this,S.parseHTML(i[1],e&&e.nodeType?e.ownerDocument||e:b,!0)),F.test(i[1])&&S.isPlainObject(e))for(i in e)m(this[i])?this[i](e[i]):this.attr(i,e[i]);return this}return(o=b.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):m(t)?void 0!==n.ready?n.ready(t):t(S):S.makeArray(t,this)}).prototype=S.fn,U=S(b);var _=/^(?:parents|prev(?:Until|All))/,z={children:!0,contents:!0,next:!0,prev:!0};function V(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}S.fn.extend({has:function(t){var e=S(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&S.find.matchesSelector(n,t))){r.push(n);break}return this.pushStack(r.length>1?S.uniqueSort(r):r)},index:function(t){return t?"string"==typeof t?u.call(S(t),this[0]):u.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),S.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return P(t,"parentNode")},parentsUntil:function(t,e,n){return P(t,"parentNode",n)},next:function(t){return V(t,"nextSibling")},prev:function(t){return V(t,"previousSibling")},nextAll:function(t){return P(t,"nextSibling")},prevAll:function(t){return P(t,"previousSibling")},nextUntil:function(t,e,n){return P(t,"nextSibling",n)},prevUntil:function(t,e,n){return P(t,"previousSibling",n)},siblings:function(t){return q((t.parentNode||{}).firstChild,t)},children:function(t){return q(t.firstChild)},contents:function(t){return null!=t.contentDocument&&s(t.contentDocument)?t.contentDocument:($(t,"template")&&(t=t.content||t),S.merge([],t.childNodes))}},(function(t,e){S.fn[t]=function(n,i){var o=S.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=S.filter(i,o)),this.length>1&&(z[t]||S.uniqueSort(o),_.test(t)&&o.reverse()),this.pushStack(o)}}));var Q=/[^\x20\t\r\n\f]+/g;function X(t){return t}function G(t){throw t}function Y(t,e,n,i){var o;try{t&&m(o=t.promise)?o.call(t).done(e).fail(n):t&&m(o=t.then)?o.call(t,e,n):e.apply(void 0,[t].slice(i))}catch(t){n.apply(void 0,[t])}}S.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return S.each(t.match(Q)||[],(function(t,n){e[n]=!0})),e}(t):S.extend({},t);var e,n,i,o,r=[],s=[],a=-1,l=function(){for(o=o||t.once,i=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)r.splice(n,1),n<=a&&a--})),this},has:function(t){return t?S.inArray(t,r)>-1:r.length>0},empty:function(){return r&&(r=[]),this},disable:function(){return o=s=[],r=n="",this},disabled:function(){return!r},lock:function(){return o=s=[],n||e||(r=n=""),this},locked:function(){return!!o},fireWith:function(t,n){return o||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!i}};return c},S.extend({Deferred:function(t){var e=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],n="pending",o={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},catch:function(t){return o.then(null,t)},pipe:function(){var t=arguments;return S.Deferred((function(n){S.each(e,(function(e,i){var o=m(t[i[4]])&&t[i[4]];r[i[1]]((function(){var t=o&&o.apply(this,arguments);t&&m(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,o){var r=0;function s(t,e,n,o){return function(){var a=this,l=arguments,c=function(){var i,c;if(!(t=r&&(n!==G&&(a=void 0,l=[i]),e.rejectWith(a,l))}};t?u():(S.Deferred.getErrorHook?u.error=S.Deferred.getErrorHook():S.Deferred.getStackHook&&(u.error=S.Deferred.getStackHook()),i.setTimeout(u))}}return S.Deferred((function(i){e[0][3].add(s(0,i,m(o)?o:X,i.notifyWith)),e[1][3].add(s(0,i,m(t)?t:X)),e[2][3].add(s(0,i,m(n)?n:G))})).promise()},promise:function(t){return null!=t?S.extend(t,o):o}},r={};return S.each(e,(function(t,i){var s=i[2],a=i[5];o[i[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(i[3].fire),r[i[0]]=function(){return r[i[0]+"With"](this===r?void 0:this,arguments),this},r[i[0]+"With"]=s.fireWith})),o.promise(r),t&&t.call(r,r),r},when:function(t){var e=arguments.length,n=e,i=Array(n),o=a.call(arguments),r=S.Deferred(),s=function(t){return function(n){i[t]=this,o[t]=arguments.length>1?a.call(arguments):n,--e||r.resolveWith(i,o)}};if(e<=1&&(Y(t,r.done(s(n)).resolve,r.reject,!e),"pending"===r.state()||m(o[n]&&o[n].then)))return r.then();for(;n--;)Y(o[n],s(n),r.reject);return r.promise()}});var J=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(t,e){i.console&&i.console.warn&&t&&J.test(t.name)&&i.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},S.readyException=function(t){i.setTimeout((function(){throw t}))};var K=S.Deferred();function Z(){b.removeEventListener("DOMContentLoaded",Z),i.removeEventListener("load",Z),S.ready()}S.fn.ready=function(t){return K.then(t).catch((function(t){S.readyException(t)})),this},S.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--S.readyWait:S.isReady)||(S.isReady=!0,!0!==t&&--S.readyWait>0||K.resolveWith(b,[S]))}}),S.ready.then=K.then,"complete"===b.readyState||"loading"!==b.readyState&&!b.documentElement.doScroll?i.setTimeout(S.ready):(b.addEventListener("DOMContentLoaded",Z),i.addEventListener("load",Z));var tt=function(t,e,n,i,o,r,s){var a=0,l=t.length,c=null==n;if("object"===T(n))for(a in o=!0,n)tt(t,e,a,n[a],!0,r,s);else if(void 0!==i&&(o=!0,m(i)||(s=!0),c&&(s?(e.call(t,i),e=null):(c=e,e=function(t,e,n){return c.call(S(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){lt.remove(this,t)}))}}),S.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=at.get(t,e),n&&(!i||Array.isArray(n)?i=at.access(t,e,S.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=S.queue(t,e),i=n.length,o=n.shift(),r=S._queueHooks(t,e);"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===e&&n.unshift("inprogress"),delete r.stop,o.call(t,(function(){S.dequeue(t,e)}),r)),!i&&r&&r.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return at.get(t,n)||at.access(t,n,{empty:S.Callbacks("once memory").add((function(){at.remove(t,[e+"queue",n])}))})}}),S.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]*)/i,$t=/^$|^module$|\/(?:java|ecma)script/i;Ct=b.createDocumentFragment().appendChild(b.createElement("div")),(Et=b.createElement("input")).setAttribute("type","radio"),Et.setAttribute("checked","checked"),Et.setAttribute("name","t"),Ct.appendChild(Et),v.checkClone=Ct.cloneNode(!0).cloneNode(!0).lastChild.checked,Ct.innerHTML="",v.noCloneChecked=!!Ct.cloneNode(!0).lastChild.defaultValue,Ct.innerHTML="",v.option=!!Ct.lastChild;var Dt={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function At(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&$(t,e)?S.merge([t],n):n}function Nt(t,e){for(var n=0,i=t.length;n",""]);var jt=/<|&#?\w+;/;function Ot(t,e,n,i,o){for(var r,s,a,l,c,u,p=e.createDocumentFragment(),d=[],f=0,h=t.length;f-1)o&&o.push(r);else if(c=vt(r),s=At(p.appendChild(r),"script"),c&&Nt(s),n)for(u=0;r=s[u++];)$t.test(r.type||"")&&n.push(r);return p}var It=/^([^.]*)(?:\.(.+)|)/;function Lt(){return!0}function Rt(){return!1}function Ht(t,e,n,i,o,r){var s,a;if("object"==typeof e){for(a in"string"!=typeof n&&(i=i||n,n=void 0),e)Ht(t,a,n,i,e[a],r);return t}if(null==i&&null==o?(o=n,i=n=void 0):null==o&&("string"==typeof n?(o=i,i=void 0):(o=i,i=n,n=void 0)),!1===o)o=Rt;else if(!o)return t;return 1===r&&(s=o,o=function(t){return S().off(t),s.apply(this,arguments)},o.guid=s.guid||(s.guid=S.guid++)),t.each((function(){S.event.add(this,e,o,i,n)}))}function Pt(t,e,n){n?(at.set(t,e,!1),S.event.add(t,e,{namespace:!1,handler:function(t){var n,i=at.get(this,e);if(1&t.isTrigger&&this[e]){if(i)(S.event.special[e]||{}).delegateType&&t.stopPropagation();else if(i=a.call(arguments),at.set(this,e,i),this[e](),n=at.get(this,e),at.set(this,e,!1),i!==n)return t.stopImmediatePropagation(),t.preventDefault(),n}else i&&(at.set(this,e,S.event.trigger(i[0],i.slice(1),this)),t.stopPropagation(),t.isImmediatePropagationStopped=Lt)}})):void 0===at.get(t,e)&&S.event.add(t,e,Lt)}S.event={global:{},add:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=at.get(t);if(rt(t))for(n.handler&&(n=(r=n).handler,o=r.selector),o&&S.find.matchesSelector(gt,o),n.guid||(n.guid=S.guid++),(l=v.events)||(l=v.events=Object.create(null)),(s=v.handle)||(s=v.handle=function(e){return void 0!==S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),c=(e=(e||"").match(Q)||[""]).length;c--;)f=g=(a=It.exec(e[c])||[])[1],h=(a[2]||"").split(".").sort(),f&&(p=S.event.special[f]||{},f=(o?p.delegateType:p.bindType)||f,p=S.event.special[f]||{},u=S.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&S.expr.match.needsContext.test(o),namespace:h.join(".")},r),(d=l[f])||((d=l[f]=[]).delegateCount=0,p.setup&&!1!==p.setup.call(t,i,h,s)||t.addEventListener&&t.addEventListener(f,s)),p.add&&(p.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),o?d.splice(d.delegateCount++,0,u):d.push(u),S.event.global[f]=!0)},remove:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=at.hasData(t)&&at.get(t);if(v&&(l=v.events)){for(c=(e=(e||"").match(Q)||[""]).length;c--;)if(f=g=(a=It.exec(e[c])||[])[1],h=(a[2]||"").split(".").sort(),f){for(p=S.event.special[f]||{},d=l[f=(i?p.delegateType:p.bindType)||f]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=r=d.length;r--;)u=d[r],!o&&g!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(r,1),u.selector&&d.delegateCount--,p.remove&&p.remove.call(t,u));s&&!d.length&&(p.teardown&&!1!==p.teardown.call(t,h,v.handle)||S.removeEvent(t,f,v.handle),delete l[f])}else for(f in l)S.event.remove(t,f+e[c],n,i,!0);S.isEmptyObject(l)&&at.remove(t,"handle events")}},dispatch:function(t){var e,n,i,o,r,s,a=new Array(arguments.length),l=S.event.fix(t),c=(at.get(this,"events")||Object.create(null))[l.type]||[],u=S.event.special[l.type]||{};for(a[0]=l,e=1;e=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||!0!==c.disabled)){for(r=[],s={},n=0;n-1:S.find(o,this,null,[c]).length),s[o]&&r.push(i);r.length&&a.push({elem:c,handlers:r})}return c=this,l\s*$/g;function Wt(t,e){return $(t,"table")&&$(11!==e.nodeType?e:e.firstChild,"tr")&&S(t).children("tbody")[0]||t}function Ut(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Bt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function _t(t,e){var n,i,o,r,s,a;if(1===e.nodeType){if(at.hasData(t)&&(a=at.get(t).events))for(o in at.remove(e,"handle events"),a)for(n=0,i=a[o].length;n1&&"string"==typeof h&&!v.checkClone&&Mt.test(h))return t.each((function(o){var r=t.eq(o);g&&(e[0]=h.call(this,o,r.html())),Vt(r,e,n,i)}));if(d&&(r=(o=Ot(e,t[0].ownerDocument,!1,t,i)).firstChild,1===o.childNodes.length&&(o=r),r||i)){for(a=(s=S.map(At(o,"script"),Ut)).length;p0&&Nt(s,!l&&At(t,"script")),a},cleanData:function(t){for(var e,n,i,o=S.event.special,r=0;void 0!==(n=t[r]);r++)if(rt(n)){if(e=n[at.expando]){if(e.events)for(i in e.events)o[i]?S.event.remove(n,i):S.removeEvent(n,i,e.handle);n[at.expando]=void 0}n[lt.expando]&&(n[lt.expando]=void 0)}}}),S.fn.extend({detach:function(t){return Qt(this,t,!0)},remove:function(t){return Qt(this,t)},text:function(t){return tt(this,(function(t){return void 0===t?S.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Vt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Wt(this,t).appendChild(t)}))},prepend:function(){return Vt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Wt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Vt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Vt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(S.cleanData(At(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return S.clone(this,t,e)}))},html:function(t){return tt(this,(function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!qt.test(t)&&!Dt[(kt.exec(t)||["",""])[1].toLowerCase()]){t=S.htmlPrefilter(t);try{for(;n=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-r-l-a-.5))||0),l+c}function ue(t,e,n){var i=Yt(t),o=(!v.boxSizingReliable()||n)&&"border-box"===S.css(t,"boxSizing",!1,i),r=o,s=Zt(t,e,i),a="offset"+e[0].toUpperCase()+e.slice(1);if(Xt.test(s)){if(!n)return s;s="auto"}return(!v.boxSizingReliable()&&o||!v.reliableTrDimensions()&&$(t,"tr")||"auto"===s||!parseFloat(s)&&"inline"===S.css(t,"display",!1,i))&&t.getClientRects().length&&(o="border-box"===S.css(t,"boxSizing",!1,i),(r=a in t)&&(s=t[a])),(s=parseFloat(s)||0)+ce(t,e,n||(o?"border":"content"),r,i,s)+"px"}function pe(t,e,n,i,o){return new pe.prototype.init(t,e,n,i,o)}S.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Zt(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,r,s,a=ot(e),l=Gt.test(e),c=t.style;if(l||(e=oe(a)),s=S.cssHooks[e]||S.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:c[e];"string"===(r=typeof n)&&(o=ft.exec(n))&&o[1]&&(n=bt(t,e,o),r="number"),null!=n&&n==n&&("number"!==r||l||(n+=o&&o[3]||(S.cssNumber[a]?"":"px")),v.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l?c.setProperty(e,n):c[e]=n))}},css:function(t,e,n,i){var o,r,s,a=ot(e);return Gt.test(e)||(e=oe(a)),(s=S.cssHooks[e]||S.cssHooks[a])&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=Zt(t,e,i)),"normal"===o&&e in ae&&(o=ae[e]),""===n||n?(r=parseFloat(o),!0===n||isFinite(r)?r||0:o):o}}),S.each(["height","width"],(function(t,e){S.cssHooks[e]={get:function(t,n,i){if(n)return!re.test(S.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?ue(t,e,i):Jt(t,se,(function(){return ue(t,e,i)}))},set:function(t,n,i){var o,r=Yt(t),s=!v.scrollboxSize()&&"absolute"===r.position,a=(s||i)&&"border-box"===S.css(t,"boxSizing",!1,r),l=i?ce(t,e,i,a,r):0;return a&&s&&(l-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(r[e])-ce(t,e,"border",!1,r)-.5)),l&&(o=ft.exec(n))&&"px"!==(o[3]||"px")&&(t.style[e]=n,n=S.css(t,e)),le(0,n,l)}}})),S.cssHooks.marginLeft=te(v.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Zt(t,"marginLeft"))||t.getBoundingClientRect().left-Jt(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),S.each({margin:"",padding:"",border:"Width"},(function(t,e){S.cssHooks[t+e]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];i<4;i++)o[t+ht[i]+e]=r[i]||r[i-2]||r[0];return o}},"margin"!==t&&(S.cssHooks[t+e].set=le)})),S.fn.extend({css:function(t,e){return tt(this,(function(t,e,n){var i,o,r={},s=0;if(Array.isArray(e)){for(i=Yt(t),o=e.length;s1)}}),S.Tween=pe,pe.prototype={constructor:pe,init:function(t,e,n,i,o,r){this.elem=t,this.prop=n,this.easing=o||S.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(S.cssNumber[n]?"":"px")},cur:function(){var t=pe.propHooks[this.prop];return t&&t.get?t.get(this):pe.propHooks._default.get(this)},run:function(t){var e,n=pe.propHooks[this.prop];return this.options.duration?this.pos=e=S.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):pe.propHooks._default.set(this),this}},pe.prototype.init.prototype=pe.prototype,pe.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=S.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){S.fx.step[t.prop]?S.fx.step[t.prop](t):1!==t.elem.nodeType||!S.cssHooks[t.prop]&&null==t.elem.style[oe(t.prop)]?t.elem[t.prop]=t.now:S.style(t.elem,t.prop,t.now+t.unit)}}},pe.propHooks.scrollTop=pe.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},S.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},S.fx=pe.prototype.init,S.fx.step={};var de,fe,he=/^(?:toggle|show|hide)$/,ge=/queueHooks$/;function ve(){fe&&(!1===b.hidden&&i.requestAnimationFrame?i.requestAnimationFrame(ve):i.setTimeout(ve,S.fx.interval),S.fx.tick())}function me(){return i.setTimeout((function(){de=void 0})),de=Date.now()}function ye(t,e){var n,i=0,o={height:t};for(e=e?1:0;i<4;i+=2-e)o["margin"+(n=ht[i])]=o["padding"+n]=t;return e&&(o.opacity=o.width=t),o}function be(t,e,n){for(var i,o=(xe.tweeners[e]||[]).concat(xe.tweeners["*"]),r=0,s=o.length;r1)},removeAttr:function(t){return this.each((function(){S.removeAttr(this,t)}))}}),S.extend({attr:function(t,e,n){var i,o,r=t.nodeType;if(3!==r&&8!==r&&2!==r)return void 0===t.getAttribute?S.prop(t,e,n):(1===r&&S.isXMLDoc(t)||(o=S.attrHooks[e.toLowerCase()]||(S.expr.match.bool.test(e)?we:void 0)),void 0!==n?null===n?void S.removeAttr(t,e):o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(i=o.get(t,e))?i:null==(i=S.find.attr(t,e))?void 0:i)},attrHooks:{type:{set:function(t,e){if(!v.radioValue&&"radio"===e&&$(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i=0,o=e&&e.match(Q);if(o&&1===t.nodeType)for(;n=o[i++];)t.removeAttribute(n)}}),we={set:function(t,e,n){return!1===e?S.removeAttr(t,n):t.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=Te[e]||S.find.attr;Te[e]=function(t,e,i){var o,r,s=e.toLowerCase();return i||(r=Te[s],Te[s]=o,o=null!=n(t,e,i)?s:null,Te[s]=r),o}}));var Ce=/^(?:input|select|textarea|button)$/i,Ee=/^(?:a|area)$/i;function Se(t){return(t.match(Q)||[]).join(" ")}function ke(t){return t.getAttribute&&t.getAttribute("class")||""}function $e(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(Q)||[]}S.fn.extend({prop:function(t,e){return tt(this,S.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[S.propFix[t]||t]}))}}),S.extend({prop:function(t,e,n){var i,o,r=t.nodeType;if(3!==r&&8!==r&&2!==r)return 1===r&&S.isXMLDoc(t)||(e=S.propFix[e]||e,o=S.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=S.find.attr(t,"tabindex");return e?parseInt(e,10):Ce.test(t.nodeName)||Ee.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(S.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){S.propFix[this.toLowerCase()]=this})),S.fn.extend({addClass:function(t){var e,n,i,o,r,s;return m(t)?this.each((function(e){S(this).addClass(t.call(this,e,ke(this)))})):(e=$e(t)).length?this.each((function(){if(i=ke(this),n=1===this.nodeType&&" "+Se(i)+" "){for(r=0;r-1;)n=n.replace(" "+o+" "," ");s=Se(n),i!==s&&this.setAttribute("class",s)}})):this:this.attr("class","")},toggleClass:function(t,e){var n,i,o,r,s=typeof t,a="string"===s||Array.isArray(t);return m(t)?this.each((function(n){S(this).toggleClass(t.call(this,n,ke(this),e),e)})):"boolean"==typeof e&&a?e?this.addClass(t):this.removeClass(t):(n=$e(t),this.each((function(){if(a)for(r=S(this),o=0;o-1)return!0;return!1}});var De=/\r/g;S.fn.extend({val:function(t){var e,n,i,o=this[0];return arguments.length?(i=m(t),this.each((function(n){var o;1===this.nodeType&&(null==(o=i?t.call(this,n,S(this).val()):t)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=S.map(o,(function(t){return null==t?"":t+""}))),(e=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))}))):o?(e=S.valHooks[o.type]||S.valHooks[o.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(De,""):null==n?"":n:void 0}}),S.extend({valHooks:{option:{get:function(t){var e=S.find.attr(t,"value");return null!=e?e:Se(S.text(t))}},select:{get:function(t){var e,n,i,o=t.options,r=t.selectedIndex,s="select-one"===t.type,a=s?null:[],l=s?r+1:o.length;for(i=r<0?l:s?r:0;i-1)&&(n=!0);return n||(t.selectedIndex=-1),r}}}}),S.each(["radio","checkbox"],(function(){S.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=S.inArray(S(t).val(),e)>-1}},v.checkOn||(S.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}));var Ae=i.location,Ne={guid:Date.now()},je=/\?/;S.parseXML=function(t){var e,n;if(!t||"string"!=typeof t)return null;try{e=(new i.DOMParser).parseFromString(t,"text/xml")}catch(t){}return n=e&&e.getElementsByTagName("parsererror")[0],e&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,(function(t){return t.textContent})).join("\n"):t)),e};var Oe=/^(?:focusinfocus|focusoutblur)$/,Ie=function(t){t.stopPropagation()};S.extend(S.event,{trigger:function(t,e,n,o){var r,s,a,l,c,u,p,d,h=[n||b],g=f.call(t,"type")?t.type:t,v=f.call(t,"namespace")?t.namespace.split("."):[];if(s=d=a=n=n||b,3!==n.nodeType&&8!==n.nodeType&&!Oe.test(g+S.event.triggered)&&(g.indexOf(".")>-1&&(v=g.split("."),g=v.shift(),v.sort()),c=g.indexOf(":")<0&&"on"+g,(t=t[S.expando]?t:new S.Event(g,"object"==typeof t&&t)).isTrigger=o?2:3,t.namespace=v.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:S.makeArray(e,[t]),p=S.event.special[g]||{},o||!p.trigger||!1!==p.trigger.apply(n,e))){if(!o&&!p.noBubble&&!y(n)){for(l=p.delegateType||g,Oe.test(l+g)||(s=s.parentNode);s;s=s.parentNode)h.push(s),a=s;a===(n.ownerDocument||b)&&h.push(a.defaultView||a.parentWindow||i)}for(r=0;(s=h[r++])&&!t.isPropagationStopped();)d=s,t.type=r>1?l:p.bindType||g,(u=(at.get(s,"events")||Object.create(null))[t.type]&&at.get(s,"handle"))&&u.apply(s,e),(u=c&&s[c])&&u.apply&&rt(s)&&(t.result=u.apply(s,e),!1===t.result&&t.preventDefault());return t.type=g,o||t.isDefaultPrevented()||p._default&&!1!==p._default.apply(h.pop(),e)||!rt(n)||c&&m(n[g])&&!y(n)&&((a=n[c])&&(n[c]=null),S.event.triggered=g,t.isPropagationStopped()&&d.addEventListener(g,Ie),n[g](),t.isPropagationStopped()&&d.removeEventListener(g,Ie),S.event.triggered=void 0,a&&(n[c]=a)),t.result}},simulate:function(t,e,n){var i=S.extend(new S.Event,n,{type:t,isSimulated:!0});S.event.trigger(i,null,e)}}),S.fn.extend({trigger:function(t,e){return this.each((function(){S.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return S.event.trigger(t,e,n,!0)}});var Le=/\[\]$/,Re=/\r?\n/g,He=/^(?:submit|button|image|reset|file)$/i,Pe=/^(?:input|select|textarea|keygen)/i;function qe(t,e,n,i){var o;if(Array.isArray(e))S.each(e,(function(e,o){n||Le.test(t)?i(t,o):qe(t+"["+("object"==typeof o&&null!=o?e:"")+"]",o,n,i)}));else if(n||"object"!==T(e))i(t,e);else for(o in e)qe(t+"["+o+"]",e[o],n,i)}S.param=function(t,e){var n,i=[],o=function(t,e){var n=m(e)?e():e;i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!S.isPlainObject(t))S.each(t,(function(){o(this.name,this.value)}));else for(n in t)qe(n,t[n],e,o);return i.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=S.prop(this,"elements");return t?S.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!S(this).is(":disabled")&&Pe.test(this.nodeName)&&!He.test(t)&&(this.checked||!St.test(t))})).map((function(t,e){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,(function(t){return{name:e.name,value:t.replace(Re,"\r\n")}})):{name:e.name,value:n.replace(Re,"\r\n")}})).get()}});var Me=/%20/g,Fe=/#.*$/,We=/([?&])_=[^&]*/,Ue=/^(.*?):[ \t]*([^\r\n]*)$/gm,Be=/^(?:GET|HEAD)$/,_e=/^\/\//,ze={},Ve={},Qe="*/".concat("*"),Xe=b.createElement("a");function Ge(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,o=0,r=e.toLowerCase().match(Q)||[];if(m(n))for(;i=r[o++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function Ye(t,e,n,i){var o={},r=t===Ve;function s(a){var l;return o[a]=!0,S.each(t[a]||[],(function(t,a){var c=a(e,n,i);return"string"!=typeof c||r||o[c]?r?!(l=c):void 0:(e.dataTypes.unshift(c),s(c),!1)})),l}return s(e.dataTypes[0])||!o["*"]&&s("*")}function Je(t,e){var n,i,o=S.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((o[n]?t:i||(i={}))[n]=e[n]);return i&&S.extend(!0,t,i),t}Xe.href=Ae.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ae.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ae.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Je(Je(t,S.ajaxSettings),e):Je(S.ajaxSettings,t)},ajaxPrefilter:Ge(ze),ajaxTransport:Ge(Ve),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,o,r,s,a,l,c,u,p,d,f=S.ajaxSetup({},e),h=f.context||f,g=f.context&&(h.nodeType||h.jquery)?S(h):S.event,v=S.Deferred(),m=S.Callbacks("once memory"),y=f.statusCode||{},x={},w={},T="canceled",C={readyState:0,getResponseHeader:function(t){var e;if(c){if(!s)for(s={};e=Ue.exec(r);)s[e[1].toLowerCase()+" "]=(s[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=s[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return c?r:null},setRequestHeader:function(t,e){return null==c&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,x[t]=e),this},overrideMimeType:function(t){return null==c&&(f.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)C.always(t[C.status]);else for(e in t)y[e]=[y[e],t[e]];return this},abort:function(t){var e=t||T;return n&&n.abort(e),E(0,e),this}};if(v.promise(C),f.url=((t||f.url||Ae.href)+"").replace(_e,Ae.protocol+"//"),f.type=e.method||e.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(Q)||[""],null==f.crossDomain){l=b.createElement("a");try{l.href=f.url,l.href=l.href,f.crossDomain=Xe.protocol+"//"+Xe.host!=l.protocol+"//"+l.host}catch(t){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=S.param(f.data,f.traditional)),Ye(ze,f,e,C),c)return C;for(p in(u=S.event&&f.global)&&0==S.active++&&S.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Be.test(f.type),o=f.url.replace(Fe,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(Me,"+")):(d=f.url.slice(o.length),f.data&&(f.processData||"string"==typeof f.data)&&(o+=(je.test(o)?"&":"?")+f.data,delete f.data),!1===f.cache&&(o=o.replace(We,"$1"),d=(je.test(o)?"&":"?")+"_="+Ne.guid+++d),f.url=o+d),f.ifModified&&(S.lastModified[o]&&C.setRequestHeader("If-Modified-Since",S.lastModified[o]),S.etag[o]&&C.setRequestHeader("If-None-Match",S.etag[o])),(f.data&&f.hasContent&&!1!==f.contentType||e.contentType)&&C.setRequestHeader("Content-Type",f.contentType),C.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Qe+"; q=0.01":""):f.accepts["*"]),f.headers)C.setRequestHeader(p,f.headers[p]);if(f.beforeSend&&(!1===f.beforeSend.call(h,C,f)||c))return C.abort();if(T="abort",m.add(f.complete),C.done(f.success),C.fail(f.error),n=Ye(Ve,f,e,C)){if(C.readyState=1,u&&g.trigger("ajaxSend",[C,f]),c)return C;f.async&&f.timeout>0&&(a=i.setTimeout((function(){C.abort("timeout")}),f.timeout));try{c=!1,n.send(x,E)}catch(t){if(c)throw t;E(-1,t)}}else E(-1,"No Transport");function E(t,e,s,l){var p,d,b,x,w,T=e;c||(c=!0,a&&i.clearTimeout(a),n=void 0,r=l||"",C.readyState=t>0?4:0,p=t>=200&&t<300||304===t,s&&(x=function(t,e,n){for(var i,o,r,s,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=t.mimeType||e.getResponseHeader("Content-Type"));if(i)for(o in a)if(a[o]&&a[o].test(i)){l.unshift(o);break}if(l[0]in n)r=l[0];else{for(o in n){if(!l[0]||t.converters[o+" "+l[0]]){r=o;break}s||(s=o)}r=r||s}if(r)return r!==l[0]&&l.unshift(r),n[r]}(f,C,s)),!p&&S.inArray("script",f.dataTypes)>-1&&S.inArray("json",f.dataTypes)<0&&(f.converters["text script"]=function(){}),x=function(t,e,n,i){var o,r,s,a,l,c={},u=t.dataTypes.slice();if(u[1])for(s in t.converters)c[s.toLowerCase()]=t.converters[s];for(r=u.shift();r;)if(t.responseFields[r]&&(n[t.responseFields[r]]=e),!l&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=r,r=u.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(!(s=c[l+" "+r]||c["* "+r]))for(o in c)if((a=o.split(" "))[1]===r&&(s=c[l+" "+a[0]]||c["* "+a[0]])){!0===s?s=c[o]:!0!==c[o]&&(r=a[0],u.unshift(a[1]));break}if(!0!==s)if(s&&t.throws)e=s(e);else try{e=s(e)}catch(t){return{state:"parsererror",error:s?t:"No conversion from "+l+" to "+r}}}return{state:"success",data:e}}(f,x,C,p),p?(f.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(S.lastModified[o]=w),(w=C.getResponseHeader("etag"))&&(S.etag[o]=w)),204===t||"HEAD"===f.type?T="nocontent":304===t?T="notmodified":(T=x.state,d=x.data,p=!(b=x.error))):(b=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(e||T)+"",p?v.resolveWith(h,[d,T,C]):v.rejectWith(h,[C,T,b]),C.statusCode(y),y=void 0,u&&g.trigger(p?"ajaxSuccess":"ajaxError",[C,f,p?d:b]),m.fireWith(h,[C,T]),u&&(g.trigger("ajaxComplete",[C,f]),--S.active||S.event.trigger("ajaxStop")))}return C},getJSON:function(t,e,n){return S.get(t,e,n,"json")},getScript:function(t,e){return S.get(t,void 0,e,"script")}}),S.each(["get","post"],(function(t,e){S[e]=function(t,n,i,o){return m(n)&&(o=o||i,i=n,n=void 0),S.ajax(S.extend({url:t,type:e,dataType:o,data:n,success:i},S.isPlainObject(t)&&t))}})),S.ajaxPrefilter((function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")})),S._evalUrl=function(t,e,n){return S.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){S.globalEval(t,e,n)}})},S.fn.extend({wrapAll:function(t){var e;return this[0]&&(m(t)&&(t=t.call(this[0])),e=S(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return m(t)?this.each((function(e){S(this).wrapInner(t.call(this,e))})):this.each((function(){var e=S(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=m(t);return this.each((function(n){S(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){S(this).replaceWith(this.childNodes)})),this}}),S.expr.pseudos.hidden=function(t){return!S.expr.pseudos.visible(t)},S.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new i.XMLHttpRequest}catch(t){}};var Ke={0:200,1223:204},Ze=S.ajaxSettings.xhr();v.cors=!!Ze&&"withCredentials"in Ze,v.ajax=Ze=!!Ze,S.ajaxTransport((function(t){var e,n;if(v.cors||Ze&&!t.crossDomain)return{send:function(o,r){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)a.setRequestHeader(s,o[s]);e=function(t){return function(){e&&(e=n=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?r(0,"error"):r(a.status,a.statusText):r(Ke[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),n=a.onerror=a.ontimeout=e("error"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&i.setTimeout((function(){e&&n()}))},e=e("abort");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),S.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return S.globalEval(t),t}}}),S.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),S.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(i,o){e=S(" diff --git a/resources/assets/js/locales/bg.json b/resources/assets/js/locales/bg.json index 94334c32f0..08085ba319 100644 --- a/resources/assets/js/locales/bg.json +++ b/resources/assets/js/locales/bg.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?", "flash_error": "\u0413\u0440\u0435\u0448\u043a\u0430!", + "flash_warning": "\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!", "flash_success": "\u0423\u0441\u043f\u0435\u0445!", "close": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438", "split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f", @@ -29,6 +30,7 @@ "submit": "\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438", "amount": "\u0421\u0443\u043c\u0430", "date": "\u0414\u0430\u0442\u0430", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0415\u0442\u0438\u043a\u0435\u0442\u0438", "no_budget": "(\u0431\u0435\u0437 \u0431\u044e\u0434\u0436\u0435\u0442)", "no_bill": "(\u043d\u044f\u043c\u0430 \u0441\u043c\u0435\u0442\u043a\u0430)", diff --git a/resources/assets/js/locales/ca.json b/resources/assets/js/locales/ca.json index 591aaebc3e..eaeb805317 100644 --- a/resources/assets/js/locales/ca.json +++ b/resources/assets/js/locales/ca.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Qu\u00e8 est\u00e0 passant?", "flash_error": "Error!", + "flash_warning": "Atenci\u00f3!", "flash_success": "\u00c8xit!", "close": "Tancar", "split_transaction_title": "Descripci\u00f3 de la transacci\u00f3 dividida", @@ -29,6 +30,7 @@ "submit": "Enviar", "amount": "Import", "date": "Data", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiquetes", "no_budget": "(cap pressupost)", "no_bill": "(cap factura)", diff --git a/resources/assets/js/locales/cs.json b/resources/assets/js/locales/cs.json index 34318eb0e9..57f9de9193 100644 --- a/resources/assets/js/locales/cs.json +++ b/resources/assets/js/locales/cs.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Jak to jde?", "flash_error": "Chyba!", + "flash_warning": "Varov\u00e1n\u00ed!", "flash_success": "\u00dasp\u011b\u0161n\u011b dokon\u010deno!", "close": "Zav\u0159\u00edt", "split_transaction_title": "Popis roz\u00fa\u010dtov\u00e1n\u00ed", @@ -29,6 +30,7 @@ "submit": "Odeslat", "amount": "\u010c\u00e1stka", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0160t\u00edtky", "no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/da.json b/resources/assets/js/locales/da.json index 8bf5c6c9e5..9ca55bed51 100644 --- a/resources/assets/js/locales/da.json +++ b/resources/assets/js/locales/da.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Hvad spiller?", "flash_error": "Fejl!", + "flash_warning": "Advarsel!", "flash_success": "Succes!", "close": "Luk", "split_transaction_title": "Description of the split transaction", @@ -29,6 +30,7 @@ "submit": "Submit", "amount": "Bel\u00f8b", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiketter", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/de.json b/resources/assets/js/locales/de.json index f8291b4f96..ac43982452 100644 --- a/resources/assets/js/locales/de.json +++ b/resources/assets/js/locales/de.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u00dcberblick", "flash_error": "Fehler!", + "flash_warning": "Achtung!", "flash_success": "Geschafft!", "close": "Schlie\u00dfen", "split_transaction_title": "Beschreibung der Splittbuchung", @@ -29,6 +30,7 @@ "submit": "Absenden", "amount": "Betrag", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Schlagw\u00f6rter", "no_budget": "(kein Budget)", "no_bill": "(keine Belege)", diff --git a/resources/assets/js/locales/el.json b/resources/assets/js/locales/el.json index 264ad77515..1350d2eba3 100644 --- a/resources/assets/js/locales/el.json +++ b/resources/assets/js/locales/el.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;", "flash_error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1!", + "flash_warning": "\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae!", "flash_success": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1!", "close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf", "split_transaction_title": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc", @@ -29,6 +30,7 @@ "submit": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae", "amount": "\u03a0\u03bf\u03c3\u03cc", "date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2", "no_budget": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc)", "no_bill": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf)", diff --git a/resources/assets/js/locales/en-gb.json b/resources/assets/js/locales/en-gb.json index 18715fdb72..bc6f5caedf 100644 --- a/resources/assets/js/locales/en-gb.json +++ b/resources/assets/js/locales/en-gb.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "What's playing?", "flash_error": "Error!", + "flash_warning": "Warning!", "flash_success": "Success!", "close": "Close", "split_transaction_title": "Description of the split transaction", @@ -29,6 +30,7 @@ "submit": "Submit", "amount": "Amount", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/en.json b/resources/assets/js/locales/en.json index e83579aac1..98ebeb1962 100644 --- a/resources/assets/js/locales/en.json +++ b/resources/assets/js/locales/en.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "What's playing?", "flash_error": "Error!", + "flash_warning": "Warning!", "flash_success": "Success!", "close": "Close", "split_transaction_title": "Description of the split transaction", @@ -29,6 +30,7 @@ "submit": "Submit", "amount": "Amount", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/es.json b/resources/assets/js/locales/es.json index b9b357e222..b2681bd7a8 100644 --- a/resources/assets/js/locales/es.json +++ b/resources/assets/js/locales/es.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?", "flash_error": "\u00a1Error!", + "flash_warning": "\u00a1Atenci\u00f3n!", "flash_success": "\u00a1Operaci\u00f3n correcta!", "close": "Cerrar", "split_transaction_title": "Descripci\u00f3n de la transacci\u00f3n dividida", @@ -29,6 +30,7 @@ "submit": "Enviar", "amount": "Cantidad", "date": "Fecha", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiquetas", "no_budget": "(sin presupuesto)", "no_bill": "(sin factura)", diff --git a/resources/assets/js/locales/fi.json b/resources/assets/js/locales/fi.json index 46c49fb710..45a59402e4 100644 --- a/resources/assets/js/locales/fi.json +++ b/resources/assets/js/locales/fi.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Mit\u00e4 kuuluu?", "flash_error": "Virhe!", + "flash_warning": "Varoitus!", "flash_success": "Valmista tuli!", "close": "Sulje", "split_transaction_title": "Jaetun tapahtuman kuvaus", @@ -29,6 +30,7 @@ "submit": "Vahvista", "amount": "Summa", "date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "T\u00e4git", "no_budget": "(ei budjettia)", "no_bill": "(ei laskua)", diff --git a/resources/assets/js/locales/fr.json b/resources/assets/js/locales/fr.json index bbf3b664f9..c56c6dab30 100644 --- a/resources/assets/js/locales/fr.json +++ b/resources/assets/js/locales/fr.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Quoi de neuf ?", "flash_error": "Erreur !", + "flash_warning": "Attention !", "flash_success": "Super !", "close": "Fermer", "split_transaction_title": "Description de l'op\u00e9ration ventil\u00e9e", @@ -29,6 +30,7 @@ "submit": "Soumettre", "amount": "Montant", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(pas de budget)", "no_bill": "(aucune facture)", diff --git a/resources/assets/js/locales/hu.json b/resources/assets/js/locales/hu.json index d17346601e..4b3b7f7d84 100644 --- a/resources/assets/js/locales/hu.json +++ b/resources/assets/js/locales/hu.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Mi a helyzet?", "flash_error": "Hiba!", + "flash_warning": "Figyelmeztet\u00e9s!", "flash_success": "Siker!", "close": "Bez\u00e1r\u00e1s", "split_transaction_title": "Felosztott tranzakci\u00f3 le\u00edr\u00e1sa", @@ -29,6 +30,7 @@ "submit": "Bek\u00fcld\u00e9s", "amount": "\u00d6sszeg", "date": "D\u00e1tum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "C\u00edmk\u00e9k", "no_budget": "(nincs k\u00f6lts\u00e9gkeret)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/id.json b/resources/assets/js/locales/id.json index 52625bdb16..ed7918c37f 100644 --- a/resources/assets/js/locales/id.json +++ b/resources/assets/js/locales/id.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Apa yang sedang dimainkan?", "flash_error": "Kesalahan!", + "flash_warning": "PERINGATAN!", "flash_success": "Keberhasilan!", "close": "Dekat", "split_transaction_title": "Description of the split transaction", @@ -29,6 +30,7 @@ "submit": "Menyerahkan", "amount": "Jumlah", "date": "Tanggal", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tag", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/it.json b/resources/assets/js/locales/it.json index 04a278f409..4f971769f2 100644 --- a/resources/assets/js/locales/it.json +++ b/resources/assets/js/locales/it.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "La tua situazione finanziaria", "flash_error": "Errore!", + "flash_warning": "Avviso!", "flash_success": "Successo!", "close": "Chiudi", "split_transaction_title": "Descrizione della transazione suddivisa", @@ -29,6 +30,7 @@ "submit": "Invia", "amount": "Importo", "date": "Data", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etichette", "no_budget": "(nessun budget)", "no_bill": "(nessuna bolletta)", diff --git a/resources/assets/js/locales/ja.json b/resources/assets/js/locales/ja.json index 0457e06a55..b7fc363476 100644 --- a/resources/assets/js/locales/ja.json +++ b/resources/assets/js/locales/ja.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u6982\u8981", "flash_error": "\u30a8\u30e9\u30fc\uff01", + "flash_warning": "\u8b66\u544a\uff01", "flash_success": "\u6210\u529f\u3057\u307e\u3057\u305f\uff01", "close": "\u9589\u3058\u308b", "split_transaction_title": "\u5206\u5272\u53d6\u5f15\u306e\u6982\u8981", @@ -29,6 +30,7 @@ "submit": "\u9001\u4fe1", "amount": "\u91d1\u984d", "date": "\u65e5\u4ed8", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u30bf\u30b0", "no_budget": "(\u4e88\u7b97\u306a\u3057)", "no_bill": "(\u8acb\u6c42\u306a\u3057)", diff --git a/resources/assets/js/locales/ko.json b/resources/assets/js/locales/ko.json index 8e4c7f1c6a..af5b096555 100644 --- a/resources/assets/js/locales/ko.json +++ b/resources/assets/js/locales/ko.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\ubb34\uc2a8 \uc77c\uc774\uc8e0?", "flash_error": "\uc624\ub958!", + "flash_warning": "\uacbd\uace0!", "flash_success": "\uc131\uacf5!", "close": "\ub2eb\uae30", "split_transaction_title": "\ubd84\ud560 \uac70\ub798\uc5d0 \ub300\ud55c \uc124\uba85", @@ -29,6 +30,7 @@ "submit": "\uc81c\ucd9c", "amount": "\uae08\uc561", "date": "\ub0a0\uc9dc", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\ud0dc\uadf8", "no_budget": "(\uc608\uc0b0 \uc5c6\uc74c)", "no_bill": "(\uccad\uad6c\uc11c \uc5c6\uc74c)", diff --git a/resources/assets/js/locales/nb.json b/resources/assets/js/locales/nb.json index 038d7d9172..e4541934c1 100644 --- a/resources/assets/js/locales/nb.json +++ b/resources/assets/js/locales/nb.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Hvordan g\u00e5r det?", "flash_error": "Feil!", + "flash_warning": "Advarsel!", "flash_success": "Suksess!", "close": "Lukk", "split_transaction_title": "Beskrivelse av den splittende transaksjon", @@ -29,6 +30,7 @@ "submit": "Send inn", "amount": "Bel\u00f8p", "date": "Dato", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tagger", "no_budget": "(ingen budsjett)", "no_bill": "(ingen regning)", diff --git a/resources/assets/js/locales/nl.json b/resources/assets/js/locales/nl.json index f4b1927816..048f83851f 100644 --- a/resources/assets/js/locales/nl.json +++ b/resources/assets/js/locales/nl.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Hoe staat het er voor?", "flash_error": "Fout!", + "flash_warning": "Waarschuwing!", "flash_success": "Gelukt!", "close": "Sluiten", "split_transaction_title": "Beschrijving van de gesplitste transactie", @@ -29,6 +30,7 @@ "submit": "Invoeren", "amount": "Bedrag", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(geen budget)", "no_bill": "(geen contract)", diff --git a/resources/assets/js/locales/nn.json b/resources/assets/js/locales/nn.json index f22e55dd0b..309046d3ae 100644 --- a/resources/assets/js/locales/nn.json +++ b/resources/assets/js/locales/nn.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Korleis g\u00e5r det?", "flash_error": "Feil!", + "flash_warning": "Advarsel!", "flash_success": "Suksess!", "close": "Lukk", "split_transaction_title": "Beskrivinga av den splitta transaksjonen", @@ -29,6 +30,7 @@ "submit": "Send inn", "amount": "Bel\u00f8p", "date": "Dato", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "N\u00f8kkelord", "no_budget": "(ingen budsjett)", "no_bill": "(ingen rekning)", diff --git a/resources/assets/js/locales/pl.json b/resources/assets/js/locales/pl.json index 34b7177077..2cf30f3bb9 100644 --- a/resources/assets/js/locales/pl.json +++ b/resources/assets/js/locales/pl.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Co jest grane?", "flash_error": "B\u0142\u0105d!", + "flash_warning": "Ostrze\u017cenie!", "flash_success": "Sukces!", "close": "Zamknij", "split_transaction_title": "Opis podzielonej transakcji", @@ -29,6 +30,7 @@ "submit": "Prze\u015blij", "amount": "Kwota", "date": "Data", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tagi", "no_budget": "(brak bud\u017cetu)", "no_bill": "(brak rachunku)", diff --git a/resources/assets/js/locales/pt-br.json b/resources/assets/js/locales/pt-br.json index a0efbaf68a..75b6794a6e 100644 --- a/resources/assets/js/locales/pt-br.json +++ b/resources/assets/js/locales/pt-br.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "O que est\u00e1 acontecendo?", "flash_error": "Erro!", + "flash_warning": "Aten\u00e7\u00e3o!", "flash_success": "Sucesso!", "close": "Fechar", "split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida", @@ -29,6 +30,7 @@ "submit": "Enviar", "amount": "Valor", "date": "Data", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(sem or\u00e7amento)", "no_bill": "(sem fatura)", diff --git a/resources/assets/js/locales/pt.json b/resources/assets/js/locales/pt.json index e7b4a1a378..2596d0b01a 100644 --- a/resources/assets/js/locales/pt.json +++ b/resources/assets/js/locales/pt.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Painel de controlo", "flash_error": "Erro!", + "flash_warning": "Aviso!", "flash_success": "Sucesso!", "close": "Fechar", "split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida", @@ -29,6 +30,7 @@ "submit": "Guardar", "amount": "Montante", "date": "Data", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiquetas", "no_budget": "(sem or\u00e7amento)", "no_bill": "(sem encargo)", diff --git a/resources/assets/js/locales/ro.json b/resources/assets/js/locales/ro.json index 47248b3d58..4bdb2151c0 100644 --- a/resources/assets/js/locales/ro.json +++ b/resources/assets/js/locales/ro.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Ce se red\u0103?", "flash_error": "Eroare!", + "flash_warning": "Avertizare!", "flash_success": "Succes!", "close": "\u00cenchide", "split_transaction_title": "Descrierea tranzac\u021biei divizate", @@ -29,6 +30,7 @@ "submit": "Trimite", "amount": "Sum\u0103", "date": "Dat\u0103", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etichete", "no_budget": "(nici un buget)", "no_bill": "(f\u0103r\u0103 factur\u0103)", diff --git a/resources/assets/js/locales/ru.json b/resources/assets/js/locales/ru.json index 5443cd80f5..810b71c4ef 100644 --- a/resources/assets/js/locales/ru.json +++ b/resources/assets/js/locales/ru.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?", "flash_error": "\u041e\u0448\u0438\u0431\u043a\u0430!", + "flash_warning": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435!", "flash_success": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e!", "close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c", "split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", @@ -29,6 +30,7 @@ "submit": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c", "amount": "\u0421\u0443\u043c\u043c\u0430", "date": "\u0414\u0430\u0442\u0430", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u041c\u0435\u0442\u043a\u0438", "no_budget": "(\u0432\u043d\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0430)", "no_bill": "(\u043d\u0435\u0442 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443)", diff --git a/resources/assets/js/locales/sk.json b/resources/assets/js/locales/sk.json index 4f4c07f397..a020fad674 100644 --- a/resources/assets/js/locales/sk.json +++ b/resources/assets/js/locales/sk.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Ako to ide?", "flash_error": "Chyba!", + "flash_warning": "Varovanie!", "flash_success": "Hotovo!", "close": "Zavrie\u0165", "split_transaction_title": "Popis roz\u00fa\u010dtovania", @@ -29,6 +30,7 @@ "submit": "Odosla\u0165", "amount": "Suma", "date": "D\u00e1tum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0160t\u00edtky", "no_budget": "(\u017eiadny rozpo\u010det)", "no_bill": "(\u017eiadny \u00fa\u010det)", diff --git a/resources/assets/js/locales/sl.json b/resources/assets/js/locales/sl.json index 3a8232b4d6..9b3838e33a 100644 --- a/resources/assets/js/locales/sl.json +++ b/resources/assets/js/locales/sl.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Kaj dogaja?", "flash_error": "Napaka!", + "flash_warning": "Opozorilo!", "flash_success": "Uspelo je!", "close": "zapri", "split_transaction_title": "Opis deljene transakcije", @@ -29,6 +30,7 @@ "submit": "Potrdi", "amount": "Znesek", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Oznake", "no_budget": "(brez prora\u010duna)", "no_bill": "(ni ra\u010duna)", diff --git a/resources/assets/js/locales/sv.json b/resources/assets/js/locales/sv.json index 790b5aa810..dcc3a4c16a 100644 --- a/resources/assets/js/locales/sv.json +++ b/resources/assets/js/locales/sv.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Vad spelas?", "flash_error": "Fel!", + "flash_warning": "Varning!", "flash_success": "Slutf\u00f6rd!", "close": "St\u00e4ng", "split_transaction_title": "Beskrivning av delad transaktion", @@ -29,6 +30,7 @@ "submit": "Skicka", "amount": "Belopp", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiketter", "no_budget": "(ingen budget)", "no_bill": "(ingen r\u00e4kning)", diff --git a/resources/assets/js/locales/tr.json b/resources/assets/js/locales/tr.json index 5df7ae320e..5b69d2b973 100644 --- a/resources/assets/js/locales/tr.json +++ b/resources/assets/js/locales/tr.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Neler oluyor?", "flash_error": "Hata!", + "flash_warning": "Uyar\u0131!", "flash_success": "Ba\u015far\u0131l\u0131!", "close": "Kapat", "split_transaction_title": "Description of the split transaction", @@ -29,6 +30,7 @@ "submit": "G\u00f6nder", "amount": "Miktar", "date": "Tarih", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiketler", "no_budget": "(b\u00fct\u00e7e yok)", "no_bill": "(hay\u0131r bill)", diff --git a/resources/assets/js/locales/uk.json b/resources/assets/js/locales/uk.json index 5b9e04e509..eafe099c1b 100644 --- a/resources/assets/js/locales/uk.json +++ b/resources/assets/js/locales/uk.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u0429\u043e \u0432 \u0433\u0430\u043c\u0430\u043d\u0446\u0456?", "flash_error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430!", + "flash_warning": "\u0423\u0432\u0430\u0433\u0430!", "flash_success": "\u0423\u0441\u043f\u0456\u0448\u043d\u043e!", "close": "\u0417\u0430\u043a\u0440\u0438\u0442\u0438", "split_transaction_title": "Description of the split transaction", @@ -29,6 +30,7 @@ "submit": "\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438", "amount": "\u0421\u0443\u043c\u0430", "date": "\u0414\u0430\u0442\u0430", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0422\u0435\u0433\u0438", "no_budget": "(\u043f\u043e\u0437\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/vi.json b/resources/assets/js/locales/vi.json index 6841e52b5c..4e185e29b1 100644 --- a/resources/assets/js/locales/vi.json +++ b/resources/assets/js/locales/vi.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?", "flash_error": "L\u1ed7i!", + "flash_warning": "C\u1ea3nh b\u00e1o!", "flash_success": "Th\u00e0nh c\u00f4ng!", "close": "\u0110\u00f3ng", "split_transaction_title": "M\u00f4 t\u1ea3 giao d\u1ecbch t\u00e1ch", @@ -29,6 +30,7 @@ "submit": "G\u1eedi", "amount": "S\u1ed1 ti\u1ec1n", "date": "Ng\u00e0y", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Nh\u00e3n", "no_budget": "(kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/zh-cn.json b/resources/assets/js/locales/zh-cn.json index 67dedf9fd5..36ed750d46 100644 --- a/resources/assets/js/locales/zh-cn.json +++ b/resources/assets/js/locales/zh-cn.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f", "flash_error": "\u9519\u8bef\uff01", + "flash_warning": "\u8b66\u544a\uff01", "flash_success": "\u6210\u529f\uff01", "close": "\u5173\u95ed", "split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0", @@ -29,6 +30,7 @@ "submit": "\u63d0\u4ea4", "amount": "\u91d1\u989d", "date": "\u65e5\u671f", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u6807\u7b7e", "no_budget": "(\u65e0\u9884\u7b97)", "no_bill": "(\u65e0\u8d26\u5355)", diff --git a/resources/assets/js/locales/zh-tw.json b/resources/assets/js/locales/zh-tw.json index 20d0271714..54f2a795ec 100644 --- a/resources/assets/js/locales/zh-tw.json +++ b/resources/assets/js/locales/zh-tw.json @@ -2,6 +2,7 @@ "firefly": { "welcome_back": "What's playing?", "flash_error": "\u932f\u8aa4\uff01", + "flash_warning": "\u8b66\u544a\uff01", "flash_success": "\u6210\u529f\uff01", "close": "\u95dc\u9589", "split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0", @@ -29,6 +30,7 @@ "submit": "\u9001\u51fa", "amount": "\u91d1\u984d", "date": "\u65e5\u671f", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u6a19\u7c64", "no_budget": "(\u7121\u9810\u7b97)", "no_bill": "(no bill)", diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 77a56bd416..8bb4762e4e 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -1516,6 +1516,7 @@ return [ 'list_all_attachments' => 'List of all attachments', // transaction index + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', 'title_expenses' => 'Expenses', 'title_withdrawal' => 'Expenses', 'title_revenue' => 'Revenue / income', @@ -1888,6 +1889,7 @@ return [ // Ignore this comment // transactions: + 'unreconcile' => 'Undo reconciliation', 'update_withdrawal' => 'Update withdrawal', 'update_deposit' => 'Update deposit', 'update_transaction' => 'Update transaction', diff --git a/resources/lang/en_US/validation.php b/resources/lang/en_US/validation.php index f5314ca0f4..72fb97c7af 100644 --- a/resources/lang/en_US/validation.php +++ b/resources/lang/en_US/validation.php @@ -38,6 +38,7 @@ return [ 'source_equals_destination' => 'The source account equals the destination account.', 'unique_account_number_for_user' => 'It looks like this account number is already in use.', 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', 'rule_trigger_value' => 'This value is invalid for the selected trigger.', 'rule_action_value' => 'This value is invalid for the selected action.', diff --git a/resources/views/transactions/show.twig b/resources/views/transactions/show.twig index 9ca97e5d35..db60633c03 100644 --- a/resources/views/transactions/show.twig +++ b/resources/views/transactions/show.twig @@ -220,6 +220,10 @@ class="fa fa-pencil"> {{ 'edit'|_ }}
  • {{ 'delete'|_ }}
  • + {% if journal.reconciled %} +
  • {{ 'unreconcile'|_ }}
  • + {% endif %} {# convert to different type #} @@ -504,9 +508,25 @@ var cloneGroupUrl = '{{ route('transactions.clone') }}'; var cloneAndEditUrl = '{{ route('transactions.clone') }}?redirect=edit'; + $('.switch-link').on('click', switchLink); + $('.reconcile-button').on('click', unreconcile); var switchLinkUrl = '{{ route('transactions.link.switch') }}'; + function unreconcile(e) { + e.preventDefault(); + var obj = $(e.currentTarget); + $.post(obj.attr('href'), { + _token: token + }).done(function () { + location.reload(); + }).fail(function () { + console.error('I failed :('); + }); + + return false + } + function switchLink(e) { e.preventDefault(); var obj = $(e.currentTarget); diff --git a/routes/web.php b/routes/web.php index 0c8e87b468..17a8fdad55 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1227,6 +1227,9 @@ Route::group( Route::get('delete/{transactionGroup}', ['uses' => 'Transaction\DeleteController@delete', 'as' => 'delete']); Route::post('destroy/{transactionGroup}', ['uses' => 'Transaction\DeleteController@destroy', 'as' => 'destroy']); + // unreconcile + Route::post('unreconcile/{tj}', ['uses' => 'Transaction\EditController@unreconcile', 'as' => 'unreconcile']); + Route::get('show/{transactionGroup}', ['uses' => 'Transaction\ShowController@show', 'as' => 'show']); Route::get('debug/{transactionGroup}', ['uses' => 'Transaction\ShowController@debugShow', 'as' => 'debug']); } From e90fb98613d959a5fa2409bbb62a68995d19681d Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Oct 2023 19:01:18 +0200 Subject: [PATCH 27/48] Fix https://github.com/firefly-iii/firefly-iii/issues/7204 --- .env.example | 10 ++++++++++ .../V1/Requests/Models/Transaction/StoreRequest.php | 4 ++-- .../V1/Requests/Models/Transaction/UpdateRequest.php | 4 ++-- app/Api/V1/Requests/Models/Webhook/CreateRequest.php | 4 ++-- app/Api/V1/Requests/Models/Webhook/UpdateRequest.php | 10 +++++----- config/firefly.php | 1 + 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index ec2b4a8762..cca8d4531f 100644 --- a/.env.example +++ b/.env.example @@ -195,6 +195,16 @@ MAP_DEFAULT_LAT=51.983333 MAP_DEFAULT_LONG=5.916667 MAP_DEFAULT_ZOOM=6 +# +# Some objects have room for an URL, like transactions and webhooks. +# By default, the following protocols are allowed: +# http, https, ftp, ftps, mailto +# +# To change this, set your preferred comma separated set below. +# Be sure to include http, https and other default ones if you need to. +# +VALID_URL_PROTOCOLS= + # # Firefly III authentication settings # diff --git a/app/Api/V1/Requests/Models/Transaction/StoreRequest.php b/app/Api/V1/Requests/Models/Transaction/StoreRequest.php index 932d3061cf..3b26c259c3 100644 --- a/app/Api/V1/Requests/Models/Transaction/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Transaction/StoreRequest.php @@ -174,7 +174,7 @@ class StoreRequest extends FormRequest public function rules(): array { Log::debug('Collect rules of TransactionStoreRequest'); - + $validProtocols = config('firefly.valid_url_protocols'); return [ // basic fields for group: 'group_title' => 'between:1,1000|nullable', @@ -233,7 +233,7 @@ class StoreRequest extends FormRequest 'transactions.*.external_id' => 'min:1|max:255|nullable', 'transactions.*.recurrence_id' => 'min:1|max:255|nullable', 'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable', - 'transactions.*.external_url' => 'min:1|max:255|nullable|url', + 'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols), // SEPA fields: 'transactions.*.sepa_cc' => 'min:1|max:255|nullable', diff --git a/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php b/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php index e3d9660b02..d8b19ab5d0 100644 --- a/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php @@ -321,7 +321,7 @@ class UpdateRequest extends FormRequest public function rules(): array { Log::debug(sprintf('Now in %s', __METHOD__)); - + $validProtocols = config('firefly.valid_url_protocols'); return [ // basic fields for group: 'group_title' => 'between:1,1000|nullable', @@ -375,7 +375,7 @@ class UpdateRequest extends FormRequest 'transactions.*.external_id' => 'min:1|max:255|nullable', 'transactions.*.recurrence_id' => 'min:1|max:255|nullable', 'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable', - 'transactions.*.external_url' => 'min:1|max:255|nullable|url', + 'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols), // SEPA fields: 'transactions.*.sepa_cc' => 'min:1|max:255|nullable', diff --git a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php index 24c4084bf0..85969756fe 100644 --- a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php @@ -74,14 +74,14 @@ class CreateRequest extends FormRequest $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); - + $validProtocols = config('firefly.valid_url_protocols'); return [ 'title' => 'required|between:1,512|uniqueObjectForUser:webhooks,title', 'active' => [new IsBoolean()], 'trigger' => sprintf('required|in:%s', $triggers), 'response' => sprintf('required|in:%s', $responses), 'delivery' => sprintf('required|in:%s', $deliveries), - 'url' => ['required', 'url', 'uniqueWebhook'], + 'url' => ['required', sprintf('url:%s', $validProtocols), 'uniqueWebhook'], ]; } } diff --git a/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php b/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php index 157c2f5716..b2b8187031 100644 --- a/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php @@ -81,10 +81,10 @@ class UpdateRequest extends FormRequest */ public function rules(): array { - $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); - $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); - $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); - + $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); + $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); + $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); + $validProtocols = config('firefly.valid_url_protocols'); /** @var Webhook $webhook */ $webhook = $this->route()->parameter('webhook'); @@ -94,7 +94,7 @@ class UpdateRequest extends FormRequest 'trigger' => sprintf('in:%s', $triggers), 'response' => sprintf('in:%s', $responses), 'delivery' => sprintf('in:%s', $deliveries), - 'url' => ['url', sprintf('uniqueExistingWebhook:%d', $webhook->id)], + 'url' => [sprintf('url:%s', $validProtocols), sprintf('uniqueExistingWebhook:%d', $webhook->id)], ]; } } diff --git a/config/firefly.php b/config/firefly.php index c0f55e1dcf..9f4c726108 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -251,6 +251,7 @@ return [ 'available_dark_modes' => ['light', 'dark', 'browser'], 'bill_reminder_periods' => [90, 30, 14, 7, 0], 'valid_view_ranges' => ['1D', '1W', '1M', '3M', '6M', '1Y',], + 'valid_url_protocols' => envNonEmpty('VALID_URL_PROTOCOLS', 'http,https,ftp,ftps,mailto'), 'allowedMimes' => [ /* plain files */ 'text/plain', From d81a0ebba4dbd7f9564f3265e3771433df3d9e1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 03:46:01 +0000 Subject: [PATCH 28/48] chore(deps-dev): bump vite from 4.4.11 to 4.5.0 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.11 to 4.5.0. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v4.5.0/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v4.5.0/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1b180dcab..6ae971cbc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "axios": "^1.5.1", "laravel-vite-plugin": "^0.8.1", "sass": "^1.69.0", - "vite": "^4.4.11", + "vite": "^4.5.0", "vite-plugin-manifest-sri": "^0.1.0" } }, @@ -978,9 +978,9 @@ } }, "node_modules/vite": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", - "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", "dev": true, "dependencies": { "esbuild": "^0.18.10", diff --git a/package.json b/package.json index f58614c426..bd60a70430 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "axios": "^1.5.1", "laravel-vite-plugin": "^0.8.1", "sass": "^1.69.0", - "vite": "^4.4.11", + "vite": "^4.5.0", "vite-plugin-manifest-sri": "^0.1.0" }, "dependencies": { From ea7d1f481a593000ee20d0199bc28be486801ddc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 03:46:29 +0000 Subject: [PATCH 29/48] chore(deps): bump alpinejs from 3.13.1 to 3.13.2 Bumps [alpinejs](https://github.com/alpinejs/alpine/tree/HEAD/packages/alpinejs) from 3.13.1 to 3.13.2. - [Release notes](https://github.com/alpinejs/alpine/releases) - [Commits](https://github.com/alpinejs/alpine/commits/v3.13.2/packages/alpinejs) --- updated-dependencies: - dependency-name: alpinejs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1b180dcab..b7709b54b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^6.4.0", "@popperjs/core": "^2.11.8", - "alpinejs": "^3.13.1", + "alpinejs": "^3.13.2", "bootstrap": "^5.3.0", "bootstrap5-autocomplete": "^1.1.22", "chart.js": "^4.4.0", @@ -425,9 +425,9 @@ "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==" }, "node_modules/alpinejs": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.1.tgz", - "integrity": "sha512-/LZ7mumW02V7AV5xTTftJFHS0I3KOXLl7tHm4xpxXAV+HJ/zjTT0n8MU7RZ6UoGPhmO/i+KEhQojaH/0RsH5tg==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.2.tgz", + "integrity": "sha512-WzojeeN082kLZznGI1HAuP8yFJSWqJ1fGdz2mUjj45H4y0XwToE7fFqtI3mCPRR+BpcSbxT/NL+FyPnYAWSltw==", "dependencies": { "@vue/reactivity": "~3.1.1" } diff --git a/package.json b/package.json index f58614c426..245e837879 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "^6.4.0", "@popperjs/core": "^2.11.8", - "alpinejs": "^3.13.1", + "alpinejs": "^3.13.2", "bootstrap": "^5.3.0", "bootstrap5-autocomplete": "^1.1.22", "chart.js": "^4.4.0", From 73b912ee8bebf4cea58389d4392efa239981beab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 03:48:18 +0000 Subject: [PATCH 30/48] chore(deps-dev): bump sass from 1.69.3 to 1.69.4 Bumps [sass](https://github.com/sass/dart-sass) from 1.69.3 to 1.69.4. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.69.3...1.69.4) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6ae971cbc4..fa948aa338 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "devDependencies": { "axios": "^1.5.1", "laravel-vite-plugin": "^0.8.1", - "sass": "^1.69.0", + "sass": "^1.69.4", "vite": "^4.5.0", "vite-plugin-manifest-sri": "^0.1.0" } @@ -932,9 +932,9 @@ } }, "node_modules/sass": { - "version": "1.69.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", - "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", + "version": "1.69.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", + "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", diff --git a/package.json b/package.json index bd60a70430..616b208039 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "devDependencies": { "axios": "^1.5.1", "laravel-vite-plugin": "^0.8.1", - "sass": "^1.69.0", + "sass": "^1.69.4", "vite": "^4.5.0", "vite-plugin-manifest-sri": "^0.1.0" }, From dd2f8d4404e1ebc8376afb5542140bea7f540959 Mon Sep 17 00:00:00 2001 From: Antonio Spinelli Date: Fri, 20 Oct 2023 19:00:45 -0300 Subject: [PATCH 31/48] Cover endOfPeriod method of the Navigation class The custom frequency requires a timezone configuration, forcing it to run in the integration test scope. Running the integration tests requires a database connection in the build process. It enables other case tests. The API Tests cause interference in other tests, requiring isolating them. --- .github/workflows/sonarcloud.yml | 60 +++++++++- .../Commands/System/CreateDatabase.php | 1 + composer.json | 2 +- phpunit.xml | 1 + .../Autocomplete/AccountControllerTest.php | 27 +---- .../NavigationCustomEndOfPeriodTest.php | 25 ++++ .../Support/NavigationEndOfPeriodTest.php | 107 ++++++++++++++++++ 7 files changed, 197 insertions(+), 26 deletions(-) create mode 100644 tests/integration/Support/NavigationCustomEndOfPeriodTest.php create mode 100644 tests/unit/Support/NavigationEndOfPeriodTest.php diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index e9ba1b9b27..1a62d846f7 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,14 +1,37 @@ name: Sonarcloud on: - pull_request: + pull_request: push: branches: - main - develop +env: + DB_CONNECTION: mysql + DB_HOST: "127.0.0.1" + DB_DATABASE: firefly + DB_USER: firefly + DB_PASSWORD: secret_firefly_password + jobs: sonarcloud: name: SonarCloud runs-on: ubuntu-latest + services: + mariadb: + image: mariadb:latest + ports: + - 3306:3306 + env: + MYSQL_ROOT_PASSWORD: yes + MYSQL_USER: ${{ env.DB_USER }} + MYSQL_PASSWORD: ${{ env.DB_PASSWORD }} + MYSQL_DATABASE: ${{ env.DB_DATABASE }} + options: >- + --health-cmd="healthcheck.sh --connect --innodb_initialized" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + steps: - uses: actions/checkout@v3 with: @@ -24,16 +47,49 @@ jobs: with: php-version: '8.2' coverage: xdebug + extensions: >- + bcmath + curl + fileinfo + iconv + intl + json + mbstring + openssl + pdo + session + simplexml + sodium + tokenizer + xml + xmlwriter - name: Install Composer dependencies run: composer install --prefer-dist --no-interaction --no-progress --no-scripts + - name: Verify Database connection + env: + PORT: ${{ job.services.mariadb.ports[3306] }} + run: | + while ! mysqladmin ping -h"${{env.DB_HOST}}" -P"${PORT}" --silent; do + sleep 1 + done + - name: Copy environment file - run: cp .env.example .env + run: sed 's@DB_HOST=.*@DB_HOST=${{env.DB_HOST}}@g' .env.example > .env - name: Generate app key run: php artisan key:generate + - name: "Create the database" + run: php artisan firefly-iii:create-database + + - name: "Upgrades the database to the latest version" + run: php artisan firefly-iii:upgrade-database + + - name: "Integrity Database Report" + run: php artisan firefly-iii:report-integrity + - name: "Run tests with coverage" run: composer coverage diff --git a/app/Console/Commands/System/CreateDatabase.php b/app/Console/Commands/System/CreateDatabase.php index b34914e310..5960f59144 100644 --- a/app/Console/Commands/System/CreateDatabase.php +++ b/app/Console/Commands/System/CreateDatabase.php @@ -83,6 +83,7 @@ class CreateDatabase extends Command $pdo = new PDO($dsn, env('DB_USERNAME'), env('DB_PASSWORD'), $options); } catch (PDOException $e) { $this->friendlyError(sprintf('Error when connecting to DB: %s', $e->getMessage())); + return 1; } // only continue when no error. diff --git a/composer.json b/composer.json index f0143e13a5..7819851728 100644 --- a/composer.json +++ b/composer.json @@ -176,7 +176,7 @@ "@php vendor/bin/phpunit -c phpunit.xml --testsuite integration --no-coverage" ], "coverage": [ - "@php vendor/bin/phpunit -c phpunit.xml --testsuite unit" + "@php vendor/bin/phpunit -c phpunit.xml" ] }, "config": { diff --git a/phpunit.xml b/phpunit.xml index aa51a02e21..d5008da502 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -33,6 +33,7 @@ stopOnFailure="true"> + diff --git a/tests/integration/Api/Autocomplete/AccountControllerTest.php b/tests/integration/Api/Autocomplete/AccountControllerTest.php index 5eb0ec0ca7..c268f9fb2e 100644 --- a/tests/integration/Api/Autocomplete/AccountControllerTest.php +++ b/tests/integration/Api/Autocomplete/AccountControllerTest.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace Tests\integration\Api\Autocomplete; -use Laravel\Passport\Passport; -use Log; use Tests\integration\TestCase; /** @@ -32,33 +30,16 @@ use Tests\integration\TestCase; */ class AccountControllerTest extends TestCase { - /** - * - */ - public function setUp(): void - { - parent::setUp(); - Passport::actingAs($this->user()); - Log::info(sprintf('Now in %s.', get_class($this))); - } - /** * @covers \FireflyIII\Api\V1\Controllers\Autocomplete\AccountController + * @runInSeparateProcess */ - public function testAccounts(): void + public function testGivenAnUnauthenticatedRequestWhenCallingTheAccountsEndpointThenReturns401HttpCode(): void { // test API $response = $this->get(route('api.v1.autocomplete.accounts'), ['Accept' => 'application/json']); - $response->assertStatus(200); + $response->assertStatus(401); $response->assertHeader('Content-Type', 'application/json'); - $response->assertSee('Checking Account'); - } - - /** - * - */ - public function testBasic(): void - { - $this->assertTrue(true); + $response->assertContent('{"message":"Unauthenticated","exception":"AuthenticationException"}'); } } diff --git a/tests/integration/Support/NavigationCustomEndOfPeriodTest.php b/tests/integration/Support/NavigationCustomEndOfPeriodTest.php new file mode 100644 index 0000000000..a7bd3c1652 --- /dev/null +++ b/tests/integration/Support/NavigationCustomEndOfPeriodTest.php @@ -0,0 +1,25 @@ +endOfPeriod($from, 'custom'); + $this->assertEquals($expected->toDateString(), $period->toDateString()); + } +} diff --git a/tests/unit/Support/NavigationEndOfPeriodTest.php b/tests/unit/Support/NavigationEndOfPeriodTest.php new file mode 100644 index 0000000000..af86ed7f03 --- /dev/null +++ b/tests/unit/Support/NavigationEndOfPeriodTest.php @@ -0,0 +1,107 @@ + + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +declare(strict_types=1); + +namespace Tests\unit\Support; + +use Carbon\Carbon; +use FireflyIII\Support\Navigation; +use Illuminate\Support\Facades\Log; +use PHPUnit\Framework\TestCase; + +/** + * @group unit-test + * @group support + * @group navigation + */ +class NavigationEndOfPeriodTest extends TestCase +{ + private Navigation $navigation; + + public function __construct(string $name) + { + parent::__construct($name); + $this->navigation = new Navigation(); + } + + public static function provideDates(): array + { + return [ + '1D' => ['frequency' => '1D', 'from' => Carbon::now(), 'expected' => Carbon::now()->endOfDay()], + 'daily' => ['frequency' => 'daily', 'from' => Carbon::now(), 'expected' => Carbon::now()->endOfDay()], + '1W' => ['frequency' => '1W', 'from' => Carbon::now(), 'expected' => Carbon::now()->addWeek()->subDay()->endOfDay()], + 'week' => ['frequency' => 'week', 'from' => Carbon::now(), 'expected' => Carbon::now()->addWeek()->subDay()->endOfDay()], + 'weekly' => ['frequency' => 'weekly', 'from' => Carbon::now(), 'expected' => Carbon::now()->addWeek()->subDay()->endOfDay()], + 'month' => ['frequency' => 'month', 'from' => Carbon::now(), 'expected' => Carbon::now()->addMonth()->subDay()->endOfDay()], + '1M' => ['frequency' => '1M', 'from' => Carbon::now(), 'expected' => Carbon::now()->addMonth()->subDay()->endOfDay()], + 'monthly' => ['frequency' => 'monthly', 'from' => Carbon::now(), 'expected' => Carbon::now()->addMonth()->subDay()->endOfDay()], + '3M' => ['frequency' => '3M', 'from' => Carbon::now(), 'expected' => Carbon::now()->addQuarterNoOverflow()->subDay()->endOfDay()], + 'quarter' => ['frequency' => 'quarter', 'from' => Carbon::now(), 'expected' => Carbon::now()->addQuarterNoOverflow()->subDay()->endOfDay()], + 'quarterly' => ['frequency' => 'quarterly', 'from' => Carbon::now(), 'expected' => Carbon::now()->addQuarterNoOverflow()->subDay()->endOfDay()], + 'year' => ['frequency' => 'year', 'from' => Carbon::now(), 'expected' => Carbon::now()->addYearNoOverflow()->subDay()->endOfDay()], + 'yearly' => ['frequency' => 'yearly', 'from' => Carbon::now(), 'expected' => Carbon::now()->addYearNoOverflow()->subDay()->endOfDay()], + '1Y' => ['frequency' => '1Y', 'from' => Carbon::now(), 'expected' => Carbon::now()->addYearNoOverflow()->subDay()->endOfDay()], + 'half-year' => ['frequency' => 'half-year', 'from' => Carbon::parse('2023-05-20'), 'expected' => Carbon::parse('2023-11-19')->endOfDay()], + '6M' => ['frequency' => '6M', 'from' => Carbon::parse('2023-08-20'), 'expected' => Carbon::parse('2024-02-19')], + 'last7' => ['frequency' => 'last7', 'from' => Carbon::now(), 'expected' => Carbon::now()->addDays(7)->endOfDay()], + 'last30' => ['frequency' => 'last30', 'from' => Carbon::now(), 'expected' => Carbon::now()->addDays(30)->endOfDay()], + 'last90' => ['frequency' => 'last90', 'from' => Carbon::now(), 'expected' => Carbon::now()->addDays(90)->endOfDay()], + 'last365' => ['frequency' => 'last365', 'from' => Carbon::now(), 'expected' => Carbon::now()->addDays(365)->endOfDay()], + 'MTD' => ['frequency' => 'MTD', 'from' => Carbon::now(), 'expected' => Carbon::now()->startOfMonth()->startOfDay()], + 'QTD' => ['frequency' => 'QTD', 'from' => Carbon::now(), 'expected' => Carbon::now()->firstOfQuarter()->startOfDay()], + 'YTD' => ['frequency' => 'YTD', 'from' => Carbon::now(), 'expected' => Carbon::now()->startOfYear()->startOfDay()], + 'week 2023-08-05 to 2023-08-11' => ['frequency' => '1W', 'from' => Carbon::parse('2023-08-05'), 'expected' => Carbon::parse('2023-08-11')->endOfDay()], + ]; + } + + /** + * @dataProvider provideDates + */ + public function testGivenADateAndFrequencyWhenCalculateTheDateThenReturnsTheExpectedDateSuccessful(string $frequency, Carbon $from, Carbon $expected) + { + $period = $this->navigation->endOfPeriod($from, $frequency); + $this->assertEquals($expected->toDateString(), $period->toDateString()); + } + + public static function provideUnknownFrequencies(): array + { + return [ + '1day' => ['frequency' => '1day', 'from' => Carbon::now(), 'expected' => Carbon::now()], + 'unknown' => ['frequency' => 'unknown', 'from' => Carbon::now(), 'expected' => Carbon::now()->startOfDay()], + 'empty' => ['frequency' => '', 'from' => Carbon::now(), 'expected' => Carbon::now()->startOfDay()], + ]; + } + + /** + * @dataProvider provideUnknownFrequencies + */ + public function testGivenADateAndUnknownFrequencyWhenCalculateTheDateThenReturnsTheSameDateSuccessful(string $frequency, Carbon $from, Carbon $expected) + { + Log::spy(); + + $period = $this->navigation->endOfPeriod($from, $frequency); + $this->assertEquals($expected->toDateString(), $period->toDateString()); + $expectedMessage = sprintf('Cannot do endOfPeriod for $repeat_freq "%s"', $frequency); + + Log::shouldHaveReceived('error', [$expectedMessage]); + } +} From a9d490263b0ff32352e0fda003e85975c17eb9de Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 23 Oct 2023 20:09:10 +0200 Subject: [PATCH 32/48] Fix method. --- app/Jobs/DownloadExchangeRates.php | 2 +- app/Repositories/Currency/CurrencyRepository.php | 11 +++++++++++ .../Currency/CurrencyRepositoryInterface.php | 9 +++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/Jobs/DownloadExchangeRates.php b/app/Jobs/DownloadExchangeRates.php index 79c944537b..552c310778 100644 --- a/app/Jobs/DownloadExchangeRates.php +++ b/app/Jobs/DownloadExchangeRates.php @@ -84,7 +84,7 @@ class DownloadExchangeRates implements ShouldQueue public function handle(): void { Log::debug('Now in handle()'); - $currencies = $this->repository->get(); + $currencies = $this->repository->getCompleteSet(); /** @var TransactionCurrency $currency */ foreach ($currencies as $currency) { diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index 39684f8a41..f24e90b44b 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -201,6 +201,17 @@ class CurrencyRepository implements CurrencyRepositoryInterface return $all; } + /** + * Returns the complete set of transactions but needs + * no user object. + * + * @return Collection + */ + public function getCompleteSet(): Collection + { + return TransactionCurrency::orderBy('code', 'ASC')->get(); + } + /** * @param TransactionCurrency $currency * diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index ff8c1c8d1d..40efbc2608 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -37,6 +37,15 @@ use Illuminate\Support\Collection; */ interface CurrencyRepositoryInterface { + + /** + * Returns the complete set of transactions but needs + * no user object. + * + * @return Collection + */ + public function getCompleteSet(): Collection; + /** * @param TransactionCurrency $currency * From 32a36bbb12a0edaad5dba768905aeadae99dfb8c Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 24 Oct 2023 18:32:24 +0200 Subject: [PATCH 33/48] Restore missing methods and fix silly bugs. --- .../Upgrade/UpgradeCurrencyPreferences.php | 2 + app/Factory/TransactionCurrencyFactory.php | 3 +- app/Http/Controllers/CurrencyController.php | 255 ------------------ .../Transaction/EditController.php | 1 - .../TransactionCurrency/CreateController.php | 121 +++++++++ .../TransactionCurrency/DeleteController.php | 127 +++++++++ .../TransactionCurrency/EditController.php | 130 +++++++++ .../TransactionCurrency/IndexController.php | 5 +- .../Currency/CurrencyRepository.php | 5 +- .../Currency/CurrencyRepositoryInterface.php | 1 - app/Support/Amount.php | 2 +- app/Validation/GroupValidation.php | 3 +- ...10_21_113213_add_currency_pivot_tables.php | 8 +- resources/views/currencies/edit.twig | 2 +- routes/web.php | 2 +- .../NavigationCustomEndOfPeriodTest.php | 3 +- 16 files changed, 397 insertions(+), 273 deletions(-) create mode 100644 app/Http/Controllers/TransactionCurrency/CreateController.php create mode 100644 app/Http/Controllers/TransactionCurrency/DeleteController.php create mode 100644 app/Http/Controllers/TransactionCurrency/EditController.php diff --git a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php index 29c21063f6..2da07ec117 100644 --- a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php +++ b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php @@ -1,5 +1,7 @@ whereCode($data['code'])->count(); @@ -63,7 +62,7 @@ class TransactionCurrencyFactory 'code' => $data['code'], 'symbol' => $data['symbol'], 'decimal_places' => $data['decimal_places'], - 'enabled' => $data['enabled'], + 'enabled' => false, ] ); } catch (QueryException $e) { diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 0d3b332109..203cf27074 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -45,259 +45,4 @@ use Psr\Container\NotFoundExceptionInterface; */ class CurrencyController extends Controller { - protected CurrencyRepositoryInterface $repository; - protected UserRepositoryInterface $userRepository; - - /** - * CurrencyController constructor. - * - - */ - public function __construct() - { - parent::__construct(); - - $this->middleware( - function ($request, $next) { - app('view')->share('title', (string)trans('firefly.currencies')); - app('view')->share('mainTitleIcon', 'fa-usd'); - $this->repository = app(CurrencyRepositoryInterface::class); - $this->userRepository = app(UserRepositoryInterface::class); - - return $next($request); - } - ); - } - - /** - * Create a currency. - * - * @param Request $request - * - * @return Factory|RedirectResponse|Redirector|View - */ - public function create(Request $request) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - - return redirect(route('currencies.index')); - } - - $subTitleIcon = 'fa-plus'; - $subTitle = (string)trans('firefly.create_currency'); - - // put previous url in session if not redirect from store (not "create another"). - if (true !== session('currencies.create.fromStore')) { - $this->rememberPreviousUrl('currencies.create.url'); - } - $request->session()->forget('currencies.create.fromStore'); - - Log::channel('audit')->info('Create new currency.'); - - return view('currencies.create', compact('subTitleIcon', 'subTitle')); - } - - - - /** - * Deletes a currency. - * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return Factory|RedirectResponse|Redirector|View - */ - public function delete(Request $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to visit page to delete currency %s but is not site owner.', $currency->code)); - - return redirect(route('currencies.index')); - } - - if ($this->repository->currencyInUse($currency)) { - $location = $this->repository->currencyInUseAt($currency); - $message = (string)trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]); - $request->session()->flash('error', $message); - Log::channel('audit')->info(sprintf('Tried to visit page to delete currency %s but currency is in use.', $currency->code)); - - return redirect(route('currencies.index')); - } - - // put previous url in session - $this->rememberPreviousUrl('currencies.delete.url'); - $subTitle = (string)trans('form.delete_currency', ['name' => $currency->name]); - Log::channel('audit')->info(sprintf('Visit page to delete currency %s.', $currency->code)); - - return view('currencies.delete', compact('currency', 'subTitle')); - } - - /** - * Destroys a currency. - * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return RedirectResponse|Redirector - */ - public function destroy(Request $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to delete currency %s but is not site owner.', $currency->code)); - - return redirect(route('currencies.index')); - } - - if ($this->repository->currencyInUse($currency)) { - $request->session()->flash('error', (string)trans('firefly.cannot_delete_currency', ['name' => e($currency->name)])); - Log::channel('audit')->info(sprintf('Tried to delete currency %s but is in use.', $currency->code)); - - return redirect(route('currencies.index')); - } - - if ($this->repository->isFallbackCurrency($currency)) { - $request->session()->flash('error', (string)trans('firefly.cannot_delete_fallback_currency', ['name' => e($currency->name)])); - Log::channel('audit')->info(sprintf('Tried to delete currency %s but is FALLBACK.', $currency->code)); - - return redirect(route('currencies.index')); - } - - Log::channel('audit')->info(sprintf('Deleted currency %s.', $currency->code)); - $this->repository->destroy($currency); - - $request->session()->flash('success', (string)trans('firefly.deleted_currency', ['name' => $currency->name])); - - return redirect($this->getPreviousUrl('currencies.delete.url')); - } - - - /** - * Edit a currency. - * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return Factory|RedirectResponse|Redirector|View - */ - public function edit(Request $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to edit currency %s but is not owner.', $currency->code)); - - return redirect(route('currencies.index')); - } - - $subTitleIcon = 'fa-pencil'; - $subTitle = (string)trans('breadcrumbs.edit_currency', ['name' => $currency->name]); - $currency->symbol = htmlentities($currency->symbol); - - // code to handle active-checkboxes - $hasOldInput = null !== $request->old('_token'); - $preFilled = [ - 'enabled' => $hasOldInput ? (bool)$request->old('enabled') : $currency->enabled, - ]; - - $request->session()->flash('preFilled', $preFilled); - Log::channel('audit')->info('Edit currency.', $currency->toArray()); - - // put previous url in session if not redirect from store (not "return_to_edit"). - if (true !== session('currencies.edit.fromUpdate')) { - $this->rememberPreviousUrl('currencies.edit.url'); - } - $request->session()->forget('currencies.edit.fromUpdate'); - - return view('currencies.edit', compact('currency', 'subTitle', 'subTitleIcon')); - } - - /** - * Store new currency. - * - * @param CurrencyFormRequest $request - * - * @return $this|RedirectResponse|Redirector - */ - public function store(CurrencyFormRequest $request) - { - /** @var User $user */ - $user = auth()->user(); - $data = $request->getCurrencyData(); - if (!$this->userRepository->hasRole($user, 'owner')) { - Log::error('User ' . auth()->user()->id . ' is not admin, but tried to store a currency.'); - Log::channel('audit')->info('Tried to create (POST) currency without admin rights.', $data); - - return redirect($this->getPreviousUrl('currencies.create.url')); - } - - $data['enabled'] = true; - try { - $currency = $this->repository->store($data); - } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::channel('audit')->info('Could not store (POST) currency without admin rights.', $data); - $request->session()->flash('error', (string)trans('firefly.could_not_store_currency')); - $currency = null; - } - $redirect = redirect($this->getPreviousUrl('currencies.create.url')); - - if (null !== $currency) { - $request->session()->flash('success', (string)trans('firefly.created_currency', ['name' => $currency->name])); - Log::channel('audit')->info('Created (POST) currency.', $data); - if (1 === (int)$request->get('create_another')) { - $request->session()->put('currencies.create.fromStore', true); - - $redirect = redirect(route('currencies.create'))->withInput(); - } - } - - return $redirect; - } - - /** - * Updates a currency. - * - * @param CurrencyFormRequest $request - * @param TransactionCurrency $currency - * - * @return RedirectResponse|Redirector - */ - public function update(CurrencyFormRequest $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - $data = $request->getCurrencyData(); - - if (false === $data['enabled'] && $this->repository->currencyInUse($currency)) { - $data['enabled'] = true; - } - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info('Tried to update (POST) currency without admin rights.', $data); - - return redirect(route('currencies.index')); - } - $currency = $this->repository->update($currency, $data); - Log::channel('audit')->info('Updated (POST) currency.', $data); - $request->session()->flash('success', (string)trans('firefly.updated_currency', ['name' => $currency->name])); - app('preferences')->mark(); - - if (1 === (int)$request->get('return_to_edit')) { - $request->session()->put('currencies.edit.fromUpdate', true); - - return redirect(route('currencies.edit', [$currency->id])); - } - - return redirect($this->getPreviousUrl('currencies.edit.url')); - } } diff --git a/app/Http/Controllers/Transaction/EditController.php b/app/Http/Controllers/Transaction/EditController.php index 42aa53780c..5949af4a02 100644 --- a/app/Http/Controllers/Transaction/EditController.php +++ b/app/Http/Controllers/Transaction/EditController.php @@ -39,7 +39,6 @@ use Illuminate\View\View; */ class EditController extends Controller { - private JournalRepositoryInterface $repository; /** diff --git a/app/Http/Controllers/TransactionCurrency/CreateController.php b/app/Http/Controllers/TransactionCurrency/CreateController.php new file mode 100644 index 0000000000..f293a9dd80 --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/CreateController.php @@ -0,0 +1,121 @@ +middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + /** + * Create a currency. + * + * @param Request $request + * + * @return Factory|RedirectResponse|Redirector|View + */ + public function create(Request $request) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + + return redirect(route('currencies.index')); + } + + $subTitleIcon = 'fa-plus'; + $subTitle = (string)trans('firefly.create_currency'); + + // put previous url in session if not redirect from store (not "create another"). + if (true !== session('currencies.create.fromStore')) { + $this->rememberPreviousUrl('currencies.create.url'); + } + $request->session()->forget('currencies.create.fromStore'); + + Log::channel('audit')->info('Create new currency.'); + + return view('currencies.create', compact('subTitleIcon', 'subTitle')); + } + + /** + * Store new currency. + * + * @param CurrencyFormRequest $request + * + * @return $this|RedirectResponse|Redirector + */ + public function store(CurrencyFormRequest $request) + { + /** @var User $user */ + $user = auth()->user(); + $data = $request->getCurrencyData(); + if (!$this->userRepository->hasRole($user, 'owner')) { + Log::error('User ' . auth()->user()->id . ' is not admin, but tried to store a currency.'); + Log::channel('audit')->info('Tried to create (POST) currency without admin rights.', $data); + + return redirect($this->getPreviousUrl('currencies.create.url'))->withInput(); + } + + $data['enabled'] = true; + try { + $currency = $this->repository->store($data); + } catch (FireflyException $e) { + Log::error($e->getMessage()); + Log::channel('audit')->info('Could not store (POST) currency without admin rights.', $data); + $request->session()->flash('error', (string)trans('firefly.could_not_store_currency')); + $currency = null; + } + $redirect = redirect($this->getPreviousUrl('currencies.create.url')); + + if (null !== $currency) { + $request->session()->flash('success', (string)trans('firefly.created_currency', ['name' => $currency->name])); + Log::channel('audit')->info('Created (POST) currency.', $data); + if (1 === (int)$request->get('create_another')) { + $request->session()->put('currencies.create.fromStore', true); + + $redirect = redirect(route('currencies.create'))->withInput(); + } + } + + return $redirect; + } +} diff --git a/app/Http/Controllers/TransactionCurrency/DeleteController.php b/app/Http/Controllers/TransactionCurrency/DeleteController.php new file mode 100644 index 0000000000..87a1ad2217 --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/DeleteController.php @@ -0,0 +1,127 @@ +middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + + + /** + * Deletes a currency. + * + * @param Request $request + * @param TransactionCurrency $currency + * + * @return Factory|RedirectResponse|Redirector|View + */ + public function delete(Request $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->info(sprintf('Tried to visit page to delete currency %s but is not site owner.', $currency->code)); + + return redirect(route('currencies.index')); + } + + if ($this->repository->currencyInUse($currency)) { + $location = $this->repository->currencyInUseAt($currency); + $message = (string)trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]); + $request->session()->flash('error', $message); + Log::channel('audit')->info(sprintf('Tried to visit page to delete currency %s but currency is in use.', $currency->code)); + + return redirect(route('currencies.index')); + } + + // put previous url in session + $this->rememberPreviousUrl('currencies.delete.url'); + $subTitle = (string)trans('form.delete_currency', ['name' => $currency->name]); + Log::channel('audit')->info(sprintf('Visit page to delete currency %s.', $currency->code)); + + return view('currencies.delete', compact('currency', 'subTitle')); + } + + /** + * Destroys a currency. + * + * @param Request $request + * @param TransactionCurrency $currency + * + * @return RedirectResponse|Redirector + */ + public function destroy(Request $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->info(sprintf('Tried to delete currency %s but is not site owner.', $currency->code)); + + return redirect(route('currencies.index')); + } + + if ($this->repository->currencyInUse($currency)) { + $request->session()->flash('error', (string)trans('firefly.cannot_delete_currency', ['name' => e($currency->name)])); + Log::channel('audit')->info(sprintf('Tried to delete currency %s but is in use.', $currency->code)); + + return redirect(route('currencies.index')); + } + + if ($this->repository->isFallbackCurrency($currency)) { + $request->session()->flash('error', (string)trans('firefly.cannot_delete_fallback_currency', ['name' => e($currency->name)])); + Log::channel('audit')->info(sprintf('Tried to delete currency %s but is FALLBACK.', $currency->code)); + + return redirect(route('currencies.index')); + } + + Log::channel('audit')->info(sprintf('Deleted currency %s.', $currency->code)); + $this->repository->destroy($currency); + + $request->session()->flash('success', (string)trans('firefly.deleted_currency', ['name' => $currency->name])); + + return redirect($this->getPreviousUrl('currencies.delete.url')); + } + +} diff --git a/app/Http/Controllers/TransactionCurrency/EditController.php b/app/Http/Controllers/TransactionCurrency/EditController.php new file mode 100644 index 0000000000..3ffd571991 --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/EditController.php @@ -0,0 +1,130 @@ +middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Edit a currency. + * + * @param Request $request + * @param TransactionCurrency $currency + * + * @return Factory|RedirectResponse|Redirector|View + */ + public function edit(Request $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->info(sprintf('Tried to edit currency %s but is not owner.', $currency->code)); + + return redirect(route('currencies.index')); + } + + $subTitleIcon = 'fa-pencil'; + $subTitle = (string)trans('breadcrumbs.edit_currency', ['name' => $currency->name]); + $currency->symbol = htmlentities($currency->symbol); + + // is currently enabled (for this user?) + $userCurrencies = $this->repository->get()->pluck('id')->toArray(); + $enabled = in_array($currency->id, $userCurrencies, true); + + // code to handle active-checkboxes + $hasOldInput = null !== $request->old('_token'); + $preFilled = [ + 'enabled' => $hasOldInput ? (bool)$request->old('enabled') : $enabled, + ]; + + $request->session()->flash('preFilled', $preFilled); + Log::channel('audit')->info('Edit currency.', $currency->toArray()); + + // put previous url in session if not redirect from store (not "return_to_edit"). + if (true !== session('currencies.edit.fromUpdate')) { + $this->rememberPreviousUrl('currencies.edit.url'); + } + $request->session()->forget('currencies.edit.fromUpdate'); + + return view('currencies.edit', compact('currency', 'subTitle', 'subTitleIcon')); + } + + + /** + * Updates a currency. + * + * @param CurrencyFormRequest $request + * @param TransactionCurrency $currency + * + * @return RedirectResponse|Redirector + */ + public function update(CurrencyFormRequest $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + $data = $request->getCurrencyData(); + + if (false === $data['enabled'] && $this->repository->currencyInUse($currency)) { + $data['enabled'] = true; + } + + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->info('Tried to update (POST) currency without admin rights.', $data); + + return redirect(route('currencies.index')); + } + $currency = $this->repository->update($currency, $data); + Log::channel('audit')->info('Updated (POST) currency.', $data); + $request->session()->flash('success', (string)trans('firefly.updated_currency', ['name' => $currency->name])); + app('preferences')->mark(); + + if (1 === (int)$request->get('return_to_edit')) { + $request->session()->put('currencies.edit.fromUpdate', true); + + return redirect(route('currencies.edit', [$currency->id])); + } + + return redirect($this->getPreviousUrl('currencies.edit.url')); + } + +} diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php index 7467b37d0a..2692e8be87 100644 --- a/app/Http/Controllers/TransactionCurrency/IndexController.php +++ b/app/Http/Controllers/TransactionCurrency/IndexController.php @@ -1,4 +1,5 @@ userDefault ? 0 : 1; $enabled = true === $currency->userEnabled ? 0 : 1; - return sprintf('%s-%s-%s',$default, $enabled, $currency->code); + return sprintf('%s-%s-%s', $default, $enabled, $currency->code); } ); @@ -81,7 +82,7 @@ class IndexController extends Controller $isOwner = false; } - return view('currencies.index', compact('currencies', 'isOwner')); + return view('currencies.index', compact('currencies', 'isOwner')); } } diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index f24e90b44b..6f51384b8c 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -546,13 +546,12 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function store(array $data): TransactionCurrency { - throw new FireflyException(sprintf('Method "%s" needs a refactor.', __METHOD__)); /** @var TransactionCurrencyFactory $factory */ $factory = app(TransactionCurrencyFactory::class); $result = $factory->create($data); - if (null === $result) { - throw new FireflyException('400004: Could not store new currency.'); + if (true === $data['enabled']) { + $this->user->currencies()->attach($result->id); } return $result; diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index 40efbc2608..e1a53d16be 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -37,7 +37,6 @@ use Illuminate\Support\Collection; */ interface CurrencyRepositoryInterface { - /** * Returns the complete set of transactions but needs * no user object. diff --git a/app/Support/Amount.php b/app/Support/Amount.php index c018e502c7..440ff66638 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -110,7 +110,7 @@ class Amount { /** @var User $user */ $user = auth()->user(); - return $user->currencies()->orderBy('code','ASC')->get(); + return $user->currencies()->orderBy('code', 'ASC')->get(); } /** diff --git a/app/Validation/GroupValidation.php b/app/Validation/GroupValidation.php index 154f36f018..025a5b2d40 100644 --- a/app/Validation/GroupValidation.php +++ b/app/Validation/GroupValidation.php @@ -48,8 +48,7 @@ trait GroupValidation { app('log')->debug(sprintf('Now in %s', __METHOD__)); - $count = Transaction - ::leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id') + $count = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id') ->leftJoin('transaction_groups', 'transaction_groups.id', 'transaction_journals.transaction_group_id') ->where('transaction_journals.transaction_group_id', $transactionGroup->id) ->where('transactions.reconciled', 1)->where('transactions.amount', '<', 0)->count(['transactions.id']); diff --git a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php index 214729e075..32a4b9b5dc 100644 --- a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php +++ b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php @@ -1,10 +1,12 @@ boolean('user_default')->default(false); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); - $table->unique(['user_id', 'transaction_currency_id'],'unique_combo'); + $table->unique(['user_id', 'transaction_currency_id'], 'unique_combo'); }); } catch (QueryException $e) { app('log')->error(sprintf('Could not create table "transaction_currency_user": %s', $e->getMessage())); @@ -40,7 +42,7 @@ return new class extends Migration { $table->boolean('group_default')->default(false); $table->foreign('user_group_id')->references('id')->on('user_groups')->onDelete('cascade'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); - $table->unique(['user_group_id', 'transaction_currency_id'],'unique_combo'); + $table->unique(['user_group_id', 'transaction_currency_id'], 'unique_combo'); }); } catch (QueryException $e) { app('log')->error(sprintf('Could not create table "transaction_currency_user_group": %s', $e->getMessage())); diff --git a/resources/views/currencies/edit.twig b/resources/views/currencies/edit.twig index 3bd7e52b21..053891d825 100644 --- a/resources/views/currencies/edit.twig +++ b/resources/views/currencies/edit.twig @@ -22,7 +22,7 @@ {{ ExpandedForm.text('symbol', currency.symbol,{'maxlength' : 51}) }} {{ ExpandedForm.text('code', currency.code,{'maxlength' : 51}) }} {{ ExpandedForm.integer('decimal_places', currency.decimal_places,{'maxlength' : 2,'min': 0,'max': 12}) }} - {{ ExpandedForm.checkbox('enabled', currency.enabled) }} + {{ ExpandedForm.checkbox('enabled', null, currency.enabled) }}
    diff --git a/routes/web.php b/routes/web.php index 17a8fdad55..21c83f3676 100644 --- a/routes/web.php +++ b/routes/web.php @@ -342,7 +342,7 @@ Route::group( Route::post('store', ['uses' => 'CreateController@store', 'as' => 'store']); Route::post('update/{currency}', ['uses' => 'EditController@update', 'as' => 'update']); - Route::post('destroy/{currency}', ['uses' => 'EditController@destroy', 'as' => 'destroy']); + Route::post('destroy/{currency}', ['uses' => 'DeleteController@destroy', 'as' => 'destroy']); } ); diff --git a/tests/integration/Support/NavigationCustomEndOfPeriodTest.php b/tests/integration/Support/NavigationCustomEndOfPeriodTest.php index a7bd3c1652..412b9cf4fc 100644 --- a/tests/integration/Support/NavigationCustomEndOfPeriodTest.php +++ b/tests/integration/Support/NavigationCustomEndOfPeriodTest.php @@ -1,5 +1,7 @@ Date: Tue, 24 Oct 2023 22:52:01 -0300 Subject: [PATCH 34/48] Cover preferred format methods of the Navigation class --- ...ationPreferredCarbonFormatByPeriodTest.php | 65 +++++++++++++++++ .../NavigationPreferredCarbonFormatTest.php | 72 +++++++++++++++++++ .../NavigationPreferredEndOfPeriodTest.php | 72 +++++++++++++++++++ .../NavigationPreferredRangeFormatTest.php | 72 +++++++++++++++++++ .../NavigationPreferredSqlFormatTest.php | 72 +++++++++++++++++++ 5 files changed, 353 insertions(+) create mode 100644 tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php create mode 100644 tests/unit/Support/NavigationPreferredCarbonFormatTest.php create mode 100644 tests/unit/Support/NavigationPreferredEndOfPeriodTest.php create mode 100644 tests/unit/Support/NavigationPreferredRangeFormatTest.php create mode 100644 tests/unit/Support/NavigationPreferredSqlFormatTest.php diff --git a/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php b/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php new file mode 100644 index 0000000000..62b4c2388d --- /dev/null +++ b/tests/unit/Support/NavigationPreferredCarbonFormatByPeriodTest.php @@ -0,0 +1,65 @@ + + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +declare(strict_types=1); + +namespace Tests\unit\Support; + +use FireflyIII\Support\Navigation; +use PHPUnit\Framework\TestCase; + +/** + * @group unit-test + * @group support + * @group navigation + */ +class NavigationPreferredCarbonFormatByPeriodTest extends TestCase +{ + private Navigation $navigation; + + public function __construct(string $name) + { + parent::__construct($name); + $this->navigation = new Navigation(); + } + + public static function providePeriods(): array + { + return [ + 'unknown' => ['period' => '1day', 'expected' => 'Y-m-d'], + 'week' => ['period' => '1W', 'expected' => '\WW,Y'], + 'month' => ['period' => '1M', 'expected' => 'Y-m'], + 'quarterly' => ['period' => '3M', 'expected' => '\QQ,Y'], + 'half-yearly' => ['period' => '6M', 'expected' => '\QQ,Y'], + 'yearly' => ['period' => '1Y', 'expected' => 'Y'], + ]; + } + + /** + * @dataProvider providePeriods + */ + public function testGivenAPeriodWhenCallPreferredCarbonFormatByPeriodThenReturnsExpectedFormat(string $period, string $expected) + { + $formatPeriod = $this->navigation->preferredCarbonFormatByPeriod($period); + $this->assertEquals($expected, $formatPeriod); + } +} diff --git a/tests/unit/Support/NavigationPreferredCarbonFormatTest.php b/tests/unit/Support/NavigationPreferredCarbonFormatTest.php new file mode 100644 index 0000000000..ad82ee8548 --- /dev/null +++ b/tests/unit/Support/NavigationPreferredCarbonFormatTest.php @@ -0,0 +1,72 @@ + + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +declare(strict_types=1); + +namespace Tests\unit\Support; + +use Carbon\Carbon; +use FireflyIII\Support\Navigation; +use PHPUnit\Framework\TestCase; + +/** + * @group unit-test + * @group support + * @group navigation + */ +class NavigationPreferredCarbonFormatTest extends TestCase +{ + private Navigation $navigation; + + public function __construct(string $name) + { + parent::__construct($name); + $this->navigation = new Navigation(); + } + + public static function providePeriods(): array + { + return [ + '1 week' => ['start' => Carbon::now(), 'end' => Carbon::now()->addWeek(), 'expected' => 'Y-m-d'], + '1 month' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonth(), 'expected' => 'Y-m-d'], + '2 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(2), 'expected' => 'Y-m'], + '3 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(3), 'expected' => 'Y-m'], + '6 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(6), 'expected' => 'Y-m'], + '7 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(7), 'expected' => 'Y-m'], + '11 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(11), 'expected' => 'Y-m'], + '12 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(12), 'expected' => 'Y-m'], + '13 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(13), 'expected' => 'Y'], + '16 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(16), 'expected' => 'Y'], + '1 year' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYear(), 'expected' => 'Y-m'], + '2 years' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYears(2), 'expected' => 'Y'], + ]; + } + + /** + * @dataProvider providePeriods + */ + public function testGivenStartAndEndDatesWhenCallPreferredCarbonFormatThenReturnsTheExpectedFormatSuccessful(Carbon $start, Carbon $end, string $expected) + { + $carbonFormat = $this->navigation->preferredCarbonFormat($start, $end); + $this->assertEquals($expected, $carbonFormat); + } +} diff --git a/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php b/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php new file mode 100644 index 0000000000..f9d74d2aa8 --- /dev/null +++ b/tests/unit/Support/NavigationPreferredEndOfPeriodTest.php @@ -0,0 +1,72 @@ + + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +declare(strict_types=1); + +namespace Tests\unit\Support; + +use Carbon\Carbon; +use FireflyIII\Support\Navigation; +use PHPUnit\Framework\TestCase; + +/** + * @group unit-test + * @group support + * @group navigation + */ +class NavigationPreferredEndOfPeriodTest extends TestCase +{ + private Navigation $navigation; + + public function __construct(string $name) + { + parent::__construct($name); + $this->navigation = new Navigation(); + } + + public static function providePeriods(): array + { + return [ + '1 week' => ['start' => Carbon::now(), 'end' => Carbon::now()->addWeek(), 'expected' => 'endOfDay'], + '1 month' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonth(), 'expected' => 'endOfDay'], + '2 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(2), 'expected' => 'endOfMonth'], + '3 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(3), 'expected' => 'endOfMonth'], + '6 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(6), 'expected' => 'endOfMonth'], + '7 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(7), 'expected' => 'endOfMonth'], + '11 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(11), 'expected' => 'endOfMonth'], + '12 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(12), 'expected' => 'endOfMonth'], + '13 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(13), 'expected' => 'endOfYear'], + '16 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(16), 'expected' => 'endOfYear'], + '1 year' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYear(), 'expected' => 'endOfMonth'], + '2 years' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYears(2), 'expected' => 'endOfYear'], + ]; + } + + /** + * @dataProvider providePeriods + */ + public function testGivenStartAndEndDatesWhenCallPreferredEndOfPeriodThenReturnsTheExpectedFormatSuccessful(Carbon $start, Carbon $end, string $expected) + { + $formatPeriod = $this->navigation->preferredEndOfPeriod($start, $end); + $this->assertEquals($expected, $formatPeriod); + } +} diff --git a/tests/unit/Support/NavigationPreferredRangeFormatTest.php b/tests/unit/Support/NavigationPreferredRangeFormatTest.php new file mode 100644 index 0000000000..10b18c2544 --- /dev/null +++ b/tests/unit/Support/NavigationPreferredRangeFormatTest.php @@ -0,0 +1,72 @@ + + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +declare(strict_types=1); + +namespace Tests\unit\Support; + +use Carbon\Carbon; +use FireflyIII\Support\Navigation; +use PHPUnit\Framework\TestCase; + +/** + * @group unit-test + * @group support + * @group navigation + */ +class NavigationPreferredRangeFormatTest extends TestCase +{ + private Navigation $navigation; + + public function __construct(string $name) + { + parent::__construct($name); + $this->navigation = new Navigation(); + } + + public static function providePeriods(): array + { + return [ + '1 week' => ['start' => Carbon::now(), 'end' => Carbon::now()->addWeek(), 'expected' => '1D'], + '1 month' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonth(), 'expected' => '1D'], + '2 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(2), 'expected' => '1M'], + '3 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(3), 'expected' => '1M'], + '6 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(6), 'expected' => '1M'], + '7 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(7), 'expected' => '1M'], + '11 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(11), 'expected' => '1M'], + '12 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(12), 'expected' => '1M'], + '13 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(13), 'expected' => '1Y'], + '16 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(16), 'expected' => '1Y'], + '1 year' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYear(), 'expected' => '1M'], + '2 years' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYears(2), 'expected' => '1Y'], + ]; + } + + /** + * @dataProvider providePeriods + */ + public function testGivenStartAndEndDatesWhenCallPreferredRangeFormatThenReturnsTheExpectedFormatSuccessful(Carbon $start, Carbon $end, string $expected) + { + $formatPeriod = $this->navigation->preferredRangeFormat($start, $end); + $this->assertEquals($expected, $formatPeriod); + } +} diff --git a/tests/unit/Support/NavigationPreferredSqlFormatTest.php b/tests/unit/Support/NavigationPreferredSqlFormatTest.php new file mode 100644 index 0000000000..2af197b535 --- /dev/null +++ b/tests/unit/Support/NavigationPreferredSqlFormatTest.php @@ -0,0 +1,72 @@ + + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +declare(strict_types=1); + +namespace Tests\unit\Support; + +use Carbon\Carbon; +use FireflyIII\Support\Navigation; +use PHPUnit\Framework\TestCase; + +/** + * @group unit-test + * @group support + * @group navigation + */ +class NavigationPreferredSqlFormatTest extends TestCase +{ + private Navigation $navigation; + + public function __construct(string $name) + { + parent::__construct($name); + $this->navigation = new Navigation(); + } + + public static function provideDates(): array + { + return [ + '1 week' => ['start' => Carbon::now(), 'end' => Carbon::now()->addWeek(), 'expected' => '%Y-%m-%d'], + '1 month' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonth(), 'expected' => '%Y-%m-%d'], + '2 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(2), 'expected' => '%Y-%m'], + '3 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(3), 'expected' => '%Y-%m'], + '6 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(6), 'expected' => '%Y-%m'], + '7 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(7), 'expected' => '%Y-%m'], + '11 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(11), 'expected' => '%Y-%m'], + '12 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(12), 'expected' => '%Y-%m'], + '13 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(13), 'expected' => '%Y'], + '16 months' => ['start' => Carbon::now(), 'end' => Carbon::now()->addMonths(16), 'expected' => '%Y'], + '1 year' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYear(), 'expected' => '%Y-%m'], + '2 years' => ['start' => Carbon::now(), 'end' => Carbon::now()->addYears(2), 'expected' => '%Y'], + ]; + } + + /** + * @dataProvider provideDates + */ + public function testGivenStartAndEndDatesWhenCallPreferredSqlFormatThenReturnsTheExpectedFormatSuccessful(Carbon $start, Carbon $end, string $expected) + { + $formatPeriod = $this->navigation->preferredSqlFormat($start, $end); + $this->assertEquals($expected, $formatPeriod); + } +} From 5f35bc5ee6b76f22bc27cd45564421c142735bfc Mon Sep 17 00:00:00 2001 From: Maxco10 Date: Wed, 25 Oct 2023 11:15:20 +0200 Subject: [PATCH 35/48] Added check on title and improved the check for description field Signed-off-by: Maxco10 --- app/Repositories/Rule/RuleRepository.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php index 3c19b3aac5..9bd730682e 100644 --- a/app/Repositories/Rule/RuleRepository.php +++ b/app/Repositories/Rule/RuleRepository.php @@ -288,8 +288,8 @@ class RuleRepository implements RuleRepositoryInterface $rule->active = array_key_exists('active', $data) ? $data['active'] : true; $rule->strict = array_key_exists('strict', $data) ? $data['strict'] : false; $rule->stop_processing = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : false; - $rule->title = $data['title']; - $rule->description = $data['description']; + $rule->title = array_key_exists('title', $data) ? $data['title'] : "untitle"; + $rule->description = array_key_exists('description', $data) ? $data['description'] : ""; $rule->save(); $rule->refresh(); From 4b7e1fcdb086b73332fd1ced9a03fe5786f0ed2f Mon Sep 17 00:00:00 2001 From: Maxco10 Date: Wed, 25 Oct 2023 11:58:14 +0200 Subject: [PATCH 36/48] Fixed spelling and replaced quotes Signed-off-by: Maxco10 --- app/Repositories/Rule/RuleRepository.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php index 9bd730682e..be0e59f9b4 100644 --- a/app/Repositories/Rule/RuleRepository.php +++ b/app/Repositories/Rule/RuleRepository.php @@ -288,8 +288,8 @@ class RuleRepository implements RuleRepositoryInterface $rule->active = array_key_exists('active', $data) ? $data['active'] : true; $rule->strict = array_key_exists('strict', $data) ? $data['strict'] : false; $rule->stop_processing = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : false; - $rule->title = array_key_exists('title', $data) ? $data['title'] : "untitle"; - $rule->description = array_key_exists('description', $data) ? $data['description'] : ""; + $rule->title = array_key_exists('title', $data) ? $data['title'] : 'Untitled'; + $rule->description = array_key_exists('description', $data) ? $data['description'] : ''; $rule->save(); $rule->refresh(); From 3ca1e6d197df7ca56ac852cb5999efac9bd0ebc5 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 26 Oct 2023 08:09:16 +0200 Subject: [PATCH 37/48] Remove rule title --- app/Repositories/Rule/RuleRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php index be0e59f9b4..e34c731cc8 100644 --- a/app/Repositories/Rule/RuleRepository.php +++ b/app/Repositories/Rule/RuleRepository.php @@ -288,7 +288,7 @@ class RuleRepository implements RuleRepositoryInterface $rule->active = array_key_exists('active', $data) ? $data['active'] : true; $rule->strict = array_key_exists('strict', $data) ? $data['strict'] : false; $rule->stop_processing = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : false; - $rule->title = array_key_exists('title', $data) ? $data['title'] : 'Untitled'; + $rule->title = array_key_exists('title', $data) ? $data['title'] : ''; $rule->description = array_key_exists('description', $data) ? $data['description'] : ''; $rule->save(); $rule->refresh(); From ccaace707efbe80a461a445d0daacb3fe169d1aa Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 27 Oct 2023 08:48:13 +0200 Subject: [PATCH 38/48] rename foreign key --- .../migrations/2023_10_21_113213_add_currency_pivot_tables.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php index 32a4b9b5dc..cf8cda85a7 100644 --- a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php +++ b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php @@ -42,7 +42,7 @@ return new class () extends Migration { $table->boolean('group_default')->default(false); $table->foreign('user_group_id')->references('id')->on('user_groups')->onDelete('cascade'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); - $table->unique(['user_group_id', 'transaction_currency_id'], 'unique_combo'); + $table->unique(['user_group_id', 'transaction_currency_id'], 'unique_combo_ug'); }); } catch (QueryException $e) { app('log')->error(sprintf('Could not create table "transaction_currency_user_group": %s', $e->getMessage())); From 902cc21ff0ba22a20cfe2c40000b5d5a7924a7d0 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 27 Oct 2023 17:47:12 +0200 Subject: [PATCH 39/48] Debug bill transformer --- app/Support/Navigation.php | 30 ++++-- app/Transformers/BillTransformer.php | 134 +++++++++++++++++---------- 2 files changed, 107 insertions(+), 57 deletions(-) diff --git a/app/Support/Navigation.php b/app/Support/Navigation.php index 0cd95afc07..3e89f14079 100644 --- a/app/Support/Navigation.php +++ b/app/Support/Navigation.php @@ -58,6 +58,7 @@ class Navigation */ public function addPeriod(Carbon $theDate, string $repeatFreq, int $skip = 0): Carbon { + $date = clone $theDate; $functionMap = [ '1D' => Periodicity::Daily, 'daily' => Periodicity::Daily, @@ -95,7 +96,7 @@ class Navigation return $theDate; } - return $this->nextDateByInterval($theDate, $functionMap[$repeatFreq], $skip); + return $this->nextDateByInterval($date, $functionMap[$repeatFreq], $skip); } /** @@ -348,25 +349,36 @@ class Navigation * * @return int */ - public function diffInPeriods(string $period, Carbon $beginning, Carbon $end): int + public function diffInPeriods(string $period, int $skip, Carbon $beginning, Carbon $end): int { + app('log')->debug(sprintf('diffInPeriods: %s (skip: %d), between %s and %s.', + $period, $skip, $beginning->format('Y-m-d'), $end->format('Y-m-d'))); $map = [ - 'daily' => 'diffInDays', - 'weekly' => 'diffInWeeks', - 'monthly' => 'diffInMonths', - 'quarterly' => 'diffInQuarters', - 'half-year' => 'diffInQuarters', - 'yearly' => 'diffInYears', + 'daily' => 'floatDiffInDays', + 'weekly' => 'floatDiffInWeeks', + 'monthly' => 'floatDiffInMonths', + //'quarterly' => 'floatDiffInMonths', + //'half-year' => 'floatDiffInQuarters', + 'yearly' => 'floatDiffInYears', ]; if (!array_key_exists($period, $map)) { app('log')->warning(sprintf('No diffInPeriods for period "%s"', $period)); return 1; } $func = $map[$period]; - $diff = $beginning->$func($end); + $diff = ceil($beginning->$func($end)); + app('log')->debug(sprintf('Diff is %f (%d)', $beginning->$func($end), $diff)); if ('half-year' === $period) { $diff = ceil($diff / 2); } + + if($skip > 0) { + $parameter = $skip + 1; + $diff = ceil($diff / $parameter) * $parameter; + app('log')->debug(sprintf('diffInPeriods: skip is %d, so param is %d, and diff becomes %d', + $skip, $parameter, $diff)); + } + return (int)$diff; } diff --git a/app/Transformers/BillTransformer.php b/app/Transformers/BillTransformer.php index 22a7e8c16d..fbf7474c94 100644 --- a/app/Transformers/BillTransformer.php +++ b/app/Transformers/BillTransformer.php @@ -60,17 +60,17 @@ class BillTransformer extends AbstractTransformer $paidData = $this->paidData($bill); $payDates = $this->payDates($bill); $currency = $bill->transactionCurrency; - $notes = $this->repository->getNoteText($bill); - $notes = '' === $notes ? null : $notes; + $notes = $this->repository->getNoteText($bill); + $notes = '' === $notes ? null : $notes; $this->repository->setUser($bill->user); - $objectGroupId = null; + $objectGroupId = null; $objectGroupOrder = null; $objectGroupTitle = null; /** @var ObjectGroup $objectGroup */ $objectGroup = $bill->objectGroups->first(); if (null !== $objectGroup) { - $objectGroupId = (int)$objectGroup->id; + $objectGroupId = (int)$objectGroup->id; $objectGroupOrder = (int)$objectGroup->order; $objectGroupTitle = $objectGroup->title; } @@ -78,7 +78,7 @@ class BillTransformer extends AbstractTransformer $paidDataFormatted = []; $payDatesFormatted = []; foreach ($paidData['paid_dates'] as $object) { - $object['date'] = Carbon::createFromFormat('!Y-m-d', $object['date'], config('app.timezone'))->toAtomString(); + $object['date'] = Carbon::createFromFormat('!Y-m-d', $object['date'], config('app.timezone'))->toAtomString(); $paidDataFormatted[] = $object; } @@ -98,40 +98,40 @@ class BillTransformer extends AbstractTransformer $current = $payDatesFormatted[0] ?? null; if (null !== $current && !$temp->isToday()) { - $temp2 = Carbon::createFromFormat('Y-m-d\TH:i:sP', $current); + $temp2 = Carbon::createFromFormat('Y-m-d\TH:i:sP', $current); $nextExpectedMatchDiff = $temp2->diffForHumans(today(config('app.timezone')), CarbonInterface::DIFF_RELATIVE_TO_NOW); } unset($temp, $temp2); return [ - 'id' => (int)$bill->id, - 'created_at' => $bill->created_at->toAtomString(), - 'updated_at' => $bill->updated_at->toAtomString(), - 'currency_id' => (string)$bill->transaction_currency_id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'name' => $bill->name, - 'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places), - 'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places), - 'date' => $bill->date->toAtomString(), - 'end_date' => $bill->end_date?->toAtomString(), - 'extension_date' => $bill->extension_date?->toAtomString(), - 'repeat_freq' => $bill->repeat_freq, - 'skip' => (int)$bill->skip, - 'active' => $bill->active, - 'order' => (int)$bill->order, - 'notes' => $notes, - 'object_group_id' => $objectGroupId ? (string)$objectGroupId : null, - 'object_group_order' => $objectGroupOrder, - 'object_group_title' => $objectGroupTitle, + 'id' => (int)$bill->id, + 'created_at' => $bill->created_at->toAtomString(), + 'updated_at' => $bill->updated_at->toAtomString(), + 'currency_id' => (string)$bill->transaction_currency_id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => (int)$currency->decimal_places, + 'name' => $bill->name, + 'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places), + 'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places), + 'date' => $bill->date->toAtomString(), + 'end_date' => $bill->end_date?->toAtomString(), + 'extension_date' => $bill->extension_date?->toAtomString(), + 'repeat_freq' => $bill->repeat_freq, + 'skip' => (int)$bill->skip, + 'active' => $bill->active, + 'order' => (int)$bill->order, + 'notes' => $notes, + 'object_group_id' => $objectGroupId ? (string)$objectGroupId : null, + 'object_group_order' => $objectGroupOrder, + 'object_group_title' => $objectGroupTitle, // these fields need work: - 'next_expected_match' => $nextExpectedMatch, + 'next_expected_match' => $nextExpectedMatch, 'next_expected_match_diff' => $nextExpectedMatchDiff, - 'pay_dates' => $payDatesFormatted, - 'paid_dates' => $paidDataFormatted, - 'links' => [ + 'pay_dates' => $payDatesFormatted, + 'paid_dates' => $paidDataFormatted, + 'links' => [ [ 'rel' => 'self', 'uri' => '/bills/' . $bill->id, @@ -154,7 +154,7 @@ class BillTransformer extends AbstractTransformer app('log')->debug('parameters are NULL, return empty array'); return [ - 'paid_dates' => [], + 'paid_dates' => [], 'next_expected_match' => null, ]; } @@ -162,7 +162,7 @@ class BillTransformer extends AbstractTransformer // 2023-07-18 this particular date is used to search for the last paid date. // 2023-07-18 the cloned $searchDate is used to grab the correct transactions. /** @var Carbon $start */ - $start = clone $this->parameters->get('start'); + $start = clone $this->parameters->get('start'); $searchStart = clone $start; $start->subDay(); @@ -189,7 +189,7 @@ class BillTransformer extends AbstractTransformer /* * Diff in months (or other period) between bill start and last paid date or $start. */ - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $start, $nextMatch); + $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $nextMatch); $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $steps); if ($nextMatch->lt($lastPaidDate)) { @@ -213,16 +213,16 @@ class BillTransformer extends AbstractTransformer $result = []; foreach ($set as $entry) { $result[] = [ - 'transaction_group_id' => (int)$entry->transaction_group_id, + 'transaction_group_id' => (int)$entry->transaction_group_id, 'transaction_journal_id' => (int)$entry->id, - 'date' => $entry->date->format('Y-m-d'), + 'date' => $entry->date->format('Y-m-d'), ]; } app('log')->debug(sprintf('Next match: %s', $nextMatch->toIso8601String())); return [ - 'paid_dates' => $result, + 'paid_dates' => $result, 'next_expected_match' => $nextMatch->format('Y-m-d'), ]; } @@ -231,7 +231,7 @@ class BillTransformer extends AbstractTransformer * Returns the latest date in the set, or start when set is empty. * * @param Collection $dates - * @param Carbon $default + * @param Carbon $default * * @return Carbon */ @@ -264,31 +264,60 @@ class BillTransformer extends AbstractTransformer return []; } - app('log')->debug(sprintf('Start: %s, end: %s', $this->parameters->get('start')->toIso8601String(), $this->parameters->get('end')->toIso8601String())); - $set = new Collection(); + app('log')->debug(sprintf('Start: %s, end: %s', $this->parameters->get('start')->format('Y-m-d'), $this->parameters->get('end')->format('Y-m-d'))); + $set = new Collection(); $currentStart = clone $this->parameters->get('start'); // 2023-06-23 subDay to fix 7655 $currentStart->subDay(); $loop = 0; + app('log')->debug('start of loop'); + /* + * De eerste dag van de bill telt sowieso. Vanaf daarna gaan we door tellen. + * Weekly die start op 01-10 + * 01-10: dit is hem dus. + * alle + */ + + + /* + * In de eerste week blijft aantal steps hangen op 0. + * Dus dan krijg je: + * 1 okt: 0 + * 2 okt: 0 + * 3 okt 0 + * en daarna pas begint-ie te lopen. + * maar je moet sowieso een periode verder kijken. + * + * dus stel je begint op 1 oktober monthly. + * dan is de eerste hit (want subday) vanaf 30 sept gerekend. + */ while ($currentStart <= $this->parameters->get('end')) { - app('log')->debug(sprintf('Current start is %s', $currentStart->toIso8601String())); + app('log')->debug(sprintf('Current start is %s', $currentStart->format('Y-m-d'))); $nextExpectedMatch = $this->nextDateMatch($bill, $currentStart); + // If nextExpectedMatch is after end, we continue: if ($nextExpectedMatch > $this->parameters->get('end')) { app('log')->debug('Next expected match is after END, so stop looking'); break; } - app('log')->debug(sprintf('Next expected match is %s', $nextExpectedMatch->toIso8601String())); + app('log')->debug(sprintf('Next expected match is %s', $nextExpectedMatch->format('Y-m-d'))); // add to set $set->push(clone $nextExpectedMatch); + + // 2023-10 + // for the next loop, go to end of period, THEN add day. + //$nextExpectedMatch = app('navigation')->endOfPeriod($nextExpectedMatch, $bill->repeat_freq); $nextExpectedMatch->addDay(); $currentStart = clone $nextExpectedMatch; + + $loop++; if ($loop > 4) { break; } } + app('log')->debug('end of loop'); $simple = $set->map( static function (Carbon $date) { return $date->format('Y-m-d'); @@ -301,22 +330,31 @@ class BillTransformer extends AbstractTransformer /** * Given a bill and a date, this method will tell you at which moment this bill expects its next - * transaction. Whether it is there already, is not relevant. + * transaction. That date must be AFTER $date as a sanity check. * - * @param Bill $bill + * @param Bill $bill * @param Carbon $date * * @return Carbon */ protected function nextDateMatch(Bill $bill, Carbon $date): Carbon { - app('log')->debug(sprintf('Now in nextDateMatch(%d, %s)', $bill->id, $date->format('Y-m-d'))); + app('log')->debug(sprintf('Now in nextDateMatch(#%d, %s)', $bill->id, $date->format('Y-m-d'))); $start = clone $bill->date; app('log')->debug(sprintf('Bill start date is %s', $start->format('Y-m-d'))); + if ($start->gt($date)) { + app('log')->debug('Start is after bill start, just return bill start date.'); + return clone $start; + } - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $start, $date); - $result = app('navigation')->addPeriod($start, $bill->repeat_freq, $steps); - app('log')->debug(sprintf('Number of steps is %d, result is %s', $steps, $start->format('Y-m-d'))); + $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $date); + $result = clone $start; + if ($steps > 0) { + $steps = $steps - 1; + app('log')->debug(sprintf('Steps is %d, because addPeriod already adds 1.', $steps)); + $result = app('navigation')->addPeriod($start, $bill->repeat_freq, $steps); + } + app('log')->debug(sprintf('Number of steps is %d, result is %s', $steps, $result->format('Y-m-d'))); return $result; } } From c4c690f44fabc09d5f400dfa55f13c096a1312f3 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 27 Oct 2023 17:47:24 +0200 Subject: [PATCH 40/48] various fixes --- .gitignore | 2 -- composer.lock | 78 ++++++++++++++++++++++++++------------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/.gitignore b/.gitignore index ab681f4f44..84cc9c84ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ /node_modules -/frontend/node_modules /storage/*.key /vendor -/.vagrant npm-debug.log yarn-error.log .env diff --git a/composer.lock b/composer.lock index 60e94b4f95..5f2d0642f0 100644 --- a/composer.lock +++ b/composer.lock @@ -1939,16 +1939,16 @@ }, { "name": "laravel/framework", - "version": "v10.28.0", + "version": "v10.29.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "09137f50f715c1efc649788a26092dcb1ec4ab6e" + "reference": "2d002849a16ad131110a50cbea4d64dbb78515a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/09137f50f715c1efc649788a26092dcb1ec4ab6e", - "reference": "09137f50f715c1efc649788a26092dcb1ec4ab6e", + "url": "https://api.github.com/repos/laravel/framework/zipball/2d002849a16ad131110a50cbea4d64dbb78515a3", + "reference": "2d002849a16ad131110a50cbea4d64dbb78515a3", "shasum": "" }, "require": { @@ -1981,7 +1981,7 @@ "symfony/console": "^6.2", "symfony/error-handler": "^6.2", "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.2", + "symfony/http-foundation": "^6.3", "symfony/http-kernel": "^6.2", "symfony/mailer": "^6.2", "symfony/mime": "^6.2", @@ -2048,13 +2048,15 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", + "nyholm/psr7": "^1.2", "orchestra/testbench-core": "^8.12", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^10.0.7", "predis/predis": "^2.0.2", "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4" + "symfony/http-client": "^6.2.4", + "symfony/psr-http-message-bridge": "^2.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", @@ -2135,20 +2137,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-10-10T13:01:37+00:00" + "time": "2023-10-24T13:48:53+00:00" }, { "name": "laravel/passport", - "version": "v11.9.1", + "version": "v11.9.2", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "93bb9c36045fe5be2eaeacf35e836c00b392b761" + "reference": "cece4efda933219002d95f3d5d03509e9ed29a14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/93bb9c36045fe5be2eaeacf35e836c00b392b761", - "reference": "93bb9c36045fe5be2eaeacf35e836c00b392b761", + "url": "https://api.github.com/repos/laravel/passport/zipball/cece4efda933219002d95f3d5d03509e9ed29a14", + "reference": "cece4efda933219002d95f3d5d03509e9ed29a14", "shasum": "" }, "require": { @@ -2172,7 +2174,7 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0", + "orchestra/testbench": "^7.31|^8.11", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.3" }, @@ -2213,27 +2215,27 @@ "issues": "https://github.com/laravel/passport/issues", "source": "https://github.com/laravel/passport" }, - "time": "2023-09-01T14:20:24+00:00" + "time": "2023-10-16T20:04:42+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.11", + "version": "v0.1.12", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "cce65a90e64712909ea1adc033e1d88de8455ffd" + "reference": "b35f249028c22016e45e48626e19e5d42fd827ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/cce65a90e64712909ea1adc033e1d88de8455ffd", - "reference": "cce65a90e64712909ea1adc033e1d88de8455ffd", + "url": "https://api.github.com/repos/laravel/prompts/zipball/b35f249028c22016e45e48626e19e5d42fd827ff", + "reference": "b35f249028c22016e45e48626e19e5d42fd827ff", "shasum": "" }, "require": { "ext-mbstring": "*", "illuminate/collections": "^10.0|^11.0", "php": "^8.1", - "symfony/console": "^6.2" + "symfony/console": "^6.2|^7.0" }, "conflict": { "illuminate/console": ">=10.17.0 <10.25.0", @@ -2268,9 +2270,9 @@ ], "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.11" + "source": "https://github.com/laravel/prompts/tree/v0.1.12" }, - "time": "2023-10-03T01:07:35+00:00" + "time": "2023-10-18T14:18:57+00:00" }, { "name": "laravel/sanctum", @@ -2340,16 +2342,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.3.1", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + "reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/076fe2cf128bd54b4341cdc6d49b95b34e101e4c", + "reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c", "shasum": "" }, "require": { @@ -2396,7 +2398,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-07-14T13:56:28+00:00" + "time": "2023-10-17T13:38:16+00:00" }, { "name": "laravel/slack-notification-channel", @@ -5724,16 +5726,16 @@ }, { "name": "spatie/laravel-html", - "version": "3.2.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-html.git", - "reference": "f9dac9f250735dd01d80e023f5acf6f3d10d3b3f" + "reference": "00faf80c459ca2a4cd9c6fe9c0e1a16b89216c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-html/zipball/f9dac9f250735dd01d80e023f5acf6f3d10d3b3f", - "reference": "f9dac9f250735dd01d80e023f5acf6f3d10d3b3f", + "url": "https://api.github.com/repos/spatie/laravel-html/zipball/00faf80c459ca2a4cd9c6fe9c0e1a16b89216c2e", + "reference": "00faf80c459ca2a4cd9c6fe9c0e1a16b89216c2e", "shasum": "" }, "require": { @@ -5790,7 +5792,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-html/tree/3.2.2" + "source": "https://github.com/spatie/laravel-html/tree/3.3.0" }, "funding": [ { @@ -5798,7 +5800,7 @@ "type": "custom" } ], - "time": "2023-07-20T18:59:53+00:00" + "time": "2023-10-24T06:34:29+00:00" }, { "name": "spatie/laravel-ignition", @@ -10544,16 +10546,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.4.1", + "version": "10.4.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "62bd7af13d282deeb95650077d28ba3600ca321c" + "reference": "cacd8b9dd224efa8eb28beb69004126c7ca1a1a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/62bd7af13d282deeb95650077d28ba3600ca321c", - "reference": "62bd7af13d282deeb95650077d28ba3600ca321c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/cacd8b9dd224efa8eb28beb69004126c7ca1a1a1", + "reference": "cacd8b9dd224efa8eb28beb69004126c7ca1a1a1", "shasum": "" }, "require": { @@ -10625,7 +10627,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.4.1" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.4.2" }, "funding": [ { @@ -10641,7 +10643,7 @@ "type": "tidelift" } ], - "time": "2023-10-08T05:01:11+00:00" + "time": "2023-10-26T07:21:45+00:00" }, { "name": "sebastian/cli-parser", @@ -11691,5 +11693,5 @@ "platform-overrides": { "php": "8.2" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } From 9e94b9e57eaa472cd49d0e86d777dfd2fe76a786 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 27 Oct 2023 18:07:56 +0200 Subject: [PATCH 41/48] Fix #8099 --- app/Support/Navigation.php | 24 ++++++++++++++++++------ app/Transformers/BillTransformer.php | 6 ++++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/Support/Navigation.php b/app/Support/Navigation.php index 3e89f14079..0b6ba764b6 100644 --- a/app/Support/Navigation.php +++ b/app/Support/Navigation.php @@ -357,8 +357,8 @@ class Navigation 'daily' => 'floatDiffInDays', 'weekly' => 'floatDiffInWeeks', 'monthly' => 'floatDiffInMonths', - //'quarterly' => 'floatDiffInMonths', - //'half-year' => 'floatDiffInQuarters', + 'quarterly' => 'floatDiffInMonths', + 'half-year' => 'floatDiffInMonths', 'yearly' => 'floatDiffInYears', ]; if (!array_key_exists($period, $map)) { @@ -366,11 +366,23 @@ class Navigation return 1; } $func = $map[$period]; - $diff = ceil($beginning->$func($end)); - app('log')->debug(sprintf('Diff is %f (%d)', $beginning->$func($end), $diff)); - if ('half-year' === $period) { - $diff = ceil($diff / 2); + // first do the diff + $diff = $beginning->$func($end); + + // then correct for quarterly or half-year + if('quarterly' === $period) { + app('log')->debug(sprintf('Q: Corrected %f to %f', $diff, $diff / 3)); + $diff = $diff / 3; } + if('half-year' === $period) { + app('log')->debug(sprintf('H: Corrected %f to %f', $diff, $diff / 6)); + $diff = $diff / 6; + } + + // then do ceil() + $diff = ceil($diff); + + app('log')->debug(sprintf('Diff is %f (%d)', $beginning->$func($end), $diff)); if($skip > 0) { $parameter = $skip + 1; diff --git a/app/Transformers/BillTransformer.php b/app/Transformers/BillTransformer.php index fbf7474c94..eb0022d035 100644 --- a/app/Transformers/BillTransformer.php +++ b/app/Transformers/BillTransformer.php @@ -302,8 +302,10 @@ class BillTransformer extends AbstractTransformer break; } app('log')->debug(sprintf('Next expected match is %s', $nextExpectedMatch->format('Y-m-d'))); - // add to set - $set->push(clone $nextExpectedMatch); + // add to set, if the date is ON or after the start parameter + if($nextExpectedMatch->gte($this->parameters->get('start'))) { + $set->push(clone $nextExpectedMatch); + } // 2023-10 // for the next loop, go to end of period, THEN add day. From 1d138eed8d91bf4024d40e28de89268a23386d04 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 28 Oct 2023 06:58:33 +0200 Subject: [PATCH 42/48] Refactor currency repository. --- .../Autocomplete/CurrencyController.php | 2 +- .../TransactionCurrency/DestroyController.php | 2 +- .../TransactionCurrency/ListController.php | 21 - .../TransactionCurrency/ShowController.php | 6 +- .../TransactionCurrency/StoreController.php | 2 +- .../TransactionCurrency/UpdateController.php | 13 +- .../Controllers/Summary/BasicController.php | 2 +- .../Controllers/Chart/CategoryController.php | 2 +- .../Controllers/Summary/BasicController.php | 2 +- .../CorrectOpeningBalanceCurrencies.php | 2 +- .../Commands/Upgrade/AccountCurrencies.php | 2 +- .../Commands/Upgrade/BudgetLimitCurrency.php | 2 +- app/Factory/TransactionJournalFactory.php | 2 +- app/Helpers/Report/NetWorth.php | 2 +- app/Helpers/Report/PopupReport.php | 2 +- .../Budget/BudgetLimitController.php | 2 +- .../Controllers/Budget/IndexController.php | 2 +- .../Controllers/Chart/AccountController.php | 2 +- app/Http/Controllers/CurrencyController.php | 48 -- app/Http/Controllers/JavascriptController.php | 2 +- app/Http/Controllers/Json/BoxController.php | 2 +- app/Http/Controllers/NewUserController.php | 5 +- .../TransactionCurrency/CreateController.php | 2 +- .../TransactionCurrency/DeleteController.php | 2 +- .../TransactionCurrency/EditController.php | 2 +- .../TransactionCurrency/IndexController.php | 20 +- app/Models/Account.php | 9 + app/Models/TransactionCurrency.php | 8 +- app/Models/UserGroup.php | 2 + app/Providers/CurrencyServiceProvider.php | 15 + app/Repositories/Account/AccountTasker.php | 2 +- .../Currency/CurrencyRepository.php | 503 +----------------- .../Currency/CurrencyRepositoryInterface.php | 204 +------ .../Currency/CurrencyRepository.php | 418 +++++++++++++++ .../Currency/CurrencyRepositoryInterface.php | 129 +++++ .../Internal/Update/JournalUpdateService.php | 2 +- app/Support/Amount.php | 24 +- app/Support/Form/CurrencyForm.php | 2 +- .../Http/Controllers/ChartGeneration.php | 5 +- app/Support/Search/OperatorQuerySearch.php | 2 +- app/User.php | 2 + composer.lock | 14 +- 42 files changed, 676 insertions(+), 818 deletions(-) delete mode 100644 app/Http/Controllers/CurrencyController.php create mode 100644 app/Repositories/UserGroups/Currency/CurrencyRepository.php create mode 100644 app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php diff --git a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php index 2250b32f33..4478213d73 100644 --- a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php +++ b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php @@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php index 1cfb07d391..a115094368 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php @@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php index cd52b0060b..5360c6ead8 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php @@ -38,7 +38,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; use FireflyIII\Repositories\Rule\RuleRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; @@ -65,26 +64,6 @@ class ListController extends Controller use AccountFilter; use TransactionFilter; - private CurrencyRepositoryInterface $repository; - - /** - * CurrencyRepository constructor. - * - - */ - public function __construct() - { - parent::__construct(); - $this->middleware( - function ($request, $next) { - $this->repository = app(CurrencyRepositoryInterface::class); - $this->repository->setUser(auth()->user()); - - return $next($request); - } - ); - } - /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listAccountByCurrency diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php index 6f2d001fea..0b22a06dac 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php @@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; @@ -116,7 +116,7 @@ class ShowController extends Controller /** @var User $user */ $user = auth()->user(); $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); $this->parameters->set('defaultCurrency', $defaultCurrency); // update fields with user info. @@ -146,7 +146,7 @@ class ShowController extends Controller /** @var User $user */ $user = auth()->user(); $manager = $this->getManager(); - $currency = app('amount')->getDefaultCurrencyByUser($user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); // update fields with user info. $currency->refreshForUser($user); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php index 12a8db0d50..f37f58e672 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php @@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest; use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php index 4401c8a50a..aea98eb6d6 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php @@ -28,7 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\UpdateRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; @@ -83,6 +83,10 @@ class UpdateController extends Controller if ($this->repository->currencyInUse($currency)) { return response()->json([], 409); } + // must not be the only one in use: + if (1 === $this->repository->get()->count()) { + return response()->json([], 409); + } /** @var User $user */ $user = auth()->user(); $this->repository->disable($currency); @@ -180,6 +184,13 @@ class UpdateController extends Controller /** @var User $user */ $user = auth()->user(); + + // safety catch on currency disablement. + $set = $this->repository->get(); + if(array_key_exists('enabled', $data) && false === $data['enabled'] && 1 === count($set) && $set->first()->id === $currency->id){ + return response()->json([], 409); + + } $currency = $this->repository->update($currency, $data); app('preferences')->mark(); diff --git a/app/Api/V1/Controllers/Summary/BasicController.php b/app/Api/V1/Controllers/Summary/BasicController.php index 28ec3b227a..4958b2a72d 100644 --- a/app/Api/V1/Controllers/Summary/BasicController.php +++ b/app/Api/V1/Controllers/Summary/BasicController.php @@ -39,7 +39,7 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; diff --git a/app/Api/V2/Controllers/Chart/CategoryController.php b/app/Api/V2/Controllers/Chart/CategoryController.php index 0ca99d6c36..6346c40f66 100644 --- a/app/Api/V2/Controllers/Chart/CategoryController.php +++ b/app/Api/V2/Controllers/Chart/CategoryController.php @@ -33,7 +33,7 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\CleansChartData; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; diff --git a/app/Api/V2/Controllers/Summary/BasicController.php b/app/Api/V2/Controllers/Summary/BasicController.php index 3b35875c86..bc88c3dd50 100644 --- a/app/Api/V2/Controllers/Summary/BasicController.php +++ b/app/Api/V2/Controllers/Summary/BasicController.php @@ -41,7 +41,7 @@ use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use FireflyIII\User; diff --git a/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php b/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php index 6fb2ea7116..0ee4229960 100644 --- a/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php +++ b/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php @@ -162,6 +162,6 @@ class CorrectOpeningBalanceCurrencies extends Command $repos = app(AccountRepositoryInterface::class); $repos->setUser($account->user); - return $repos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); + return $repos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->userGroup); } } diff --git a/app/Console/Commands/Upgrade/AccountCurrencies.php b/app/Console/Commands/Upgrade/AccountCurrencies.php index c470b70a1d..da588a219d 100644 --- a/app/Console/Commands/Upgrade/AccountCurrencies.php +++ b/app/Console/Commands/Upgrade/AccountCurrencies.php @@ -129,7 +129,7 @@ class AccountCurrencies extends Command $accounts = $this->accountRepos->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); // get user's currency preference: - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($user); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); /** @var Account $account */ foreach ($accounts as $account) { diff --git a/app/Console/Commands/Upgrade/BudgetLimitCurrency.php b/app/Console/Commands/Upgrade/BudgetLimitCurrency.php index 7cbd97aba6..476b5ff1ac 100644 --- a/app/Console/Commands/Upgrade/BudgetLimitCurrency.php +++ b/app/Console/Commands/Upgrade/BudgetLimitCurrency.php @@ -77,7 +77,7 @@ class BudgetLimitCurrency extends Command if (null !== $budget) { $user = $budget->user; if (null !== $user) { - $currency = app('amount')->getDefaultCurrencyByUser($user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); $budgetLimit->transaction_currency_id = $currency->id; $budgetLimit->save(); $this->friendlyInfo( diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 7321c86b81..14b71ee641 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -39,7 +39,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; diff --git a/app/Helpers/Report/NetWorth.php b/app/Helpers/Report/NetWorth.php index f8505c7321..99a15e67c1 100644 --- a/app/Helpers/Report/NetWorth.php +++ b/app/Helpers/Report/NetWorth.php @@ -29,7 +29,7 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\UserGroup; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Api\ExchangeRateConverter; diff --git a/app/Helpers/Report/PopupReport.php b/app/Helpers/Report/PopupReport.php index 94b56ac7fd..287cbca014 100644 --- a/app/Helpers/Report/PopupReport.php +++ b/app/Helpers/Report/PopupReport.php @@ -29,7 +29,7 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Support\Collection; diff --git a/app/Http/Controllers/Budget/BudgetLimitController.php b/app/Http/Controllers/Budget/BudgetLimitController.php index ee6c02d6b2..8cc83335cd 100644 --- a/app/Http/Controllers/Budget/BudgetLimitController.php +++ b/app/Http/Controllers/Budget/BudgetLimitController.php @@ -32,7 +32,7 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; diff --git a/app/Http/Controllers/Budget/IndexController.php b/app/Http/Controllers/Budget/IndexController.php index 550e1348a2..22eb85d586 100644 --- a/app/Http/Controllers/Budget/IndexController.php +++ b/app/Http/Controllers/Budget/IndexController.php @@ -34,7 +34,7 @@ use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index 00c6a5c661..ab4cdf48e3 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -33,7 +33,7 @@ use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Controllers\AugumentData; use FireflyIII\Support\Http\Controllers\ChartGeneration; diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php deleted file mode 100644 index 203cf27074..0000000000 --- a/app/Http/Controllers/CurrencyController.php +++ /dev/null @@ -1,48 +0,0 @@ -. - */ -declare(strict_types=1); - -namespace FireflyIII\Http\Controllers; - -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Http\Requests\CurrencyFormRequest; -use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; -use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\User; -use Illuminate\Contracts\View\Factory; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\RedirectResponse; -use Illuminate\Http\Request; -use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; -use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; - -/** - * Class CurrencyController. - */ -class CurrencyController extends Controller -{ -} diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index 66ec5e7242..614f491830 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -29,7 +29,7 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\GetConfigurationData; use Illuminate\Http\Request; use Illuminate\Http\Response; diff --git a/app/Http/Controllers/Json/BoxController.php b/app/Http/Controllers/Json/BoxController.php index c47451fa71..5e270878d3 100644 --- a/app/Http/Controllers/Json/BoxController.php +++ b/app/Http/Controllers/Json/BoxController.php @@ -35,7 +35,7 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Log; diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index 5f85744279..3a2d8e8680 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -27,7 +27,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Requests\NewUserFormRequest; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\CreateStuff; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; @@ -41,8 +41,7 @@ class NewUserController extends Controller { use CreateStuff; - /** @var AccountRepositoryInterface The account repository */ - private $repository; + private AccountRepositoryInterface $repository; /** * NewUserController constructor. diff --git a/app/Http/Controllers/TransactionCurrency/CreateController.php b/app/Http/Controllers/TransactionCurrency/CreateController.php index f293a9dd80..92a26333cf 100644 --- a/app/Http/Controllers/TransactionCurrency/CreateController.php +++ b/app/Http/Controllers/TransactionCurrency/CreateController.php @@ -7,7 +7,7 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\CurrencyFormRequest; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; diff --git a/app/Http/Controllers/TransactionCurrency/DeleteController.php b/app/Http/Controllers/TransactionCurrency/DeleteController.php index 87a1ad2217..76f95452e4 100644 --- a/app/Http/Controllers/TransactionCurrency/DeleteController.php +++ b/app/Http/Controllers/TransactionCurrency/DeleteController.php @@ -6,7 +6,7 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; diff --git a/app/Http/Controllers/TransactionCurrency/EditController.php b/app/Http/Controllers/TransactionCurrency/EditController.php index 3ffd571991..037163caa4 100644 --- a/app/Http/Controllers/TransactionCurrency/EditController.php +++ b/app/Http/Controllers/TransactionCurrency/EditController.php @@ -7,7 +7,7 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\CurrencyFormRequest; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php index 2692e8be87..ab750dac49 100644 --- a/app/Http/Controllers/TransactionCurrency/IndexController.php +++ b/app/Http/Controllers/TransactionCurrency/IndexController.php @@ -4,18 +4,14 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\TransactionCurrency; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; -use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; @@ -58,12 +54,12 @@ class IndexController extends Controller public function index(Request $request) { /** @var User $user */ - $user = auth()->user(); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $collection = $this->repository->getAll(); - $total = $collection->count(); - $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); + $user = auth()->user(); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $collection = $this->repository->getAll(); + $total = $collection->count(); + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); // order so default is on top: $collection = $collection->sortBy( @@ -76,7 +72,7 @@ class IndexController extends Controller $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); $currencies->setPath(route('currencies.index')); - $isOwner = true; + $isOwner = true; if (!$this->userRepository->hasRole($user, 'owner')) { $request->session()->flash('info', (string)trans('firefly.ask_site_owner', ['owner' => config('firefly.site_owner')])); $isOwner = false; diff --git a/app/Models/Account.php b/app/Models/Account.php index c44881ef38..11fc5c1aa4 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -103,6 +103,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property string $current_debt * @property int|null $user_group_id * @method static EloquentBuilder|Account whereUserGroupId($value) + * @property-read \FireflyIII\Models\UserGroup|null $userGroup * @mixin Eloquent */ class Account extends Model @@ -283,6 +284,14 @@ class Account extends Model return $this->hasMany(Transaction::class); } + /** + * @return BelongsTo + */ + public function userGroup(): BelongsTo + { + return $this->belongsTo(UserGroup::class); + } + /** * Get the virtual balance * diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index cf08a38f71..868b38f008 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -69,6 +69,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereUpdatedAt($value) * @method static Builder|TransactionCurrency withTrashed() * @method static Builder|TransactionCurrency withoutTrashed() + * @property-read Collection $userGroups + * @property-read int|null $user_groups_count + * @property-read Collection $users + * @property-read int|null $users_count * @mixin Eloquent */ class TransactionCurrency extends Model @@ -118,8 +122,8 @@ class TransactionCurrency extends Model */ public function refreshForUser(User $user) { - $current = $user->currencies()->where('transaction_currencies.id', $this->id)->first(); - $default = app('amount')->getDefaultCurrencyByUser($user); + $current = $user->userGroup->currencies()->where('transaction_currencies.id', $this->id)->first(); + $default = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); $this->userDefault = (int)$default->id === (int)$this->id; $this->userEnabled = null !== $current; } diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index e1958fa7c5..8d8a2dcbb0 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -86,6 +86,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property-read int|null $transaction_groups_count * @property-read Collection $webhooks * @property-read int|null $webhooks_count + * @property-read Collection $currencies + * @property-read int|null $currencies_count * @mixin Eloquent */ class UserGroup extends Model diff --git a/app/Providers/CurrencyServiceProvider.php b/app/Providers/CurrencyServiceProvider.php index a543385757..47b9070c33 100644 --- a/app/Providers/CurrencyServiceProvider.php +++ b/app/Providers/CurrencyServiceProvider.php @@ -25,6 +25,8 @@ namespace FireflyIII\Providers; use FireflyIII\Repositories\Currency\CurrencyRepository; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepository as GroupCurrencyRepository; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface as GroupCurrencyRepositoryInterface; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; @@ -55,6 +57,19 @@ class CurrencyServiceProvider extends ServiceProvider $repository->setUser(auth()->user()); } + return $repository; + } + ); + $this->app->bind( + GroupCurrencyRepositoryInterface::class, + function (Application $app) { + /** @var GroupCurrencyRepository $repository */ + $repository = app(GroupCurrencyRepository::class); + // phpstan does not get the reference to auth + if ($app->auth->check()) { // @phpstan-ignore-line + $repository->setUser(auth()->user()); + } + return $repository; } ); diff --git a/app/Repositories/Account/AccountTasker.php b/app/Repositories/Account/AccountTasker.php index bb34482089..e30e983ef8 100644 --- a/app/Repositories/Account/AccountTasker.php +++ b/app/Repositories/Account/AccountTasker.php @@ -28,7 +28,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Account; use FireflyIII\Models\TransactionType; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index 6f51384b8c..4cb267b9f9 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -24,25 +24,12 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Currency; use Carbon\Carbon; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Factory\TransactionCurrencyFactory; -use FireflyIII\Models\AccountMeta; -use FireflyIII\Models\AvailableBudget; -use FireflyIII\Models\Bill; -use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\CurrencyExchangeRate; -use FireflyIII\Models\Preference; -use FireflyIII\Models\RecurrenceTransaction; -use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\Services\Internal\Destroy\CurrencyDestroyService; -use FireflyIII\Services\Internal\Update\CurrencyUpdateService; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; /** * Class CurrencyRepository. @@ -51,358 +38,6 @@ class CurrencyRepository implements CurrencyRepositoryInterface { private User $user; - /** - * @param TransactionCurrency $currency - * - * @return bool - * @throws FireflyException - */ - public function currencyInUse(TransactionCurrency $currency): bool - { - $result = $this->currencyInUseAt($currency); - - return null !== $result; - } - - /** - * @param TransactionCurrency $currency - * - * @return string|null - * @throws FireflyException - */ - public function currencyInUseAt(TransactionCurrency $currency): ?string - { - Log::debug(sprintf('Now in currencyInUse() for #%d ("%s")', $currency->id, $currency->code)); - $countJournals = $this->countJournals($currency); - if ($countJournals > 0) { - Log::info(sprintf('Count journals is %d, return true.', $countJournals)); - - return 'journals'; - } - - // is the only currency left - if (1 === $this->getAll()->count()) { - Log::info('Is the last currency in the system, return true. '); - - return 'last_left'; - } - - // is being used in accounts: - $meta = AccountMeta::where('name', 'currency_id')->where('data', json_encode((string)$currency->id))->count(); - if ($meta > 0) { - Log::info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); - - return 'account_meta'; - } - - // is being used in bills: - $bills = Bill::where('transaction_currency_id', $currency->id)->count(); - if ($bills > 0) { - Log::info(sprintf('Used in %d bills as currency, return true. ', $bills)); - - return 'bills'; - } - - // is being used in recurring transactions - $recurringAmount = RecurrenceTransaction::where('transaction_currency_id', $currency->id)->count(); - $recurringForeign = RecurrenceTransaction::where('foreign_currency_id', $currency->id)->count(); - - if ($recurringAmount > 0 || $recurringForeign > 0) { - Log::info(sprintf('Used in %d recurring transactions as (foreign) currency id, return true. ', $recurringAmount + $recurringForeign)); - - return 'recurring'; - } - - // is being used in accounts (as integer) - $meta = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') - ->whereNull('accounts.deleted_at') - ->where('account_meta.name', 'currency_id')->where('account_meta.data', json_encode((int)$currency->id))->count(); - if ($meta > 0) { - Log::info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); - - return 'account_meta'; - } - - // is being used in available budgets - $availableBudgets = AvailableBudget::where('transaction_currency_id', $currency->id)->count(); - if ($availableBudgets > 0) { - Log::info(sprintf('Used in %d available budgets as currency, return true. ', $availableBudgets)); - - return 'available_budgets'; - } - - // is being used in budget limits - $budgetLimit = BudgetLimit::where('transaction_currency_id', $currency->id)->count(); - if ($budgetLimit > 0) { - Log::info(sprintf('Used in %d budget limits as currency, return true. ', $budgetLimit)); - - return 'budget_limits'; - } - - // is the default currency for the user or the system - $count = $this->user->currencies()->where('transaction_currencies.id', $currency->id)->wherePivot('user_default', 1)->count(); - if ($count > 0) { - Log::info('Is the default currency of the user, return true.'); - - return 'current_default'; - } - - Log::debug('Currency is not used, return false.'); - - return null; - } - - /** - * @param TransactionCurrency $currency - * - * @return int - */ - public function countJournals(TransactionCurrency $currency): int - { - $count = $currency->transactions()->whereNull('deleted_at')->count() + $currency->transactionJournals()->whereNull('deleted_at')->count(); - - // also count foreign: - return $count + Transaction::where('foreign_currency_id', $currency->id)->count(); - } - - /** - * Returns ALL currencies, regardless of whether they are enabled or not. - * - * @return Collection - */ - public function getAll(): Collection - { - $all = TransactionCurrency::orderBy('code', 'ASC')->get(); - $local = $this->get(); - return $all->map(function (TransactionCurrency $current) use ($local) { - $hasId = $local->contains(function (TransactionCurrency $entry) use ($current) { - return (int)$entry->id === (int)$current->id; - }); - $isDefault = $local->contains(function (TransactionCurrency $entry) use ($current) { - return 1 === (int)$entry->pivot->user_default && (int)$entry->id === (int)$current->id; - }); - $current->userEnabled = $hasId; - $current->userDefault = $isDefault; - return $current; - }); - } - - /** - * @return Collection - */ - public function get(): Collection - { - $all = $this->user->currencies()->orderBy('code', 'ASC')->withPivot(['user_default'])->get(); - $all->map(function (TransactionCurrency $current) { - $current->userEnabled = true; - $current->userDefault = 1 === (int)$current->pivot->user_default; - return $current; - }); - return $all; - } - - /** - * Returns the complete set of transactions but needs - * no user object. - * - * @return Collection - */ - public function getCompleteSet(): Collection - { - return TransactionCurrency::orderBy('code', 'ASC')->get(); - } - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function destroy(TransactionCurrency $currency): bool - { - /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - if ($repository->hasRole($this->user, 'owner')) { - /** @var CurrencyDestroyService $service */ - $service = app(CurrencyDestroyService::class); - $service->destroy($currency); - } - - return true; - } - - /** - * Disables a currency - * - * @param TransactionCurrency $currency - */ - public function disable(TransactionCurrency $currency): void - { - $this->user->currencies()->detach($currency->id); - $currency->enabled = false; - $currency->save(); - } - - /** - * @inheritDoc - */ - public function ensureMinimalEnabledCurrencies(): void - { - // if no currencies are enabled, enable the first one in the DB (usually the EUR) - if (0 === $this->user->currencies()->count()) { - $euro = app('amount')->getSystemCurrency(); - if (null === $euro) { - throw new FireflyException('No currencies found. You broke Firefly III'); - } - Log::channel('audit')->info(sprintf('Auto-enabled currency %s.', $euro->code)); - $this->enable($euro); - app('preferences')->mark(); - } - } - - /** - * @param TransactionCurrency $currency - * Enables a currency - */ - public function enable(TransactionCurrency $currency): void - { - $this->user->currencies()->syncWithoutDetaching([$currency->id]); - $currency->enabled = false; - $currency->save(); - } - - /** - * Find by currency code, return NULL if unfound. - * Used in Import Currency! - * - * @param string $currencyCode - * - * @return TransactionCurrency|null - * @deprecated - */ - public function findByCodeNull(string $currencyCode): ?TransactionCurrency - { - return TransactionCurrency::where('code', $currencyCode)->first(); - } - - /** - * Find by currency name. - * - * @param string $currencyName - * - * @return TransactionCurrency|null - */ - public function findByName(string $currencyName): ?TransactionCurrency - { - return TransactionCurrency::whereName($currencyName)->first(); - } - - /** - * Find by currency name or return null. - * Used in Import Currency! - * - * @param string $currencyName - * - * @return TransactionCurrency|null - * @deprecated - */ - public function findByNameNull(string $currencyName): ?TransactionCurrency - { - return TransactionCurrency::whereName($currencyName)->first(); - } - - /** - * Find by currency symbol. - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - */ - public function findBySymbol(string $currencySymbol): ?TransactionCurrency - { - return TransactionCurrency::whereSymbol($currencySymbol)->first(); - } - - /** - * Find by currency symbol or return NULL - * Used in Import Currency! - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - * @deprecated - */ - public function findBySymbolNull(string $currencySymbol): ?TransactionCurrency - { - return TransactionCurrency::whereSymbol($currencySymbol)->first(); - } - - /** - * Find by object, ID or code. Returns user default or system default. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency - * @throws FireflyException - * @throws JsonException - */ - public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency - { - $result = $this->findCurrencyNull($currencyId, $currencyCode); - - if (null === $result) { - Log::debug('Grabbing default currency for this user...'); - $result = app('amount')->getDefaultCurrencyByUser($this->user); - } - - if (null === $result) { - Log::debug('Grabbing EUR as fallback.'); - $result = $this->findByCode('EUR'); - } - Log::debug(sprintf('Final result: %s', $result->code)); - if (false === $result->enabled) { - Log::debug(sprintf('Also enabled currency %s', $result->code)); - $this->enable($result); - } - - return $result; - } - - /** - * Find by object, ID or code. Returns NULL if nothing found. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency|null - */ - public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency - { - Log::debug('Now in findCurrencyNull()'); - $result = $this->find((int)$currencyId); - if (null === $result) { - Log::debug(sprintf('Searching for currency with code %s...', $currencyCode)); - $result = $this->findByCode((string)$currencyCode); - } - if (null !== $result && false === $result->enabled) { - Log::debug(sprintf('Also enabled currency %s', $result->code)); - $this->enable($result); - } - - return $result; - } - - /** - * Find by ID, return NULL if not found. - * - * @param int $currencyId - * - * @return TransactionCurrency|null - */ - public function find(int $currencyId): ?TransactionCurrency - { - return TransactionCurrency::find($currencyId); - } /** * Find by currency code, return NULL if unfound. @@ -416,30 +51,18 @@ class CurrencyRepository implements CurrencyRepositoryInterface return TransactionCurrency::where('code', $currencyCode)->first(); } + /** - * @param array $ids + * Returns the complete set of transactions but needs + * no user object. * * @return Collection */ - public function getByIds(array $ids): Collection + public function getCompleteSet(): Collection { - return TransactionCurrency::orderBy('code', 'ASC')->whereIn('id', $ids)->get(); + return TransactionCurrency::orderBy('code', 'ASC')->get(); } - /** - * @param Preference $preference - * - * @return TransactionCurrency - */ - public function getCurrencyByPreference(Preference $preference): TransactionCurrency - { - $preferred = TransactionCurrency::where('code', $preference->data)->first(); - if (null === $preferred) { - $preferred = TransactionCurrency::first(); - } - - return $preferred; - } /** * Get currency exchange rate. @@ -473,38 +96,6 @@ class CurrencyRepository implements CurrencyRepositoryInterface return null; } - /** - * @inheritDoc - */ - public function getUserCurrencies(User $user): Collection - { - return $user->currencies()->get(); - } - - /** - * @inheritDoc - */ - public function isFallbackCurrency(TransactionCurrency $currency): bool - { - return $currency->code === config('firefly.default_currency', 'EUR'); - } - - /** - * @param string $search - * @param int $limit - * - * @return Collection - */ - public function searchCurrency(string $search, int $limit): Collection - { - $query = TransactionCurrency::where('enabled', true); - if ('' !== $search) { - $query->where('name', 'LIKE', sprintf('%%%s%%', $search)); - } - - return $query->take($limit)->get(); - } - /** * TODO must be a factory * @@ -538,88 +129,4 @@ class CurrencyRepository implements CurrencyRepositoryInterface } } - /** - * @param array $data - * - * @return TransactionCurrency - * @throws FireflyException - */ - public function store(array $data): TransactionCurrency - { - /** @var TransactionCurrencyFactory $factory */ - $factory = app(TransactionCurrencyFactory::class); - $result = $factory->create($data); - - if (true === $data['enabled']) { - $this->user->currencies()->attach($result->id); - } - - return $result; - } - - /** - * @param TransactionCurrency $currency - * @param array $data - * - * @return TransactionCurrency - */ - public function update(TransactionCurrency $currency, array $data): TransactionCurrency - { - app('log')->debug('Now in update()'); - // can be true, false, null - $enabled = array_key_exists('enabled', $data) ? $data['enabled'] : null; - // can be true, false, but method only responds to "true". - $default = array_key_exists('default', $data) ? $data['default'] : false; - - // remove illegal combo's: - if (false === $enabled && true === $default) { - $enabled = true; - } - if (false === $default) { - app('log')->warning(sprintf('Set default=false will NOT do anything for currency %s', $currency->code)); - } - - // update currency with current user specific settings - $currency->refreshForUser($this->user); - - // currency is enabled, must be disabled. - if (false === $enabled) { - app('log')->debug(sprintf('Disabled currency %s for user #%d', $currency->code, $this->user->id)); - $this->user->currencies()->detach($currency->id); - } - // currency must be enabled - if (true === $enabled) { - app('log')->debug(sprintf('Enabled currency %s for user #%d', $currency->code, $this->user->id)); - $this->user->currencies()->detach($currency->id); - $this->user->currencies()->syncWithoutDetaching([$currency->id => ['user_default' => false]]); - } - - // currency must be made default. - if (true === $default) { - app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->user->id)); - $this->user->currencies()->detach($currency->id); - foreach ($this->user->currencies()->get() as $item) { - $this->user->currencies()->updateExistingPivot($item->id, ['user_default' => false]); - } - $this->user->currencies()->syncWithoutDetaching([$currency->id => ['user_default' => true]]); - } - - /** @var CurrencyUpdateService $service */ - $service = app(CurrencyUpdateService::class); - - return $service->update($currency, $data); - } - - /** - * @inheritDoc - */ - public function makeDefault(TransactionCurrency $currency): void - { - app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->user->id)); - $this->user->currencies()->detach($currency->id); - foreach ($this->user->currencies()->get() as $item) { - $this->user->currencies()->updateExistingPivot($item->id, ['user_default' => false]); - } - $this->user->currencies()->syncWithoutDetaching([$currency->id => ['user_default' => true]]); - } } diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index e1a53d16be..26475fb7aa 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -26,7 +26,6 @@ namespace FireflyIII\Repositories\Currency; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\CurrencyExchangeRate; -use FireflyIII\Models\Preference; use FireflyIII\Models\TransactionCurrency; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; @@ -37,75 +36,11 @@ use Illuminate\Support\Collection; */ interface CurrencyRepositoryInterface { - /** - * Returns the complete set of transactions but needs - * no user object. - * - * @return Collection - */ - public function getCompleteSet(): Collection; - - /** - * @param TransactionCurrency $currency - * - * @return int - */ - public function countJournals(TransactionCurrency $currency): int; - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function currencyInUse(TransactionCurrency $currency): bool; - - /** - * Currency is in use where exactly. - * - * @param TransactionCurrency $currency - * - * @return string|null - */ - public function currencyInUseAt(TransactionCurrency $currency): ?string; - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function destroy(TransactionCurrency $currency): bool; - - /** - * Disables a currency - * - * @param TransactionCurrency $currency - */ - public function disable(TransactionCurrency $currency): void; - - /** - * Enables a currency - * - * @param TransactionCurrency $currency - */ - public function enable(TransactionCurrency $currency): void; - - /** - * @return void - */ - public function ensureMinimalEnabledCurrencies(): void; - - /** - * Find by ID, return NULL if not found. - * - * @param int $currencyId - * - * @return TransactionCurrency|null - */ - public function find(int $currencyId): ?TransactionCurrency; - /** * Find by currency code, return NULL if unfound. * + * Used in the download exchange rates cron job. Does not require user object. + * * @param string $currencyCode * * @return TransactionCurrency|null @@ -113,97 +48,20 @@ interface CurrencyRepositoryInterface public function findByCode(string $currencyCode): ?TransactionCurrency; /** - * Find by currency code, return NULL if unfound. + * Returns the complete set of transactions but needs + * no user object. * - * @param string $currencyCode - * - * @return TransactionCurrency|null - */ - public function findByCodeNull(string $currencyCode): ?TransactionCurrency; - - /** - * Find by currency name. - * - * @param string $currencyName - * - * @return TransactionCurrency|null - */ - public function findByName(string $currencyName): ?TransactionCurrency; - - /** - * Find by currency name. - * - * @param string $currencyName - * - * @return TransactionCurrency|null - */ - public function findByNameNull(string $currencyName): ?TransactionCurrency; - - /** - * Find by currency symbol. - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - */ - public function findBySymbol(string $currencySymbol): ?TransactionCurrency; - - /** - * Find by currency symbol. - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - */ - public function findBySymbolNull(string $currencySymbol): ?TransactionCurrency; - - /** - * Find by object, ID or code. Returns user default or system default. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency - */ - public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency; - - /** - * Find by object, ID or code. Returns NULL if nothing found. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency|null - */ - public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency; - - /** - * @return Collection - */ - public function get(): Collection; - - /** - * @return Collection - */ - public function getAll(): Collection; - - /** - * @param array $ids + * Used by the download exchange rate cron job. * * @return Collection */ - public function getByIds(array $ids): Collection; - - /** - * @param Preference $preference - * - * @return TransactionCurrency - */ - public function getCurrencyByPreference(Preference $preference): TransactionCurrency; + public function getCompleteSet(): Collection; /** * Get currency exchange rate. * + * Used in the download exchange rate cron job. Needs the user object! + * * @param TransactionCurrency $fromCurrency * @param TransactionCurrency $toCurrency * @param Carbon $date @@ -213,36 +71,9 @@ interface CurrencyRepositoryInterface public function getExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date): ?CurrencyExchangeRate; /** - * @param TransactionCurrency $currency + * Set currency exchange rate. * - * @return void - */ - public function makeDefault(TransactionCurrency $currency): void; - - /** - * @param User $user - * - * @return Collection - */ - public function getUserCurrencies(User $user): Collection; - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function isFallbackCurrency(TransactionCurrency $currency): bool; - - /** - * @param string $search - * @param int $limit - * - * @return Collection - */ - public function searchCurrency(string $search, int $limit): Collection; - - /** - * TODO must be a factory + * Used in download exchange rate cron job. Needs the user object! * * @param TransactionCurrency $fromCurrency * @param TransactionCurrency $toCurrency @@ -258,19 +89,4 @@ interface CurrencyRepositoryInterface */ public function setUser(User | Authenticatable | null $user): void; - /** - * @param array $data - * - * @return TransactionCurrency - * @throws FireflyException - */ - public function store(array $data): TransactionCurrency; - - /** - * @param TransactionCurrency $currency - * @param array $data - * - * @return TransactionCurrency - */ - public function update(TransactionCurrency $currency, array $data): TransactionCurrency; } diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepository.php b/app/Repositories/UserGroups/Currency/CurrencyRepository.php new file mode 100644 index 0000000000..b7aafdbbb1 --- /dev/null +++ b/app/Repositories/UserGroups/Currency/CurrencyRepository.php @@ -0,0 +1,418 @@ +currencyInUseAt($currency); + + return null !== $result; + } + + /** + * @param TransactionCurrency $currency + * + * @return string|null + * @throws FireflyException + */ + public function currencyInUseAt(TransactionCurrency $currency): ?string + { + app('log')->debug(sprintf('Now in currencyInUse() for #%d ("%s")', $currency->id, $currency->code)); + $countJournals = $this->countJournals($currency); + if ($countJournals > 0) { + app('log')->info(sprintf('Count journals is %d, return true.', $countJournals)); + + return 'journals'; + } + + // is the only currency left + if (1 === $this->getAll()->count()) { + app('log')->info('Is the last currency in the system, return true. '); + + return 'last_left'; + } + + // is being used in accounts: + $meta = AccountMeta::where('name', 'currency_id')->where('data', json_encode((string)$currency->id))->count(); + if ($meta > 0) { + app('log')->info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); + + return 'account_meta'; + } + + // is being used in bills: + $bills = Bill::where('transaction_currency_id', $currency->id)->count(); + if ($bills > 0) { + app('log')->info(sprintf('Used in %d bills as currency, return true. ', $bills)); + + return 'bills'; + } + + // is being used in recurring transactions + $recurringAmount = RecurrenceTransaction::where('transaction_currency_id', $currency->id)->count(); + $recurringForeign = RecurrenceTransaction::where('foreign_currency_id', $currency->id)->count(); + + if ($recurringAmount > 0 || $recurringForeign > 0) { + app('log')->info(sprintf('Used in %d recurring transactions as (foreign) currency id, return true. ', $recurringAmount + $recurringForeign)); + + return 'recurring'; + } + + // is being used in accounts (as integer) + $meta = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') + ->whereNull('accounts.deleted_at') + ->where('account_meta.name', 'currency_id')->where('account_meta.data', json_encode((int)$currency->id))->count(); + if ($meta > 0) { + app('log')->info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); + + return 'account_meta'; + } + + // is being used in available budgets + $availableBudgets = AvailableBudget::where('transaction_currency_id', $currency->id)->count(); + if ($availableBudgets > 0) { + app('log')->info(sprintf('Used in %d available budgets as currency, return true. ', $availableBudgets)); + + return 'available_budgets'; + } + + // is being used in budget limits + $budgetLimit = BudgetLimit::where('transaction_currency_id', $currency->id)->count(); + if ($budgetLimit > 0) { + app('log')->info(sprintf('Used in %d budget limits as currency, return true. ', $budgetLimit)); + + return 'budget_limits'; + } + + // is the default currency for the user or the system + $count = $this->userGroup->currencies()->where('transaction_currencies.id', $currency->id)->wherePivot('group_default', 1)->count(); + if ($count > 0) { + app('log')->info('Is the default currency of the user, return true.'); + + return 'current_default'; + } + + // is the default currency for the user or the system + $count = $this->userGroup->currencies()->where('transaction_currencies.id', $currency->id)->wherePivot('group_default', 1)->count(); + if ($count > 0) { + app('log')->info('Is the default currency of the user group, return true.'); + + return 'current_default'; + } + + app('log')->debug('Currency is not used, return false.'); + + return null; + } + + /** + * @param TransactionCurrency $currency + * + * @return int + */ + private function countJournals(TransactionCurrency $currency): int + { + $count = $currency->transactions()->whereNull('deleted_at')->count() + $currency->transactionJournals()->whereNull('deleted_at')->count(); + + // also count foreign: + return $count + Transaction::where('foreign_currency_id', $currency->id)->count(); + } + + /** + * Returns ALL currencies, regardless of whether they are enabled or not. + * + * @return Collection + */ + public function getAll(): Collection + { + $all = TransactionCurrency::orderBy('code', 'ASC')->get(); + $local = $this->get(); + return $all->map(function (TransactionCurrency $current) use ($local) { + $hasId = $local->contains(function (TransactionCurrency $entry) use ($current) { + return (int)$entry->id === (int)$current->id; + }); + $isDefault = $local->contains(function (TransactionCurrency $entry) use ($current) { + return 1 === (int)$entry->pivot->group_default && (int)$entry->id === (int)$current->id; + }); + $current->userEnabled = $hasId; + $current->userDefault = $isDefault; + return $current; + }); + } + + /** + * Get the user group's currencies. + * @return Collection + */ + public function get(): Collection + { + $all = $this->userGroup->currencies()->orderBy('code', 'ASC')->withPivot(['group_default'])->get(); + $all->map(function (TransactionCurrency $current) { + $current->userEnabled = true; + $current->userDefault = 1 === (int)$current->pivot->group_default; + return $current; + }); + return $all; + } + + /** + * @param TransactionCurrency $currency + * + * @return bool + */ + public function destroy(TransactionCurrency $currency): bool + { + /** @var UserRepositoryInterface $repository */ + $repository = app(UserRepositoryInterface::class); + if ($repository->hasRole($this->user, 'owner')) { + /** @var CurrencyDestroyService $service */ + $service = app(CurrencyDestroyService::class); + $service->destroy($currency); + } + + return true; + } + + /** + * Disables a currency + * + * @param TransactionCurrency $currency + */ + public function disable(TransactionCurrency $currency): void + { + $this->userGroup->currencies()->detach($currency->id); + $currency->enabled = false; + $currency->save(); + } + + /** + * Find by object, ID or code. Returns user default or system default. + * + * @param int|null $currencyId + * @param string|null $currencyCode + * + * @return TransactionCurrency + * @throws FireflyException + * @throws JsonException + */ + public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency + { + $result = $this->findCurrencyNull($currencyId, $currencyCode); + + if (null === $result) { + Log::debug('Grabbing default currency for this user...'); + $result = app('amount')->getDefaultCurrencyByUser($this->user); + } + + if (null === $result) { + Log::debug('Grabbing EUR as fallback.'); + $result = $this->findByCode('EUR'); + } + Log::debug(sprintf('Final result: %s', $result->code)); + if (false === $result->enabled) { + Log::debug(sprintf('Also enabled currency %s', $result->code)); + $this->enable($result); + } + + return $result; + } + + /** + * Find by object, ID or code. Returns NULL if nothing found. + * + * @param int|null $currencyId + * @param string|null $currencyCode + * + * @return TransactionCurrency|null + */ + public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency + { + Log::debug('Now in findCurrencyNull()'); + $result = $this->find((int)$currencyId); + if (null === $result) { + Log::debug(sprintf('Searching for currency with code %s...', $currencyCode)); + $result = $this->findByCode((string)$currencyCode); + } + if (null !== $result && false === $result->enabled) { + Log::debug(sprintf('Also enabled currency %s', $result->code)); + $this->enable($result); + } + + return $result; + } + + /** + * Find by ID, return NULL if not found. + * + * @param int $currencyId + * + * @return TransactionCurrency|null + */ + public function find(int $currencyId): ?TransactionCurrency + { + return TransactionCurrency::find($currencyId); + } + + /** + * Find by currency code, return NULL if unfound. + * + * @param string $currencyCode + * + * @return TransactionCurrency|null + */ + private function findByCode(string $currencyCode): ?TransactionCurrency + { + return TransactionCurrency::where('code', $currencyCode)->first(); + } + + /** + * @param TransactionCurrency $currency + * Enables a currency + */ + public function enable(TransactionCurrency $currency): void + { + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id]); + $currency->enabled = false; + $currency->save(); + } + + /** + * @inheritDoc + */ + public function isFallbackCurrency(TransactionCurrency $currency): bool + { + return $currency->code === config('firefly.default_currency', 'EUR'); + } + + /** + * @inheritDoc + */ + public function makeDefault(TransactionCurrency $currency): void + { + app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + foreach ($this->userGroup->currencies()->get() as $item) { + $this->userGroup->currencies()->updateExistingPivot($item->id, ['group_default' => false]); + } + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id => ['group_default' => true]]); + } + + /** + * @param string $search + * @param int $limit + * + * @return Collection + */ + public function searchCurrency(string $search, int $limit): Collection + { + $query = TransactionCurrency::where('enabled', true); + if ('' !== $search) { + $query->where('name', 'LIKE', sprintf('%%%s%%', $search)); + } + + return $query->take($limit)->get(); + } + + /** + * @param array $data + * + * @return TransactionCurrency + * @throws FireflyException + */ + public function store(array $data): TransactionCurrency + { + /** @var TransactionCurrencyFactory $factory */ + $factory = app(TransactionCurrencyFactory::class); + $result = $factory->create($data); + + if (true === $data['enabled']) { + $this->userGroup->currencies()->attach($result->id); + } + + return $result; + } + + /** + * @param TransactionCurrency $currency + * @param array $data + * + * @return TransactionCurrency + */ + public function update(TransactionCurrency $currency, array $data): TransactionCurrency + { + app('log')->debug('Now in update()'); + // can be true, false, null + $enabled = array_key_exists('enabled', $data) ? $data['enabled'] : null; + // can be true, false, but method only responds to "true". + $default = array_key_exists('default', $data) ? $data['default'] : false; + + // remove illegal combo's: + if (false === $enabled && true === $default) { + $enabled = true; + } + if (false === $default) { + app('log')->warning(sprintf('Set default=false will NOT do anything for currency %s', $currency->code)); + } + + // update currency with current user specific settings + $currency->refreshForUser($this->user); + + // currency is enabled, must be disabled. + if (false === $enabled) { + app('log')->debug(sprintf('Disabled currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + } + // currency must be enabled + if (true === $enabled) { + app('log')->debug(sprintf('Enabled currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id => ['group_default' => false]]); + } + + // currency must be made default. + if (true === $default) { + app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + foreach ($this->userGroup->currencies()->get() as $item) { + $this->userGroup->currencies()->updateExistingPivot($item->id, ['group_default' => false]); + } + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id => ['group_default' => true]]); + } + + /** @var CurrencyUpdateService $service */ + $service = app(CurrencyUpdateService::class); + + return $service->update($currency, $data); + } +} diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php new file mode 100644 index 0000000000..8e61214c31 --- /dev/null +++ b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php @@ -0,0 +1,129 @@ +addProperty('getDefaultCurrencyByGroup'); + $cache->addProperty($userGroup->id); + if ($cache->has()) { + return $cache->get(); + } + $default = $userGroup->currencies()->where('group_default', true)->first(); + if(null === $default) { + $default = $this->getSystemCurrency(); + $userGroup->currencies()->sync([$default->id => ['group_default' => true]]); + } + $cache->store($default); + + return $default; + } /** * @param string $value diff --git a/app/Support/Form/CurrencyForm.php b/app/Support/Form/CurrencyForm.php index ea44ade235..0fc4487edd 100644 --- a/app/Support/Form/CurrencyForm.php +++ b/app/Support/Form/CurrencyForm.php @@ -26,7 +26,7 @@ namespace FireflyIII\Support\Form; use Amount as Amt; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; use Throwable; diff --git a/app/Support/Http/Controllers/ChartGeneration.php b/app/Support/Http/Controllers/ChartGeneration.php index 5b2cd7c6e6..bfb84f7937 100644 --- a/app/Support/Http/Controllers/ChartGeneration.php +++ b/app/Support/Http/Controllers/ChartGeneration.php @@ -28,7 +28,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; @@ -66,8 +65,6 @@ trait ChartGeneration /** @var GeneratorInterface $generator */ $generator = app(GeneratorInterface::class); - /** @var CurrencyRepositoryInterface $repository */ - $repository = app(CurrencyRepositoryInterface::class); /** @var AccountRepositoryInterface $accountRepos */ $accountRepos = app(AccountRepositoryInterface::class); @@ -76,7 +73,7 @@ trait ChartGeneration /** @var Account $account */ foreach ($accounts as $account) { // TODO we can use getAccountCurrency instead. - $currency = $repository->find((int)$accountRepos->getMetaValue($account, 'currency_id')); + $currency = $accountRepos->getAccountCurrency($account); if (null === $currency) { $currency = $default; } diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index b0a64829fc..664dbdff66 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -34,7 +34,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; use FireflyIII\Support\ParseDateString; use FireflyIII\User; diff --git a/app/User.php b/app/User.php index cac5cbf8ca..f4575642d6 100644 --- a/app/User.php +++ b/app/User.php @@ -167,6 +167,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property-read int|null $group_memberships_count * @property-read UserGroup|null $userGroup * @method static Builder|User whereUserGroupId($value) + * @property-read \Illuminate\Database\Eloquent\Collection $currencies + * @property-read int|null $currencies_count * @mixin Eloquent */ class User extends Authenticatable diff --git a/composer.lock b/composer.lock index 5f2d0642f0..aa80ae81a9 100644 --- a/composer.lock +++ b/composer.lock @@ -3590,16 +3590,16 @@ }, { "name": "monolog/monolog", - "version": "3.4.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d" + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", "shasum": "" }, "require": { @@ -3675,7 +3675,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.4.0" + "source": "https://github.com/Seldaek/monolog/tree/3.5.0" }, "funding": [ { @@ -3687,7 +3687,7 @@ "type": "tidelift" } ], - "time": "2023-06-21T08:46:11+00:00" + "time": "2023-10-27T15:32:31+00:00" }, { "name": "nesbot/carbon", @@ -11693,5 +11693,5 @@ "platform-overrides": { "php": "8.2" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } From fa920fed4efb4bace060e68eb3595b6b8e407b64 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 28 Oct 2023 14:59:16 +0200 Subject: [PATCH 43/48] Introduce missing methods --- .../Controllers/Chart/AccountController.php | 7 +--- .../Insight/Expense/AccountController.php | 5 --- .../Insight/Income/AccountController.php | 5 --- .../Upgrade/OtherCurrenciesCorrections.php | 8 ++--- app/Factory/BillFactory.php | 2 +- app/Factory/TransactionJournalFactory.php | 2 +- app/Repositories/Budget/BudgetRepository.php | 5 ++- .../Currency/CurrencyRepositoryInterface.php | 1 - .../Currency/CurrencyRepository.php | 13 ++++++- .../Currency/CurrencyRepositoryInterface.php | 14 ++++++++ .../PiggyBankEventTransformer.php | 8 ++--- app/Transformers/PiggyBankTransformer.php | 8 ++--- app/Transformers/V2/AccountTransformer.php | 4 ++- changelog.md | 35 +++++++++++++++++++ config/firefly.php | 4 +-- 15 files changed, 79 insertions(+), 42 deletions(-) diff --git a/app/Api/V1/Controllers/Chart/AccountController.php b/app/Api/V1/Controllers/Chart/AccountController.php index 5c554c17f2..24f5e5d777 100644 --- a/app/Api/V1/Controllers/Chart/AccountController.php +++ b/app/Api/V1/Controllers/Chart/AccountController.php @@ -31,7 +31,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use FireflyIII\User; use Illuminate\Http\JsonResponse; @@ -46,8 +45,7 @@ class AccountController extends Controller { use ApiSupport; - private CurrencyRepositoryInterface $currencyRepository; - private AccountRepositoryInterface $repository; + private AccountRepositoryInterface $repository; /** * AccountController constructor. @@ -64,9 +62,6 @@ class AccountController extends Controller $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); - $this->currencyRepository = app(CurrencyRepositoryInterface::class); - $this->currencyRepository->setUser($user); - return $next($request); } ); diff --git a/app/Api/V1/Controllers/Insight/Expense/AccountController.php b/app/Api/V1/Controllers/Insight/Expense/AccountController.php index ad9d660d5e..e79d6097af 100644 --- a/app/Api/V1/Controllers/Insight/Expense/AccountController.php +++ b/app/Api/V1/Controllers/Insight/Expense/AccountController.php @@ -28,7 +28,6 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Insight\GenericRequest; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use Illuminate\Http\JsonResponse; @@ -43,7 +42,6 @@ class AccountController extends Controller { use ApiSupport; - private CurrencyRepositoryInterface $currencyRepository; private OperationsRepositoryInterface $opsRepository; private AccountRepositoryInterface $repository; @@ -61,9 +59,6 @@ class AccountController extends Controller $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); - $this->currencyRepository = app(CurrencyRepositoryInterface::class); - $this->currencyRepository->setUser($user); - $this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository->setUser($user); diff --git a/app/Api/V1/Controllers/Insight/Income/AccountController.php b/app/Api/V1/Controllers/Insight/Income/AccountController.php index 5d8aabc7f3..91ab40a071 100644 --- a/app/Api/V1/Controllers/Insight/Income/AccountController.php +++ b/app/Api/V1/Controllers/Insight/Income/AccountController.php @@ -28,7 +28,6 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Insight\GenericRequest; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use Illuminate\Http\JsonResponse; @@ -43,7 +42,6 @@ class AccountController extends Controller { use ApiSupport; - private CurrencyRepositoryInterface $currencyRepository; private OperationsRepositoryInterface $opsRepository; private AccountRepositoryInterface $repository; @@ -61,9 +59,6 @@ class AccountController extends Controller $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); - $this->currencyRepository = app(CurrencyRepositoryInterface::class); - $this->currencyRepository->setUser($user); - $this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository->setUser($user); diff --git a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php index 093223fe36..5a34f8f091 100644 --- a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php +++ b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php @@ -31,7 +31,6 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Console\Command; @@ -46,13 +45,12 @@ class OtherCurrenciesCorrections extends Command use ShowsFriendlyMessages; public const CONFIG_NAME = '480_other_currencies'; - protected $description = 'Update all journal currency information.'; - protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; + protected $description = 'Update all journal currency information.'; + protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; private array $accountCurrencies; private AccountRepositoryInterface $accountRepos; private JournalCLIRepositoryInterface $cliRepos; private int $count; - private CurrencyRepositoryInterface $currencyRepos; private JournalRepositoryInterface $journalRepos; /** @@ -93,7 +91,6 @@ class OtherCurrenciesCorrections extends Command $this->count = 0; $this->accountCurrencies = []; $this->accountRepos = app(AccountRepositoryInterface::class); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); $this->journalRepos = app(JournalRepositoryInterface::class); $this->cliRepos = app(JournalCLIRepositoryInterface::class); } @@ -138,7 +135,6 @@ class OtherCurrenciesCorrections extends Command { $this->accountRepos->setUser($journal->user); $this->journalRepos->setUser($journal->user); - $this->currencyRepos->setUser($journal->user); $this->cliRepos->setUser($journal->user); $leadTransaction = $this->getLeadTransaction($journal); diff --git a/app/Factory/BillFactory.php b/app/Factory/BillFactory.php index c2bf305d3a..3e456c3e2a 100644 --- a/app/Factory/BillFactory.php +++ b/app/Factory/BillFactory.php @@ -55,7 +55,7 @@ class BillFactory Log::debug(sprintf('Now in %s', __METHOD__), $data); $factory = app(TransactionCurrencyFactory::class); $currency = $factory->find((int)($data['currency_id'] ?? null), (string)($data['currency_code'] ?? null)) ?? - app('amount')->getDefaultCurrencyByUser($this->user); + app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); try { $skip = array_key_exists('skip', $data) ? $data['skip'] : 0; diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 14b71ee641..24b08614f6 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -479,7 +479,7 @@ class TransactionJournalFactory $preference = $this->accountRepository->getAccountCurrency($account); if (null === $preference && null === $currency) { // return user's default: - return app('amount')->getDefaultCurrencyByUser($this->user); + return app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } $result = ($preference ?? $currency) ?? app('amount')->getSystemCurrency(); Log::debug(sprintf('Currency is now #%d (%s) because of account #%d (%s)', $result->id, $result->code, $account->id, $account->name)); diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 7c3ae8dd94..52e78dba52 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -38,7 +38,8 @@ use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleTrigger; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\Currency\CurrencyRepository; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Destroy\BudgetDestroyService; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; @@ -429,6 +430,7 @@ class BudgetRepository implements BudgetRepositoryInterface // set or update the currency. if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) { + /** @var CurrencyRepositoryInterface $repos */ $repos = app(CurrencyRepositoryInterface::class); $currencyId = (int)($data['currency_id'] ?? 0); $currencyCode = (string)($data['currency_code'] ?? ''); @@ -837,6 +839,7 @@ class BudgetRepository implements BudgetRepositoryInterface $type = AutoBudget::AUTO_BUDGET_ADJUSTED; } + /** @var CurrencyRepositoryInterface $repos */ $repos = app(CurrencyRepositoryInterface::class); $currency = null; if (array_key_exists('currency_id', $data)) { diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index 26475fb7aa..3202ee18a3 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Currency; use Carbon\Carbon; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\CurrencyExchangeRate; use FireflyIII\Models\TransactionCurrency; use FireflyIII\User; diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepository.php b/app/Repositories/UserGroups/Currency/CurrencyRepository.php index b7aafdbbb1..5556f67954 100644 --- a/app/Repositories/UserGroups/Currency/CurrencyRepository.php +++ b/app/Repositories/UserGroups/Currency/CurrencyRepository.php @@ -173,6 +173,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface /** * Get the user group's currencies. + * * @return Collection */ public function get(): Collection @@ -291,7 +292,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface * * @return TransactionCurrency|null */ - private function findByCode(string $currencyCode): ?TransactionCurrency + public function findByCode(string $currencyCode): ?TransactionCurrency { return TransactionCurrency::where('code', $currencyCode)->first(); } @@ -307,6 +308,16 @@ class CurrencyRepository implements CurrencyRepositoryInterface $currency->save(); } + /** + * @param array $ids + * + * @return Collection + */ + public function getByIds(array $ids): Collection + { + return TransactionCurrency::orderBy('code', 'ASC')->whereIn('id', $ids)->get(); + } + /** * @inheritDoc */ diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php index 8e61214c31..9ac532976f 100644 --- a/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php @@ -55,6 +55,13 @@ interface CurrencyRepositoryInterface */ public function find(int $currencyId): ?TransactionCurrency; + /** + * @param string $currencyCode + * + * @return TransactionCurrency|null + */ + public function findByCode(string $currencyCode): ?TransactionCurrency; + /** * Find by object, ID or code. Returns user default or system default. * @@ -89,6 +96,13 @@ interface CurrencyRepositoryInterface */ public function getAll(): Collection; + /** + * @param array $ids + * + * @return Collection + */ + public function getByIds(array $ids): Collection; + /** * @param TransactionCurrency $currency * diff --git a/app/Transformers/PiggyBankEventTransformer.php b/app/Transformers/PiggyBankEventTransformer.php index 0ab17a4f07..66e72cb579 100644 --- a/app/Transformers/PiggyBankEventTransformer.php +++ b/app/Transformers/PiggyBankEventTransformer.php @@ -26,7 +26,6 @@ namespace FireflyIII\Transformers; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use JsonException; @@ -35,7 +34,6 @@ use JsonException; */ class PiggyBankEventTransformer extends AbstractTransformer { - private CurrencyRepositoryInterface $currencyRepos; private PiggyBankRepositoryInterface $piggyRepos; private AccountRepositoryInterface $repository; @@ -46,9 +44,8 @@ class PiggyBankEventTransformer extends AbstractTransformer */ public function __construct() { - $this->repository = app(AccountRepositoryInterface::class); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); - $this->piggyRepos = app(PiggyBankRepositoryInterface::class); + $this->repository = app(AccountRepositoryInterface::class); + $this->piggyRepos = app(PiggyBankRepositoryInterface::class); } /** @@ -67,7 +64,6 @@ class PiggyBankEventTransformer extends AbstractTransformer // set up repositories. $this->repository->setUser($account->user); - $this->currencyRepos->setUser($account->user); $this->piggyRepos->setUser($account->user); // get associated currency or fall back to the default: diff --git a/app/Transformers/PiggyBankTransformer.php b/app/Transformers/PiggyBankTransformer.php index 0af30de935..43770a8924 100644 --- a/app/Transformers/PiggyBankTransformer.php +++ b/app/Transformers/PiggyBankTransformer.php @@ -27,7 +27,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\ObjectGroup; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use JsonException; @@ -37,7 +36,6 @@ use JsonException; class PiggyBankTransformer extends AbstractTransformer { private AccountRepositoryInterface $accountRepos; - private CurrencyRepositoryInterface $currencyRepos; private PiggyBankRepositoryInterface $piggyRepos; /** @@ -47,9 +45,8 @@ class PiggyBankTransformer extends AbstractTransformer */ public function __construct() { - $this->accountRepos = app(AccountRepositoryInterface::class); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); - $this->piggyRepos = app(PiggyBankRepositoryInterface::class); + $this->accountRepos = app(AccountRepositoryInterface::class); + $this->piggyRepos = app(PiggyBankRepositoryInterface::class); } /** @@ -67,7 +64,6 @@ class PiggyBankTransformer extends AbstractTransformer // set up repositories $this->accountRepos->setUser($account->user); - $this->currencyRepos->setUser($account->user); $this->piggyRepos->setUser($account->user); // get currency from account, or use default. diff --git a/app/Transformers/V2/AccountTransformer.php b/app/Transformers/V2/AccountTransformer.php index 74b198976b..4a2ab80572 100644 --- a/app/Transformers/V2/AccountTransformer.php +++ b/app/Transformers/V2/AccountTransformer.php @@ -30,7 +30,7 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; /** @@ -56,6 +56,8 @@ class AccountTransformer extends AbstractTransformer $this->accountTypes = []; $this->balances = app('steam')->balancesByAccounts($objects, $this->getDate()); $this->convertedBalances = app('steam')->balancesByAccountsConverted($objects, $this->getDate()); + + /** @var CurrencyRepositoryInterface $repository */ $repository = app(CurrencyRepositoryInterface::class); $this->default = app('amount')->getDefaultCurrency(); diff --git a/changelog.md b/changelog.md index c28367f30d..ae59582ee3 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 6.0.28 - 2023-10-28 + +### Added + +- #8076 Clone and edit button +- #7204 ability to + +### Changed + +- New actions for GitHub +- Currencies are now linked to users, and can be enabled per user +- Refactored upgrade commands +- You can no longer edit vital parts of reconciled transactions + +### Deprecated + +- Remove old v3 layout. + +### Removed + +- Initial release. + +### Fixed + +- Bad math in the order of piggy banks +- #8084 @JoSchrader fixed an issue with a duplicate button + +### Security + +- Initial release. + +### API + +- Initial release. + ## v6.0.27 - 2023-10-16 ### Added diff --git a/config/firefly.php b/config/firefly.php index 9f4c726108..ea4b43e6eb 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -112,8 +112,8 @@ return [ 'handle_debts' => true, // see cer.php for exchange rates feature flag. ], - 'version' => '6.0.27', - 'api_version' => '2.0.10', + 'version' => '6.0.28', + 'api_version' => '2.0.11', 'db_version' => 21, // generic settings From 0133a7c5db75bde32c21ae632fa251a09b3dd42c Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 28 Oct 2023 15:03:33 +0200 Subject: [PATCH 44/48] Code cleanup --- .ci/php-cs-fixer/composer.lock | 12 +- .../TransactionCurrency/DestroyController.php | 2 +- .../TransactionCurrency/ShowController.php | 4 +- .../TransactionCurrency/StoreController.php | 2 +- .../TransactionCurrency/UpdateController.php | 4 +- .../Requests/Models/Webhook/CreateRequest.php | 6 +- .../Autocomplete/AccountController.php | 1 - .../V2/Controllers/Chart/BudgetController.php | 3 +- .../Controllers/Model/Bill/ShowController.php | 2 - .../Controllers/Model/Bill/SumController.php | 1 - .../Model/Budget/ShowController.php | 1 - .../Model/Budget/SumController.php | 1 - .../Model/PiggyBank/ShowController.php | 1 - .../Model/Transaction/StoreController.php | 2 +- .../Autocomplete/AutocompleteRequest.php | 2 - .../Model/Transaction/StoreRequest.php | 1 + app/Api/V2/Request/UserGroup/StoreRequest.php | 1 + .../UserGroup/UpdateMembershipRequest.php | 1 + .../V2/Request/UserGroup/UpdateRequest.php | 1 + .../Commands/Correction/CorrectDatabase.php | 1 - .../Commands/Integrity/ReportIntegrity.php | 1 - .../Commands/Upgrade/AccountCurrencies.php | 1 - .../Upgrade/OtherCurrenciesCorrections.php | 4 +- .../Upgrade/UpgradeCurrencyPreferences.php | 69 ++++---- .../Commands/Upgrade/UpgradeDatabase.php | 3 +- app/Factory/AccountMetaFactory.php | 1 - app/Factory/TransactionJournalFactory.php | 2 +- .../Extensions/CollectorProperties.php | 36 ++-- app/Helpers/Report/NetWorth.php | 2 +- app/Helpers/Report/PopupReport.php | 2 +- .../Transaction/CreateController.php | 2 +- .../Transaction/EditController.php | 22 +-- .../TransactionCurrency/CreateController.php | 3 +- .../TransactionCurrency/DeleteController.php | 3 +- .../TransactionCurrency/EditController.php | 4 +- .../TransactionCurrency/IndexController.php | 2 +- app/Http/Middleware/InterestingMessage.php | 52 +++--- app/Http/Requests/AccountFormRequest.php | 1 + app/Models/Account.php | 84 +++++----- app/Models/ObjectGroup.php | 2 +- app/Models/Rule.php | 16 +- app/Models/TransactionCurrency.php | 102 ++++++------ app/Models/TransactionJournal.php | 100 +++++------ app/Models/UserGroup.php | 102 ++++++------ app/Notifications/Admin/TestNotification.php | 1 - app/Notifications/Admin/UserInvitation.php | 1 - .../Admin/VersionCheckResult.php | 1 - app/Notifications/User/UserLogin.php | 2 +- app/Providers/AppServiceProvider.php | 1 - app/Providers/JournalServiceProvider.php | 4 +- app/Providers/PiggyBankServiceProvider.php | 2 - app/Repositories/Budget/BudgetRepository.php | 1 - .../Journal/JournalRepository.php | 20 +-- .../Journal/JournalRepositoryInterface.php | 14 +- .../UserGroups/Account/AccountRepository.php | 1 - .../Currency/CurrencyRepository.php | 1 + .../Currency/CurrencyRepositoryInterface.php | 1 + app/Support/Amount.php | 45 +++-- app/Support/Binder/UserGroupAccount.php | 1 - app/Support/Form/RuleForm.php | 1 - .../Http/Api/ConvertsExchangeRates.php | 3 - app/Support/Navigation.php | 27 ++- app/Support/Preferences.php | 18 +- app/Support/Search/OperatorQuerySearch.php | 2 +- .../Actions/SwitchAccounts.php | 1 - app/Transformers/BillTransformer.php | 84 +++++----- app/Transformers/CurrencyTransformer.php | 1 + app/Transformers/RecurrenceTransformer.php | 1 - .../TransactionGroupTransformer.php | 1 - app/Transformers/V2/AccountTransformer.php | 4 +- app/Transformers/V2/BillTransformer.php | 1 - .../WebhookMessageTransformer.php | 1 - app/User.php | 156 +++++++++--------- app/Validation/GroupValidation.php | 76 +++++---- bootstrap/app.php | 6 +- config/broadcasting.php | 24 +-- database/seeders/ConfigSeeder.php | 1 - 77 files changed, 575 insertions(+), 594 deletions(-) diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index b783d43031..f97e8f97ee 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -226,16 +226,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.35.1", + "version": "v3.36.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "ec1ccc264994b6764882669973ca435cf05bab08" + "reference": "e889301f276c6ce2c391d6aafae9a162e785b064" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/ec1ccc264994b6764882669973ca435cf05bab08", - "reference": "ec1ccc264994b6764882669973ca435cf05bab08", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e889301f276c6ce2c391d6aafae9a162e785b064", + "reference": "e889301f276c6ce2c391d6aafae9a162e785b064", "shasum": "" }, "require": { @@ -307,7 +307,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.35.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.36.0" }, "funding": [ { @@ -315,7 +315,7 @@ "type": "github" } ], - "time": "2023-10-12T13:47:26+00:00" + "time": "2023-10-27T10:12:29+00:00" }, { "name": "psr/container", diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php index a115094368..951bdfb474 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php @@ -27,8 +27,8 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Validator; diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php index 0b22a06dac..3e7c74fcb4 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php @@ -87,7 +87,7 @@ class ShowController extends Controller $currencies = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($currencies, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.index') . $this->buildParams()); - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); @@ -144,7 +144,7 @@ class ShowController extends Controller public function showDefault(): JsonResponse { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $manager = $this->getManager(); $currency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php index f37f58e672..f861fe998e 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php @@ -83,7 +83,7 @@ class StoreController extends Controller $this->repository->makeDefault($currency); app('preferences')->mark(); } - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var User $user */ $user = auth()->user(); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php index aea98eb6d6..9bb531a603 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php @@ -183,11 +183,11 @@ class UpdateController extends Controller $data = $request->getAll(); /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); // safety catch on currency disablement. $set = $this->repository->get(); - if(array_key_exists('enabled', $data) && false === $data['enabled'] && 1 === count($set) && $set->first()->id === $currency->id){ + if (array_key_exists('enabled', $data) && false === $data['enabled'] && 1 === count($set) && $set->first()->id === $currency->id) { return response()->json([], 409); } diff --git a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php index 85969756fe..eb6b1ad5bf 100644 --- a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php @@ -71,9 +71,9 @@ class CreateRequest extends FormRequest */ public function rules(): array { - $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); - $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); - $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); + $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); + $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); + $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); $validProtocols = config('firefly.valid_url_protocols'); return [ 'title' => 'required|between:1,512|uniqueObjectForUser:webhooks,title', diff --git a/app/Api/V2/Controllers/Autocomplete/AccountController.php b/app/Api/V2/Controllers/Autocomplete/AccountController.php index 5da7fc8381..a3dd036c4b 100644 --- a/app/Api/V2/Controllers/Autocomplete/AccountController.php +++ b/app/Api/V2/Controllers/Autocomplete/AccountController.php @@ -32,7 +32,6 @@ use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; -use http\Env\Response; use Illuminate\Http\JsonResponse; /** diff --git a/app/Api/V2/Controllers/Chart/BudgetController.php b/app/Api/V2/Controllers/Chart/BudgetController.php index 39008f0106..eb3ebb8389 100644 --- a/app/Api/V2/Controllers/Chart/BudgetController.php +++ b/app/Api/V2/Controllers/Chart/BudgetController.php @@ -32,13 +32,12 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Support\Http\Api\CleansChartData; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; -use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; diff --git a/app/Api/V2/Controllers/Model/Bill/ShowController.php b/app/Api/V2/Controllers/Model/Bill/ShowController.php index 6c2793fa1c..ab7781065e 100644 --- a/app/Api/V2/Controllers/Model/Bill/ShowController.php +++ b/app/Api/V2/Controllers/Model/Bill/ShowController.php @@ -26,11 +26,9 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\Bill; use FireflyIII\Api\V2\Controllers\Controller; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Bill; use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; -use FireflyIII\Transformers\V2\AccountTransformer; use FireflyIII\Transformers\V2\BillTransformer; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; diff --git a/app/Api/V2/Controllers/Model/Bill/SumController.php b/app/Api/V2/Controllers/Model/Bill/SumController.php index 782cd940c6..161dfdd4ce 100644 --- a/app/Api/V2/Controllers/Model/Bill/SumController.php +++ b/app/Api/V2/Controllers/Model/Bill/SumController.php @@ -26,7 +26,6 @@ namespace FireflyIII\Api\V2\Controllers\Model\Bill; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use Illuminate\Http\JsonResponse; diff --git a/app/Api/V2/Controllers/Model/Budget/ShowController.php b/app/Api/V2/Controllers/Model/Budget/ShowController.php index 70a0490b45..c238848359 100644 --- a/app/Api/V2/Controllers/Model/Budget/ShowController.php +++ b/app/Api/V2/Controllers/Model/Budget/ShowController.php @@ -27,7 +27,6 @@ namespace FireflyIII\Api\V2\Controllers\Model\Budget; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\Http\Api\ConvertsExchangeRates; diff --git a/app/Api/V2/Controllers/Model/Budget/SumController.php b/app/Api/V2/Controllers/Model/Budget/SumController.php index 394ee1bc00..15de6ca665 100644 --- a/app/Api/V2/Controllers/Model/Budget/SumController.php +++ b/app/Api/V2/Controllers/Model/Budget/SumController.php @@ -26,7 +26,6 @@ namespace FireflyIII\Api\V2\Controllers\Model\Budget; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\Http\Api\ConvertsExchangeRates; use Illuminate\Http\JsonResponse; diff --git a/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php b/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php index e75e8b8866..e3a74c16bf 100644 --- a/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php +++ b/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php @@ -26,7 +26,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\PiggyBank; use FireflyIII\Api\V2\Controllers\Controller; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use FireflyIII\Transformers\V2\PiggyBankTransformer; diff --git a/app/Api/V2/Controllers/Model/Transaction/StoreController.php b/app/Api/V2/Controllers/Model/Transaction/StoreController.php index dc14f8b22e..4dc062cb0e 100644 --- a/app/Api/V2/Controllers/Model/Transaction/StoreController.php +++ b/app/Api/V2/Controllers/Model/Transaction/StoreController.php @@ -30,7 +30,6 @@ use FireflyIII\Api\V2\Request\Model\Transaction\StoreRequest; use FireflyIII\Events\StoredTransactionGroup; use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\FireflyException; -use Illuminate\Validation\ValidationException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; use FireflyIII\Rules\IsDuplicateTransaction; @@ -38,6 +37,7 @@ use FireflyIII\Transformers\V2\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\ValidationException; /** * Class StoreController diff --git a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php index 9da06a81be..e406a9e8b3 100644 --- a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php @@ -28,9 +28,7 @@ use FireflyIII\Models\AccountType; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\User; -use FireflyIII\Validation\Administration\ValidatesAdministrationAccess; use Illuminate\Foundation\Http\FormRequest; -use Illuminate\Validation\Validator; /** * Class AutocompleteRequest diff --git a/app/Api/V2/Request/Model/Transaction/StoreRequest.php b/app/Api/V2/Request/Model/Transaction/StoreRequest.php index 4404f6f72e..44ba9fffcc 100644 --- a/app/Api/V2/Request/Model/Transaction/StoreRequest.php +++ b/app/Api/V2/Request/Model/Transaction/StoreRequest.php @@ -57,6 +57,7 @@ class StoreRequest extends FormRequest use GroupValidation; use CurrencyValidation; use AppendsLocationData; + protected array $acceptedRoles = [UserRoleEnum::MANAGE_TRANSACTIONS]; /** diff --git a/app/Api/V2/Request/UserGroup/StoreRequest.php b/app/Api/V2/Request/UserGroup/StoreRequest.php index 21e5a76719..d90f71cf3c 100644 --- a/app/Api/V2/Request/UserGroup/StoreRequest.php +++ b/app/Api/V2/Request/UserGroup/StoreRequest.php @@ -37,6 +37,7 @@ class StoreRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; + protected array $acceptedRoles = [UserRoleEnum::OWNER, UserRoleEnum::FULL]; /** diff --git a/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php b/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php index 3a671268d8..75b56e49ad 100644 --- a/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php +++ b/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php @@ -37,6 +37,7 @@ class UpdateMembershipRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; + protected array $acceptedRoles = [UserRoleEnum::OWNER, UserRoleEnum::FULL]; /** diff --git a/app/Api/V2/Request/UserGroup/UpdateRequest.php b/app/Api/V2/Request/UserGroup/UpdateRequest.php index d3b0481fcc..3ab965f776 100644 --- a/app/Api/V2/Request/UserGroup/UpdateRequest.php +++ b/app/Api/V2/Request/UserGroup/UpdateRequest.php @@ -38,6 +38,7 @@ class UpdateRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; + protected array $acceptedRoles = [UserRoleEnum::OWNER, UserRoleEnum::FULL]; /** diff --git a/app/Console/Commands/Correction/CorrectDatabase.php b/app/Console/Commands/Correction/CorrectDatabase.php index e7db8d30c5..73620febd8 100644 --- a/app/Console/Commands/Correction/CorrectDatabase.php +++ b/app/Console/Commands/Correction/CorrectDatabase.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use Artisan; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; use Schema; diff --git a/app/Console/Commands/Integrity/ReportIntegrity.php b/app/Console/Commands/Integrity/ReportIntegrity.php index 5075e69ea9..c90224fd22 100644 --- a/app/Console/Commands/Integrity/ReportIntegrity.php +++ b/app/Console/Commands/Integrity/ReportIntegrity.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Integrity; -use Artisan; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; use Schema; diff --git a/app/Console/Commands/Upgrade/AccountCurrencies.php b/app/Console/Commands/Upgrade/AccountCurrencies.php index da588a219d..0a05dbf1d5 100644 --- a/app/Console/Commands/Upgrade/AccountCurrencies.php +++ b/app/Console/Commands/Upgrade/AccountCurrencies.php @@ -34,7 +34,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; diff --git a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php index 5a34f8f091..845dd0eda8 100644 --- a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php +++ b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php @@ -45,8 +45,8 @@ class OtherCurrenciesCorrections extends Command use ShowsFriendlyMessages; public const CONFIG_NAME = '480_other_currencies'; - protected $description = 'Update all journal currency information.'; - protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; + protected $description = 'Update all journal currency information.'; + protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; private array $accountCurrencies; private AccountRepositoryInterface $accountRepos; private JournalCLIRepositoryInterface $cliRepos; diff --git a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php index 2da07ec117..b6ee8c2a1c 100644 --- a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php +++ b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php @@ -68,30 +68,6 @@ class UpgradeCurrencyPreferences extends Command return false; } - /** - * @param User $user - * - * @return string - */ - private function getPreference(User $user): string - { - $preference = Preference::where('user_id', $user->id)->where('name', 'currencyPreference')->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); - - if (null !== $preference) { - return (string)$preference->data; - } - return 'EUR'; - } - - - /** - * - */ - private function markAsExecuted(): void - { - app('fireflyconfig')->set(self::CONFIG_NAME, true); - } - private function runUpgrade(): void { $groups = UserGroup::get(); @@ -107,6 +83,24 @@ class UpgradeCurrencyPreferences extends Command } } + /** + * @param UserGroup $group + * + * @return void + */ + private function upgradeGroupPreferences(UserGroup $group) + { + $currencies = TransactionCurrency::get(); + $enabled = new Collection(); + /** @var TransactionCurrency $currency */ + foreach ($currencies as $currency) { + if ($currency->enabled) { + $enabled->push($currency); + } + } + $group->currencies()->sync($enabled->pluck('id')->toArray()); + } + /** * @param User $user * @@ -136,20 +130,25 @@ class UpgradeCurrencyPreferences extends Command } /** - * @param UserGroup $group + * @param User $user * - * @return void + * @return string */ - private function upgradeGroupPreferences(UserGroup $group) + private function getPreference(User $user): string { - $currencies = TransactionCurrency::get(); - $enabled = new Collection(); - /** @var TransactionCurrency $currency */ - foreach ($currencies as $currency) { - if ($currency->enabled) { - $enabled->push($currency); - } + $preference = Preference::where('user_id', $user->id)->where('name', 'currencyPreference')->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); + + if (null !== $preference) { + return (string)$preference->data; } - $group->currencies()->sync($enabled->pluck('id')->toArray()); + return 'EUR'; + } + + /** + * + */ + private function markAsExecuted(): void + { + app('fireflyconfig')->set(self::CONFIG_NAME, true); } } diff --git a/app/Console/Commands/Upgrade/UpgradeDatabase.php b/app/Console/Commands/Upgrade/UpgradeDatabase.php index 544881ea18..3f48f1f1b8 100644 --- a/app/Console/Commands/Upgrade/UpgradeDatabase.php +++ b/app/Console/Commands/Upgrade/UpgradeDatabase.php @@ -25,7 +25,6 @@ namespace FireflyIII\Console\Commands\Upgrade; set_time_limit(0); -use Artisan; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; @@ -72,7 +71,7 @@ class UpgradeDatabase extends Command // also just in case, some integrity commands: 'firefly-iii:create-group-memberships', 'firefly-iii:upgrade-group-information', - 'firefly-iii:upgrade-currency-preferences' + 'firefly-iii:upgrade-currency-preferences', ]; $args = []; if ($this->option('force')) { diff --git a/app/Factory/AccountMetaFactory.php b/app/Factory/AccountMetaFactory.php index e92b88a6cc..46f1d013b1 100644 --- a/app/Factory/AccountMetaFactory.php +++ b/app/Factory/AccountMetaFactory.php @@ -26,7 +26,6 @@ namespace FireflyIII\Factory; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; -use Illuminate\Support\Facades\Log; /** * Class AccountMetaFactory diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 24b08614f6..2c0c5756ac 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -39,9 +39,9 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Support\JournalServiceTrait; use FireflyIII\Support\NullArrayObject; diff --git a/app/Helpers/Collector/Extensions/CollectorProperties.php b/app/Helpers/Collector/Extensions/CollectorProperties.php index bfdb78349b..fcb67c5d5b 100644 --- a/app/Helpers/Collector/Extensions/CollectorProperties.php +++ b/app/Helpers/Collector/Extensions/CollectorProperties.php @@ -34,29 +34,29 @@ use Illuminate\Database\Eloquent\Relations\HasMany; trait CollectorProperties { public const TEST = 'Test'; - private bool $expandGroupSearch; - private array $fields; - private bool $hasAccountInfo; - private bool $hasBillInformation; - private bool $hasBudgetInformation; - private bool $hasCatInformation; - private bool $hasJoinedAttTables; - private bool $hasJoinedMetaTables; - private bool $hasJoinedTagTables; - private bool $hasNotesInformation; - private array $integerFields; - private ?int $limit; - private ?int $page; - private array $postFilters; + private bool $expandGroupSearch; + private array $fields; + private bool $hasAccountInfo; + private bool $hasBillInformation; + private bool $hasBudgetInformation; + private bool $hasCatInformation; + private bool $hasJoinedAttTables; + private bool $hasJoinedMetaTables; + private bool $hasJoinedTagTables; + private bool $hasNotesInformation; + private array $integerFields; + private ?int $limit; + private ?int $page; + private array $postFilters; private HasMany $query; - private array $stringFields; + private array $stringFields; /* * This array is used to collect ALL tags the user may search for (using 'setTags'). * This way the user can call 'setTags' multiple times and get a joined result. * */ - private array $tags; - private int $total; - private ?User $user; + private array $tags; + private int $total; + private ?User $user; private ?UserGroup $userGroup; } diff --git a/app/Helpers/Report/NetWorth.php b/app/Helpers/Report/NetWorth.php index 99a15e67c1..de4a6d0d90 100644 --- a/app/Helpers/Report/NetWorth.php +++ b/app/Helpers/Report/NetWorth.php @@ -29,8 +29,8 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\UserGroup; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\User; diff --git a/app/Helpers/Report/PopupReport.php b/app/Helpers/Report/PopupReport.php index 287cbca014..980b7b1050 100644 --- a/app/Helpers/Report/PopupReport.php +++ b/app/Helpers/Report/PopupReport.php @@ -29,8 +29,8 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; /** diff --git a/app/Http/Controllers/Transaction/CreateController.php b/app/Http/Controllers/Transaction/CreateController.php index 164454e996..6c1808a257 100644 --- a/app/Http/Controllers/Transaction/CreateController.php +++ b/app/Http/Controllers/Transaction/CreateController.php @@ -89,7 +89,7 @@ class CreateController extends Controller session()->flash('success', trans('firefly.stored_journal', ['description' => $title])); session()->flash('success_url', $link); - if('edit' === $request->get('redirect')) { + if ('edit' === $request->get('redirect')) { return response()->json(['redirect' => route('transactions.edit', [$newGroup->id])]); } diff --git a/app/Http/Controllers/Transaction/EditController.php b/app/Http/Controllers/Transaction/EditController.php index 5949af4a02..50b7b00e9f 100644 --- a/app/Http/Controllers/Transaction/EditController.php +++ b/app/Http/Controllers/Transaction/EditController.php @@ -63,17 +63,6 @@ class EditController extends Controller ); } - /** - * @param TransactionJournal $journal - * - * @return JsonResponse - */ - public function unreconcile(TransactionJournal $journal): JsonResponse - { - $this->repository->unreconcileById($journal->id); - return response()->json([], 204); - } - /** * @param TransactionGroup $transactionGroup * @@ -116,4 +105,15 @@ class EditController extends Controller ) ); } + + /** + * @param TransactionJournal $journal + * + * @return JsonResponse + */ + public function unreconcile(TransactionJournal $journal): JsonResponse + { + $this->repository->unreconcileById($journal->id); + return response()->json([], 204); + } } diff --git a/app/Http/Controllers/TransactionCurrency/CreateController.php b/app/Http/Controllers/TransactionCurrency/CreateController.php index 92a26333cf..8742e45765 100644 --- a/app/Http/Controllers/TransactionCurrency/CreateController.php +++ b/app/Http/Controllers/TransactionCurrency/CreateController.php @@ -7,8 +7,8 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\CurrencyFormRequest; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; @@ -45,6 +45,7 @@ class CreateController extends Controller } ); } + /** * Create a currency. * diff --git a/app/Http/Controllers/TransactionCurrency/DeleteController.php b/app/Http/Controllers/TransactionCurrency/DeleteController.php index 76f95452e4..00d36900dd 100644 --- a/app/Http/Controllers/TransactionCurrency/DeleteController.php +++ b/app/Http/Controllers/TransactionCurrency/DeleteController.php @@ -6,8 +6,8 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; @@ -46,7 +46,6 @@ class DeleteController extends Controller } - /** * Deletes a currency. * diff --git a/app/Http/Controllers/TransactionCurrency/EditController.php b/app/Http/Controllers/TransactionCurrency/EditController.php index 037163caa4..8a38de1fd2 100644 --- a/app/Http/Controllers/TransactionCurrency/EditController.php +++ b/app/Http/Controllers/TransactionCurrency/EditController.php @@ -7,8 +7,8 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\CurrencyFormRequest; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; @@ -68,7 +68,7 @@ class EditController extends Controller // is currently enabled (for this user?) $userCurrencies = $this->repository->get()->pluck('id')->toArray(); - $enabled = in_array($currency->id, $userCurrencies, true); + $enabled = in_array($currency->id, $userCurrencies, true); // code to handle active-checkboxes $hasOldInput = null !== $request->old('_token'); diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php index ab750dac49..35b943e445 100644 --- a/app/Http/Controllers/TransactionCurrency/IndexController.php +++ b/app/Http/Controllers/TransactionCurrency/IndexController.php @@ -6,8 +6,8 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; diff --git a/app/Http/Middleware/InterestingMessage.php b/app/Http/Middleware/InterestingMessage.php index a9c8c42044..dca641ef2e 100644 --- a/app/Http/Middleware/InterestingMessage.php +++ b/app/Http/Middleware/InterestingMessage.php @@ -232,6 +232,32 @@ class InterestingMessage return null !== $webhookId && null !== $message; } + /** + * @param Request $request + */ + private function handleWebhookMessage(Request $request): void + { + // get parameters from request. + $webhookId = $request->get('webhook_id'); + $message = $request->get('message'); + + /** @var Webhook $webhook */ + $webhook = auth()->user()->webhooks()->withTrashed()->find($webhookId); + + if (null === $webhook) { + return; + } + if ('deleted' === $message) { + session()->flash('success', (string)trans('firefly.deleted_webhook', ['title' => $webhook->title])); + } + if ('updated' === $message) { + session()->flash('success', (string)trans('firefly.updated_webhook', ['title' => $webhook->title])); + } + if ('created' === $message) { + session()->flash('success', (string)trans('firefly.stored_new_webhook', ['title' => $webhook->title])); + } + } + /** * @param Request $request * @@ -278,30 +304,4 @@ class InterestingMessage session()->flash('error', (string)trans('firefly.default_currency_failed', ['name' => $currency->name])); } } - - /** - * @param Request $request - */ - private function handleWebhookMessage(Request $request): void - { - // get parameters from request. - $webhookId = $request->get('webhook_id'); - $message = $request->get('message'); - - /** @var Webhook $webhook */ - $webhook = auth()->user()->webhooks()->withTrashed()->find($webhookId); - - if (null === $webhook) { - return; - } - if ('deleted' === $message) { - session()->flash('success', (string)trans('firefly.deleted_webhook', ['title' => $webhook->title])); - } - if ('updated' === $message) { - session()->flash('success', (string)trans('firefly.updated_webhook', ['title' => $webhook->title])); - } - if ('created' === $message) { - session()->flash('success', (string)trans('firefly.stored_new_webhook', ['title' => $webhook->title])); - } - } } diff --git a/app/Http/Requests/AccountFormRequest.php b/app/Http/Requests/AccountFormRequest.php index e201825218..9301910560 100644 --- a/app/Http/Requests/AccountFormRequest.php +++ b/app/Http/Requests/AccountFormRequest.php @@ -40,6 +40,7 @@ class AccountFormRequest extends FormRequest use ConvertsDataTypes; use AppendsLocationData; use ChecksLogin; + protected array $acceptedRoles = [UserRoleEnum::MANAGE_TRANSACTIONS]; /** diff --git a/app/Models/Account.php b/app/Models/Account.php index 11fc5c1aa4..502516f467 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -42,36 +42,36 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class Account * - * @property int $id - * @property \Illuminate\Support\Carbon|null $created_at - * @property \Illuminate\Support\Carbon|null $updated_at - * @property \Illuminate\Support\Carbon|null $deleted_at - * @property int $user_id - * @property int $account_type_id - * @property string $name - * @property string|null $virtual_balance - * @property string|null $iban - * @property bool $active - * @property bool $encrypted - * @property int $order - * @property-read Collection|AccountMeta[] $accountMeta - * @property-read int|null $account_meta_count - * @property AccountType $accountType - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read string $account_number - * @property-read string $edit_name - * @property-read Collection|Location[] $locations - * @property-read int|null $locations_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|ObjectGroup[] $objectGroups - * @property-read int|null $object_groups_count - * @property-read Collection|PiggyBank[] $piggyBanks - * @property-read int|null $piggy_banks_count - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count - * @property-read User $user + * @property int $id + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property int $user_id + * @property int $account_type_id + * @property string $name + * @property string|null $virtual_balance + * @property string|null $iban + * @property bool $active + * @property bool $encrypted + * @property int $order + * @property-read Collection|AccountMeta[] $accountMeta + * @property-read int|null $account_meta_count + * @property AccountType $accountType + * @property-read Collection|Attachment[] $attachments + * @property-read int|null $attachments_count + * @property-read string $account_number + * @property-read string $edit_name + * @property-read Collection|Location[] $locations + * @property-read int|null $locations_count + * @property-read Collection|Note[] $notes + * @property-read int|null $notes_count + * @property-read Collection|ObjectGroup[] $objectGroups + * @property-read int|null $object_groups_count + * @property-read Collection|PiggyBank[] $piggyBanks + * @property-read int|null $piggy_banks_count + * @property-read Collection|Transaction[] $transactions + * @property-read int|null $transactions_count + * @property-read User $user * @method static EloquentBuilder|Account accountTypeIn($types) * @method static EloquentBuilder|Account newModelQuery() * @method static EloquentBuilder|Account newQuery() @@ -91,19 +91,19 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static EloquentBuilder|Account whereVirtualBalance($value) * @method static Builder|Account withTrashed() * @method static Builder|Account withoutTrashed() - * @property Carbon $lastActivityDate - * @property string $startBalance - * @property string $endBalance - * @property string $difference - * @property string $interest - * @property string $interestPeriod - * @property string $accountTypeString - * @property Location $location - * @property string $liability_direction - * @property string $current_debt - * @property int|null $user_group_id + * @property Carbon $lastActivityDate + * @property string $startBalance + * @property string $endBalance + * @property string $difference + * @property string $interest + * @property string $interestPeriod + * @property string $accountTypeString + * @property Location $location + * @property string $liability_direction + * @property string $current_debt + * @property int|null $user_group_id * @method static EloquentBuilder|Account whereUserGroupId($value) - * @property-read \FireflyIII\Models\UserGroup|null $userGroup + * @property-read UserGroup|null $userGroup * @mixin Eloquent */ class Account extends Model diff --git a/app/Models/ObjectGroup.php b/app/Models/ObjectGroup.php index af3b8e813b..5524921312 100644 --- a/app/Models/ObjectGroup.php +++ b/app/Models/ObjectGroup.php @@ -61,7 +61,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|ObjectGroup whereTitle($value) * @method static Builder|ObjectGroup whereUpdatedAt($value) * @method static Builder|ObjectGroup whereUserId($value) - * @property int|null $user_group_id + * @property int|null $user_group_id * @method static Builder|ObjectGroup whereUserGroupId($value) * @mixin Eloquent */ diff --git a/app/Models/Rule.php b/app/Models/Rule.php index 7c499ad0d9..18e2e6d1dd 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -125,6 +125,14 @@ class Rule extends Model throw new NotFoundHttpException(); } + /** + * @return BelongsTo + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + /** * @return HasMany */ @@ -159,14 +167,6 @@ class Rule extends Model $this->attributes['description'] = e($value); } - /** - * @return BelongsTo - */ - public function user(): BelongsTo - { - return $this->belongsTo(User::class); - } - /** * @return BelongsTo */ diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 868b38f008..81bf291294 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -37,23 +37,23 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionCurrency * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property bool $enabled - * @property bool $userDefault - * @property bool $userEnabled - * @property string $code - * @property string $name - * @property string $symbol - * @property int $decimal_places - * @property-read Collection|BudgetLimit[] $budgetLimits - * @property-read int|null $budget_limits_count - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count + * @property int $id + * @property Carbon|null $created_at + * @property Carbon|null $updated_at + * @property Carbon|null $deleted_at + * @property bool $enabled + * @property bool $userDefault + * @property bool $userEnabled + * @property string $code + * @property string $name + * @property string $symbol + * @property int $decimal_places + * @property-read Collection|BudgetLimit[] $budgetLimits + * @property-read int|null $budget_limits_count + * @property-read Collection|TransactionJournal[] $transactionJournals + * @property-read int|null $transaction_journals_count + * @property-read Collection|Transaction[] $transactions + * @property-read int|null $transactions_count * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency newQuery() * @method static Builder|TransactionCurrency onlyTrashed() @@ -69,10 +69,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereUpdatedAt($value) * @method static Builder|TransactionCurrency withTrashed() * @method static Builder|TransactionCurrency withoutTrashed() - * @property-read Collection $userGroups - * @property-read int|null $user_groups_count - * @property-read Collection $users - * @property-read int|null $users_count + * @property-read Collection $userGroups + * @property-read int|null $user_groups_count + * @property-read Collection $users + * @property-read int|null $users_count * @mixin Eloquent */ class TransactionCurrency extends Model @@ -115,6 +115,14 @@ class TransactionCurrency extends Model throw new NotFoundHttpException(); } + /** + * @return HasMany + */ + public function budgetLimits(): HasMany + { + return $this->hasMany(BudgetLimit::class); + } + /** * @param User $user * @@ -122,40 +130,12 @@ class TransactionCurrency extends Model */ public function refreshForUser(User $user) { - $current = $user->userGroup->currencies()->where('transaction_currencies.id', $this->id)->first(); - $default = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); + $current = $user->userGroup->currencies()->where('transaction_currencies.id', $this->id)->first(); + $default = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); $this->userDefault = (int)$default->id === (int)$this->id; $this->userEnabled = null !== $current; } - /** - * Link to users - * - * @return BelongsToMany - */ - public function users(): BelongsToMany - { - return $this->belongsToMany(User::class)->withTimestamps()->withPivot('user_default'); - } - - /** - * Link to user groups - * - * @return BelongsToMany - */ - public function userGroups(): BelongsToMany - { - return $this->belongsToMany(UserGroup::class)->withTimestamps()->withPivot('group_default'); - } - - /** - * @return HasMany - */ - public function budgetLimits(): HasMany - { - return $this->hasMany(BudgetLimit::class); - } - /** * @return HasMany */ @@ -171,4 +151,24 @@ class TransactionCurrency extends Model { return $this->hasMany(Transaction::class); } + + /** + * Link to user groups + * + * @return BelongsToMany + */ + public function userGroups(): BelongsToMany + { + return $this->belongsToMany(UserGroup::class)->withTimestamps()->withPivot('group_default'); + } + + /** + * Link to users + * + * @return BelongsToMany + */ + public function users(): BelongsToMany + { + return $this->belongsToMany(User::class)->withTimestamps()->withPivot('user_default'); + } } diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 166cb72b53..39a5bf5e5b 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -41,50 +41,50 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionJournal * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int $transaction_type_id - * @property int|null $transaction_group_id - * @property int|null $bill_id - * @property int|null $transaction_currency_id - * @property string $description - * @property Carbon $date - * @property Carbon|null $interest_date - * @property Carbon|null $book_date - * @property Carbon|null $process_date - * @property int $order - * @property int $tag_count - * @property string $transaction_type_type - * @property bool $encrypted - * @property bool $completed - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Bill|null $bill - * @property-read Collection|Budget[] $budgets - * @property-read int|null $budgets_count - * @property-read Collection|Category[] $categories - * @property-read int|null $categories_count - * @property-read Collection|TransactionJournalLink[] $destJournalLinks - * @property-read int|null $dest_journal_links_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|PiggyBankEvent[] $piggyBankEvents - * @property-read int|null $piggy_bank_events_count - * @property-read Collection|TransactionJournalLink[] $sourceJournalLinks - * @property-read int|null $source_journal_links_count - * @property-read Collection|Tag[] $tags - * @property-read int|null $tags_count - * @property-read TransactionCurrency|null $transactionCurrency - * @property-read TransactionGroup|null $transactionGroup - * @property-read Collection|TransactionJournalMeta[] $transactionJournalMeta - * @property-read int|null $transaction_journal_meta_count - * @property-read TransactionType $transactionType - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count - * @property-read User $user + * @property int $id + * @property Carbon|null $created_at + * @property Carbon|null $updated_at + * @property Carbon|null $deleted_at + * @property int $user_id + * @property int $transaction_type_id + * @property int|null $transaction_group_id + * @property int|null $bill_id + * @property int|null $transaction_currency_id + * @property string $description + * @property Carbon $date + * @property Carbon|null $interest_date + * @property Carbon|null $book_date + * @property Carbon|null $process_date + * @property int $order + * @property int $tag_count + * @property string $transaction_type_type + * @property bool $encrypted + * @property bool $completed + * @property-read Collection|Attachment[] $attachments + * @property-read int|null $attachments_count + * @property-read Bill|null $bill + * @property-read Collection|Budget[] $budgets + * @property-read int|null $budgets_count + * @property-read Collection|Category[] $categories + * @property-read int|null $categories_count + * @property-read Collection|TransactionJournalLink[] $destJournalLinks + * @property-read int|null $dest_journal_links_count + * @property-read Collection|Note[] $notes + * @property-read int|null $notes_count + * @property-read Collection|PiggyBankEvent[] $piggyBankEvents + * @property-read int|null $piggy_bank_events_count + * @property-read Collection|TransactionJournalLink[] $sourceJournalLinks + * @property-read int|null $source_journal_links_count + * @property-read Collection|Tag[] $tags + * @property-read int|null $tags_count + * @property-read TransactionCurrency|null $transactionCurrency + * @property-read TransactionGroup|null $transactionGroup + * @property-read Collection|TransactionJournalMeta[] $transactionJournalMeta + * @property-read int|null $transaction_journal_meta_count + * @property-read TransactionType $transactionType + * @property-read Collection|Transaction[] $transactions + * @property-read int|null $transactions_count + * @property-read User $user * @method static EloquentBuilder|TransactionJournal after(Carbon $date) * @method static EloquentBuilder|TransactionJournal before(Carbon $date) * @method static EloquentBuilder|TransactionJournal newModelQuery() @@ -112,13 +112,13 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static EloquentBuilder|TransactionJournal whereUserId($value) * @method static \Illuminate\Database\Query\Builder|TransactionJournal withTrashed() * @method static \Illuminate\Database\Query\Builder|TransactionJournal withoutTrashed() - * @property-read Collection|Location[] $locations - * @property-read int|null $locations_count - * @property int $the_count - * @property int|null $user_group_id + * @property-read Collection|Location[] $locations + * @property-read int|null $locations_count + * @property int $the_count + * @property int|null $user_group_id * @method static EloquentBuilder|TransactionJournal whereUserGroupId($value) - * @property-read Collection $auditLogEntries - * @property-read int|null $audit_log_entries_count + * @property-read Collection $auditLogEntries + * @property-read int|null $audit_log_entries_count * @mixin Eloquent */ class TransactionJournal extends Model diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index 8d8a2dcbb0..134e2a82da 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -39,13 +39,13 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class UserGroup * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property string $title - * @property-read Collection|GroupMembership[] $groupMemberships - * @property-read int|null $group_memberships_count + * @property int $id + * @property Carbon|null $created_at + * @property Carbon|null $updated_at + * @property string|null $deleted_at + * @property string $title + * @property-read Collection|GroupMembership[] $groupMemberships + * @property-read int|null $group_memberships_count * @method static Builder|UserGroup newModelQuery() * @method static Builder|UserGroup newQuery() * @method static Builder|UserGroup query() @@ -54,40 +54,40 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|UserGroup whereId($value) * @method static Builder|UserGroup whereTitle($value) * @method static Builder|UserGroup whereUpdatedAt($value) - * @property-read Collection $accounts - * @property-read int|null $accounts_count - * @property-read Collection $availableBudgets - * @property-read int|null $available_budgets_count - * @property-read Collection $bills - * @property-read int|null $bills_count - * @property-read Collection $budgets - * @property-read int|null $budgets_count - * @property-read Collection $piggyBanks - * @property-read int|null $piggy_banks_count - * @property-read Collection $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read Collection $attachments - * @property-read int|null $attachments_count - * @property-read Collection $categories - * @property-read int|null $categories_count - * @property-read Collection $currencyExchangeRates - * @property-read int|null $currency_exchange_rates_count - * @property-read Collection $objectGroups - * @property-read int|null $object_groups_count - * @property-read Collection $recurrences - * @property-read int|null $recurrences_count - * @property-read Collection $ruleGroups - * @property-read int|null $rule_groups_count - * @property-read Collection $rules - * @property-read int|null $rules_count - * @property-read Collection $tags - * @property-read int|null $tags_count - * @property-read Collection $transactionGroups - * @property-read int|null $transaction_groups_count - * @property-read Collection $webhooks - * @property-read int|null $webhooks_count - * @property-read Collection $currencies - * @property-read int|null $currencies_count + * @property-read Collection $accounts + * @property-read int|null $accounts_count + * @property-read Collection $availableBudgets + * @property-read int|null $available_budgets_count + * @property-read Collection $bills + * @property-read int|null $bills_count + * @property-read Collection $budgets + * @property-read int|null $budgets_count + * @property-read Collection $piggyBanks + * @property-read int|null $piggy_banks_count + * @property-read Collection $transactionJournals + * @property-read int|null $transaction_journals_count + * @property-read Collection $attachments + * @property-read int|null $attachments_count + * @property-read Collection $categories + * @property-read int|null $categories_count + * @property-read Collection $currencyExchangeRates + * @property-read int|null $currency_exchange_rates_count + * @property-read Collection $objectGroups + * @property-read int|null $object_groups_count + * @property-read Collection $recurrences + * @property-read int|null $recurrences_count + * @property-read Collection $ruleGroups + * @property-read int|null $rule_groups_count + * @property-read Collection $rules + * @property-read int|null $rules_count + * @property-read Collection $tags + * @property-read int|null $tags_count + * @property-read Collection $transactionGroups + * @property-read int|null $transaction_groups_count + * @property-read Collection $webhooks + * @property-read int|null $webhooks_count + * @property-read Collection $currencies + * @property-read int|null $currencies_count * @mixin Eloquent */ class UserGroup extends Model @@ -132,16 +132,6 @@ class UserGroup extends Model return $this->hasMany(Account::class); } - /** - * Link to currencies - * - * @return BelongsToMany - */ - public function currencies(): BelongsToMany - { - return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('group_default'); - } - /** * Link to attachments. * @@ -192,6 +182,16 @@ class UserGroup extends Model return $this->hasMany(Category::class); } + /** + * Link to currencies + * + * @return BelongsToMany + */ + public function currencies(): BelongsToMany + { + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('group_default'); + } + /** * Link to exchange rates. * diff --git a/app/Notifications/Admin/TestNotification.php b/app/Notifications/Admin/TestNotification.php index b79a21f36d..5af18e03c9 100644 --- a/app/Notifications/Admin/TestNotification.php +++ b/app/Notifications/Admin/TestNotification.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Notifications\Admin; use FireflyIII\Support\Notifications\UrlValidator; -use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; diff --git a/app/Notifications/Admin/UserInvitation.php b/app/Notifications/Admin/UserInvitation.php index 60d05bab97..45384ca8d8 100644 --- a/app/Notifications/Admin/UserInvitation.php +++ b/app/Notifications/Admin/UserInvitation.php @@ -26,7 +26,6 @@ namespace FireflyIII\Notifications\Admin; use FireflyIII\Models\InvitedUser; use FireflyIII\Support\Notifications\UrlValidator; -use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; diff --git a/app/Notifications/Admin/VersionCheckResult.php b/app/Notifications/Admin/VersionCheckResult.php index 95af203bfd..ac0c195457 100644 --- a/app/Notifications/Admin/VersionCheckResult.php +++ b/app/Notifications/Admin/VersionCheckResult.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Notifications\Admin; use FireflyIII\Support\Notifications\UrlValidator; -use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; diff --git a/app/Notifications/User/UserLogin.php b/app/Notifications/User/UserLogin.php index 0e6ddd5cdb..b93436c782 100644 --- a/app/Notifications/User/UserLogin.php +++ b/app/Notifications/User/UserLogin.php @@ -29,9 +29,9 @@ use FireflyIII\Support\Notifications\UrlValidator; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; +use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Log; -use Illuminate\Notifications\Messages\SlackMessage; /** * Class UserLogin diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c71588decc..5094305b08 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -28,7 +28,6 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; use Laravel\Passport\Passport; use Laravel\Sanctum\Sanctum; -use URL; /** * Class AppServiceProvider diff --git a/app/Providers/JournalServiceProvider.php b/app/Providers/JournalServiceProvider.php index fa8dd0c960..0dee21d3b6 100644 --- a/app/Providers/JournalServiceProvider.php +++ b/app/Providers/JournalServiceProvider.php @@ -31,10 +31,10 @@ use FireflyIII\Repositories\Journal\JournalCLIRepository; use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepository; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; -use FireflyIII\Repositories\UserGroups\Journal\JournalRepository as GroupJournalRepository; -use FireflyIII\Repositories\UserGroups\Journal\JournalRepositoryInterface as GroupJournalRepositoryInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Journal\JournalRepository as GroupJournalRepository; +use FireflyIII\Repositories\UserGroups\Journal\JournalRepositoryInterface as GroupJournalRepositoryInterface; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; diff --git a/app/Providers/PiggyBankServiceProvider.php b/app/Providers/PiggyBankServiceProvider.php index 061bc311c0..4c60ba9ff5 100644 --- a/app/Providers/PiggyBankServiceProvider.php +++ b/app/Providers/PiggyBankServiceProvider.php @@ -25,10 +25,8 @@ namespace FireflyIII\Providers; use FireflyIII\Repositories\PiggyBank\PiggyBankRepository; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; - use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepository as AdminPiggyBankRepository; use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface as AdminPiggyBankRepositoryInterface; - use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 52e78dba52..ad98dae7cc 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -38,7 +38,6 @@ use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleTrigger; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepository; use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Destroy\BudgetDestroyService; use FireflyIII\User; diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index 6811f3a869..bf34aa5c94 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -262,6 +262,16 @@ class JournalRepository implements JournalRepositoryInterface } } + /** + * @inheritDoc + */ + public function unreconcileById(int $journalId): void + { + /** @var TransactionJournal $journal */ + $journal = $this->user->transactionJournals()->find($journalId); + $journal?->transactions()->update(['reconciled' => false]); + } + /** * Update budget for a journal. * @@ -334,14 +344,4 @@ class JournalRepository implements JournalRepositoryInterface return $journal; } - - /** - * @inheritDoc - */ - public function unreconcileById(int $journalId): void - { - /** @var TransactionJournal $journal */ - $journal = $this->user->transactionJournals()->find($journalId); - $journal?->transactions()->update(['reconciled' => false]); - } } diff --git a/app/Repositories/Journal/JournalRepositoryInterface.php b/app/Repositories/Journal/JournalRepositoryInterface.php index 34c5af0d09..a188d40c47 100644 --- a/app/Repositories/Journal/JournalRepositoryInterface.php +++ b/app/Repositories/Journal/JournalRepositoryInterface.php @@ -133,13 +133,6 @@ interface JournalRepositoryInterface */ public function reconcileById(int $journalId): void; - /** - * TODO Maybe to account repository? Do this wen reconcile is API only. - * - * @param int $journalId - */ - public function unreconcileById(int $journalId): void; - /** * Search in journal descriptions. * @@ -155,6 +148,13 @@ interface JournalRepositoryInterface */ public function setUser(User | Authenticatable | null $user): void; + /** + * TODO Maybe to account repository? Do this wen reconcile is API only. + * + * @param int $journalId + */ + public function unreconcileById(int $journalId): void; + /** * Update budget for a journal. * diff --git a/app/Repositories/UserGroups/Account/AccountRepository.php b/app/Repositories/UserGroups/Account/AccountRepository.php index 061ad83872..937d504af7 100644 --- a/app/Repositories/UserGroups/Account/AccountRepository.php +++ b/app/Repositories/UserGroups/Account/AccountRepository.php @@ -30,7 +30,6 @@ use FireflyIII\Models\AccountMeta; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait; -use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepository.php b/app/Repositories/UserGroups/Currency/CurrencyRepository.php index 5556f67954..12efef6f58 100644 --- a/app/Repositories/UserGroups/Currency/CurrencyRepository.php +++ b/app/Repositories/UserGroups/Currency/CurrencyRepository.php @@ -1,4 +1,5 @@ get(); } $default = $user->currencies()->where('user_default', true)->first(); - if(null === $default) { + if (null === $default) { $default = $this->getSystemCurrency(); $user->currencies()->sync([$default->id => ['user_default' => true]]); } @@ -148,6 +146,15 @@ class Amount return $default; } + + /** + * @return TransactionCurrency + */ + public function getSystemCurrency(): TransactionCurrency + { + return TransactionCurrency::where('code', 'EUR')->first(); + } + /** * @param User $user * @@ -162,7 +169,7 @@ class Amount return $cache->get(); } $default = $userGroup->currencies()->where('group_default', true)->first(); - if(null === $default) { + if (null === $default) { $default = $this->getSystemCurrency(); $userGroup->currencies()->sync([$default->id => ['group_default' => true]]); } @@ -171,22 +178,6 @@ class Amount return $default; } - /** - * @param string $value - * - * @return string - */ - private function tryDecrypt(string $value): string - { - try { - $value = Crypt::decrypt($value); // verified - } catch (DecryptException $e) { - // @ignoreException - } - - return $value; - } - /** * This method returns the correct format rules required by accounting.js, * the library used to format amounts in charts. @@ -328,10 +319,18 @@ class Amount } /** - * @return TransactionCurrency + * @param string $value + * + * @return string */ - public function getSystemCurrency(): TransactionCurrency + private function tryDecrypt(string $value): string { - return TransactionCurrency::where('code', 'EUR')->first(); + try { + $value = Crypt::decrypt($value); // verified + } catch (DecryptException $e) { + // @ignoreException + } + + return $value; } } diff --git a/app/Support/Binder/UserGroupAccount.php b/app/Support/Binder/UserGroupAccount.php index b70d19183d..f8b7824912 100644 --- a/app/Support/Binder/UserGroupAccount.php +++ b/app/Support/Binder/UserGroupAccount.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Binder; use FireflyIII\Models\Account; use FireflyIII\User; use Illuminate\Routing\Route; -use Illuminate\Support\Collection; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** diff --git a/app/Support/Form/RuleForm.php b/app/Support/Form/RuleForm.php index 577f34dc6b..522e2f0729 100644 --- a/app/Support/Form/RuleForm.php +++ b/app/Support/Form/RuleForm.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Form; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use Form; -use Illuminate\Support\HtmlString; /** * Class RuleForm diff --git a/app/Support/Http/Api/ConvertsExchangeRates.php b/app/Support/Http/Api/ConvertsExchangeRates.php index 6e0f2bfd77..214b7e9d06 100644 --- a/app/Support/Http/Api/ConvertsExchangeRates.php +++ b/app/Support/Http/Api/ConvertsExchangeRates.php @@ -26,10 +26,7 @@ namespace FireflyIII\Support\Http\Api; use Carbon\Carbon; use DateTimeInterface; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Models\CurrencyExchangeRate; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Support\CacheProperties; /** * Trait ConvertsExchangeRates diff --git a/app/Support/Navigation.php b/app/Support/Navigation.php index 0b6ba764b6..fbd3e3a0ab 100644 --- a/app/Support/Navigation.php +++ b/app/Support/Navigation.php @@ -58,7 +58,7 @@ class Navigation */ public function addPeriod(Carbon $theDate, string $repeatFreq, int $skip = 0): Carbon { - $date = clone $theDate; + $date = clone $theDate; $functionMap = [ '1D' => Periodicity::Daily, 'daily' => Periodicity::Daily, @@ -351,8 +351,13 @@ class Navigation */ public function diffInPeriods(string $period, int $skip, Carbon $beginning, Carbon $end): int { - app('log')->debug(sprintf('diffInPeriods: %s (skip: %d), between %s and %s.', - $period, $skip, $beginning->format('Y-m-d'), $end->format('Y-m-d'))); + app('log')->debug(sprintf( + 'diffInPeriods: %s (skip: %d), between %s and %s.', + $period, + $skip, + $beginning->format('Y-m-d'), + $end->format('Y-m-d') + )); $map = [ 'daily' => 'floatDiffInDays', 'weekly' => 'floatDiffInWeeks', @@ -370,11 +375,11 @@ class Navigation $diff = $beginning->$func($end); // then correct for quarterly or half-year - if('quarterly' === $period) { + if ('quarterly' === $period) { app('log')->debug(sprintf('Q: Corrected %f to %f', $diff, $diff / 3)); $diff = $diff / 3; } - if('half-year' === $period) { + if ('half-year' === $period) { app('log')->debug(sprintf('H: Corrected %f to %f', $diff, $diff / 6)); $diff = $diff / 6; } @@ -384,11 +389,15 @@ class Navigation app('log')->debug(sprintf('Diff is %f (%d)', $beginning->$func($end), $diff)); - if($skip > 0) { + if ($skip > 0) { $parameter = $skip + 1; - $diff = ceil($diff / $parameter) * $parameter; - app('log')->debug(sprintf('diffInPeriods: skip is %d, so param is %d, and diff becomes %d', - $skip, $parameter, $diff)); + $diff = ceil($diff / $parameter) * $parameter; + app('log')->debug(sprintf( + 'diffInPeriods: skip is %d, so param is %d, and diff becomes %d', + $skip, + $parameter, + $diff + )); } return (int)$diff; diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index 46a1a91d28..9aa647b04b 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -60,7 +60,7 @@ class Preferences */ public function get(string $name, $default = null): ?Preference { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } /** @var User|null $user */ @@ -85,7 +85,7 @@ class Preferences */ public function getForUser(User $user, string $name, $default = null): ?Preference { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); @@ -114,7 +114,7 @@ class Preferences */ public function delete(string $name): bool { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } $fullName = sprintf('preference%s%s', auth()->user()->id, $name); @@ -132,7 +132,7 @@ class Preferences */ public function forget(User $user, string $name): void { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } $key = sprintf('preference%s%s', $user->id, $name); @@ -150,7 +150,7 @@ class Preferences */ public function setForUser(User $user, string $name, $value): Preference { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } $fullName = sprintf('preference%s%s', $user->id, $name); @@ -200,7 +200,7 @@ class Preferences */ public function findByName(string $name): Collection { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } return Preference::where('name', $name)->get(); @@ -238,7 +238,7 @@ class Preferences */ public function getFresh(string $name, $default = null): ?Preference { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } /** @var User|null $user */ @@ -264,7 +264,7 @@ class Preferences */ public function getFreshForUser(User $user, string $name, $default = null): ?Preference { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } return $this->getForUser($user, $name, $default); @@ -307,7 +307,7 @@ class Preferences */ public function set(string $name, $value): Preference { - if('currencyPreference' === $name) { + if ('currencyPreference' === $name) { throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); } $user = auth()->user(); diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index 664dbdff66..ff1ff1c568 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -34,8 +34,8 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\ParseDateString; use FireflyIII\User; use Gdbots\QueryParser\Enum\BoolOperator; diff --git a/app/TransactionRules/Actions/SwitchAccounts.php b/app/TransactionRules/Actions/SwitchAccounts.php index 29d71b6bcc..0839dcf5ae 100644 --- a/app/TransactionRules/Actions/SwitchAccounts.php +++ b/app/TransactionRules/Actions/SwitchAccounts.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; diff --git a/app/Transformers/BillTransformer.php b/app/Transformers/BillTransformer.php index eb0022d035..97196f272c 100644 --- a/app/Transformers/BillTransformer.php +++ b/app/Transformers/BillTransformer.php @@ -60,17 +60,17 @@ class BillTransformer extends AbstractTransformer $paidData = $this->paidData($bill); $payDates = $this->payDates($bill); $currency = $bill->transactionCurrency; - $notes = $this->repository->getNoteText($bill); - $notes = '' === $notes ? null : $notes; + $notes = $this->repository->getNoteText($bill); + $notes = '' === $notes ? null : $notes; $this->repository->setUser($bill->user); - $objectGroupId = null; + $objectGroupId = null; $objectGroupOrder = null; $objectGroupTitle = null; /** @var ObjectGroup $objectGroup */ $objectGroup = $bill->objectGroups->first(); if (null !== $objectGroup) { - $objectGroupId = (int)$objectGroup->id; + $objectGroupId = (int)$objectGroup->id; $objectGroupOrder = (int)$objectGroup->order; $objectGroupTitle = $objectGroup->title; } @@ -78,7 +78,7 @@ class BillTransformer extends AbstractTransformer $paidDataFormatted = []; $payDatesFormatted = []; foreach ($paidData['paid_dates'] as $object) { - $object['date'] = Carbon::createFromFormat('!Y-m-d', $object['date'], config('app.timezone'))->toAtomString(); + $object['date'] = Carbon::createFromFormat('!Y-m-d', $object['date'], config('app.timezone'))->toAtomString(); $paidDataFormatted[] = $object; } @@ -98,40 +98,40 @@ class BillTransformer extends AbstractTransformer $current = $payDatesFormatted[0] ?? null; if (null !== $current && !$temp->isToday()) { - $temp2 = Carbon::createFromFormat('Y-m-d\TH:i:sP', $current); + $temp2 = Carbon::createFromFormat('Y-m-d\TH:i:sP', $current); $nextExpectedMatchDiff = $temp2->diffForHumans(today(config('app.timezone')), CarbonInterface::DIFF_RELATIVE_TO_NOW); } unset($temp, $temp2); return [ - 'id' => (int)$bill->id, - 'created_at' => $bill->created_at->toAtomString(), - 'updated_at' => $bill->updated_at->toAtomString(), - 'currency_id' => (string)$bill->transaction_currency_id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'name' => $bill->name, - 'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places), - 'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places), - 'date' => $bill->date->toAtomString(), - 'end_date' => $bill->end_date?->toAtomString(), - 'extension_date' => $bill->extension_date?->toAtomString(), - 'repeat_freq' => $bill->repeat_freq, - 'skip' => (int)$bill->skip, - 'active' => $bill->active, - 'order' => (int)$bill->order, - 'notes' => $notes, - 'object_group_id' => $objectGroupId ? (string)$objectGroupId : null, - 'object_group_order' => $objectGroupOrder, - 'object_group_title' => $objectGroupTitle, + 'id' => (int)$bill->id, + 'created_at' => $bill->created_at->toAtomString(), + 'updated_at' => $bill->updated_at->toAtomString(), + 'currency_id' => (string)$bill->transaction_currency_id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => (int)$currency->decimal_places, + 'name' => $bill->name, + 'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places), + 'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places), + 'date' => $bill->date->toAtomString(), + 'end_date' => $bill->end_date?->toAtomString(), + 'extension_date' => $bill->extension_date?->toAtomString(), + 'repeat_freq' => $bill->repeat_freq, + 'skip' => (int)$bill->skip, + 'active' => $bill->active, + 'order' => (int)$bill->order, + 'notes' => $notes, + 'object_group_id' => $objectGroupId ? (string)$objectGroupId : null, + 'object_group_order' => $objectGroupOrder, + 'object_group_title' => $objectGroupTitle, // these fields need work: - 'next_expected_match' => $nextExpectedMatch, + 'next_expected_match' => $nextExpectedMatch, 'next_expected_match_diff' => $nextExpectedMatchDiff, - 'pay_dates' => $payDatesFormatted, - 'paid_dates' => $paidDataFormatted, - 'links' => [ + 'pay_dates' => $payDatesFormatted, + 'paid_dates' => $paidDataFormatted, + 'links' => [ [ 'rel' => 'self', 'uri' => '/bills/' . $bill->id, @@ -154,7 +154,7 @@ class BillTransformer extends AbstractTransformer app('log')->debug('parameters are NULL, return empty array'); return [ - 'paid_dates' => [], + 'paid_dates' => [], 'next_expected_match' => null, ]; } @@ -162,7 +162,7 @@ class BillTransformer extends AbstractTransformer // 2023-07-18 this particular date is used to search for the last paid date. // 2023-07-18 the cloned $searchDate is used to grab the correct transactions. /** @var Carbon $start */ - $start = clone $this->parameters->get('start'); + $start = clone $this->parameters->get('start'); $searchStart = clone $start; $start->subDay(); @@ -189,7 +189,7 @@ class BillTransformer extends AbstractTransformer /* * Diff in months (or other period) between bill start and last paid date or $start. */ - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $nextMatch); + $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $nextMatch); $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $steps); if ($nextMatch->lt($lastPaidDate)) { @@ -213,16 +213,16 @@ class BillTransformer extends AbstractTransformer $result = []; foreach ($set as $entry) { $result[] = [ - 'transaction_group_id' => (int)$entry->transaction_group_id, + 'transaction_group_id' => (int)$entry->transaction_group_id, 'transaction_journal_id' => (int)$entry->id, - 'date' => $entry->date->format('Y-m-d'), + 'date' => $entry->date->format('Y-m-d'), ]; } app('log')->debug(sprintf('Next match: %s', $nextMatch->toIso8601String())); return [ - 'paid_dates' => $result, + 'paid_dates' => $result, 'next_expected_match' => $nextMatch->format('Y-m-d'), ]; } @@ -231,7 +231,7 @@ class BillTransformer extends AbstractTransformer * Returns the latest date in the set, or start when set is empty. * * @param Collection $dates - * @param Carbon $default + * @param Carbon $default * * @return Carbon */ @@ -265,7 +265,7 @@ class BillTransformer extends AbstractTransformer return []; } app('log')->debug(sprintf('Start: %s, end: %s', $this->parameters->get('start')->format('Y-m-d'), $this->parameters->get('end')->format('Y-m-d'))); - $set = new Collection(); + $set = new Collection(); $currentStart = clone $this->parameters->get('start'); // 2023-06-23 subDay to fix 7655 $currentStart->subDay(); @@ -303,7 +303,7 @@ class BillTransformer extends AbstractTransformer } app('log')->debug(sprintf('Next expected match is %s', $nextExpectedMatch->format('Y-m-d'))); // add to set, if the date is ON or after the start parameter - if($nextExpectedMatch->gte($this->parameters->get('start'))) { + if ($nextExpectedMatch->gte($this->parameters->get('start'))) { $set->push(clone $nextExpectedMatch); } @@ -334,7 +334,7 @@ class BillTransformer extends AbstractTransformer * Given a bill and a date, this method will tell you at which moment this bill expects its next * transaction. That date must be AFTER $date as a sanity check. * - * @param Bill $bill + * @param Bill $bill * @param Carbon $date * * @return Carbon @@ -349,7 +349,7 @@ class BillTransformer extends AbstractTransformer return clone $start; } - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $date); + $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $date); $result = clone $start; if ($steps > 0) { $steps = $steps - 1; diff --git a/app/Transformers/CurrencyTransformer.php b/app/Transformers/CurrencyTransformer.php index 0449db14b3..2764bde256 100644 --- a/app/Transformers/CurrencyTransformer.php +++ b/app/Transformers/CurrencyTransformer.php @@ -34,6 +34,7 @@ class CurrencyTransformer extends AbstractTransformer * Transform the currency. * * @param TransactionCurrency $currency + * * @return array */ public function transform(TransactionCurrency $currency): array diff --git a/app/Transformers/RecurrenceTransformer.php b/app/Transformers/RecurrenceTransformer.php index ddc95d7ef4..a480c05d9d 100644 --- a/app/Transformers/RecurrenceTransformer.php +++ b/app/Transformers/RecurrenceTransformer.php @@ -34,7 +34,6 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; -use Illuminate\Support\Facades\Log; /** * diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index cb12faa4de..35ce7ac32e 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -36,7 +36,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; use FireflyIII\Support\NullArrayObject; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class TransactionGroupTransformer diff --git a/app/Transformers/V2/AccountTransformer.php b/app/Transformers/V2/AccountTransformer.php index 4a2ab80572..8a192d121b 100644 --- a/app/Transformers/V2/AccountTransformer.php +++ b/app/Transformers/V2/AccountTransformer.php @@ -58,8 +58,8 @@ class AccountTransformer extends AbstractTransformer $this->convertedBalances = app('steam')->balancesByAccountsConverted($objects, $this->getDate()); /** @var CurrencyRepositoryInterface $repository */ - $repository = app(CurrencyRepositoryInterface::class); - $this->default = app('amount')->getDefaultCurrency(); + $repository = app(CurrencyRepositoryInterface::class); + $this->default = app('amount')->getDefaultCurrency(); // get currencies: $accountIds = $objects->pluck('id')->toArray(); diff --git a/app/Transformers/V2/BillTransformer.php b/app/Transformers/V2/BillTransformer.php index 4dae4997c5..5d0ec63965 100644 --- a/app/Transformers/V2/BillTransformer.php +++ b/app/Transformers/V2/BillTransformer.php @@ -35,7 +35,6 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; -use Log; /** * Class BillTransformer diff --git a/app/Transformers/WebhookMessageTransformer.php b/app/Transformers/WebhookMessageTransformer.php index 02a290a069..2ffaa2911c 100644 --- a/app/Transformers/WebhookMessageTransformer.php +++ b/app/Transformers/WebhookMessageTransformer.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\WebhookMessage; -use Illuminate\Support\Facades\Log; use Jsonexception; /** diff --git a/app/User.php b/app/User.php index f4575642d6..0effda5f39 100644 --- a/app/User.php +++ b/app/User.php @@ -80,39 +80,39 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class User. * - * @property int $id - * @property string $email - * @property bool $isAdmin - * @property bool $has2FA - * @property array $prefs - * @property string $password - * @property string $mfa_secret - * @property Collection $roles - * @property string $blocked_code - * @property bool $blocked - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $remember_token - * @property string|null $reset - * @property-read \Illuminate\Database\Eloquent\Collection|Account[] $accounts - * @property-read \Illuminate\Database\Eloquent\Collection|Attachment[] $attachments - * @property-read \Illuminate\Database\Eloquent\Collection|AvailableBudget[] $availableBudgets - * @property-read \Illuminate\Database\Eloquent\Collection|Bill[] $bills - * @property-read \Illuminate\Database\Eloquent\Collection|Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|Client[] $clients - * @property-read \Illuminate\Database\Eloquent\Collection|CurrencyExchangeRate[] $currencyExchangeRates - * @property-read DatabaseNotificationCollection|DatabaseNotification[] $notifications - * @property-read \Illuminate\Database\Eloquent\Collection|PiggyBank[] $piggyBanks - * @property-read \Illuminate\Database\Eloquent\Collection|Preference[] $preferences - * @property-read \Illuminate\Database\Eloquent\Collection|Recurrence[] $recurrences - * @property-read \Illuminate\Database\Eloquent\Collection|RuleGroup[] $ruleGroups - * @property-read \Illuminate\Database\Eloquent\Collection|Rule[] $rules - * @property-read \Illuminate\Database\Eloquent\Collection|Tag[] $tags - * @property-read \Illuminate\Database\Eloquent\Collection|Token[] $tokens - * @property-read \Illuminate\Database\Eloquent\Collection|TransactionGroup[] $transactionGroups - * @property-read \Illuminate\Database\Eloquent\Collection|TransactionJournal[] $transactionJournals - * @property-read \Illuminate\Database\Eloquent\Collection|Transaction[] $transactions + * @property int $id + * @property string $email + * @property bool $isAdmin + * @property bool $has2FA + * @property array $prefs + * @property string $password + * @property string $mfa_secret + * @property Collection $roles + * @property string $blocked_code + * @property bool $blocked + * @property Carbon|null $created_at + * @property Carbon|null $updated_at + * @property string|null $remember_token + * @property string|null $reset + * @property-read \Illuminate\Database\Eloquent\Collection|Account[] $accounts + * @property-read \Illuminate\Database\Eloquent\Collection|Attachment[] $attachments + * @property-read \Illuminate\Database\Eloquent\Collection|AvailableBudget[] $availableBudgets + * @property-read \Illuminate\Database\Eloquent\Collection|Bill[] $bills + * @property-read \Illuminate\Database\Eloquent\Collection|Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|Category[] $categories + * @property-read \Illuminate\Database\Eloquent\Collection|Client[] $clients + * @property-read \Illuminate\Database\Eloquent\Collection|CurrencyExchangeRate[] $currencyExchangeRates + * @property-read DatabaseNotificationCollection|DatabaseNotification[] $notifications + * @property-read \Illuminate\Database\Eloquent\Collection|PiggyBank[] $piggyBanks + * @property-read \Illuminate\Database\Eloquent\Collection|Preference[] $preferences + * @property-read \Illuminate\Database\Eloquent\Collection|Recurrence[] $recurrences + * @property-read \Illuminate\Database\Eloquent\Collection|RuleGroup[] $ruleGroups + * @property-read \Illuminate\Database\Eloquent\Collection|Rule[] $rules + * @property-read \Illuminate\Database\Eloquent\Collection|Tag[] $tags + * @property-read \Illuminate\Database\Eloquent\Collection|Token[] $tokens + * @property-read \Illuminate\Database\Eloquent\Collection|TransactionGroup[] $transactionGroups + * @property-read \Illuminate\Database\Eloquent\Collection|TransactionJournal[] $transactionJournals + * @property-read \Illuminate\Database\Eloquent\Collection|Transaction[] $transactions * @method static Builder|User newModelQuery() * @method static Builder|User newQuery() * @method static Builder|User query() @@ -125,50 +125,50 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|User whereRememberToken($value) * @method static Builder|User whereReset($value) * @method static Builder|User whereUpdatedAt($value) - * @property string|null $objectguid - * @property-read int|null $accounts_count - * @property-read int|null $attachments_count - * @property-read int|null $available_budgets_count - * @property-read int|null $bills_count - * @property-read int|null $budgets_count - * @property-read int|null $categories_count - * @property-read int|null $clients_count - * @property-read int|null $currency_exchange_rates_count - * @property-read int|null $notifications_count - * @property-read int|null $piggy_banks_count - * @property-read int|null $preferences_count - * @property-read int|null $recurrences_count - * @property-read int|null $roles_count - * @property-read int|null $rule_groups_count - * @property-read int|null $rules_count - * @property-read int|null $tags_count - * @property-read int|null $tokens_count - * @property-read int|null $transaction_groups_count - * @property-read int|null $transaction_journals_count - * @property-read int|null $transactions_count + * @property string|null $objectguid + * @property-read int|null $accounts_count + * @property-read int|null $attachments_count + * @property-read int|null $available_budgets_count + * @property-read int|null $bills_count + * @property-read int|null $budgets_count + * @property-read int|null $categories_count + * @property-read int|null $clients_count + * @property-read int|null $currency_exchange_rates_count + * @property-read int|null $notifications_count + * @property-read int|null $piggy_banks_count + * @property-read int|null $preferences_count + * @property-read int|null $recurrences_count + * @property-read int|null $roles_count + * @property-read int|null $rule_groups_count + * @property-read int|null $rules_count + * @property-read int|null $tags_count + * @property-read int|null $tokens_count + * @property-read int|null $transaction_groups_count + * @property-read int|null $transaction_journals_count + * @property-read int|null $transactions_count * @method static Builder|User whereMfaSecret($value) * @method static Builder|User whereObjectguid($value) - * @property string|null $provider + * @property string|null $provider * @method static Builder|User whereProvider($value) - * @property-read \Illuminate\Database\Eloquent\Collection|ObjectGroup[] $objectGroups - * @property-read int|null $object_groups_count - * @property-read \Illuminate\Database\Eloquent\Collection|Webhook[] $webhooks - * @property-read int|null $webhooks_count - * @property string|null $two_factor_secret - * @property string|null $two_factor_recovery_codes - * @property string|null $guid - * @property string|null $domain + * @property-read \Illuminate\Database\Eloquent\Collection|ObjectGroup[] $objectGroups + * @property-read int|null $object_groups_count + * @property-read \Illuminate\Database\Eloquent\Collection|Webhook[] $webhooks + * @property-read int|null $webhooks_count + * @property string|null $two_factor_secret + * @property string|null $two_factor_recovery_codes + * @property string|null $guid + * @property string|null $domain * @method static Builder|User whereDomain($value) * @method static Builder|User whereGuid($value) * @method static Builder|User whereTwoFactorRecoveryCodes($value) * @method static Builder|User whereTwoFactorSecret($value) - * @property int|null $user_group_id - * @property-read \Illuminate\Database\Eloquent\Collection|GroupMembership[] $groupMemberships - * @property-read int|null $group_memberships_count - * @property-read UserGroup|null $userGroup + * @property int|null $user_group_id + * @property-read \Illuminate\Database\Eloquent\Collection|GroupMembership[] $groupMemberships + * @property-read int|null $group_memberships_count + * @property-read UserGroup|null $userGroup * @method static Builder|User whereUserGroupId($value) * @property-read \Illuminate\Database\Eloquent\Collection $currencies - * @property-read int|null $currencies_count + * @property-read int|null $currencies_count * @mixin Eloquent */ class User extends Authenticatable @@ -234,16 +234,6 @@ class User extends Authenticatable return $this->hasMany(Account::class); } - /** - * Link to currencies - * - * @return BelongsToMany - */ - public function currencies(): BelongsToMany - { - return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('user_default'); - } - /** * Link to attachments * @@ -294,6 +284,16 @@ class User extends Authenticatable return $this->hasMany(Category::class); } + /** + * Link to currencies + * + * @return BelongsToMany + */ + public function currencies(): BelongsToMany + { + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('user_default'); + } + /** * Link to currency exchange rates * diff --git a/app/Validation/GroupValidation.php b/app/Validation/GroupValidation.php index 025a5b2d40..29fb2511f3 100644 --- a/app/Validation/GroupValidation.php +++ b/app/Validation/GroupValidation.php @@ -27,7 +27,6 @@ namespace FireflyIII\Validation; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionGroup; -use FireflyIII\Models\TransactionJournal; use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; @@ -38,44 +37,6 @@ use Illuminate\Validation\Validator; */ trait GroupValidation { - /** - * @param Validator $validator - * @param TransactionGroup $transactionGroup - * - * @return void - */ - protected function preventUpdateReconciled(Validator $validator, TransactionGroup $transactionGroup): void - { - app('log')->debug(sprintf('Now in %s', __METHOD__)); - - $count = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id') - ->leftJoin('transaction_groups', 'transaction_groups.id', 'transaction_journals.transaction_group_id') - ->where('transaction_journals.transaction_group_id', $transactionGroup->id) - ->where('transactions.reconciled', 1)->where('transactions.amount', '<', 0)->count(['transactions.id']); - if (0 === $count) { - app('log')->debug(sprintf('Transaction is not reconciled, done with %s', __METHOD__)); - return; - } - $data = $validator->getData(); - $forbidden = ['amount','foreign_amount','currency_code','currency_id','foreign_currency_code','foreign_currency_id', - 'source_id','source_name','source_number','source_iban', - 'destination_id','destination_name','destination_number','destination_iban', - ]; - foreach($data['transactions'] as $index => $row) { - foreach($forbidden as $key) { - if(array_key_exists($key, $row)) { - $validator->errors()->add( - sprintf('transactions.%d.%s', $index, $key), - (string)trans('validation.reconciled_forbidden_field', ['field' => $key]) - ); - } - } - } - - app('log')->debug(sprintf('Done with %s', __METHOD__)); - } - - /** * A catch when users submit splits with no source or destination info at all. * @@ -133,6 +94,43 @@ trait GroupValidation */ abstract protected function getTransactionsArray(Validator $validator): array; + /** + * @param Validator $validator + * @param TransactionGroup $transactionGroup + * + * @return void + */ + protected function preventUpdateReconciled(Validator $validator, TransactionGroup $transactionGroup): void + { + app('log')->debug(sprintf('Now in %s', __METHOD__)); + + $count = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id') + ->leftJoin('transaction_groups', 'transaction_groups.id', 'transaction_journals.transaction_group_id') + ->where('transaction_journals.transaction_group_id', $transactionGroup->id) + ->where('transactions.reconciled', 1)->where('transactions.amount', '<', 0)->count(['transactions.id']); + if (0 === $count) { + app('log')->debug(sprintf('Transaction is not reconciled, done with %s', __METHOD__)); + return; + } + $data = $validator->getData(); + $forbidden = ['amount', 'foreign_amount', 'currency_code', 'currency_id', 'foreign_currency_code', 'foreign_currency_id', + 'source_id', 'source_name', 'source_number', 'source_iban', + 'destination_id', 'destination_name', 'destination_number', 'destination_iban', + ]; + foreach ($data['transactions'] as $index => $row) { + foreach ($forbidden as $key) { + if (array_key_exists($key, $row)) { + $validator->errors()->add( + sprintf('transactions.%d.%s', $index, $key), + (string)trans('validation.reconciled_forbidden_field', ['field' => $key]) + ); + } + } + } + + app('log')->debug(sprintf('Done with %s', __METHOD__)); + } + /** * Adds an error to the "description" field when the user has submitted no descriptions and no * journal description. diff --git a/bootstrap/app.php b/bootstrap/app.php index b7cac40a4c..c6dadd7ee1 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -41,7 +41,8 @@ if (!function_exists('envNonEmpty')) { * * @return mixed|null */ - function envNonEmpty(string $key, $default = null) { + function envNonEmpty(string $key, $default = null) + { $result = env($key, $default); if (is_string($result) && '' === $result) { $result = $default; @@ -58,7 +59,8 @@ if (!function_exists('stringIsEqual')) { * * @return bool */ - function stringIsEqual(string $left, string $right): bool { + function stringIsEqual(string $left, string $right): bool + { return $left === $right; } } diff --git a/config/broadcasting.php b/config/broadcasting.php index 933bd64870..9f892e15a0 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -51,17 +51,17 @@ return [ 'connections' => [ 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', - 'port' => env('PUSHER_PORT', 443), - 'scheme' => env('PUSHER_SCHEME', 'https'), + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'host' => env('PUSHER_HOST') ?: 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), 'encrypted' => true, - 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', ], 'client_options' => [ // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html @@ -70,11 +70,11 @@ return [ 'ably' => [ 'driver' => 'ably', - 'key' => env('ABLY_KEY'), + 'key' => env('ABLY_KEY'), ], 'redis' => [ - 'driver' => 'redis', + 'driver' => 'redis', 'connection' => 'default', ], diff --git a/database/seeders/ConfigSeeder.php b/database/seeders/ConfigSeeder.php index b1ade84b80..3f7fece659 100644 --- a/database/seeders/ConfigSeeder.php +++ b/database/seeders/ConfigSeeder.php @@ -25,7 +25,6 @@ namespace Database\Seeders; use FireflyIII\Models\Configuration; use Illuminate\Database\Seeder; -use Log; /** * Class ConfigSeeder. From 83d64262c839e3f7c2360088f39684aaffbbbe8f Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 28 Oct 2023 16:47:11 +0200 Subject: [PATCH 45/48] Refactor currency API --- .../Model/Account/ShowController.php | 2 + .../Model/Bill/IndexController.php | 87 +++++++++++++++++++ .../Controllers/Model/Bill/ShowController.php | 24 +---- .../Model/Budget/ListController.php | 3 +- .../Model/Budget/ShowController.php | 3 + .../Model/Budget/SumController.php | 3 + .../Model/BudgetLimit/ListController.php | 4 +- .../Model/Currency/IndexController.php | 53 +++++++++++ ...ShowController.php => IndexController.php} | 3 +- app/Models/TransactionCurrency.php | 1 + app/Transformers/V2/CurrencyTransformer.php | 69 +++++++++++++++ 11 files changed, 226 insertions(+), 26 deletions(-) create mode 100644 app/Api/V2/Controllers/Model/Bill/IndexController.php create mode 100644 app/Api/V2/Controllers/Model/Currency/IndexController.php rename app/Api/V2/Controllers/Model/PiggyBank/{ShowController.php => IndexController.php} (97%) create mode 100644 app/Transformers/V2/CurrencyTransformer.php diff --git a/app/Api/V2/Controllers/Model/Account/ShowController.php b/app/Api/V2/Controllers/Model/Account/ShowController.php index 8f62d0b94d..85a9845da2 100644 --- a/app/Api/V2/Controllers/Model/Account/ShowController.php +++ b/app/Api/V2/Controllers/Model/Account/ShowController.php @@ -31,6 +31,8 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; /** + * Show = show a single account. + * Index = show all accounts * Class ShowController */ class ShowController extends Controller diff --git a/app/Api/V2/Controllers/Model/Bill/IndexController.php b/app/Api/V2/Controllers/Model/Bill/IndexController.php new file mode 100644 index 0000000000..6ccb5e0da6 --- /dev/null +++ b/app/Api/V2/Controllers/Model/Bill/IndexController.php @@ -0,0 +1,87 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Model\Bill; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Bill; +use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; +use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; +use FireflyIII\Transformers\V2\BillTransformer; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; + +/** + * Class ShowController + */ +class IndexController extends Controller +{ + use ValidatesUserGroupTrait; + + private BillRepositoryInterface $repository; + + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(BillRepositoryInterface::class); + + // new way of user group validation + $userGroup = $this->validateUserGroup($request); + if (null !== $userGroup) { + $this->repository->setUserGroup($userGroup); + } + + return $next($request); + } + ); + } + + /** + * @param Request $request + * + * TODO see autocomplete/accountcontroller for list. + * + * @return JsonResponse + */ + public function index(Request $request): JsonResponse + { + $this->repository->correctOrder(); + $bills = $this->repository->getBills(); + $pageSize = $this->parameters->get('limit'); + $count = $bills->count(); + $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $transformer = new BillTransformer(); + $transformer->setParameters($this->parameters); // give params to transformer + + return response() + ->json($this->jsonApiList('subscriptions', $paginator, $transformer)) + ->header('Content-Type', self::CONTENT_TYPE); + } +} diff --git a/app/Api/V2/Controllers/Model/Bill/ShowController.php b/app/Api/V2/Controllers/Model/Bill/ShowController.php index ab7781065e..e43107e412 100644 --- a/app/Api/V2/Controllers/Model/Bill/ShowController.php +++ b/app/Api/V2/Controllers/Model/Bill/ShowController.php @@ -26,6 +26,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\Bill; use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Bill; use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; @@ -61,29 +62,6 @@ class ShowController extends Controller ); } - /** - * @param Request $request - * - * TODO see autocomplete/accountcontroller for list. - * - * @return JsonResponse - */ - public function index(Request $request): JsonResponse - { - $this->repository->correctOrder(); - $bills = $this->repository->getBills(); - $pageSize = $this->parameters->get('limit'); - $count = $bills->count(); - $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); - $transformer = new BillTransformer(); - $transformer->setParameters($this->parameters); // give params to transformer - - return response() - ->json($this->jsonApiList('subscriptions', $paginator, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); - } - /** * TODO this endpoint is not documented */ diff --git a/app/Api/V2/Controllers/Model/Budget/ListController.php b/app/Api/V2/Controllers/Model/Budget/ListController.php index b7bbaff1c7..7b92c751ae 100644 --- a/app/Api/V2/Controllers/Model/Budget/ListController.php +++ b/app/Api/V2/Controllers/Model/Budget/ListController.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\Budget; use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\V2\BudgetTransformer; use Illuminate\Http\JsonResponse; @@ -61,7 +62,7 @@ class ListController extends Controller public function index(Request $request): JsonResponse { echo 'this needs move to Administration'; - exit; + throw new FireflyException('Needs migration to IndexController'); $collection = $this->repository->getActiveBudgets(); $total = $collection->count(); $collection->slice($this->pageXSize * $this->parameters->get('page'), $this->pXageSize); diff --git a/app/Api/V2/Controllers/Model/Budget/ShowController.php b/app/Api/V2/Controllers/Model/Budget/ShowController.php index c238848359..561be1e45d 100644 --- a/app/Api/V2/Controllers/Model/Budget/ShowController.php +++ b/app/Api/V2/Controllers/Model/Budget/ShowController.php @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Budget; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\Http\Api\ConvertsExchangeRates; @@ -64,6 +65,7 @@ class ShowController extends Controller */ public function budgeted(DateRequest $request, Budget $budget): JsonResponse { + throw new FireflyException('Needs refactoring, uses deprecated method.'); $data = $request->getAll(); $result = $this->repository->budgetedInPeriodForBudget($budget, $data['start'], $data['end']); $converted = $this->cerSum(array_values($result)); @@ -78,6 +80,7 @@ class ShowController extends Controller */ public function spent(DateRequest $request, Budget $budget): JsonResponse { + throw new FireflyException('Needs refactoring, uses deprecated method.'); $data = $request->getAll(); $result = $this->repository->spentInPeriodForBudget($budget, $data['start'], $data['end']); $converted = $this->cerSum(array_values($result)); diff --git a/app/Api/V2/Controllers/Model/Budget/SumController.php b/app/Api/V2/Controllers/Model/Budget/SumController.php index 15de6ca665..9f5c8f1ff6 100644 --- a/app/Api/V2/Controllers/Model/Budget/SumController.php +++ b/app/Api/V2/Controllers/Model/Budget/SumController.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Budget; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\Http\Api\ConvertsExchangeRates; use Illuminate\Http\JsonResponse; @@ -64,6 +65,7 @@ class SumController extends Controller */ public function budgeted(DateRequest $request): JsonResponse { + throw new FireflyException('Needs refactoring, uses deprecated method.'); $data = $request->getAll(); $result = $this->repository->budgetedInPeriod($data['start'], $data['end']); $converted = $this->cerSum(array_values($result)); @@ -81,6 +83,7 @@ class SumController extends Controller */ public function spent(DateRequest $request): JsonResponse { + throw new FireflyException('Needs refactoring, uses deprecated method.'); $data = $request->getAll(); $result = $this->repository->spentInPeriod($data['start'], $data['end']); $converted = $this->cerSum(array_values($result)); diff --git a/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php b/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php index cf7ef4f9d7..9b72294183 100644 --- a/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php +++ b/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\BudgetLimit; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Transformers\V2\BudgetLimitTransformer; @@ -57,6 +58,7 @@ class ListController extends Controller */ public function index(DateRequest $request, Budget $budget): JsonResponse { + throw new FireflyException('Needs refactoring, move to IndexController.'); $pageSize = $this->parameters->get('limit'); $dates = $request->getAll(); $collection = $this->repository->getBudgetLimits($budget, $dates['start'], $dates['end']); @@ -67,7 +69,7 @@ class ListController extends Controller $transformer = new BudgetLimitTransformer(); return response() - ->api($this->jsonApiList('budget_limits', $paginator, $transformer)) + ->api($this->jsonApiList('budget-limits', $paginator, $transformer)) ->header('Content-Type', self::CONTENT_TYPE); } } diff --git a/app/Api/V2/Controllers/Model/Currency/IndexController.php b/app/Api/V2/Controllers/Model/Currency/IndexController.php new file mode 100644 index 0000000000..0e71ad2d27 --- /dev/null +++ b/app/Api/V2/Controllers/Model/Currency/IndexController.php @@ -0,0 +1,53 @@ +middleware( + function ($request, $next) { + $this->repository = app(CurrencyRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * TODO This endpoint is not yet documented. + * + * Display a listing of the resource. + * + * @return JsonResponse + */ + public function index(): JsonResponse + { + $bills = $this->repository->getAll(); + $pageSize = $this->parameters->get('limit'); + $count = $bills->count(); + $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $transformer = new CurrencyTransformer(); + $transformer->setParameters($this->parameters); // give params to transformer + + return response() + ->json($this->jsonApiList('currencies', $paginator, $transformer)) + ->header('Content-Type', self::CONTENT_TYPE); + } + +} diff --git a/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php b/app/Api/V2/Controllers/Model/PiggyBank/IndexController.php similarity index 97% rename from app/Api/V2/Controllers/Model/PiggyBank/ShowController.php rename to app/Api/V2/Controllers/Model/PiggyBank/IndexController.php index e3a74c16bf..55d73bb84a 100644 --- a/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php +++ b/app/Api/V2/Controllers/Model/PiggyBank/IndexController.php @@ -26,6 +26,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\PiggyBank; use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use FireflyIII\Transformers\V2\PiggyBankTransformer; @@ -36,7 +37,7 @@ use Illuminate\Pagination\LengthAwarePaginator; /** * Class ShowController */ -class ShowController extends Controller +class IndexController extends Controller { use ValidatesUserGroupTrait; diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 81bf291294..9825eb5562 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -109,6 +109,7 @@ class TransactionCurrency extends Model $currencyId = (int)$value; $currency = self::find($currencyId); if (null !== $currency) { + $currency->refreshForUser(auth()->user()); return $currency; } } diff --git a/app/Transformers/V2/CurrencyTransformer.php b/app/Transformers/V2/CurrencyTransformer.php new file mode 100644 index 0000000000..b79b6ee8e4 --- /dev/null +++ b/app/Transformers/V2/CurrencyTransformer.php @@ -0,0 +1,69 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Transformers\V2; + +use FireflyIII\Models\TransactionCurrency; +use Illuminate\Support\Collection; + +/** + * Class CurrencyTransformer + */ +class CurrencyTransformer extends AbstractTransformer +{ + /** + * @inheritDoc + */ + public function collectMetaData(Collection $objects): void + { + + } + + /** + * Transform the currency. + * + * @param TransactionCurrency $currency + * + * @return array + */ + public function transform(TransactionCurrency $currency): array + { + return [ + 'id' => (int)$currency->id, + 'created_at' => $currency->created_at->toAtomString(), + 'updated_at' => $currency->updated_at->toAtomString(), + 'default' => $currency->userDefault, + 'enabled' => $currency->userEnabled, + 'name' => $currency->name, + 'code' => $currency->code, + 'symbol' => $currency->symbol, + 'decimal_places' => (int)$currency->decimal_places, + 'links' => [ + [ + 'rel' => 'self', + 'uri' => '/currencies/' . $currency->id, + ], + ], + ]; + } +} From 62458885ce5c90678d508b929eefdd4036c4986f Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 28 Oct 2023 16:47:31 +0200 Subject: [PATCH 46/48] Fix #8103 --- app/Http/Requests/MassEditJournalRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Requests/MassEditJournalRequest.php b/app/Http/Requests/MassEditJournalRequest.php index 0ac30468b3..37fe8c6037 100644 --- a/app/Http/Requests/MassEditJournalRequest.php +++ b/app/Http/Requests/MassEditJournalRequest.php @@ -45,7 +45,7 @@ class MassEditJournalRequest extends FormRequest // fixed return [ - 'description.*' => 'required|min:1|max:255', + 'description.*' => 'required|min:1|max:1024', 'source_id.*' => 'numeric|belongsToUser:accounts,id', 'destination_id.*' => 'numeric|belongsToUser:accounts,id', 'journals.*' => 'numeric|belongsToUser:transaction_journals,id', From 78153c2aa4dcec09f051504dd8443f1acc74ef55 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 28 Oct 2023 17:17:09 +0200 Subject: [PATCH 47/48] Update meta files for new release. --- .ci/php-cs-fixer/composer.lock | 12 +-- .../Model/Currency/IndexController.php | 21 +++++ .../Upgrade/UpgradeCurrencyPreferences.php | 21 +++++ .../TransactionCurrency/CreateController.php | 21 +++++ .../TransactionCurrency/DeleteController.php | 21 +++++ .../TransactionCurrency/EditController.php | 21 +++++ .../TransactionCurrency/IndexController.php | 21 +++++ .../Currency/CurrencyRepository.php | 21 +++++ .../Currency/CurrencyRepositoryInterface.php | 21 +++++ app/Support/Amount.php | 17 +--- app/Transformers/BillTransformer.php | 84 ++++++++++--------- app/Transformers/V2/BillTransformer.php | 2 + changelog.md | 28 +++---- ...10_21_113213_add_currency_pivot_tables.php | 21 +++++ package-lock.json | 18 ++-- public/build/assets/create-1321af8a.js | 1 + public/build/assets/create-baf83427.js | 1 - ...oard-daa2fdbe.js => dashboard-42661760.js} | 6 +- ...54502.js => load-translations-87b32220.js} | 8 +- public/build/manifest.json | 18 ++-- public/v2/i18n/ca_ES.json | 6 +- public/v2/i18n/es_ES.json | 6 +- public/v2/i18n/fr_FR.json | 6 +- public/v2/i18n/it_IT.json | 2 +- public/v2/i18n/ja_JP.json | 6 +- public/v2/i18n/pt_BR.json | 6 +- .../assets/v2/api/v2/model/currency/get.js | 35 ++++++++ .../assets/v2/api/v2/model/piggy-bank/get.js | 2 +- .../v2/api/v2/model/subscription/get.js | 2 +- .../assets/v2/api/v2/model/transaction/get.js | 2 +- .../assets/v2/pages/dashboard/piggies.js | 2 +- resources/assets/v2/pages/dashboard/sankey.js | 2 +- .../v2/pages/dashboard/subscriptions.js | 2 +- .../assets/v2/pages/transactions/create.js | 36 +++++++- .../transactions/shared/create-empty-split.js | 7 ++ .../transactions/shared/parse-from-entries.js | 1 + .../views/v2/transactions/create.blade.php | 25 ++---- routes/api.php | 42 +++++----- .../NavigationCustomEndOfPeriodTest.php | 21 +++++ 39 files changed, 433 insertions(+), 162 deletions(-) create mode 100644 public/build/assets/create-1321af8a.js delete mode 100644 public/build/assets/create-baf83427.js rename public/build/assets/{dashboard-daa2fdbe.js => dashboard-42661760.js} (96%) rename public/build/assets/{load-translations-9a154502.js => load-translations-87b32220.js} (88%) create mode 100644 resources/assets/v2/api/v2/model/currency/get.js diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index f97e8f97ee..e68e86b2d3 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -226,16 +226,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.36.0", + "version": "v3.37.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "e889301f276c6ce2c391d6aafae9a162e785b064" + "reference": "d5ccc3807fd496ac2b448e8e5e57aa0772f0d18b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e889301f276c6ce2c391d6aafae9a162e785b064", - "reference": "e889301f276c6ce2c391d6aafae9a162e785b064", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d5ccc3807fd496ac2b448e8e5e57aa0772f0d18b", + "reference": "d5ccc3807fd496ac2b448e8e5e57aa0772f0d18b", "shasum": "" }, "require": { @@ -307,7 +307,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.36.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.37.0" }, "funding": [ { @@ -315,7 +315,7 @@ "type": "github" } ], - "time": "2023-10-27T10:12:29+00:00" + "time": "2023-10-28T14:49:50+00:00" }, { "name": "psr/container", diff --git a/app/Api/V2/Controllers/Model/Currency/IndexController.php b/app/Api/V2/Controllers/Model/Currency/IndexController.php index 0e71ad2d27..e9ceca34d3 100644 --- a/app/Api/V2/Controllers/Model/Currency/IndexController.php +++ b/app/Api/V2/Controllers/Model/Currency/IndexController.php @@ -1,4 +1,25 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\Currency; diff --git a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php index b6ee8c2a1c..b78ff5c57b 100644 --- a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php +++ b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Console\Commands\Upgrade; diff --git a/app/Http/Controllers/TransactionCurrency/CreateController.php b/app/Http/Controllers/TransactionCurrency/CreateController.php index 8742e45765..c3be3b01f2 100644 --- a/app/Http/Controllers/TransactionCurrency/CreateController.php +++ b/app/Http/Controllers/TransactionCurrency/CreateController.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Http\Controllers\TransactionCurrency; diff --git a/app/Http/Controllers/TransactionCurrency/DeleteController.php b/app/Http/Controllers/TransactionCurrency/DeleteController.php index 00d36900dd..28190f5f49 100644 --- a/app/Http/Controllers/TransactionCurrency/DeleteController.php +++ b/app/Http/Controllers/TransactionCurrency/DeleteController.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Http\Controllers\TransactionCurrency; diff --git a/app/Http/Controllers/TransactionCurrency/EditController.php b/app/Http/Controllers/TransactionCurrency/EditController.php index 8a38de1fd2..46f3e56272 100644 --- a/app/Http/Controllers/TransactionCurrency/EditController.php +++ b/app/Http/Controllers/TransactionCurrency/EditController.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Http\Controllers\TransactionCurrency; diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php index 35b943e445..d3e00e8952 100644 --- a/app/Http/Controllers/TransactionCurrency/IndexController.php +++ b/app/Http/Controllers/TransactionCurrency/IndexController.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Http\Controllers\TransactionCurrency; diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepository.php b/app/Repositories/UserGroups/Currency/CurrencyRepository.php index 12efef6f58..99c8763d6a 100644 --- a/app/Repositories/UserGroups/Currency/CurrencyRepository.php +++ b/app/Repositories/UserGroups/Currency/CurrencyRepository.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Repositories\UserGroups\Currency; diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php index 05b9699fe6..d81a11752c 100644 --- a/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); namespace FireflyIII\Repositories\UserGroups\Currency; diff --git a/app/Support/Amount.php b/app/Support/Amount.php index f5f44aafd1..cef4fbb730 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -126,25 +126,12 @@ class Amount /** * @param User $user - * + * @deprecated use getDefaultCurrencyByUserGroup instead. * @return TransactionCurrency */ public function getDefaultCurrencyByUser(User $user): TransactionCurrency { - $cache = new CacheProperties(); - $cache->addProperty('getDefaultCurrency'); - $cache->addProperty($user->id); - if ($cache->has()) { - return $cache->get(); - } - $default = $user->currencies()->where('user_default', true)->first(); - if (null === $default) { - $default = $this->getSystemCurrency(); - $user->currencies()->sync([$default->id => ['user_default' => true]]); - } - $cache->store($default); - - return $default; + return $this->getDefaultCurrencyByUserGroup($user->userGroup); } /** diff --git a/app/Transformers/BillTransformer.php b/app/Transformers/BillTransformer.php index 97196f272c..b84222281f 100644 --- a/app/Transformers/BillTransformer.php +++ b/app/Transformers/BillTransformer.php @@ -57,11 +57,12 @@ class BillTransformer extends AbstractTransformer */ public function transform(Bill $bill): array { - $paidData = $this->paidData($bill); - $payDates = $this->payDates($bill); - $currency = $bill->transactionCurrency; - $notes = $this->repository->getNoteText($bill); - $notes = '' === $notes ? null : $notes; + $paidData = $this->paidData($bill); + $lastPaidDate = $this->getLastPaidDate($paidData); + $payDates = $this->payDates($bill, $lastPaidDate); + $currency = $bill->transactionCurrency; + $notes = $this->repository->getNoteText($bill); + $notes = '' === $notes ? null : $notes; $this->repository->setUser($bill->user); $objectGroupId = null; @@ -86,8 +87,8 @@ class BillTransformer extends AbstractTransformer $payDatesFormatted[] = Carbon::createFromFormat('!Y-m-d', $string, config('app.timezone'))->toAtomString(); } $nextExpectedMatch = null; - if (null !== $paidData['next_expected_match']) { - $nextExpectedMatch = Carbon::createFromFormat('!Y-m-d', $paidData['next_expected_match'], config('app.timezone'))->toAtomString(); + if (null !== ($payDates[0] ?? null)) { + $nextExpectedMatch = Carbon::createFromFormat('!Y-m-d', $payDates[0], config('app.timezone'))->toAtomString(); } $nextExpectedMatchDiff = trans('firefly.not_expected_period'); // converting back and forth is bad code but OK. @@ -182,31 +183,6 @@ class BillTransformer extends AbstractTransformer $lastPaidDate = $this->lastPaidDate($set, $start); app('log')->debug(sprintf('Result of lastPaidDate is %s', $lastPaidDate->format('Y-m-d'))); - /* - * The next expected match (nextMatch) is, initially, the bill's date. - */ - $nextMatch = clone $bill->date; - /* - * Diff in months (or other period) between bill start and last paid date or $start. - */ - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $bill->skip, $start, $nextMatch); - $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $steps); - - if ($nextMatch->lt($lastPaidDate)) { - /* - * Add another period because it's before the last paid date - */ - app('log')->debug('Because the last paid date was before our next expected match, add another period.'); - $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); - } - - if ($nextMatch->isSameDay($lastPaidDate)) { - /* - * Add another period because it's the same day as the last paid date. - */ - app('log')->debug('Because the last paid date was on the same day as our next expected match, add another day.'); - $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); - } /* * At this point the "next match" is exactly after the last time the bill was paid. */ @@ -219,11 +195,8 @@ class BillTransformer extends AbstractTransformer ]; } - app('log')->debug(sprintf('Next match: %s', $nextMatch->toIso8601String())); - return [ - 'paid_dates' => $result, - 'next_expected_match' => $nextMatch->format('Y-m-d'), + 'paid_dates' => $result ]; } @@ -253,12 +226,13 @@ class BillTransformer extends AbstractTransformer /** * @param Bill $bill + * @param Carbon $lastPaidDate * * @return array */ - protected function payDates(Bill $bill): array + protected function payDates(Bill $bill, ?Carbon $lastPaidDate): array { - app('log')->debug(sprintf('Now in payDates() for bill #%d', $bill->id)); + app('log')->debug(sprintf('Now in payDates(#%d, "%s")', $bill->id, $lastPaidDate?->format('Y-m-d'))); if (null === $this->parameters->get('start') || null === $this->parameters->get('end')) { app('log')->debug('No start or end date, give empty array.'); @@ -303,7 +277,11 @@ class BillTransformer extends AbstractTransformer } app('log')->debug(sprintf('Next expected match is %s', $nextExpectedMatch->format('Y-m-d'))); // add to set, if the date is ON or after the start parameter - if ($nextExpectedMatch->gte($this->parameters->get('start'))) { + // AND date is after last paid date + if ($nextExpectedMatch->gte($this->parameters->get('start')) + && (null === $lastPaidDate || $nextExpectedMatch->gt($lastPaidDate)) + ) { + app('log')->debug('Add date to set.'); $set->push(clone $nextExpectedMatch); } @@ -315,7 +293,7 @@ class BillTransformer extends AbstractTransformer $loop++; - if ($loop > 4) { + if ($loop > 12) { break; } } @@ -359,4 +337,30 @@ class BillTransformer extends AbstractTransformer app('log')->debug(sprintf('Number of steps is %d, result is %s', $steps, $result->format('Y-m-d'))); return $result; } + + /** + * @param array $paidData + * + * @return Carbon|null + */ + private function getLastPaidDate(array $paidData): ?Carbon + { + app('log')->debug('getLastPaidDate()'); + $return = null; + foreach ($paidData['paid_dates'] as $entry) { + if (null !== $return) { + $current = Carbon::createFromFormat('!Y-m-d', $entry['date'], config('app.timezone')); + if ($current->gt($return)) { + $return = clone $current; + } + app('log')->debug(sprintf('Last paid date is: %s', $return->format('Y-m-d'))); + } + if (null === $return) { + $return = Carbon::createFromFormat('!Y-m-d', $entry['date'], config('app.timezone')); + app('log')->debug(sprintf('Last paid date is: %s', $return->format('Y-m-d'))); + } + } + app('log')->debug(sprintf('Last paid date is: "%s"', $return?->format('Y-m-d'))); + return $return; + } } diff --git a/app/Transformers/V2/BillTransformer.php b/app/Transformers/V2/BillTransformer.php index 5d0ec63965..f5b87e21fe 100644 --- a/app/Transformers/V2/BillTransformer.php +++ b/app/Transformers/V2/BillTransformer.php @@ -358,6 +358,8 @@ class BillTransformer extends AbstractTransformer * Given a bill and a date, this method will tell you at which moment this bill expects its next * transaction. Whether or not it is there already, is not relevant. * + * TODO this method is bad compared to the v1 one. + * * @param Bill $bill * @param Carbon $date * diff --git a/changelog.md b/changelog.md index ae59582ee3..191a048581 100644 --- a/changelog.md +++ b/changelog.md @@ -3,40 +3,36 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## 6.0.28 - 2023-10-28 +## 6.0.28 - 2023-10-29 ### Added -- #8076 Clone and edit button -- #7204 ability to +- [Issue 8076](https://github.com/firefly-iii/firefly-iii/issues/8076) Added a "Clone and edit"-button +- [Issue 7204](https://github.com/firefly-iii/firefly-iii/issues/7204) Added the ability to customize the URL protocol types Firefly III accepts +- [Issue 8098](https://github.com/firefly-iii/firefly-iii/issues/8098) More tests in the navigation class, thanks @tonicospinelli! ### Changed -- New actions for GitHub -- Currencies are now linked to users, and can be enabled per user -- Refactored upgrade commands +- Refactored the Actions of GitHub +- The transaction currencies are now linked to users, and can be enabled per user +- A few upgrade commands are refactored - You can no longer edit vital parts of reconciled transactions ### Deprecated - Remove old v3 layout. -### Removed - -- Initial release. - ### Fixed - Bad math in the order of piggy banks -- #8084 @JoSchrader fixed an issue with a duplicate button - -### Security - -- Initial release. +- [Issue 8084](https://github.com/firefly-iii/firefly-iii/issues/8084) @JoSchrader fixed an issue with a duplicate button +- [Issue 8103](https://github.com/firefly-iii/firefly-iii/issues/8103) Bulk edit would not accept transaction descriptions longer than 255 characters +- [Issue 8099](https://github.com/firefly-iii/firefly-iii/issues/8099) The bill index would never skip the number of periods you indicated +- [Issue 8069](https://github.com/firefly-iii/firefly-iii/issues/8069) Rule descriptions would always "1" as description. Thanks @Maxco10! ### API -- Initial release. +- API will no longer accept changes to amount and account fields for reconciled transactions ## v6.0.27 - 2023-10-16 diff --git a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php index cf8cda85a7..213a714df6 100644 --- a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php +++ b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php @@ -1,5 +1,26 @@ . + */ + declare(strict_types=1); use Illuminate\Database\Migrations\Migration; diff --git a/package-lock.json b/package-lock.json index 32a140e1b9..c7653edb49 100644 --- a/package-lock.json +++ b/package-lock.json @@ -452,9 +452,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -498,9 +498,9 @@ } }, "node_modules/bootstrap5-autocomplete": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/bootstrap5-autocomplete/-/bootstrap5-autocomplete-1.1.22.tgz", - "integrity": "sha512-vn4/+j/MmupcfQB9dwoGFadyk3OorxZh2Eyo8YVSBiaJBcaM1u+FYl0lgOCHQWRqN3MXqM4YCebo8xiyFIW/fw==" + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/bootstrap5-autocomplete/-/bootstrap5-autocomplete-1.1.23.tgz", + "integrity": "sha512-jmqk7muFampKGPNzp6ABCAZWB38rfRpUyqx1vqn4Wssj88X1xODQGI+hnPAPGfePIjMLEK0Xhd1Is4kva1PUrg==" }, "node_modules/braces": { "version": "3.0.2", @@ -932,9 +932,9 @@ } }, "node_modules/sass": { - "version": "1.69.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", - "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", diff --git a/public/build/assets/create-1321af8a.js b/public/build/assets/create-1321af8a.js new file mode 100644 index 0000000000..5b6df91c7a --- /dev/null +++ b/public/build/assets/create-1321af8a.js @@ -0,0 +1 @@ +var q=Object.defineProperty;var H=(n,e,t)=>e in n?q(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var C=(n,e,t)=>(H(n,typeof e!="symbol"?e+"":e,t),t);import{x as P,w as M,J as j,z as R,I as z,A as $,y as V}from"./load-translations-87b32220.js";function A(){return{id:"",name:""}}function B(){let e=P(new Date,"yyyy-MM-dd HH:mm");return{description:"",amount:"",currency_code:"EUR",source_account:A(),destination_account:A(),date:e}}function W(n,e){let t=[];for(let s in n)if(n.hasOwnProperty(s)){const i=n[s];let o={};o.description=i.description,o.source_name=i.source_account.name,o.destination_name=i.destination_account.name,o.amount=i.amount,o.date=i.date,o.currency_code=i.currency_code,i.source_account.id.toString()!==""&&(o.source_id=i.source_account.id),i.destination_account.id.toString()!==""&&(o.destination_id=i.destination_account.id),o.type=e,t.push(o)}return t}const T={showAllSuggestions:!1,suggestionsThreshold:1,maximumItems:0,autoselectFirst:!0,ignoreEnter:!1,updateOnSelect:!1,highlightTyped:!1,highlightClass:"",fullWidth:!1,fixed:!1,fuzzy:!1,startsWith:!1,preventBrowserAutocomplete:!1,itemClass:"",activeClasses:["bg-primary","text-white"],labelField:"label",valueField:"value",searchFields:["label"],queryParam:"query",items:[],source:null,hiddenInput:!1,hiddenValue:"",clearControl:"",datalist:"",server:"",serverMethod:"GET",serverParams:{},serverDataKey:"data",fetchOptions:{},liveServer:!1,noCache:!0,debounceTime:300,notFoundMessage:"",onRenderItem:(n,e,t)=>e,onSelectItem:(n,e)=>{},onServerResponse:(n,e)=>n.json(),onChange:(n,e)=>{},onBeforeFetch:n=>{},onAfterFetch:n=>{}},x="is-loading",L="is-active",p="show",_="next",b="prev",g=new WeakMap;let k=0,v=0;function U(n,e=300){let t;return(...s)=>{clearTimeout(t),t=setTimeout(()=>{n.apply(this,s)},e)}}function G(n){return n.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function y(n){return n?G(n.toString()).toLowerCase():""}function K(n,e){if(n.indexOf(e)>=0)return!0;let t=0;for(let s=0;se+"‍").join("")}class I{constructor(e,t={}){C(this,"handleEvent",e=>{["scroll","resize"].includes(e.type)?(this._timer&&window.cancelAnimationFrame(this._timer),this._timer=window.requestAnimationFrame(()=>{this[`on${e.type}`](e)})):this[`on${e.type}`](e)});if(!(e instanceof HTMLElement)){console.error("Invalid element",e);return}g.set(e,this),k++,v++,this._searchInput=e,this._configure(t),this._preventInput=!1,this._keyboardNavigation=!1,this._searchFunc=U(()=>{this._loadFromServer(!0)},this._config.debounceTime),this._configureSearchInput(),this._configureDropElement(),this._config.fixed&&(document.addEventListener("scroll",this,!0),window.addEventListener("resize",this));const s=this._getClearControl();s&&s.addEventListener("click",this),["focus","change","blur","input","keydown"].forEach(i=>{this._searchInput.addEventListener(i,this)}),["mousemove","mouseleave"].forEach(i=>{this._dropElement.addEventListener(i,this)}),this._fetchData()}static init(e="input.autocomplete",t={}){document.querySelectorAll(e).forEach(i=>{this.getOrCreateInstance(i,t)})}static getInstance(e){return g.has(e)?g.get(e):null}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,t)}dispose(){v--,["focus","change","blur","input","keydown"].forEach(t=>{this._searchInput.removeEventListener(t,this)}),["mousemove","mouseleave"].forEach(t=>{this._dropElement.removeEventListener(t,this)});const e=this._getClearControl();e&&e.removeEventListener("click",this),this._config.fixed&&v<=0&&(document.removeEventListener("scroll",this,!0),window.removeEventListener("resize",this)),this._dropElement.parentElement.removeChild(this._dropElement),g.delete(this._searchInput)}_getClearControl(){if(this._config.clearControl)return document.querySelector(this._config.clearControl)}_configure(e={}){this._config=Object.assign({},T);const t={...e,...this._searchInput.dataset},s=i=>["true","false","1","0",!0,!1].includes(i)&&!!JSON.parse(i);for(const[i,o]of Object.entries(T)){if(t[i]===void 0)continue;const a=t[i];switch(typeof o){case"number":this._config[i]=parseInt(a);break;case"boolean":this._config[i]=s(a);break;case"string":this._config[i]=a.toString();break;case"object":if(Array.isArray(o))if(typeof a=="string"){const r=a.includes("|")?"|":",";this._config[i]=a.split(r)}else this._config[i]=a;else this._config[i]=typeof a=="string"?JSON.parse(a):a;break;case"function":this._config[i]=typeof a=="string"?window[a]:a;break;default:this._config[i]=a;break}}}_configureSearchInput(){if(this._searchInput.autocomplete="off",this._searchInput.spellcheck=!1,w(this._searchInput,{"aria-autocomplete":"list","aria-haspopup":"menu","aria-expanded":"false",role:"combobox"}),this._searchInput.id&&this._config.preventBrowserAutocomplete){const e=document.querySelector(`[for="${this._searchInput.id}"]`);e&&X(e)}this._hiddenInput=null,this._config.hiddenInput&&(this._hiddenInput=document.createElement("input"),this._hiddenInput.type="hidden",this._hiddenInput.value=this._config.hiddenValue,this._hiddenInput.name=this._searchInput.name,this._searchInput.name="_"+this._searchInput.name,D(this._searchInput,this._hiddenInput))}_configureDropElement(){this._dropElement=document.createElement("ul"),this._dropElement.id="ac-menu-"+k,this._dropElement.classList.add("dropdown-menu","autocomplete-menu","p-0"),this._dropElement.style.maxHeight="280px",this._config.fullWidth||(this._dropElement.style.maxWidth="360px"),this._config.fixed&&(this._dropElement.style.position="fixed"),this._dropElement.style.overflowY="auto",this._dropElement.style.overscrollBehavior="contain",this._dropElement.style.textAlign="unset",D(this._searchInput,this._dropElement),this._searchInput.setAttribute("aria-controls",this._dropElement.id)}onclick(e){e.target.matches(this._config.clearControl)&&this.clear()}oninput(e){this._preventInput||(this._hiddenInput&&(this._hiddenInput.value=null),this.showOrSearch())}onchange(e){const t=this._searchInput.value,s=Object.values(this._items).find(i=>i.label===t);this._config.onChange(s,this)}onblur(e){this.hideSuggestions()}onfocus(e){this.showOrSearch()}onkeydown(e){switch(e.keyCode||e.key){case 13:case"Enter":if(this.isDropdownVisible()){const s=this.getSelection();s&&s.click(),(s||!this._config.ignoreEnter)&&e.preventDefault()}break;case 38:case"ArrowUp":e.preventDefault(),this._keyboardNavigation=!0,this._moveSelection(b);break;case 40:case"ArrowDown":e.preventDefault(),this._keyboardNavigation=!0,this.isDropdownVisible()?this._moveSelection(_):this.showOrSearch(!1);break;case 27:case"Escape":this.isDropdownVisible()&&(this._searchInput.focus(),this.hideSuggestions());break}}onmousemove(e){this._keyboardNavigation=!1}onmouseleave(e){this.removeSelection()}onscroll(e){this._positionMenu()}onresize(e){this._positionMenu()}getConfig(e=null){return e!==null?this._config[e]:this._config}setConfig(e,t){this._config[e]=t}setData(e){this._items={},this._addItems(e)}enable(){this._searchInput.setAttribute("disabled","")}disable(){this._searchInput.removeAttribute("disabled")}isDisabled(){return this._searchInput.hasAttribute("disabled")||this._searchInput.disabled||this._searchInput.hasAttribute("readonly")}isDropdownVisible(){return this._dropElement.classList.contains(p)}clear(){this._searchInput.value="",this._hiddenInput&&(this._hiddenInput.value="")}getSelection(){return this._dropElement.querySelector("a."+L)}removeSelection(){const e=this.getSelection();e&&e.classList.remove(...this._activeClasses())}_activeClasses(){return[...this._config.activeClasses,L]}_isItemEnabled(e){if(e.style.display==="none")return!1;const t=e.firstElementChild;return t.tagName==="A"&&!t.classList.contains("disabled")}_moveSelection(e=_,t=null){const s=this.getSelection();if(s){const i=e===_?"nextSibling":"previousSibling";t=s.parentNode;do t=t[i];while(t&&!this._isItemEnabled(t));t?(s.classList.remove(...this._activeClasses()),e===b?t.parentNode.scrollTop=t.offsetTop-t.parentNode.offsetTop:t.offsetTop>t.parentNode.offsetHeight-t.offsetHeight&&(t.parentNode.scrollTop+=t.offsetHeight)):s&&(t=s.parentElement)}else{if(e===b)return t;if(!t)for(t=this._dropElement.firstChild;t&&!this._isItemEnabled(t);)t=t.nextSibling}if(t){const i=t.querySelector("a");i.classList.add(...this._activeClasses()),this._searchInput.setAttribute("aria-activedescendant",i.id),this._config.updateOnSelect&&(this._searchInput.value=i.dataset.label)}else this._searchInput.setAttribute("aria-activedescendant","");return t}_shouldShow(){return this.isDisabled()?!1:this._searchInput.value.length>=this._config.suggestionsThreshold}showOrSearch(e=!0){if(e&&!this._shouldShow()){this.hideSuggestions();return}this._config.liveServer?this._searchFunc():this._config.source?this._config.source(this._searchInput.value,t=>{this.setData(t),this._showSuggestions()}):this._showSuggestions()}_createGroup(e){const t=this._createLi(),s=document.createElement("span");return t.append(s),s.classList.add("dropdown-header","text-truncate"),s.innerHTML=e,t}_createItem(e,t){let s=t.label;if(this._config.highlightTyped){const a=y(s).indexOf(e);a!==-1&&(s=s.substring(0,a)+`${s.substring(a,a+e.length)}`+s.substring(a+e.length,s.length))}s=this._config.onRenderItem(t,s,this);const i=this._createLi(),o=document.createElement("a");if(i.append(o),o.id=this._dropElement.id+"-"+this._dropElement.children.length,o.classList.add("dropdown-item","text-truncate"),this._config.itemClass&&o.classList.add(...this._config.itemClass.split(" ")),o.setAttribute("data-value",t.value),o.setAttribute("data-label",t.label),o.setAttribute("tabindex","-1"),o.setAttribute("role","menuitem"),o.setAttribute("href","#"),o.innerHTML=s,t.data)for(const[a,r]of Object.entries(t.data))o.dataset[a]=r;return o.addEventListener("mouseenter",a=>{this._keyboardNavigation||(this.removeSelection(),i.querySelector("a").classList.add(...this._activeClasses()))}),o.addEventListener("mousedown",a=>{a.preventDefault()}),o.addEventListener("click",a=>{a.preventDefault(),this._preventInput=!0,this._searchInput.value=J(t.label),this._hiddenInput&&(this._hiddenInput.value=t.value),this._config.onSelectItem(t,this),this.hideSuggestions(),this._preventInput=!1}),i}_showSuggestions(){if(document.activeElement!=this._searchInput)return;const e=y(this._searchInput.value);this._dropElement.innerHTML="";const t=Object.keys(this._items);let s=0,i=null;const o=[];for(let a=0;a0&&this._config.searchFields.forEach(d=>{const f=y(c[d]);let m=!1;if(this._config.fuzzy)m=K(f,e);else{const E=f.indexOf(e);m=this._config.startsWith?E===0:E>=0}m&&(l=!0)});const N=l||e.length===0;if(h||l){if(s++,c.group&&!o.includes(c.group)){const f=this._createGroup(c.group);this._dropElement.appendChild(f),o.push(c.group)}const d=this._createItem(e,c);if(!i&&N&&(i=d),this._dropElement.appendChild(d),this._config.maximumItems>0&&s>=this._config.maximumItems)break}}if(i&&this._config.autoselectFirst&&(this.removeSelection(),this._moveSelection(_,i)),s===0)if(this._config.notFoundMessage){const a=this._createLi();a.innerHTML=`${this._config.notFoundMessage}`,this._dropElement.appendChild(a),this._showDropdown()}else this.hideSuggestions();else this._showDropdown()}_createLi(){const e=document.createElement("li");return e.setAttribute("role","presentation"),e}_showDropdown(){this._dropElement.classList.add(p),this._dropElement.setAttribute("role","menu"),w(this._searchInput,{"aria-expanded":"true"}),this._positionMenu()}toggleSuggestions(e=!0){this._dropElement.classList.contains(p)?this.hideSuggestions():this.showOrSearch(e)}hideSuggestions(){this._dropElement.classList.remove(p),w(this._searchInput,{"aria-expanded":"false"}),this.removeSelection()}getInput(){return this._searchInput}getDropMenu(){return this._dropElement}_positionMenu(){const e=window.getComputedStyle(this._searchInput),t=this._searchInput.getBoundingClientRect(),s=e.direction==="rtl",i=this._config.fullWidth,o=this._config.fixed;let a=null,r=null;o&&(a=t.x,r=t.y+t.height,s&&!i&&(a-=this._dropElement.offsetWidth-t.width)),this._dropElement.style.transform="unset",i&&(this._dropElement.style.width=this._searchInput.offsetWidth+"px"),a!==null&&(this._dropElement.style.left=a+"px"),r!==null&&(this._dropElement.style.top=r+"px");const c=this._dropElement.getBoundingClientRect(),h=window.innerHeight;if(c.y+c.height>h){const l=i?t.height+4:t.height;this._dropElement.style.transform="translateY(calc(-100.1% - "+l+"px))"}}_fetchData(){this._items={},this._addItems(this._config.items);const e=this._config.datalist;if(e){const t=document.querySelector(`#${e}`);if(t){const s=Array.from(t.children).map(i=>{const o=i.getAttribute("value")??i.innerHTML.toLowerCase(),a=i.innerHTML;return{value:o,label:a}});this._addItems(s)}else console.error(`Datalist not found ${e}`)}this._setHiddenVal(),this._config.server&&!this._config.liveServer&&this._loadFromServer()}_setHiddenVal(){if(this._config.hiddenInput&&!this._config.hiddenValue)for(const[e,t]of Object.entries(this._items))t.label==this._searchInput.value&&(this._hiddenInput.value=e)}_addItems(e){const t=Object.keys(e);for(let s=0;sc.group=o.group),this._addItems(o.items);continue}const a=typeof o=="string"?o:o.label,r=typeof o!="object"?{}:o;r.label=o[this._config.labelField]??a,r.value=o[this._config.valueField]??i,r.label&&(this._items[r.value]=r)}}_loadFromServer(e=!1){this._abortController&&this._abortController.abort(),this._abortController=new AbortController;let t=this._searchInput.dataset.serverParams||{};typeof t=="string"&&(t=JSON.parse(t));const s=Object.assign({},this._config.serverParams,t);if(s[this._config.queryParam]=this._searchInput.value,this._config.noCache&&(s.t=Date.now()),s.related){const r=document.getElementById(s.related);if(r){s.related=r.value;const c=r.getAttribute("name");c&&(s[c]=r.value)}}const i=new URLSearchParams(s);let o=this._config.server,a=Object.assign(this._config.fetchOptions,{method:this._config.serverMethod||"GET",signal:this._abortController.signal});a.method==="POST"?a.body=i:o+="?"+i.toString(),this._searchInput.classList.add(x),this._config.onBeforeFetch(this),fetch(o,a).then(r=>this._config.onServerResponse(r,this)).then(r=>{const c=r[this._config.serverDataKey]||r;this.setData(c),this._setHiddenVal(),this._abortController=null,e&&this._showSuggestions()}).catch(r=>{r.name==="AbortError"||this._abortController.signal.aborted||console.error(r)}).finally(r=>{this._searchInput.classList.remove(x),this._config.onAfterFetch(this)})}}class Y{post(e){let t="/api/v2/transactions";return M.post(t,e)}}class Q{list(e){return M.get("/api/v2/currencies",{params:e})}}let u;const S={description:"/api/v2/autocomplete/transaction-descriptions",account:"/api/v2/autocomplete/accounts"};let Z=function(){return{count:0,totalAmount:0,transactionType:"unknown",showSuccessMessage:!1,showErrorMessage:!1,entries:[],loadingCurrencies:!0,defaultCurrency:{},enabledCurrencies:[],nativeCurrencies:[],foreignCurrencies:[],filters:{source:[],destination:[]},errorMessageText:"",detectTransactionType(){const n=this.entries[0].source_account.type??"unknown",e=this.entries[0].destination_account.type??"unknown";if(n==="unknown"&&e==="unknown"){this.transactionType="unknown",console.warn("Cannot infer transaction type from two unknown accounts.");return}if(n===e&&["Asset account","Loan","Debt","Mortgage"].includes(n)){this.transactionType="transfer",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Asset account"&&["Expense account","Debt","Loan","Mortgage"].includes(e)){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Asset account"&&e==="unknown"){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(n)&&e==="Expense account"){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Revenue account"&&["Asset account","Debt","Loan","Mortgage"].includes(e)){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(n)&&e==="Asset account"){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}console.warn('Unknown account combination between "'+n+'" and "'+e+'".')},selectSourceAccount(n,e){const t=parseInt(e._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account={id:n.id,name:n.name,type:n.type},console.log("Changed source account into a known "+n.type.toLowerCase())},changedAmount(n){const e=parseInt(n.target.dataset.index);this.entries[e].amount=parseFloat(n.target.value),this.totalAmount=0;for(let t in this.entries)this.entries.hasOwnProperty(t)&&(this.totalAmount=this.totalAmount+parseFloat(this.entries[t].amount));console.log("Changed amount to "+this.totalAmount)},selectDestAccount(n,e){const t=parseInt(e._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account={id:n.id,name:n.name,type:n.type},console.log("Changed destination account into a known "+n.type.toLowerCase())},loadCurrencies(){console.log("Loading user currencies."),new Q().list({}).then(e=>{for(let t in e.data.data)if(e.data.data.hasOwnProperty(t)){let s=e.data.data[t];if(s.attributes.enabled){let i={id:s.id,name:s.attributes.name,code:s.attributes.code,default:s.attributes.default,symbol:s.attributes.symbol,decimal_places:s.attributes.decimal_places};i.default&&(this.defaultCurrency=i),this.enabledCurrencies.push(i)}}this.loadingCurrencies=!1,console.log(this.enabledCurrencies)})},changeSourceAccount(n,e){if(typeof n>"u"){const t=parseInt(e._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account.name===e._searchInput.value){console.warn('Ignore hallucinated source account name change to "'+e._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account={name:e._searchInput.value},console.log('Changed source account into a unknown account called "'+e._searchInput.value+'"')}},changeDestAccount(n,e){if(typeof n>"u"){const t=parseInt(e._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account.name===e._searchInput.value){console.warn('Ignore hallucinated destination account name change to "'+e._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account={name:e._searchInput.value},console.log('Changed destination account into a unknown account called "'+e._searchInput.value+'"')}},showError:!1,showSuccess:!1,addedSplit(){console.log("addedSplit"),I.init("input.ac-source",{server:S.account,serverParams:{types:this.filters.source},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,highlightTyped:!0,liveServer:!0,onChange:this.changeSourceAccount,onSelectItem:this.selectSourceAccount,onRenderItem:function(n,e,t){return n.name_with_balance+'
    '+u.t("firefly.account_type_"+n.type)+""}}),I.init("input.ac-dest",{server:S.account,serverParams:{types:this.filters.destination},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,liveServer:!0,highlightTyped:!0,onSelectItem:this.selectDestAccount,onChange:this.changeDestAccount,onRenderItem:function(n,e,t){return n.name_with_balance+'
    '+u.t("firefly.account_type_"+n.type)+""}}),this.filters.destination=[],I.init("input.ac-description",{server:S.description,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},valueField:"id",labelField:"description",highlightTyped:!0,onSelectItem:console.log})},init(){Promise.all([R("language","en_US")]).then(n=>{u=new z;const e=n[0].replace("-","_");u.locale=e,$(u,e).then(()=>{this.addSplit()})}),this.loadCurrencies(),this.filters.source=["Asset account","Loan","Debt","Mortgage","Revenue account"],this.filters.destination=["Expense account","Loan","Debt","Mortgage","Asset account"]},submitTransaction(){this.detectTransactionType();let n=W(this.entries,this.transactionType),e={group_title:null,fire_webhooks:!1,apply_rules:!1,transactions:n};n.length>1&&(e.group_title=n[0].description);let t=new Y;console.log(e),t.post(e).then(s=>{this.showSuccessMessage=!0,console.log(s),window.location="transactions/show/"+s.data.data.id+"?transaction_group_id="+s.data.data.id+"&message=created"}).catch(s=>{this.showErrorMessage=!0,this.errorMessageText=s.response.data.message})},addSplit(){this.entries.push(B())},removeSplit(n){this.entries.splice(n,1),document.querySelector("#split-0-tab").click()},formattedTotalAmount(){return V(this.totalAmount,"EUR")}}},O={transactions:Z,dates:j};function F(){Object.keys(O).forEach(n=>{console.log(`Loading page component "${n}"`);let e=O[n]();Alpine.data(n,()=>e)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),F()});window.bootstrapped&&(console.log("Loaded through window variable."),F()); diff --git a/public/build/assets/create-baf83427.js b/public/build/assets/create-baf83427.js deleted file mode 100644 index b1cd642430..0000000000 --- a/public/build/assets/create-baf83427.js +++ /dev/null @@ -1 +0,0 @@ -var N=Object.defineProperty;var q=(n,e,t)=>e in n?N(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var C=(n,e,t)=>(q(n,typeof e!="symbol"?e+"":e,t),t);import{x as H,w as P,J as j,z as R,I as z,A as $,y as V}from"./load-translations-9a154502.js";function A(){return{id:"",name:""}}function B(){let e=H(new Date,"yyyy-MM-dd HH:mm");return{description:"",amount:"",source_account:A(),destination_account:A(),date:e}}function W(n,e){let t=[];for(let s in n)if(n.hasOwnProperty(s)){const i=n[s];let o={};o.description=i.description,o.source_name=i.source_account.name,o.destination_name=i.destination_account.name,o.amount=i.amount,o.date=i.date,i.source_account.id.toString()!==""&&(o.source_id=i.source_account.id),i.destination_account.id.toString()!==""&&(o.destination_id=i.destination_account.id),o.type=e,t.push(o)}return t}const T={showAllSuggestions:!1,suggestionsThreshold:1,maximumItems:0,autoselectFirst:!0,ignoreEnter:!1,updateOnSelect:!1,highlightTyped:!1,highlightClass:"",fullWidth:!1,fixed:!1,fuzzy:!1,startsWith:!1,preventBrowserAutocomplete:!1,itemClass:"",activeClasses:["bg-primary","text-white"],labelField:"label",valueField:"value",searchFields:["label"],queryParam:"query",items:[],source:null,hiddenInput:!1,hiddenValue:"",clearControl:"",datalist:"",server:"",serverMethod:"GET",serverParams:{},serverDataKey:"data",fetchOptions:{},liveServer:!1,noCache:!0,debounceTime:300,notFoundMessage:"",onRenderItem:(n,e,t)=>e,onSelectItem:(n,e)=>{},onServerResponse:(n,e)=>n.json(),onChange:(n,e)=>{}},x="is-loading",L="is-active",f="show",_="next",v="prev",g=new WeakMap;let k=0,b=0;function U(n,e=300){let t;return(...s)=>{clearTimeout(t),t=setTimeout(()=>{n.apply(this,s)},e)}}function G(n){return n.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function y(n){return n?G(n.toString()).toLowerCase():""}function K(n,e){if(n.indexOf(e)>=0)return!0;let t=0;for(let s=0;se+"‍").join("")}class I{constructor(e,t={}){C(this,"handleEvent",e=>{["scroll","resize"].includes(e.type)?(this._timer&&window.cancelAnimationFrame(this._timer),this._timer=window.requestAnimationFrame(()=>{this[`on${e.type}`](e)})):this[`on${e.type}`](e)});if(!(e instanceof HTMLElement)){console.error("Invalid element",e);return}g.set(e,this),k++,b++,this._searchInput=e,this._configure(t),this._preventInput=!1,this._keyboardNavigation=!1,this._searchFunc=U(()=>{this._loadFromServer(!0)},this._config.debounceTime),this._configureSearchInput(),this._configureDropElement(),this._config.fixed&&(document.addEventListener("scroll",this,!0),window.addEventListener("resize",this));const s=this._getClearControl();s&&s.addEventListener("click",this),["focus","change","blur","input","keydown"].forEach(i=>{this._searchInput.addEventListener(i,this)}),["mousemove","mouseleave"].forEach(i=>{this._dropElement.addEventListener(i,this)}),this._fetchData()}static init(e="input.autocomplete",t={}){document.querySelectorAll(e).forEach(i=>{this.getOrCreateInstance(i,t)})}static getInstance(e){return g.has(e)?g.get(e):null}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,t)}dispose(){b--,["focus","change","blur","input","keydown"].forEach(t=>{this._searchInput.removeEventListener(t,this)}),["mousemove","mouseleave"].forEach(t=>{this._dropElement.removeEventListener(t,this)});const e=this._getClearControl();e&&e.removeEventListener("click",this),this._config.fixed&&b<=0&&(document.removeEventListener("scroll",this,!0),window.removeEventListener("resize",this)),this._dropElement.parentElement.removeChild(this._dropElement),g.delete(this._searchInput)}_getClearControl(){if(this._config.clearControl)return document.querySelector(this._config.clearControl)}_configure(e={}){this._config=Object.assign({},T);const t={...e,...this._searchInput.dataset},s=i=>["true","false","1","0",!0,!1].includes(i)&&!!JSON.parse(i);for(const[i,o]of Object.entries(T)){if(t[i]===void 0)continue;const a=t[i];switch(typeof o){case"number":this._config[i]=parseInt(a);break;case"boolean":this._config[i]=s(a);break;case"string":this._config[i]=a.toString();break;case"object":if(Array.isArray(o))if(typeof a=="string"){const r=a.includes("|")?"|":",";this._config[i]=a.split(r)}else this._config[i]=a;else this._config[i]=typeof a=="string"?JSON.parse(a):a;break;case"function":this._config[i]=typeof a=="string"?window[a]:a;break;default:this._config[i]=a;break}}}_configureSearchInput(){if(this._searchInput.autocomplete="off",this._searchInput.spellcheck=!1,w(this._searchInput,{"aria-autocomplete":"list","aria-haspopup":"menu","aria-expanded":"false",role:"combobox"}),this._searchInput.id&&this._config.preventBrowserAutocomplete){const e=document.querySelector(`[for="${this._searchInput.id}"]`);e&&X(e)}this._hiddenInput=null,this._config.hiddenInput&&(this._hiddenInput=document.createElement("input"),this._hiddenInput.type="hidden",this._hiddenInput.value=this._config.hiddenValue,this._hiddenInput.name=this._searchInput.name,this._searchInput.name="_"+this._searchInput.name,D(this._searchInput,this._hiddenInput))}_configureDropElement(){this._dropElement=document.createElement("ul"),this._dropElement.id="ac-menu-"+k,this._dropElement.classList.add("dropdown-menu","autocomplete-menu","p-0"),this._dropElement.style.maxHeight="280px",this._config.fullWidth||(this._dropElement.style.maxWidth="360px"),this._config.fixed&&(this._dropElement.style.position="fixed"),this._dropElement.style.overflowY="auto",this._dropElement.style.overscrollBehavior="contain",this._dropElement.style.textAlign="unset",D(this._searchInput,this._dropElement),this._searchInput.setAttribute("aria-controls",this._dropElement.id)}onclick(e){e.target.matches(this._config.clearControl)&&this.clear()}oninput(e){this._preventInput||(this._hiddenInput&&(this._hiddenInput.value=null),this.showOrSearch())}onchange(e){const t=this._searchInput.value,s=Object.values(this._items).find(i=>i.label===t);this._config.onChange(s,this)}onblur(e){this.hideSuggestions()}onfocus(e){this.showOrSearch()}onkeydown(e){switch(e.keyCode||e.key){case 13:case"Enter":if(this.isDropdownVisible()){const s=this.getSelection();s&&s.click(),(s||!this._config.ignoreEnter)&&e.preventDefault()}break;case 38:case"ArrowUp":e.preventDefault(),this._keyboardNavigation=!0,this._moveSelection(v);break;case 40:case"ArrowDown":e.preventDefault(),this._keyboardNavigation=!0,this.isDropdownVisible()?this._moveSelection(_):this.showOrSearch(!1);break;case 27:case"Escape":this.isDropdownVisible()&&(this._searchInput.focus(),this.hideSuggestions());break}}onmousemove(e){this._keyboardNavigation=!1}onmouseleave(e){this.removeSelection()}onscroll(e){this._positionMenu()}onresize(e){this._positionMenu()}getConfig(e=null){return e!==null?this._config[e]:this._config}setConfig(e,t){this._config[e]=t}setData(e){this._items={},this._addItems(e)}enable(){this._searchInput.setAttribute("disabled","")}disable(){this._searchInput.removeAttribute("disabled")}isDisabled(){return this._searchInput.hasAttribute("disabled")||this._searchInput.disabled||this._searchInput.hasAttribute("readonly")}isDropdownVisible(){return this._dropElement.classList.contains(f)}clear(){this._searchInput.value="",this._hiddenInput&&(this._hiddenInput.value="")}getSelection(){return this._dropElement.querySelector("a."+L)}removeSelection(){const e=this.getSelection();e&&e.classList.remove(...this._activeClasses())}_activeClasses(){return[...this._config.activeClasses,L]}_isItemEnabled(e){if(e.style.display==="none")return!1;const t=e.firstElementChild;return t.tagName==="A"&&!t.classList.contains("disabled")}_moveSelection(e=_,t=null){const s=this.getSelection();if(s){const i=e===_?"nextSibling":"previousSibling";t=s.parentNode;do t=t[i];while(t&&!this._isItemEnabled(t));t?(s.classList.remove(...this._activeClasses()),e===v?t.parentNode.scrollTop=t.offsetTop-t.parentNode.offsetTop:t.offsetTop>t.parentNode.offsetHeight-t.offsetHeight&&(t.parentNode.scrollTop+=t.offsetHeight)):s&&(t=s.parentElement)}else{if(e===v)return t;if(!t)for(t=this._dropElement.firstChild;t&&!this._isItemEnabled(t);)t=t.nextSibling}if(t){const i=t.querySelector("a");i.classList.add(...this._activeClasses()),this._searchInput.setAttribute("aria-activedescendant",i.id),this._config.updateOnSelect&&(this._searchInput.value=i.dataset.label)}else this._searchInput.setAttribute("aria-activedescendant","");return t}_shouldShow(){return this.isDisabled()?!1:this._searchInput.value.length>=this._config.suggestionsThreshold}showOrSearch(e=!0){if(e&&!this._shouldShow()){this.hideSuggestions();return}this._config.liveServer?this._searchFunc():this._config.source?this._config.source(this._searchInput.value,t=>{this.setData(t),this._showSuggestions()}):this._showSuggestions()}_createGroup(e){const t=this._createLi(),s=document.createElement("span");return t.append(s),s.classList.add("dropdown-header","text-truncate"),s.innerHTML=e,t}_createItem(e,t){let s=t.label;if(this._config.highlightTyped){const a=y(s).indexOf(e);s=s.substring(0,a)+`${s.substring(a,a+e.length)}`+s.substring(a+e.length,s.length)}s=this._config.onRenderItem(t,s,this);const i=this._createLi(),o=document.createElement("a");if(i.append(o),o.id=this._dropElement.id+"-"+this._dropElement.children.length,o.classList.add("dropdown-item","text-truncate"),this._config.itemClass&&o.classList.add(...this._config.itemClass.split(" ")),o.setAttribute("data-value",t.value),o.setAttribute("data-label",t.label),o.setAttribute("tabindex","-1"),o.setAttribute("role","menuitem"),o.setAttribute("href","#"),o.innerHTML=s,t.data)for(const[a,r]of Object.entries(t.data))o.dataset[a]=r;return o.addEventListener("mouseenter",a=>{this._keyboardNavigation||(this.removeSelection(),i.querySelector("a").classList.add(...this._activeClasses()))}),o.addEventListener("mousedown",a=>{a.preventDefault()}),o.addEventListener("click",a=>{a.preventDefault(),this._preventInput=!0,this._searchInput.value=J(t.label),this._hiddenInput&&(this._hiddenInput.value=t.value),this._config.onSelectItem(t,this),this.hideSuggestions(),this._preventInput=!1}),i}_showSuggestions(){if(document.activeElement!=this._searchInput)return;const e=y(this._searchInput.value);this._dropElement.innerHTML="";const t=Object.keys(this._items);let s=0,i=null;const o=[];for(let a=0;a0&&this._config.searchFields.forEach(d=>{const p=y(c[d]);let m=!1;if(this._config.fuzzy)m=K(p,e);else{const E=p.indexOf(e);m=this._config.startsWith?E===0:E>=0}m&&(l=!0)});const F=l||e.length===0;if(u||l){if(s++,c.group&&!o.includes(c.group)){const p=this._createGroup(c.group);this._dropElement.appendChild(p),o.push(c.group)}const d=this._createItem(e,c);if(!i&&F&&(i=d),this._dropElement.appendChild(d),this._config.maximumItems>0&&s>=this._config.maximumItems)break}}if(i&&this._config.autoselectFirst&&(this.removeSelection(),this._moveSelection(_,i)),s===0)if(this._config.notFoundMessage){const a=this._createLi();a.innerHTML=`${this._config.notFoundMessage}`,this._dropElement.appendChild(a),this._showDropdown()}else this.hideSuggestions();else this._showDropdown()}_createLi(){const e=document.createElement("li");return e.setAttribute("role","presentation"),e}_showDropdown(){this._dropElement.classList.add(f),this._dropElement.setAttribute("role","menu"),w(this._searchInput,{"aria-expanded":"true"}),this._positionMenu()}toggleSuggestions(e=!0){this._dropElement.classList.contains(f)?this.hideSuggestions():this.showOrSearch(e)}hideSuggestions(){this._dropElement.classList.remove(f),w(this._searchInput,{"aria-expanded":"false"}),this.removeSelection()}getInput(){return this._searchInput}getDropMenu(){return this._dropElement}_positionMenu(){const e=window.getComputedStyle(this._searchInput),t=this._searchInput.getBoundingClientRect(),s=e.direction==="rtl",i=this._config.fullWidth,o=this._config.fixed;let a=null,r=null;o&&(a=t.x,r=t.y+t.height,s&&!i&&(a-=this._dropElement.offsetWidth-t.width)),this._dropElement.style.transform="unset",i&&(this._dropElement.style.width=this._searchInput.offsetWidth+"px"),a!==null&&(this._dropElement.style.left=a+"px"),r!==null&&(this._dropElement.style.top=r+"px");const c=this._dropElement.getBoundingClientRect(),u=window.innerHeight;if(c.y+c.height>u){const l=i?t.height+4:t.height;this._dropElement.style.transform="translateY(calc(-100.1% - "+l+"px))"}}_fetchData(){this._items={},this._addItems(this._config.items);const e=this._config.datalist;if(e){const t=document.querySelector(`#${e}`);if(t){const s=Array.from(t.children).map(i=>{const o=i.getAttribute("value")??i.innerHTML.toLowerCase(),a=i.innerHTML;return{value:o,label:a}});this._addItems(s)}else console.error(`Datalist not found ${e}`)}this._setHiddenVal(),this._config.server&&!this._config.liveServer&&this._loadFromServer()}_setHiddenVal(){if(this._config.hiddenInput&&!this._config.hiddenValue)for(const[e,t]of Object.entries(this._items))t.label==this._searchInput.value&&(this._hiddenInput.value=e)}_addItems(e){const t=Object.keys(e);for(let s=0;sc.group=o.group),this._addItems(o.items);continue}const a=typeof o=="string"?o:o.label,r=typeof o!="object"?{}:o;r.label=o[this._config.labelField]??a,r.value=o[this._config.valueField]??i,r.label&&(this._items[r.value]=r)}}_loadFromServer(e=!1){this._abortController&&this._abortController.abort(),this._abortController=new AbortController;let t=this._searchInput.dataset.serverParams||{};typeof t=="string"&&(t=JSON.parse(t));const s=Object.assign({},this._config.serverParams,t);if(s[this._config.queryParam]=this._searchInput.value,this._config.noCache&&(s.t=Date.now()),s.related){const r=document.getElementById(s.related);if(r){s.related=r.value;const c=r.getAttribute("name");c&&(s[c]=r.value)}}const i=new URLSearchParams(s);let o=this._config.server,a=Object.assign(this._config.fetchOptions,{method:this._config.serverMethod||"GET",signal:this._abortController.signal});a.method==="POST"?a.body=i:o+="?"+i.toString(),this._searchInput.classList.add(x),fetch(o,a).then(r=>this._config.onServerResponse(r,this)).then(r=>{const c=r[this._config.serverDataKey]||r;this.setData(c),this._setHiddenVal(),this._abortController=null,e&&this._showSuggestions()}).catch(r=>{r.name==="AbortError"||this._abortController.signal.aborted||console.error(r)}).finally(r=>{this._searchInput.classList.remove(x)})}}class Y{post(e){let t="/api/v2/transactions";return P.post(t,e)}}let h;const S={description:"/api/v2/autocomplete/transaction-descriptions",account:"/api/v2/autocomplete/accounts"};let Q=function(){return{count:0,totalAmount:0,transactionType:"unknown",showSuccessMessage:!1,showErrorMessage:!1,entries:[],filters:{source:[],destination:[]},detectTransactionType(){const n=this.entries[0].source_account.type??"unknown",e=this.entries[0].destination_account.type??"unknown";if(n==="unknown"&&e==="unknown"){this.transactionType="unknown",console.warn("Cannot infer transaction type from two unknown accounts.");return}if(n===e&&["Asset account","Loan","Debt","Mortgage"].includes(n)){this.transactionType="transfer",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Asset account"&&["Expense account","Debt","Loan","Mortgage"].includes(e)){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Asset account"&&e==="unknown"){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(n)&&e==="Expense account"){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Revenue account"&&["Asset account","Debt","Loan","Mortgage"].includes(e)){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(n)&&e==="Asset account"){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}console.warn('Unknown account combination between "'+n+'" and "'+e+'".')},selectSourceAccount(n,e){const t=parseInt(e._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account={id:n.id,name:n.name,type:n.type},console.log("Changed source account into a known "+n.type.toLowerCase())},changedAmount(n){const e=parseInt(n.target.dataset.index);this.entries[e].amount=parseFloat(n.target.value),this.totalAmount=0;for(let t in this.entries)this.entries.hasOwnProperty(t)&&(this.totalAmount=this.totalAmount+parseFloat(this.entries[t].amount));console.log("Changed amount to "+this.totalAmount)},selectDestAccount(n,e){const t=parseInt(e._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account={id:n.id,name:n.name,type:n.type},console.log("Changed destination account into a known "+n.type.toLowerCase())},changeSourceAccount(n,e){if(typeof n>"u"){const t=parseInt(e._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account.name===e._searchInput.value){console.warn('Ignore hallucinated source account name change to "'+e._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account={name:e._searchInput.value},console.log('Changed source account into a unknown account called "'+e._searchInput.value+'"')}},changeDestAccount(n,e){if(typeof n>"u"){const t=parseInt(e._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account.name===e._searchInput.value){console.warn('Ignore hallucinated destination account name change to "'+e._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account={name:e._searchInput.value},console.log('Changed destination account into a unknown account called "'+e._searchInput.value+'"')}},showError:!1,showSuccess:!1,addedSplit(){console.log("addedSplit"),I.init("input.ac-source",{server:S.account,serverParams:{types:this.filters.source},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,highlightTyped:!0,liveServer:!0,onChange:this.changeSourceAccount,onSelectItem:this.selectSourceAccount,onRenderItem:function(n,e,t){return n.name_with_balance+'
    '+h.t("firefly.account_type_"+n.type)+""}}),I.init("input.ac-dest",{server:S.account,serverParams:{types:this.filters.destination},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,liveServer:!0,highlightTyped:!0,onSelectItem:this.selectDestAccount,onChange:this.changeDestAccount,onRenderItem:function(n,e,t){return n.name_with_balance+'
    '+h.t("firefly.account_type_"+n.type)+""}}),this.filters.destination=[],I.init("input.ac-description",{server:S.description,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},valueField:"id",labelField:"description",highlightTyped:!0,onSelectItem:console.log})},init(){Promise.all([R("language","en_US")]).then(n=>{h=new z;const e=n[0].replace("-","_");h.locale=e,$(h,e).then(()=>{this.addSplit()})}),this.filters.source=["Asset account","Loan","Debt","Mortgage","Revenue account"],this.filters.destination=["Expense account","Loan","Debt","Mortgage","Asset account"]},submitTransaction(){this.detectTransactionType();let n=W(this.entries,this.transactionType),e={group_title:null,fire_webhooks:!1,apply_rules:!1,transactions:n};n.length>1&&(e.group_title=n[0].description);let t=new Y;console.log(e),t.post(e).then(s=>{this.showSuccessMessage=!0,console.log(s),window.location="transactions/show/"+s.data.data.id+"?transaction_group_id="+s.data.data.id+"&message=created"}).catch(s=>{this.showErrorMessage=!0,console.error(s)})},addSplit(){this.entries.push(B())},removeSplit(n){this.entries.splice(n,1),document.querySelector("#split-0-tab").click()},formattedTotalAmount(){return V(this.totalAmount,"EUR")}}},O={transactions:Q,dates:j};function M(){Object.keys(O).forEach(n=>{console.log(`Loading page component "${n}"`);let e=O[n]();Alpine.data(n,()=>e)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),M()});window.bootstrapped&&(console.log("Loaded through window variable."),M()); diff --git a/public/build/assets/dashboard-daa2fdbe.js b/public/build/assets/dashboard-42661760.js similarity index 96% rename from public/build/assets/dashboard-daa2fdbe.js rename to public/build/assets/dashboard-42661760.js index 08df6f886b..f275765ec7 100644 --- a/public/build/assets/dashboard-daa2fdbe.js +++ b/public/build/assets/dashboard-42661760.js @@ -1,4 +1,4 @@ -var Sa=Object.defineProperty;var Oa=(n,t,e)=>t in n?Sa(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var k=(n,t,e)=>(Oa(n,typeof t!="symbol"?t+"":t,e),e);import{r as z,a as ai,t as wt,s as Yi,g as ji,b as ls,c as mr,d as j,e as br,f as yr,_ as an,h as Aa,i as Ui,j as _r,k as La,l as Ra,m as xr,n as Fa,o as Os,p as Ia,q as As,u as Ea,v as za,w as vt,x as J,y as V,z as bt,P as Ba,I as li,A as ci,B as Na,C as Wa,D as Ha,E as Va,F as Ls,G as Ya,H as ja,J as Ua}from"./load-translations-9a154502.js";var $a=36e5;function qa(n,t){z(2,arguments);var e=wt(t);return ai(n,e*$a)}var Xa=864e5;function Ka(n,t){z(2,arguments);var e=Yi(n),i=Yi(t),s=e.getTime()-ji(e),o=i.getTime()-ji(i);return Math.round((s-o)/Xa)}var Ga=6e4;function Qa(n,t){z(2,arguments);var e=wt(t);return ai(n,e*Ga)}function Za(n,t){z(2,arguments);var e=wt(t),i=e*3;return ls(n,i)}function Ja(n,t){z(2,arguments);var e=wt(t);return ai(n,e*1e3)}function tl(n,t){z(2,arguments);var e=wt(t),i=e*7;return mr(n,i)}function el(n,t){z(2,arguments);var e=wt(t);return ls(n,e*12)}function tn(n,t){z(2,arguments);var e=j(n),i=j(t),s=e.getTime()-i.getTime();return s<0?-1:s>0?1:s}var ui=6e4,hi=36e5,nl=1e3;function il(n,t){z(2,arguments);var e=j(n),i=j(t),s=e.getFullYear()-i.getFullYear(),o=e.getMonth()-i.getMonth();return s*12+o}function sl(n,t){z(2,arguments);var e=j(n),i=j(t);return e.getFullYear()-i.getFullYear()}function Rs(n,t){var e=n.getFullYear()-t.getFullYear()||n.getMonth()-t.getMonth()||n.getDate()-t.getDate()||n.getHours()-t.getHours()||n.getMinutes()-t.getMinutes()||n.getSeconds()-t.getSeconds()||n.getMilliseconds()-t.getMilliseconds();return e<0?-1:e>0?1:e}function vr(n,t){z(2,arguments);var e=j(n),i=j(t),s=Rs(e,i),o=Math.abs(Ka(e,i));e.setDate(e.getDate()-s*o);var r=+(Rs(e,i)===-s),a=s*(o-r);return a===0?0:a}function di(n,t){return z(2,arguments),j(n).getTime()-j(t).getTime()}var Fs={ceil:Math.ceil,round:Math.round,floor:Math.floor,trunc:function(t){return t<0?Math.ceil(t):Math.floor(t)}},ol="trunc";function bn(n){return n?Fs[n]:Fs[ol]}function rl(n,t,e){z(2,arguments);var i=di(n,t)/hi;return bn(e==null?void 0:e.roundingMethod)(i)}function al(n,t,e){z(2,arguments);var i=di(n,t)/ui;return bn(e==null?void 0:e.roundingMethod)(i)}function ll(n){z(1,arguments);var t=j(n);return br(t).getTime()===yr(t).getTime()}function wr(n,t){z(2,arguments);var e=j(n),i=j(t),s=tn(e,i),o=Math.abs(il(e,i)),r;if(o<1)r=0;else{e.getMonth()===1&&e.getDate()>27&&e.setDate(30),e.setMonth(e.getMonth()-s*o);var a=tn(e,i)===-s;ll(j(n))&&o===1&&tn(n,i)===1&&(a=!1),r=s*(o-Number(a))}return r===0?0:r}function cl(n,t,e){z(2,arguments);var i=wr(n,t)/3;return bn(e==null?void 0:e.roundingMethod)(i)}function ul(n,t,e){z(2,arguments);var i=di(n,t)/1e3;return bn(e==null?void 0:e.roundingMethod)(i)}function hl(n,t,e){z(2,arguments);var i=vr(n,t)/7;return bn(e==null?void 0:e.roundingMethod)(i)}function dl(n,t){z(2,arguments);var e=j(n),i=j(t),s=tn(e,i),o=Math.abs(sl(e,i));e.setFullYear(1584),i.setFullYear(1584);var r=tn(e,i)===-s,a=s*(o-Number(r));return a===0?0:a}function fl(n){z(1,arguments);var t=j(n);return t.setSeconds(0,0),t}function gl(n){z(1,arguments);var t=j(n),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function pl(n){z(1,arguments);var t=j(n);return t.setMinutes(59,59,999),t}function ml(n){z(1,arguments);var t=j(n);return t.setSeconds(59,999),t}function bl(n){z(1,arguments);var t=j(n);return t.setMilliseconds(999),t}function yl(n,t){if(n==null)throw new TypeError("assign requires that input parameter not be null or undefined");for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}function Is(n,t){(t==null||t>n.length)&&(t=n.length);for(var e=0,i=new Array(t);e=n.length?{done:!0}:{done:!1,value:n[i++]}},e:function(c){throw c},f:s}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +var Sa=Object.defineProperty;var Oa=(n,t,e)=>t in n?Sa(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var k=(n,t,e)=>(Oa(n,typeof t!="symbol"?t+"":t,e),e);import{r as z,a as ai,t as wt,s as Yi,g as ji,b as ls,c as mr,d as j,e as br,f as yr,_ as an,h as Aa,i as Ui,j as _r,k as La,l as Ra,m as xr,n as Fa,o as Os,p as Ia,q as As,u as Ea,v as za,w as vt,x as J,y as V,z as bt,P as Ba,I as li,A as ci,B as Na,C as Wa,D as Ha,E as Va,F as Ls,G as Ya,H as ja,J as Ua}from"./load-translations-87b32220.js";var $a=36e5;function qa(n,t){z(2,arguments);var e=wt(t);return ai(n,e*$a)}var Xa=864e5;function Ka(n,t){z(2,arguments);var e=Yi(n),i=Yi(t),s=e.getTime()-ji(e),o=i.getTime()-ji(i);return Math.round((s-o)/Xa)}var Ga=6e4;function Qa(n,t){z(2,arguments);var e=wt(t);return ai(n,e*Ga)}function Za(n,t){z(2,arguments);var e=wt(t),i=e*3;return ls(n,i)}function Ja(n,t){z(2,arguments);var e=wt(t);return ai(n,e*1e3)}function tl(n,t){z(2,arguments);var e=wt(t),i=e*7;return mr(n,i)}function el(n,t){z(2,arguments);var e=wt(t);return ls(n,e*12)}function tn(n,t){z(2,arguments);var e=j(n),i=j(t),s=e.getTime()-i.getTime();return s<0?-1:s>0?1:s}var ui=6e4,hi=36e5,nl=1e3;function il(n,t){z(2,arguments);var e=j(n),i=j(t),s=e.getFullYear()-i.getFullYear(),o=e.getMonth()-i.getMonth();return s*12+o}function sl(n,t){z(2,arguments);var e=j(n),i=j(t);return e.getFullYear()-i.getFullYear()}function Rs(n,t){var e=n.getFullYear()-t.getFullYear()||n.getMonth()-t.getMonth()||n.getDate()-t.getDate()||n.getHours()-t.getHours()||n.getMinutes()-t.getMinutes()||n.getSeconds()-t.getSeconds()||n.getMilliseconds()-t.getMilliseconds();return e<0?-1:e>0?1:e}function vr(n,t){z(2,arguments);var e=j(n),i=j(t),s=Rs(e,i),o=Math.abs(Ka(e,i));e.setDate(e.getDate()-s*o);var r=+(Rs(e,i)===-s),a=s*(o-r);return a===0?0:a}function di(n,t){return z(2,arguments),j(n).getTime()-j(t).getTime()}var Fs={ceil:Math.ceil,round:Math.round,floor:Math.floor,trunc:function(t){return t<0?Math.ceil(t):Math.floor(t)}},ol="trunc";function bn(n){return n?Fs[n]:Fs[ol]}function rl(n,t,e){z(2,arguments);var i=di(n,t)/hi;return bn(e==null?void 0:e.roundingMethod)(i)}function al(n,t,e){z(2,arguments);var i=di(n,t)/ui;return bn(e==null?void 0:e.roundingMethod)(i)}function ll(n){z(1,arguments);var t=j(n);return br(t).getTime()===yr(t).getTime()}function wr(n,t){z(2,arguments);var e=j(n),i=j(t),s=tn(e,i),o=Math.abs(il(e,i)),r;if(o<1)r=0;else{e.getMonth()===1&&e.getDate()>27&&e.setDate(30),e.setMonth(e.getMonth()-s*o);var a=tn(e,i)===-s;ll(j(n))&&o===1&&tn(n,i)===1&&(a=!1),r=s*(o-Number(a))}return r===0?0:r}function cl(n,t,e){z(2,arguments);var i=wr(n,t)/3;return bn(e==null?void 0:e.roundingMethod)(i)}function ul(n,t,e){z(2,arguments);var i=di(n,t)/1e3;return bn(e==null?void 0:e.roundingMethod)(i)}function hl(n,t,e){z(2,arguments);var i=vr(n,t)/7;return bn(e==null?void 0:e.roundingMethod)(i)}function dl(n,t){z(2,arguments);var e=j(n),i=j(t),s=tn(e,i),o=Math.abs(sl(e,i));e.setFullYear(1584),i.setFullYear(1584);var r=tn(e,i)===-s,a=s*(o-Number(r));return a===0?0:a}function fl(n){z(1,arguments);var t=j(n);return t.setSeconds(0,0),t}function gl(n){z(1,arguments);var t=j(n),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function pl(n){z(1,arguments);var t=j(n);return t.setMinutes(59,59,999),t}function ml(n){z(1,arguments);var t=j(n);return t.setSeconds(59,999),t}function bl(n){z(1,arguments);var t=j(n);return t.setMilliseconds(999),t}function yl(n,t){if(n==null)throw new TypeError("assign requires that input parameter not be null or undefined");for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}function Is(n,t){(t==null||t>n.length)&&(t=n.length);for(var e=0,i=new Array(t);e=n.length?{done:!0}:{done:!1,value:n[i++]}},e:function(c){throw c},f:s}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,r=!1,a;return{s:function(){e=e.call(n)},n:function(){var c=e.next();return o=c.done,c},e:function(c){r=!0,a=c},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(r)throw a}}}}function D(n){if(n===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}function $i(n,t){return $i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,s){return i.__proto__=s,i},$i(n,t)}function B(n,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),Object.defineProperty(n,"prototype",{writable:!1}),t&&$i(n,t)}function Gn(n){return Gn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Gn(n)}function xl(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vl(n,t){if(t&&(an(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return D(n)}function N(n){var t=xl();return function(){var i=Gn(n),s;if(t){var o=Gn(this).constructor;s=Reflect.construct(i,arguments,o)}else s=i.apply(this,arguments);return vl(this,s)}}function I(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function wl(n,t){if(an(n)!=="object"||n===null)return n;var e=n[Symbol.toPrimitive];if(e!==void 0){var i=e.call(n,t||"default");if(an(i)!=="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(n)}function Mr(n){var t=wl(n,"string");return an(t)==="symbol"?t:String(t)}function zs(n,t){for(var e=0;e0,i=e?t:1-t,s;if(i<=50)s=n||100;else{var o=i+50,r=Math.floor(o/100)*100,a=n>=o%100;s=n+r-(a?100:0)}return e?s:1-s}function Dr(n){return n%400===0||n%4===0&&n%100!==0}var Dl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r0}},{key:"set",value:function(s,o,r){var a=s.getUTCFullYear();if(r.isTwoDigitYear){var l=Pr(r.year,a);return s.setUTCFullYear(l,0,1),s.setUTCHours(0,0,0,0),s}var c=!("era"in o)||o.era===1?r.year:1-r.year;return s.setUTCFullYear(c,0,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Tl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r0}},{key:"set",value:function(s,o,r,a){var l=Aa(s,a);if(r.isTwoDigitYear){var c=Pr(r.year,l);return s.setUTCFullYear(c,0,a.firstWeekContainsDate),s.setUTCHours(0,0,0,0),Ui(s,a)}var u=!("era"in o)||o.era===1?r.year:1-r.year;return s.setUTCFullYear(u,0,a.firstWeekContainsDate),s.setUTCHours(0,0,0,0),Ui(s,a)}}]),e}(Y),Sl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=4}},{key:"set",value:function(s,o,r){return s.setUTCMonth((r-1)*3,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Ll=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=4}},{key:"set",value:function(s,o,r){return s.setUTCMonth((r-1)*3,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Rl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=11}},{key:"set",value:function(s,o,r){return s.setUTCMonth(r,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Fl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=11}},{key:"set",value:function(s,o,r){return s.setUTCMonth(r,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y);function Il(n,t,e){z(2,arguments);var i=j(n),s=wt(t),o=La(i,e)-s;return i.setUTCDate(i.getUTCDate()-o*7),i}var El=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=53}},{key:"set",value:function(s,o,r,a){return Ui(Il(s,r,a),a)}}]),e}(Y);function zl(n,t){z(2,arguments);var e=j(n),i=wt(t),s=Ra(e)-i;return e.setUTCDate(e.getUTCDate()-s*7),e}var Bl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=53}},{key:"set",value:function(s,o,r){return _r(zl(s,r))}}]),e}(Y),Nl=[31,28,31,30,31,30,31,31,30,31,30,31],Wl=[31,29,31,30,31,30,31,31,30,31,30,31],Hl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=Wl[l]:o>=1&&o<=Nl[l]}},{key:"set",value:function(s,o,r){return s.setUTCDate(r),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Vl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=366:o>=1&&o<=365}},{key:"set",value:function(s,o,r){return s.setUTCMonth(0,r),s.setUTCHours(0,0,0,0),s}}]),e}(Y);function us(n,t,e){var i,s,o,r,a,l,c,u;z(2,arguments);var h=xr(),d=wt((i=(s=(o=(r=e==null?void 0:e.weekStartsOn)!==null&&r!==void 0?r:e==null||(a=e.locale)===null||a===void 0||(l=a.options)===null||l===void 0?void 0:l.weekStartsOn)!==null&&o!==void 0?o:h.weekStartsOn)!==null&&s!==void 0?s:(c=h.locale)===null||c===void 0||(u=c.options)===null||u===void 0?void 0:u.weekStartsOn)!==null&&i!==void 0?i:0);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var f=j(n),g=wt(t),p=f.getUTCDay(),m=g%7,b=(m+7)%7,y=(b=0&&o<=6}},{key:"set",value:function(s,o,r,a){return s=us(s,r,a),s.setUTCHours(0,0,0,0),s}}]),e}(Y),jl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=6}},{key:"set",value:function(s,o,r,a){return s=us(s,r,a),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Ul=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=6}},{key:"set",value:function(s,o,r,a){return s=us(s,r,a),s.setUTCHours(0,0,0,0),s}}]),e}(Y);function $l(n,t){z(2,arguments);var e=wt(t);e%7===0&&(e=e-7);var i=1,s=j(n),o=s.getUTCDay(),r=e%7,a=(r+7)%7,l=(a=1&&o<=7}},{key:"set",value:function(s,o,r){return s=$l(s,r),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Xl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=12}},{key:"set",value:function(s,o,r){var a=s.getUTCHours()>=12;return a&&r<12?s.setUTCHours(r+12,0,0,0):!a&&r===12?s.setUTCHours(0,0,0,0):s.setUTCHours(r,0,0,0),s}}]),e}(Y),Zl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=23}},{key:"set",value:function(s,o,r){return s.setUTCHours(r,0,0,0),s}}]),e}(Y),Jl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=11}},{key:"set",value:function(s,o,r){var a=s.getUTCHours()>=12;return a&&r<12?s.setUTCHours(r+12,0,0,0):s.setUTCHours(r,0,0,0),s}}]),e}(Y),tc=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=24}},{key:"set",value:function(s,o,r){var a=r<=24?r%24:r;return s.setUTCHours(a,0,0,0),s}}]),e}(Y),ec=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=59}},{key:"set",value:function(s,o,r){return s.setUTCMinutes(r,0,0),s}}]),e}(Y),nc=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=59}},{key:"set",value:function(s,o,r){return s.setUTCSeconds(r,0),s}}]),e}(Y),ic=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&A<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var O=wt((g=(p=(m=(b=i==null?void 0:i.weekStartsOn)!==null&&b!==void 0?b:i==null||(y=i.locale)===null||y===void 0||(x=y.options)===null||x===void 0?void 0:x.weekStartsOn)!==null&&m!==void 0?m:M.weekStartsOn)!==null&&p!==void 0?p:(v=M.locale)===null||v===void 0||(_=v.options)===null||_===void 0?void 0:_.weekStartsOn)!==null&&g!==void 0?g:0);if(!(O>=0&&O<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(C==="")return w===""?j(e):new Date(NaN);var R={firstWeekContainsDate:A,weekStartsOn:O,locale:T},st=[new Cl],gt=C.match(uc).map(function(ct){var q=ct[0];if(q in Os){var St=Os[q];return St(ct,T.formatLong)}return ct}).join("").match(cc),W=[],U=Es(gt),Q;try{var Mt=function(){var q=Q.value;!(i!=null&&i.useAdditionalWeekYearTokens)&&Ia(q)&&As(q,C,n),!(i!=null&&i.useAdditionalDayOfYearTokens)&&Ea(q)&&As(q,C,n);var St=q[0],wn=lc[St];if(wn){var Ds=wn.incompatibleTokens;if(Array.isArray(Ds)){var Ts=W.find(function(Ss){return Ds.includes(Ss.token)||Ss.token===St});if(Ts)throw new RangeError("The format string mustn't contain `".concat(Ts.fullToken,"` and `").concat(q,"` at the same time"))}else if(wn.incompatibleTokens==="*"&&W.length>0)throw new RangeError("The format string mustn't contain `".concat(q,"` and any other token at the same time"));W.push({token:St,fullToken:q});var xi=wn.run(w,q,T.match,R);if(!xi)return{v:new Date(NaN)};st.push(xi.setter),w=xi.rest}else{if(St.match(gc))throw new RangeError("Format string contains an unescaped latin alphabet character `"+St+"`");if(q==="''"?q="'":St==="'"&&(q=mc(q)),w.indexOf(q)===0)w=w.slice(q.length);else return{v:new Date(NaN)}}};for(U.s();!(Q=U.n()).done;){var lt=Mt();if(an(lt)==="object")return lt.v}}catch(ct){U.e(ct)}finally{U.f()}if(w.length>0&&fc.test(w))return new Date(NaN);var Kt=st.map(function(ct){return ct.priority}).sort(function(ct,q){return q-ct}).filter(function(ct,q,St){return St.indexOf(ct)===q}).map(function(ct){return st.filter(function(q){return q.priority===ct}).sort(function(q,St){return St.subPriority-q.subPriority})}).map(function(ct){return ct[0]}),Gt=j(e);if(isNaN(Gt.getTime()))return new Date(NaN);var Tt=za(Gt,ji(Gt)),Qt={},Rt=Es(Kt),Zt;try{for(Rt.s();!(Zt=Rt.n()).done;){var Jt=Zt.value;if(!Jt.validate(Tt,R))return new Date(NaN);var vn=Jt.set(Tt,Qt,R);Array.isArray(vn)?(Tt=vn[0],yl(Qt,vn[1])):Tt=vn}}catch(ct){Rt.e(ct)}finally{Rt.f()}return Tt}function mc(n){return n.match(hc)[1].replace(dc,"'")}function bc(n){z(1,arguments);var t=j(n);return t.setMinutes(0,0,0),t}function yc(n){z(1,arguments);var t=j(n);return t.setMilliseconds(0),t}function _c(n,t){var e;z(1,arguments);var i=wt((e=t==null?void 0:t.additionalDigits)!==null&&e!==void 0?e:2);if(i!==2&&i!==1&&i!==0)throw new RangeError("additionalDigits must be 0, 1 or 2");if(!(typeof n=="string"||Object.prototype.toString.call(n)==="[object String]"))return new Date(NaN);var s=Mc(n),o;if(s.date){var r=kc(s.date,i);o=Cc(r.restDateString,r.year)}if(!o||isNaN(o.getTime()))return new Date(NaN);var a=o.getTime(),l=0,c;if(s.time&&(l=Pc(s.time),isNaN(l)))return new Date(NaN);if(s.timezone){if(c=Dc(s.timezone),isNaN(c))return new Date(NaN)}else{var u=new Date(a+l),h=new Date(0);return h.setFullYear(u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()),h.setHours(u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),u.getUTCMilliseconds()),h}return new Date(a+l+c)}var Mn={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},xc=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,vc=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,wc=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Mc(n){var t={},e=n.split(Mn.dateTimeDelimiter),i;if(e.length>2)return t;if(/:/.test(e[0])?i=e[0]:(t.date=e[0],i=e[1],Mn.timeZoneDelimiter.test(t.date)&&(t.date=n.split(Mn.timeZoneDelimiter)[0],i=n.substr(t.date.length,n.length))),i){var s=Mn.timezone.exec(i);s?(t.time=i.replace(s[1],""),t.timezone=s[1]):t.time=i}return t}function kc(n,t){var e=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),i=n.match(e);if(!i)return{year:NaN,restDateString:""};var s=i[1]?parseInt(i[1]):null,o=i[2]?parseInt(i[2]):null;return{year:o===null?s:o*100,restDateString:n.slice((i[1]||i[2]).length)}}function Cc(n,t){if(t===null)return new Date(NaN);var e=n.match(xc);if(!e)return new Date(NaN);var i=!!e[4],s=Be(e[1]),o=Be(e[2])-1,r=Be(e[3]),a=Be(e[4]),l=Be(e[5])-1;if(i)return Lc(t,a,l)?Tc(t,a,l):new Date(NaN);var c=new Date(0);return!Oc(t,o,r)||!Ac(t,s)?new Date(NaN):(c.setUTCFullYear(t,o,Math.max(s,r)),c)}function Be(n){return n?parseInt(n):1}function Pc(n){var t=n.match(vc);if(!t)return NaN;var e=vi(t[1]),i=vi(t[2]),s=vi(t[3]);return Rc(e,i,s)?e*hi+i*ui+s*1e3:NaN}function vi(n){return n&&parseFloat(n.replace(",","."))||0}function Dc(n){if(n==="Z")return 0;var t=n.match(wc);if(!t)return 0;var e=t[1]==="+"?-1:1,i=parseInt(t[2]),s=t[3]&&parseInt(t[3])||0;return Fc(i,s)?e*(i*hi+s*ui):NaN}function Tc(n,t,e){var i=new Date(0);i.setUTCFullYear(n,0,4);var s=i.getUTCDay()||7,o=(t-1)*7+e+1-s;return i.setUTCDate(i.getUTCDate()+o),i}var Sc=[31,null,31,30,31,30,31,31,30,31,30,31];function Tr(n){return n%400===0||n%4===0&&n%100!==0}function Oc(n,t,e){return t>=0&&t<=11&&e>=1&&e<=(Sc[t]||(Tr(n)?29:28))}function Ac(n,t){return t>=1&&t<=(Tr(n)?366:365)}function Lc(n,t,e){return t>=1&&t<=53&&e>=0&&e<=6}function Rc(n,t,e){return n===24?t===0&&e===0:e>=0&&e<60&&t>=0&&t<60&&n>=0&&n<25}function Fc(n,t){return t>=0&&t<=59}class Ic{get(t,e,i){return vt.get("/api/v2/summary/basic",{params:{start:t,end:e,code:i}})}}function Nt(n,t,e){const i=J(t,"y-MM-dd")+"_"+J(e,"y-MM-dd")+"_"+n;return console.log("getCacheKey: "+i),String(i)}let wi=!1;const Ec=()=>({balanceBox:{amounts:[],subtitles:[]},billBox:{paid:[],unpaid:[]},leftBox:{left:[],perDay:[]},netBox:{net:[]},autoConversion:!1,loading:!1,boxData:null,boxOptions:null,getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-boxes-data",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){this.boxData=s,this.generateOptions(this.boxData);return}new Ic().get(J(n,"yyyy-MM-dd"),J(t,"yyyy-MM-dd"),null).then(r=>{this.boxData=r.data,window.store.set(e,r.data),this.generateOptions(this.boxData)})},generateOptions(n){this.balanceBox={amounts:[],subtitles:[]},this.billBox={paid:[],unpaid:[]},this.leftBox={left:[],perDay:[]},this.netBox={net:[]};let t={};for(const e in n)if(n.hasOwnProperty(e)){const i=n[e];if(!i.hasOwnProperty("key"))continue;let s=i.key;if(this.autoConversion){if(s.startsWith("balance-in-native")){this.balanceBox.amounts.push(V(i.value,i.currency_code)),t.hasOwnProperty(i.currency_code)||(t[i.currency_code]="");continue}if(s.startsWith("spent-in-native")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=t[i.currency_code]+V(i.value,i.currency_code);continue}if(s.startsWith("earned-in-native")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=V(i.value,i.currency_code)+" + "+t[i.currency_code];continue}if(s.startsWith("bills-unpaid-in-native")){this.billBox.unpaid.push(V(i.value,i.currency_code));continue}if(s.startsWith("bills-paid-in-native")){this.billBox.paid.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-to-spend-in-native")){this.leftBox.left.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-per-day-to-spend-in-native")){this.leftBox.perDay.push(V(i.value,i.currency_code));continue}if(s.startsWith("net-worth-in-native")){this.netBox.net.push(V(i.value,i.currency_code));continue}}if(!this.autoConversion&&!s.endsWith("native")){if(s.startsWith("balance-in-")){this.balanceBox.amounts.push(V(i.value,i.currency_code));continue}if(s.startsWith("spent-in-")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=t[i.currency_code]+V(i.value,i.currency_code);continue}if(s.startsWith("earned-in-")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=V(i.value,i.currency_code)+" + "+t[i.currency_code];continue}if(s.startsWith("bills-unpaid-in-")){this.billBox.unpaid.push(V(i.value,i.currency_code));continue}if(s.startsWith("bills-paid-in-")){this.billBox.paid.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-to-spend-in-")){this.leftBox.left.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-per-day-to-spend-in-")){this.leftBox.perDay.push(V(i.value,i.currency_code));continue}s.startsWith("net-worth-in-")&&this.netBox.net.push(V(i.value,i.currency_code))}}for(let e in t)t.hasOwnProperty(e)&&this.balanceBox.subtitles.push(t[e]);this.loading=!1},loadBoxes(){if(this.loading!==!0){if(this.loading=!0,this.boxData===null){this.getFreshData();return}this.generateOptions(this.boxData),this.loading=!1}},init(){Promise.all([bt("viewRange"),bt("autoConversion",!1)]).then(n=>{wi=!0,this.autoConversion=n[1],this.loadBoxes()}),window.store.observe("end",()=>{wi&&(this.boxData=null,this.loadBoxes())}),window.store.observe("autoConversion",n=>{wi&&(this.autoConversion=n,this.loadBoxes())})}});class zc{put(t,e){let i="/api/v1/preferences/"+t;return vt.put(i,{data:e})}}function Bc(n,t=null){window.store.set(n,t),new zc().put(n,t).then(i=>{}).catch(()=>{new Ba().post(n,t).then(s=>{})})}let Nc=class{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/account/dashboard",{params:{start:i,end:s}})}expense(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/account/expense-dashboard",{params:{start:i,end:s}})}},Bs=class{get(t,e){let i={date:J(e,"y-MM-dd").slice(0,10)};return e?vt.get("/api/v2/accounts/"+t,{params:i}):vt.get("/api/v2/accounts/"+t)}transactions(t,e){const i={page:e.page??1};return e.hasOwnProperty("start")&&(i.start=J(e.start,"y-MM-dd")),e.hasOwnProperty("end")&&(i.end=J(e.end,"y-MM-dd")),vt.get("/api/v2/accounts/"+t+"/transactions",{params:i})}};/*! * @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme @@ -16,13 +16,13 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho * Released under the MIT License */class Th{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const o=e.listeners[s],r=e.duration;o.forEach(a=>a({chart:t,initial:e.initial,numSteps:r,currentStep:Math.min(i-e.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=Br.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,s)=>{if(!i.running||!i.items.length)return;const o=i.items;let r=o.length-1,a=!1,l;for(;r>=0;--r)l=o[r],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(o[r]=o[o.length-1],o.pop());a&&(s.draw(),this._notify(s,i,t,"progress")),o.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,s)=>Math.max(i,s._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var Yt=new Th;const ro="transparent",Sh={boolean(n,t,e){return e>.5?t:n},color(n,t,e){const i=Ae(n||ro),s=i.valid&&Ae(t||ro);return s&&s.valid?s.mix(i,e).hexString():t},number(n,t,e){return n+(t-n)*e}};class Oh{constructor(t,e,i,s){const o=e[i];s=Tn([t.to,s,o,t.from]);const r=Tn([t.from,o,s]);this._active=!0,this._fn=t.fn||Sh[t.type||typeof r],this._easing=sn[t.easing]||sn.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=r,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],o=i-this._start,r=this._duration-o;this._start=i,this._duration=Math.floor(Math.max(r,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=Tn([t.to,e,s,t.from]),this._from=Tn([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,o=this._from,r=this._loop,a=this._to;let l;if(this._active=o!==a&&(r||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[s]=this._fn(o,a,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let s=0;s{const o=t[s];if(!F(o))return;const r={};for(const a of e)r[a]=o[a];(K(o.properties)&&o.properties||[s]).forEach(a=>{(a===s||!i.has(a))&&i.set(a,r)})})}_animateOptions(t,e){const i=e.options,s=Lh(t,i);if(!s)return[];const o=this._createAnimations(s,i);return i.$shared&&Ah(t.options.$animations,i).then(()=>{t.options=i},()=>{}),o}_createAnimations(t,e){const i=this._properties,s=[],o=t.$animations||(t.$animations={}),r=Object.keys(e),a=Date.now();let l;for(l=r.length-1;l>=0;--l){const c=r[l];if(c.charAt(0)==="$")continue;if(c==="options"){s.push(...this._animateOptions(t,e));continue}const u=e[c];let h=o[c];const d=i.get(c);if(h)if(d&&h.active()){h.update(d,u,a);continue}else h.cancel();if(!d||!d.duration){t[c]=u;continue}o[c]=h=new Oh(d,t,c,u),s.push(h)}return s}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const i=this._createAnimations(t,e);if(i.length)return Yt.add(this._chart,i),!0}}function Ah(n,t){const e=[],i=Object.keys(t);for(let s=0;s0||!e&&o<0)return s.index}return null}function ho(n,t){const{chart:e,_cachedMeta:i}=n,s=e._stacks||(e._stacks={}),{iScale:o,vScale:r,index:a}=i,l=o.axis,c=r.axis,u=Eh(o,r,i),h=t.length;let d;for(let f=0;fe[i].axis===t).shift()}function Nh(n,t){return he(n,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Wh(n,t,e){return he(n,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Ne(n,t){const e=n.controller.index,i=n.vScale&&n.vScale.axis;if(i){t=t||n._parsed;for(const s of t){const o=s._stacks;if(!o||o[i]===void 0||o[i][e]===void 0)return;delete o[i][e],o[i]._visualValues!==void 0&&o[i]._visualValues[e]!==void 0&&delete o[i]._visualValues[e]}}}const Pi=n=>n==="reset"||n==="none",fo=(n,t)=>t?n:Object.assign({},n),Hh=(n,t,e)=>n&&!t.hidden&&t._stacked&&{keys:na(e,!0),values:null};class Xt{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=co(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ne(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(h,d,f,g)=>h==="x"?d:h==="r"?g:f,o=e.xAxisID=S(i.xAxisID,Ci(t,"x")),r=e.yAxisID=S(i.yAxisID,Ci(t,"y")),a=e.rAxisID=S(i.rAxisID,Ci(t,"r")),l=e.indexAxis,c=e.iAxisID=s(l,o,r,a),u=e.vAxisID=s(l,r,o,a);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(r),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(u)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Xs(this._data,this),t._stacked&&Ne(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(F(e))this._data=Ih(e);else if(i!==e){if(i){Xs(i,this);const s=this._cachedMeta;Ne(s),s._parsed=[]}e&&Object.isExtensible(e)&&Mu(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const o=e._stacked;e._stacked=co(e.vScale,e),e.stack!==i.stack&&(s=!0,Ne(e),e.stack=i.stack),this._resyncElements(t),(s||o!==e._stacked)&&ho(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:o,_stacked:r}=i,a=o.axis;let l=t===0&&e===s.length?!0:i._sorted,c=t>0&&i._parsed[t-1],u,h,d;if(this._parsing===!1)i._parsed=s,i._sorted=!0,d=s;else{K(s[t])?d=this.parseArrayData(i,s,t,e):F(s[t])?d=this.parseObjectData(i,s,t,e):d=this.parsePrimitiveData(i,s,t,e);const f=()=>h[a]===null||c&&h[a]p||h=0;--d)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,o,r;for(s=0,o=e.length;s=0&&tthis.getContext(i,s,e),p=c.resolveNamedOptions(d,f,g,h);return p.$shared&&(p.$shared=l,o[r]=Object.freeze(fo(p,l))),p}_resolveAnimations(t,e,i){const s=this.chart,o=this._cachedDataOpts,r=`animation-${e}`,a=o[r];if(a)return a;let l;if(s.options.animation!==!1){const u=this.chart.config,h=u.datasetAnimationScopeKeys(this._type,e),d=u.getOptionScopes(this.getDataset(),h);l=u.createResolver(d,this.getContext(t,i,e))}const c=new ea(s,l&&l.animations);return l&&l._cacheable&&(o[r]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Pi(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,o=this.getSharedOptions(i),r=this.includeOptions(e,o)||o!==s;return this.updateSharedOptions(o,e,i),{sharedOptions:o,includeOptions:r}}updateElement(t,e,i,s){Pi(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Pi(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const o=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];const s=i.length,o=e.length,r=Math.min(o,s);r&&this.parse(0,r),o>s?this._insertElements(s,o-s,t):o{for(c.length+=e,a=c.length-1;a>=r;a--)c[a]=c[a-e]};for(l(o),a=t;as-o))}return n._cache.$bar}function Yh(n){const t=n.iScale,e=Vh(t,n.type);let i=t._length,s,o,r,a;const l=()=>{r===32767||r===-32768||(cn(a)&&(i=Math.min(i,Math.abs(r-a)||i)),a=r)};for(s=0,o=e.length;s0?s[n-1]:null,a=nMath.abs(a)&&(l=a,c=r),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:s,end:o,min:r,max:a}}function ia(n,t,e,i){return K(n)?$h(n,t,e,i):t[e.axis]=e.parse(n,i),t}function go(n,t,e,i){const s=n.iScale,o=n.vScale,r=s.getLabels(),a=s===o,l=[];let c,u,h,d;for(c=e,u=e+i;c=e?1:-1)}function Xh(n){let t,e,i,s,o;return n.horizontal?(t=n.base>n.x,e="left",i="right"):(t=n.basel.controller.options.grouped),o=i.options.stacked,r=[],a=l=>{const c=l.controller.getParsed(e),u=c&&c[l.vScale.axis];if(H(u)||isNaN(u))return!0};for(const l of s)if(!(e!==void 0&&a(l))&&((o===!1||r.indexOf(l.stack)===-1||o===void 0&&l.stack===void 0)&&r.push(l.stack),l.index===t))break;return r.length||r.push(void 0),r}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),o=e!==void 0?s.indexOf(e):-1;return o===-1?s.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let o,r;for(o=0,r=e.data.length;ohn(x,a,l,!0)?1:Math.max(v,v*e,_,_*e),g=(x,v,_)=>hn(x,a,l,!0)?-1:Math.min(v,v*e,_,_*e),p=f(0,c,h),m=f(at,u,d),b=g(tt,c,h),y=g(tt+at,u,d);i=(p-b)/2,s=(m-y)/2,o=-(p+b)/2,r=-(m+y)/2}return{ratioX:i,ratioY:s,offsetX:o,offsetY:r}}class Le extends Xt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(this._parsing===!1)s._parsed=i;else{let o=l=>+i[l];if(F(i[t])){const{key:l="value"}=this._parsing;o=c=>+ce(i[c],l)}let r,a;for(r=t,a=t+e;r0&&!isNaN(t)?G*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],o=_n(e._parsed[t],i.options.locale);return{label:s[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,o,r,a,l;if(!t){for(s=0,o=i.data.datasets.length;st!=="spacing",_indexable:t=>t!=="spacing"&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")}),k(Le,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map((o,r)=>{const l=t.getDatasetMeta(0).controller.getStyle(r);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:s,lineWidth:l.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(r),index:r}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}});class jn extends Xt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:o}=e,r=this.chart._animationsDisabled;let{start:a,count:l}=Pu(e,s,r);this._drawStart=a,this._drawCount=l,Du(e)&&(a=0,l=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!o._decimated,i.points=s;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!r,options:c},t),this.updateElements(s,a,l,t)}updateElements(t,e,i,s){const o=s==="reset",{iScale:r,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:u,includeOptions:h}=this._getSharedOptions(e,s),d=r.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=un(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||s==="none",y=e+i,x=t.length;let v=e>0&&this.getParsed(e-1);for(let _=0;_=y){C.skip=!0;continue}const M=this.getParsed(_),T=H(M[f]),A=C[d]=r.getPixelForValue(M[d],_),O=C[f]=o||T?a.getBasePixel():a.getPixelForValue(l?this.applyStack(a,M,l):M[f],_);C.skip=isNaN(A)||isNaN(O)||T,C.stop=_>0&&Math.abs(M[d]-v[d])>m,p&&(C.parsed=M,C.raw=c.data[_]),h&&(C.options=u||this.resolveDataElementOptions(_,w.active?"active":s)),b||this.updateElement(w,_,C,s),v=M}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const o=s[0].size(this.resolveDataElementOptions(0)),r=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,o,r)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}k(jn,"id","line"),k(jn,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),k(jn,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class Un extends Xt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],o=_n(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:o}}parseObjectData(t,e,i,s){return ih.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((i,s)=>{const o=this.getParsed(s).r;!isNaN(o)&&this.chart.getDataVisibility(s)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(s/2,0),r=Math.max(i.cutoutPercentage?o/100*i.cutoutPercentage:1,0),a=(o-r)/t.getVisibleDatasetCount();this.outerRadius=o-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,i,s){const o=s==="reset",r=this.chart,l=r.options.animation,c=this._cachedMeta.rScale,u=c.xCenter,h=c.yCenter,d=c.getIndexAngle(0)-.5*tt;let f=d,g;const p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&e++}),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?At(this.resolveDataElementOptions(t,e).angle||i):0}}k(Un,"id","polarArea"),k(Un,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),k(Un,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map((o,r)=>{const l=t.getDatasetMeta(0).controller.getStyle(r);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:s,lineWidth:l.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(r),index:r}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class Qi extends Le{}k(Qi,"id","pie"),k(Qi,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});function ge(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ms{constructor(t){k(this,"options");this.options=t||{}}static override(t){Object.assign(Ms.prototype,t)}init(){}formats(){return ge()}parse(){return ge()}format(){return ge()}add(){return ge()}diff(){return ge()}startOf(){return ge()}endOf(){return ge()}}var sa={_date:Ms};function Jh(n,t,e,i){const{controller:s,data:o,_sorted:r}=n,a=s._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&r&&o.length){const l=a._reversePixels?vu:xe;if(i){if(s._sharedOptions){const c=o[0],u=typeof c.getRange=="function"&&c.getRange(t);if(u){const h=l(o,t,e-u),d=l(o,t,e+u);return{lo:h.lo,hi:d.hi}}}}else return l(o,t,e)}return{lo:0,hi:o.length-1}}function xn(n,t,e,i,s){const o=n.getSortedVisibleDatasetMetas(),r=e[t];for(let a=0,l=o.length;a{l[r](t[e],s)&&(o.push({element:l,datasetIndex:c,index:u}),a=a||l.inRange(t.x,t.y,s))}),i&&!a?[]:o}var id={evaluateInteractionItems:xn,modes:{index(n,t,e,i){const s=be(t,n),o=e.axis||"x",r=e.includeInvisible||!1,a=e.intersect?Ti(n,s,o,i,r):Si(n,s,o,!1,i,r),l=[];return a.length?(n.getSortedVisibleDatasetMetas().forEach(c=>{const u=a[0].index,h=c.data[u];h&&!h.skip&&l.push({element:h,datasetIndex:c.index,index:u})}),l):[]},dataset(n,t,e,i){const s=be(t,n),o=e.axis||"xy",r=e.includeInvisible||!1;let a=e.intersect?Ti(n,s,o,i,r):Si(n,s,o,!1,i,r);if(a.length>0){const l=a[0].datasetIndex,c=n.getDatasetMeta(l).data;a=[];for(let u=0;ue.pos===t)}function yo(n,t){return n.filter(e=>oa.indexOf(e.pos)===-1&&e.box.axis===t)}function He(n,t){return n.sort((e,i)=>{const s=t?i:e,o=t?e:i;return s.weight===o.weight?s.index-o.index:s.weight-o.weight})}function sd(n){const t=[];let e,i,s,o,r,a;for(e=0,i=(n||[]).length;ec.box.fullSize),!0),i=He(We(t,"left"),!0),s=He(We(t,"right")),o=He(We(t,"top"),!0),r=He(We(t,"bottom")),a=yo(t,"x"),l=yo(t,"y");return{fullSize:e,leftAndTop:i.concat(o),rightAndBottom:s.concat(l).concat(r).concat(a),chartArea:We(t,"chartArea"),vertical:i.concat(s).concat(l),horizontal:o.concat(r).concat(a)}}function _o(n,t,e,i){return Math.max(n[e],t[e])+Math.max(n[i],t[i])}function ra(n,t){n.top=Math.max(n.top,t.top),n.left=Math.max(n.left,t.left),n.bottom=Math.max(n.bottom,t.bottom),n.right=Math.max(n.right,t.right)}function ld(n,t,e,i){const{pos:s,box:o}=e,r=n.maxPadding;if(!F(s)){e.size&&(n[s]-=e.size);const h=i[e.stack]||{size:0,count:1};h.size=Math.max(h.size,e.horizontal?o.height:o.width),e.size=h.size/h.count,n[s]+=e.size}o.getPadding&&ra(r,o.getPadding());const a=Math.max(0,t.outerWidth-_o(r,n,"left","right")),l=Math.max(0,t.outerHeight-_o(r,n,"top","bottom")),c=a!==n.w,u=l!==n.h;return n.w=a,n.h=l,e.horizontal?{same:c,other:u}:{same:u,other:c}}function cd(n){const t=n.maxPadding;function e(i){const s=Math.max(t[i]-n[i],0);return n[i]+=s,s}n.y+=e("top"),n.x+=e("left"),e("right"),e("bottom")}function ud(n,t){const e=t.maxPadding;function i(s){const o={left:0,top:0,right:0,bottom:0};return s.forEach(r=>{o[r]=Math.max(t[r],e[r])}),o}return i(n?["left","right"]:["top","bottom"])}function Qe(n,t,e,i){const s=[];let o,r,a,l,c,u;for(o=0,r=n.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});const u=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,h=Object.freeze({outerWidth:t,outerHeight:e,padding:s,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/u,hBoxMaxHeight:r/2}),d=Object.assign({},s);ra(d,yt(i));const f=Object.assign({maxPadding:d,w:o,h:r,x:s.left,y:s.top},s),g=rd(l.concat(c),h);Qe(a.fullSize,f,h,g),Qe(l,f,h,g),Qe(c,f,h,g)&&Qe(l,f,h,g),cd(f),xo(a.leftAndTop,f,h,g),f.x+=f.w,f.y+=f.h,xo(a.rightAndBottom,f,h,g),n.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},$(a.chartArea,p=>{const m=p.box;Object.assign(m,n.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class aa{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class hd extends aa{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const $n="$chartjs",dd={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},vo=n=>n===null||n==="";function fd(n,t){const e=n.style,i=n.getAttribute("height"),s=n.getAttribute("width");if(n[$n]={initial:{height:i,width:s,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",vo(s)){const o=no(n,"width");o!==void 0&&(n.width=o)}if(vo(i))if(n.style.height==="")n.height=n.width/(t||2);else{const o=no(n,"height");o!==void 0&&(n.height=o)}return n}const la=bh?{passive:!0}:!1;function gd(n,t,e){n.addEventListener(t,e,la)}function pd(n,t,e){n.canvas.removeEventListener(t,e,la)}function md(n,t){const e=dd[n.type]||n.type,{x:i,y:s}=be(n,t);return{type:e,chart:t,native:n,x:i!==void 0?i:null,y:s!==void 0?s:null}}function ii(n,t){for(const e of n)if(e===t||e.contains(t))return!0}function bd(n,t,e){const i=n.canvas,s=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||ii(a.addedNodes,i),r=r&&!ii(a.removedNodes,i);r&&e()});return s.observe(document,{childList:!0,subtree:!0}),s}function yd(n,t,e){const i=n.canvas,s=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||ii(a.removedNodes,i),r=r&&!ii(a.addedNodes,i);r&&e()});return s.observe(document,{childList:!0,subtree:!0}),s}const fn=new Map;let wo=0;function ca(){const n=window.devicePixelRatio;n!==wo&&(wo=n,fn.forEach((t,e)=>{e.currentDevicePixelRatio!==n&&t()}))}function _d(n,t){fn.size||window.addEventListener("resize",ca),fn.set(n,t)}function xd(n){fn.delete(n),fn.size||window.removeEventListener("resize",ca)}function vd(n,t,e){const i=n.canvas,s=i&&ws(i);if(!s)return;const o=Nr((a,l)=>{const c=s.clientWidth;e(a,l),c{const l=a[0],c=l.contentRect.width,u=l.contentRect.height;c===0&&u===0||o(c,u)});return r.observe(s),_d(n,o),r}function Oi(n,t,e){e&&e.disconnect(),t==="resize"&&xd(n)}function wd(n,t,e){const i=n.canvas,s=Nr(o=>{n.ctx!==null&&e(md(o,n))},n);return gd(i,t,s),s}class Md extends aa{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(fd(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[$n])return!1;const i=e[$n].initial;["height","width"].forEach(o=>{const r=i[o];H(r)?e.removeAttribute(o):e.setAttribute(o,r)});const s=i.style||{};return Object.keys(s).forEach(o=>{e.style[o]=s[o]}),e.width=e.width,delete e[$n],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),r={attach:bd,detach:yd,resize:vd}[e]||wd;s[e]=r(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:Oi,detach:Oi,resize:Oi}[e]||pd)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return mh(t,e,i,s)}isAttached(t){const e=ws(t);return!!(e&&e.isConnected)}}function kd(n){return!Kr()||typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas?hd:Md}class Lt{constructor(){k(this,"x");k(this,"y");k(this,"active",!1);k(this,"options");k(this,"$animations")}tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return un(this.x)&&un(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach(o=>{s[o]=i[o]&&i[o].active()?i[o]._to:this[o]}),s}}k(Lt,"defaults",{}),k(Lt,"defaultRoutes");function Cd(n,t){const e=n.options.ticks,i=Pd(n),s=Math.min(e.maxTicksLimit||i,i),o=e.major.enabled?Td(t):[],r=o.length,a=o[0],l=o[r-1],c=[];if(r>s)return Sd(t,c,o,r/s),c;const u=Dd(o,t,s);if(r>0){let h,d;const f=r>1?Math.round((l-a)/(r-1)):null;for(Ln(t,c,u,H(f)?0:a-f,a),h=0,d=r-1;hs)return l}return Math.max(s,1)}function Td(n){const t=[];let e,i;for(e=0,i=n.length;en==="left"?"right":n==="right"?"left":n,Mo=(n,t,e)=>t==="top"||t==="left"?n[t]+e:n[t]-e,ko=(n,t)=>Math.min(t||n,n);function Co(n,t){const e=[],i=n.length/t,s=n.length;let o=0;for(;or+a)))return l}function Rd(n,t){$(n,e=>{const i=e.gc,s=i.length/2;let o;if(s>t){for(o=0;oi?i:e,i=s&&e>i?e:i,{min:Pt(e,Pt(i,e)),max:Pt(i,Pt(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){X(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:o,ticks:r}=this.options,a=r.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=qu(this,o,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=a=o||i<=1||!this.isHorizontal()){this.labelRotation=s;return}const u=this._getLabelSizes(),h=u.widest.width,d=u.highest.height,f=ft(this.chart.width-h,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),h+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-Ve(t.grid)-e.padding-Po(t.title,this.chart.options.font),c=Math.sqrt(h*h+d*d),r=ps(Math.min(Math.asin(ft((u.highest.height+6)/a,-1,1)),Math.asin(ft(l/c,-1,1))-Math.asin(ft(d/c,-1,1)))),r=Math.max(s,Math.min(o,r))),this.labelRotation=r}afterCalculateLabelRotation(){X(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){X(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:o}}=this,r=this._isVisible(),a=this.isHorizontal();if(r){const l=Po(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ve(o)+l):(t.height=this.maxHeight,t.width=Ve(o)+l),i.display&&this.ticks.length){const{first:c,last:u,widest:h,highest:d}=this._getLabelSizes(),f=i.padding*2,g=At(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(a){const b=i.mirror?0:m*h.width+p*d.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{const b=i.mirror?0:p*h.width+m*d.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,u,m,p)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:o,padding:r},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){const u=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let d=0,f=0;l?c?(d=s*t.width,f=i*e.height):(d=i*t.height,f=s*e.width):o==="start"?f=e.width:o==="end"?d=t.width:o!=="inner"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-u+r)*this.width/(this.width-u),0),this.paddingRight=Math.max((f-h+r)*this.width/(this.width-h),0)}else{let u=e.height/2,h=t.height/2;o==="start"?(u=0,h=t.height):o==="end"&&(u=e.height,h=0),this.paddingTop=u+r,this.paddingBottom=h+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){X(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e({width:r[T]||0,height:a[T]||0});return{first:M(0),last:M(e-1),widest:M(w),highest:M(C),widths:r,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return xu(this._alignToPixels?fe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:l/s:l*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:o,position:r,border:a}=s,l=o.offset,c=this.isHorizontal(),h=this.ticks.length+(l?1:0),d=Ve(o),f=[],g=a.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(U){return fe(i,U,p)};let y,x,v,_,w,C,M,T,A,O,R,st;if(r==="top")y=b(this.bottom),C=this.bottom-d,T=y-m,O=b(t.top)+m,st=t.bottom;else if(r==="bottom")y=b(this.top),O=t.top,st=b(t.bottom)-m,C=y+m,T=this.top+d;else if(r==="left")y=b(this.right),w=this.right-d,M=y-m,A=b(t.left)+m,R=t.right;else if(r==="right")y=b(this.left),A=t.left,R=b(t.right)-m,w=y+m,M=this.left+d;else if(e==="x"){if(r==="center")y=b((t.top+t.bottom)/2+.5);else if(F(r)){const U=Object.keys(r)[0],Q=r[U];y=b(this.chart.scales[U].getPixelForValue(Q))}O=t.top,st=t.bottom,C=y+m,T=C+d}else if(e==="y"){if(r==="center")y=b((t.left+t.right)/2);else if(F(r)){const U=Object.keys(r)[0],Q=r[U];y=b(this.chart.scales[U].getPixelForValue(Q))}w=y-m,M=w-d,A=t.left,R=t.right}const gt=S(s.ticks.maxTicksLimit,h),W=Math.max(1,Math.ceil(h/gt));for(x=0;xo.value===t);return s>=0?e.setContext(this.getContext(s)).lineWidth:0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,r;const a=(l,c,u)=>{!u.width||!u.color||(i.save(),i.lineWidth=u.width,i.strokeStyle=u.color,i.setLineDash(u.borderDash||[]),i.lineDashOffset=u.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(e.display)for(o=0,r=s.length;o{this.draw(o)}}]:[{z:i,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let o,r;for(o=0,r=e.length;o{const i=e.split("."),s=i.pop(),o=[n].concat(i).join("."),r=t[e].split("."),a=r.pop(),l=r.join(".");nt.route(o,s,l,a)})}function Wd(n){return"id"in n&&"defaults"in n}class Hd{constructor(){this.controllers=new Rn(Xt,"datasets",!0),this.elements=new Rn(Lt,"elements"),this.plugins=new Rn(Object,"plugins"),this.scales=new Rn(ke,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach(s=>{const o=i||this._getRegistryForType(s);i||o.isForType(s)||o===this.plugins&&s.id?this._exec(t,o,s):$(s,r=>{const a=i||this._getRegistryForType(r);this._exec(t,a,r)})})}_exec(t,e,i){const s=gs(t);X(i["before"+s],[],i),e[t](i),X(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;eo.filter(a=>!r.some(l=>a.plugin.id===l.plugin.id));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Yd(n){const t={},e=[],i=Object.keys(It.plugins.items);for(let o=0;o1&&Do(n[0].toLowerCase());if(i)return i}throw new Error(`Cannot determine type of '${n}' axis. Please provide 'axis' or 'position' option.`)}function To(n,t,e){if(e[t+"AxisID"]===n)return{axis:t}}function Gd(n,t){if(t.data&&t.data.datasets){const e=t.data.datasets.filter(i=>i.xAxisID===n||i.yAxisID===n);if(e.length)return To(n,"x",e[0])||To(n,"y",e[0])}return{}}function Qd(n,t){const e=Me[n.type]||{scales:{}},i=t.scales||{},s=Zi(n.type,t),o=Object.create(null);return Object.keys(i).forEach(r=>{const a=i[r];if(!F(a))return console.error(`Invalid scale configuration for scale: ${r}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${r}`);const l=Ji(r,a,Gd(r,n),nt.scales[a.type]),c=Xd(l,s),u=e.scales||{};o[r]=en(Object.create(null),[{axis:l},a,u[l],u[c]])}),n.data.datasets.forEach(r=>{const a=r.type||n.type,l=r.indexAxis||Zi(a,t),u=(Me[a]||{}).scales||{};Object.keys(u).forEach(h=>{const d=qd(h,l),f=r[d+"AxisID"]||d;o[f]=o[f]||Object.create(null),en(o[f],[{axis:d},i[f],u[h]])})}),Object.keys(o).forEach(r=>{const a=o[r];en(a,[nt.scales[a.type],nt.scale])}),o}function ua(n){const t=n.options||(n.options={});t.plugins=S(t.plugins,{}),t.scales=Qd(n,t)}function ha(n){return n=n||{},n.datasets=n.datasets||[],n.labels=n.labels||[],n}function Zd(n){return n=n||{},n.data=ha(n.data),ua(n),n}const So=new Map,da=new Set;function Fn(n,t){let e=So.get(n);return e||(e=t(),So.set(n,e),da.add(e)),e}const Ye=(n,t,e)=>{const i=ce(t,e);i!==void 0&&n.add(i)};class Jd{constructor(t){this._config=Zd(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=ha(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),ua(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Fn(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Fn(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Fn(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,i=this.type;return Fn(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return(!s||e)&&(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:o}=this,r=this._cachedScopes(t,i),a=r.get(e);if(a)return a;const l=new Set;e.forEach(u=>{t&&(l.add(t),u.forEach(h=>Ye(l,t,h))),u.forEach(h=>Ye(l,s,h)),u.forEach(h=>Ye(l,Me[o]||{},h)),u.forEach(h=>Ye(l,nt,h)),u.forEach(h=>Ye(l,Ki,h))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),da.has(e)&&r.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,Me[e]||{},nt.datasets[e]||{},{type:e},nt,Ki]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:r,subPrefixes:a}=Oo(this._resolverCache,t,s);let l=r;if(ef(r,e)){o.$shared=!1,i=ue(i)?i():i;const c=this.createResolver(t,i,a);l=Ee(r,i,c)}for(const c of e)o[c]=l[c];return o}createResolver(t,e,i=[""],s){const{resolver:o}=Oo(this._resolverCache,t,i);return F(e)?Ee(o,e,void 0,s):o}}function Oo(n,t,e){let i=n.get(t);i||(i=new Map,n.set(t,i));const s=e.join();let o=i.get(s);return o||(o={resolver:_s(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},i.set(s,o)),o}const tf=n=>F(n)&&Object.getOwnPropertyNames(n).reduce((t,e)=>t||ue(n[e]),!1);function ef(n,t){const{isScriptable:e,isIndexable:i}=jr(n);for(const s of t){const o=e(s),r=i(s),a=(r||o)&&n[s];if(o&&(ue(a)||tf(a))||r&&K(a))return!0}return!1}var nf="4.4.0";const sf=["top","bottom","left","right","chartArea"];function Ao(n,t){return n==="top"||n==="bottom"||sf.indexOf(n)===-1&&t==="x"}function Lo(n,t){return function(e,i){return e[n]===i[n]?e[t]-i[t]:e[n]-i[n]}}function Ro(n){const t=n.chart,e=t.options.animation;t.notifyPlugins("afterRender"),X(e&&e.onComplete,[n],t)}function of(n){const t=n.chart,e=t.options.animation;X(e&&e.onProgress,[n],t)}function fa(n){return Kr()&&typeof n=="string"?n=document.getElementById(n):n&&n.length&&(n=n[0]),n&&n.canvas&&(n=n.canvas),n}const qn={},Fo=n=>{const t=fa(n);return Object.values(qn).filter(e=>e.canvas===t).pop()};function rf(n,t,e){const i=Object.keys(n);for(const s of i){const o=+s;if(o>=t){const r=n[s];delete n[s],(e>0||o>t)&&(n[o+e]=r)}}}function af(n,t,e,i){return!e||n.type==="mouseout"?null:i?t:n}function In(n,t,e){return n.options.clip?n[e]:t[e]}function lf(n,t){const{xScale:e,yScale:i}=n;return e&&i?{left:In(e,t,"left"),right:In(e,t,"right"),top:In(i,t,"top"),bottom:In(i,t,"bottom")}:t}class mt{static register(...t){It.add(...t),Io()}static unregister(...t){It.remove(...t),Io()}constructor(t,e){const i=this.config=new Jd(e),s=fa(t),o=Fo(s);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const r=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||kd(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,r.aspectRatio),l=a&&a.canvas,c=l&&l.height,u=l&&l.width;if(this.id=lu(),this.ctx=a,this.canvas=l,this.width=u,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Vd,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=ku(h=>this.update(h),r.resizeDelay||0),this._dataChanges=[],qn[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}Yt.listen(this,"complete",Ro),Yt.listen(this,"progress",of),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:o}=this;return H(t)?e&&o?o:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return It}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():eo(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Zs(this.canvas,this.ctx),this}stop(){return Yt.stop(this),this}resize(t,e){Yt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,o=i.maintainAspectRatio&&this.aspectRatio,r=this.platform.getMaximumSize(s,t,e,o),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=r.width,this.height=r.height,this._aspectRatio=this.aspectRatio,eo(this,a,!0)&&(this.notifyPlugins("resize",{size:r}),X(i.onResize,[this,r],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};$(e,(i,s)=>{i.id=s})}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce((r,a)=>(r[a]=!1,r),{});let o=[];e&&(o=o.concat(Object.keys(e).map(r=>{const a=e[r],l=Ji(r,a),c=l==="r",u=l==="x";return{options:a,dposition:c?"chartArea":u?"bottom":"left",dtype:c?"radialLinear":u?"category":"linear"}}))),$(o,r=>{const a=r.options,l=a.id,c=Ji(l,a),u=S(a.type,r.dtype);(a.position===void 0||Ao(a.position,c)!==Ao(r.dposition))&&(a.position=r.dposition),s[l]=!0;let h=null;if(l in i&&i[l].type===u)h=i[l];else{const d=It.getScale(u);h=new d({id:l,type:u,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(a,t)}),$(s,(r,a)=>{r||delete i[a]}),$(i,r=>{se.configure(this,r,r.options),se.addBox(this,r)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((s,o)=>s.index-o.index),i>e){for(let s=e;se.length&&delete this._stacks,t.forEach((i,s)=>{e.filter(o=>o===i._dataset).length===0&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let r=0;for(let c=0,u=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Lo("z","_idx"));const{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){$(this.scales,t=>{se.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!js(e,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:o}of e){const r=i==="_removeElements"?-o:o;rf(t,s,r)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=o=>new Set(t.filter(r=>r[0]===o).map((r,a)=>a+","+r.splice(1).join(","))),s=i(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;se.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],$(this.boxes,s=>{i&&s.position==="chartArea"||(s.configure&&s.configure(),this._layers.push(...s._layers()))},this),this._layers.forEach((s,o)=>{s._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,i=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,o=lf(t,this.chartArea),r={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",r)!==!1&&(s&&gi(e,{left:i.left===!1?0:o.left-i.left,right:i.right===!1?this.width:o.right+i.right,top:i.top===!1?0:o.top-i.top,bottom:i.bottom===!1?this.height:o.bottom+i.bottom}),t.controller.draw(),s&&pi(e),r.cancelable=!1,this.notifyPlugins("afterDatasetDraw",r))}isPointInArea(t){return qt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const o=id.modes[e];return typeof o=="function"?o(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter(o=>o&&o._dataset===e).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=he(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return typeof i.hidden=="boolean"?!i.hidden:!e.hidden}setDatasetVisibility(t,e){const i=this.getDatasetMeta(t);i.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",o=this.getDatasetMeta(t),r=o.controller._resolveAnimations(void 0,s);cn(e)?(o.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),r.update(o,{visible:i}),this.update(a=>a.datasetIndex===t?s:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),Yt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,r),t[o]=r},s=(o,r,a)=>{o.offsetX=r,o.offsetY=a,this._eventHandler(o)};$(this.options.events,o=>i(o,s))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},s=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let r;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",o),i("detach",r)};r=()=>{this.attached=!1,s("resize",o),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():r()}unbindEvents(){$(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},$(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let o,r,a,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+s+"DatasetHoverStyle"]()),a=0,l=t.length;a{const a=this.getDatasetMeta(o);if(!a)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:a.data[r],index:r}});!Zn(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,i){const s=this.options.hover,o=(l,c)=>l.filter(u=>!c.some(h=>u.datasetIndex===h.datasetIndex&&u.index===h.index)),r=o(e,t),a=i?t:o(t,e);r.length&&this.updateHoverStyle(r,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=r=>(r.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",i,s)===!1)return;const o=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(o||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:o}=this,r=e,a=this._getActiveElements(t,s,i,r),l=gu(t),c=af(t,this._lastEvent,i,l);i&&(this._lastEvent=null,X(o.onHover,[t,a,this],this),l&&X(o.onClick,[t,a,this],this));const u=!Zn(a,s);return(u||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=c,u}_getActiveElements(t,e,i,s){if(t.type==="mouseout")return[];if(!i)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,s)}}k(mt,"defaults",nt),k(mt,"instances",qn),k(mt,"overrides",Me),k(mt,"registry",It),k(mt,"version",nf),k(mt,"getChart",Fo);function Io(){return $(mt.instances,n=>n._plugins.invalidate())}function cf(n,t,e){const{startAngle:i,pixelMargin:s,x:o,y:r,outerRadius:a,innerRadius:l}=t;let c=s/a;n.beginPath(),n.arc(o,r,a,i-c,e+c),l>s?(c=s/l,n.arc(o,r,l,e+c,i-c,!0)):n.arc(o,r,s,e+at,i-at),n.closePath(),n.clip()}function uf(n){return ys(n,["outerStart","outerEnd","innerStart","innerEnd"])}function hf(n,t,e,i){const s=uf(n.options.borderRadius),o=(e-t)/2,r=Math.min(o,i*t/2),a=l=>{const c=(e-Math.min(o,l))*i/2;return ft(l,0,Math.min(o,c))};return{outerStart:a(s.outerStart),outerEnd:a(s.outerEnd),innerStart:ft(s.innerStart,0,r),innerEnd:ft(s.innerEnd,0,r)}}function Pe(n,t,e,i){return{x:e+n*Math.cos(t),y:i+n*Math.sin(t)}}function si(n,t,e,i,s,o){const{x:r,y:a,startAngle:l,pixelMargin:c,innerRadius:u}=t,h=Math.max(t.outerRadius+i+e-c,0),d=u>0?u+i+e+c:0;let f=0;const g=s-l;if(i){const W=u>0?u-i:0,U=h>0?h-i:0,Q=(W+U)/2,Mt=Q!==0?g*Q/(Q+i):g;f=(g-Mt)/2}const p=Math.max(.001,g*h-e/tt)/h,m=(g-p)/2,b=l+m+f,y=s-m-f,{outerStart:x,outerEnd:v,innerStart:_,innerEnd:w}=hf(t,d,h,y-b),C=h-x,M=h-v,T=b+x/C,A=y-v/M,O=d+_,R=d+w,st=b+_/O,gt=y-w/R;if(n.beginPath(),o){const W=(T+A)/2;if(n.arc(r,a,h,T,W),n.arc(r,a,h,W,A),v>0){const lt=Pe(M,A,r,a);n.arc(lt.x,lt.y,v,A,y+at)}const U=Pe(R,y,r,a);if(n.lineTo(U.x,U.y),w>0){const lt=Pe(R,gt,r,a);n.arc(lt.x,lt.y,w,y+at,gt+Math.PI)}const Q=(y-w/d+(b+_/d))/2;if(n.arc(r,a,d,y-w/d,Q,!0),n.arc(r,a,d,Q,b+_/d,!0),_>0){const lt=Pe(O,st,r,a);n.arc(lt.x,lt.y,_,st+Math.PI,b-at)}const Mt=Pe(C,b,r,a);if(n.lineTo(Mt.x,Mt.y),x>0){const lt=Pe(C,T,r,a);n.arc(lt.x,lt.y,x,b-at,T)}}else{n.moveTo(r,a);const W=Math.cos(T)*h+r,U=Math.sin(T)*h+a;n.lineTo(W,U);const Q=Math.cos(A)*h+r,Mt=Math.sin(A)*h+a;n.lineTo(Q,Mt)}n.closePath()}function df(n,t,e,i,s){const{fullCircles:o,startAngle:r,circumference:a}=t;let l=t.endAngle;if(o){si(n,t,e,i,l,s);for(let c=0;c=G||hn(r,l,c),m=$t(a,u+f,h+f);return p&&m}getCenterPoint(e){const{x:i,y:s,startAngle:o,endAngle:r,innerRadius:a,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:c,spacing:u}=this.options,h=(o+r)/2,d=(a+l+u+c)/2;return{x:i+Math.cos(h)*d,y:s+Math.sin(h)*d}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:i,circumference:s}=this,o=(i.offset||0)/4,r=(i.spacing||0)/2,a=i.circular;if(this.pixelMargin=i.borderAlign==="inner"?.33:0,this.fullCircles=s>G?Math.floor(s/G):0,s===0||this.innerRadius<0||this.outerRadius<0)return;e.save();const l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);const c=1-Math.sin(Math.min(tt,s||0)),u=o*c;e.fillStyle=i.backgroundColor,e.strokeStyle=i.borderColor,df(e,this,u,r,a),ff(e,this,u,r,a),e.restore()}}k(Ze,"id","arc"),k(Ze,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0}),k(Ze,"defaultRoutes",{backgroundColor:"backgroundColor"}),k(Ze,"descriptors",{_scriptable:!0,_indexable:e=>e!=="borderDash"});function ga(n,t,e=t){n.lineCap=S(e.borderCapStyle,t.borderCapStyle),n.setLineDash(S(e.borderDash,t.borderDash)),n.lineDashOffset=S(e.borderDashOffset,t.borderDashOffset),n.lineJoin=S(e.borderJoinStyle,t.borderJoinStyle),n.lineWidth=S(e.borderWidth,t.borderWidth),n.strokeStyle=S(e.borderColor,t.borderColor)}function gf(n,t,e){n.lineTo(e.x,e.y)}function pf(n){return n.stepped?Bu:n.tension||n.cubicInterpolationMode==="monotone"?Nu:gf}function pa(n,t,e={}){const i=n.length,{start:s=0,end:o=i-1}=e,{start:r,end:a}=t,l=Math.max(s,r),c=Math.min(o,a),u=sa&&o>a;return{count:i,start:l,loop:t.loop,ilen:c(r+(c?a-v:v))%o,x=()=>{p!==m&&(n.lineTo(u,m),n.lineTo(u,p),n.lineTo(u,b))};for(l&&(f=s[y(0)],n.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=s[y(d)],f.skip)continue;const v=f.x,_=f.y,w=v|0;w===g?(_m&&(m=_),u=(h*u+v)/++h):(x(),n.lineTo(v,_),g=w,h=0,p=m=_),b=_}x()}function ts(n){const t=n.options,e=t.borderDash&&t.borderDash.length;return!n._decimated&&!n._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?bf:mf}function yf(n){return n.stepped?yh:n.tension||n.cubicInterpolationMode==="monotone"?_h:ye}function _f(n,t,e,i){let s=t._path;s||(s=t._path=new Path2D,t.path(s,e,i)&&s.closePath()),ga(n,t.options),n.stroke(s)}function xf(n,t,e,i){const{segments:s,options:o}=t,r=ts(t);for(const a of s)ga(n,o,a.style),n.beginPath(),r(n,t,a,{start:e,end:e+i-1})&&n.closePath(),n.stroke()}const vf=typeof Path2D=="function";function wf(n,t,e,i){vf&&!t.options.segment?_f(n,t,e,i):xf(n,t,e,i)}class oe extends Lt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||i.cubicInterpolationMode==="monotone")&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;uh(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ch(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],o=this.points,r=ta(this,{property:e,start:s,end:s});if(!r.length)return;const a=[],l=yf(i);let c,u;for(c=0,u=r.length;ct!=="borderDash"&&t!=="fill"});function Eo(n,t,e,i){const s=n.options,{[e]:o}=n.getProps([e],i);return Math.abs(t-o)n.replace("rgb(","rgba(").replace(")",", 0.5)"));function ba(n){return es[n%es.length]}function ya(n){return zo[n%zo.length]}function Tf(n,t){return n.borderColor=ba(t),n.backgroundColor=ya(t),++t}function Sf(n,t){return n.backgroundColor=n.data.map(()=>ba(t++)),t}function Of(n,t){return n.backgroundColor=n.data.map(()=>ya(t++)),t}function Af(n){let t=0;return(e,i)=>{const s=n.getDatasetMeta(i).controller;s instanceof Le?t=Sf(e,t):s instanceof Un?t=Of(e,t):s&&(t=Tf(e,t))}}function Bo(n){let t;for(t in n)if(n[t].borderColor||n[t].backgroundColor)return!0;return!1}function Lf(n){return n&&(n.borderColor||n.backgroundColor)}var Rf={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(n,t,e){if(!e.enabled)return;const{data:{datasets:i},options:s}=n.config,{elements:o}=s;if(!e.forceOverride&&(Bo(i)||Lf(s)||o&&Bo(o)))return;const r=Af(n);i.forEach(r)}};function Ff(n,t,e){const i=n.segments,s=n.points,o=t.points,r=[];for(const a of i){let{start:l,end:c}=a;c=ks(l,c,s);const u=ns(e,s[l],s[c],a.loop);if(!t.segments){r.push({source:a,target:u,start:s[l],end:s[c]});continue}const h=ta(t,u);for(const d of h){const f=ns(e,o[d.start],o[d.end],d.loop),g=Jr(a,s,f);for(const p of g)r.push({source:p,target:d,start:{[e]:No(u,f,"start",Math.max)},end:{[e]:No(u,f,"end",Math.min)}})}}return r}function ns(n,t,e,i){if(i)return;let s=t[n],o=e[n];return n==="angle"&&(s=Dt(s),o=Dt(o)),{property:n,start:s,end:o}}function If(n,t){const{x:e=null,y:i=null}=n||{},s=t.points,o=[];return t.segments.forEach(({start:r,end:a})=>{a=ks(r,a,s);const l=s[r],c=s[a];i!==null?(o.push({x:l.x,y:i}),o.push({x:c.x,y:i})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function ks(n,t,e){for(;t>n;t--){const i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function No(n,t,e,i){return n&&t?i(n[e],t[e]):n?n[e]:t?t[e]:0}function _a(n,t){let e=[],i=!1;return K(n)?(i=!0,e=n):e=If(n,t),e.length?new oe({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function Wo(n){return n&&n.fill!==!1}function Ef(n,t,e){let s=n[t].fill;const o=[t];let r;if(!e)return s;for(;s!==!1&&o.indexOf(s)===-1;){if(!et(s))return s;if(r=n[s],!r)return!1;if(r.visible)return s;o.push(s),s=r.fill}return!1}function zf(n,t,e){const i=Hf(n);if(F(i))return isNaN(i.value)?!1:i;let s=parseFloat(i);return et(s)&&Math.floor(s)===s?Bf(i[0],t,s,e):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Bf(n,t,e,i){return(n==="-"||n==="+")&&(e=t+e),e===t||e<0||e>=i?!1:e}function Nf(n,t){let e=null;return n==="start"?e=t.bottom:n==="end"?e=t.top:F(n)?e=t.getPixelForValue(n.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Wf(n,t,e){let i;return n==="start"?i=e:n==="end"?i=t.options.reverse?t.min:t.max:F(n)?i=n.value:i=t.getBaseValue(),i}function Hf(n){const t=n.options,e=t.fill;let i=S(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?"origin":i}function Vf(n){const{scale:t,index:e,line:i}=n,s=[],o=i.segments,r=i.points,a=Yf(t,e);a.push(_a({x:null,y:t.bottom},i));for(let l=0;l=0;--r){const a=s[r].$filler;a&&(a.line.updateControlPoints(o,a.axis),i&&a.fill&&Ri(n.ctx,a,o))}},beforeDatasetsDraw(n,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const i=n.getSortedVisibleDatasetMetas();for(let s=i.length-1;s>=0;--s){const o=i[s].$filler;Wo(o)&&Ri(n.ctx,o,n.chartArea)}},beforeDatasetDraw(n,t,e){const i=t.meta.$filler;!Wo(i)||e.drawTime!=="beforeDatasetDraw"||Ri(n.ctx,i,n.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const jo=(n,t)=>{let{boxHeight:e=t,boxWidth:i=t}=n;return n.usePointStyle&&(e=Math.min(e,t),i=n.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},tg=(n,t)=>n!==null&&t!==null&&n.datasetIndex===t.datasetIndex&&n.index===t.index;class Uo extends Lt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=X(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,s)=>t.sort(i,s,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const i=t.labels,s=ut(i.font),o=s.size,r=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=jo(i,o);let c,u;e.font=s.string,this.isHorizontal()?(c=this.maxWidth,u=this._fitRows(r,o,a,l)+10):(u=this.maxHeight,c=this._fitCols(r,s,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(u,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:o,maxWidth:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],u=s+a;let h=t;o.textAlign="left",o.textBaseline="middle";let d=-1,f=-u;return this.legendItems.forEach((g,p)=>{const m=i+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*a>r)&&(h+=u,c[c.length-(p>0?0:1)]=0,f+=u,d++),l[p]={left:0,top:f,row:d,width:m,height:s},c[c.length-1]+=m+a}),h}_fitCols(t,e,i,s){const{ctx:o,maxHeight:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],u=r-t;let h=a,d=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{const{itemWidth:y,itemHeight:x}=eg(i,e,o,m,s);b>0&&f+x+2*a>u&&(h+=d+a,c.push({width:d,height:f}),g+=d+a,p++,d=f=0),l[b]={left:g,top:f,col:p,width:y,height:x},d=Math.max(d,y),f+=x+a}),h+=d,c.push({width:d,height:f}),h}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,r=Fe(o,this.left,this.width);if(this.isHorizontal()){let a=0,l=kt(i,this.left+s,this.right-this.lineWidths[a]);for(const c of e)a!==c.row&&(a=c.row,l=kt(i,this.left+s,this.right-this.lineWidths[a])),c.top+=this.top+t+s,c.left=r.leftForLtr(r.x(l),c.width),l+=c.width+s}else{let a=0,l=kt(i,this.top+t+s,this.bottom-this.columnSizes[a].height);for(const c of e)c.col!==a&&(a=c.col,l=kt(i,this.top+t+s,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+s,c.left=r.leftForLtr(r.x(c.left),c.width),l+=c.height+s}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;gi(t,this),this._draw(),pi(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:o,labels:r}=t,a=nt.color,l=Fe(t.rtl,this.left,this.width),c=ut(r.font),{padding:u}=r,h=c.size,d=h/2;let f;this.drawTitle(),s.textAlign=l.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=jo(r,h),b=function(w,C,M){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const T=S(M.lineWidth,1);if(s.fillStyle=S(M.fillStyle,a),s.lineCap=S(M.lineCap,"butt"),s.lineDashOffset=S(M.lineDashOffset,0),s.lineJoin=S(M.lineJoin,"miter"),s.lineWidth=T,s.strokeStyle=S(M.strokeStyle,a),s.setLineDash(S(M.lineDash,[])),r.usePointStyle){const A={radius:p*Math.SQRT2/2,pointStyle:M.pointStyle,rotation:M.rotation,borderWidth:T},O=l.xPlus(w,g/2),R=C+d;Vr(s,A,O,R,r.pointStyleWidth&&g)}else{const A=C+Math.max((h-p)/2,0),O=l.leftForLtr(w,g),R=ve(M.borderRadius);s.beginPath(),Object.values(R).some(st=>st!==0)?dn(s,{x:O,y:A,w:g,h:p,radius:R}):s.rect(O,A,g,p),s.fill(),T!==0&&s.stroke()}s.restore()},y=function(w,C,M){Ie(s,M.text,w,C+m/2,c,{strikethrough:M.hidden,textAlign:l.textAlign(M.textAlign)})},x=this.isHorizontal(),v=this._computeTitleHeight();x?f={x:kt(o,this.left+u,this.right-i[0]),y:this.top+u+v,line:0}:f={x:this.left+u,y:kt(o,this.top+v+u,this.bottom-e[0].height),line:0},Gr(this.ctx,t.textDirection);const _=m+u;this.legendItems.forEach((w,C)=>{s.strokeStyle=w.fontColor,s.fillStyle=w.fontColor;const M=s.measureText(w.text).width,T=l.textAlign(w.textAlign||(w.textAlign=r.textAlign)),A=g+d+M;let O=f.x,R=f.y;l.setWidth(this.width),x?C>0&&O+A+u>this.right&&(R=f.y+=_,f.line++,O=f.x=kt(o,this.left+u,this.right-i[f.line])):C>0&&R+_>this.bottom&&(O=f.x=O+e[f.line].width+u,f.line++,R=f.y=kt(o,this.top+v+u,this.bottom-e[f.line].height));const st=l.x(O);if(b(st,R,w),O=Cu(T,O+g+d,x?O+A:this.right,t.rtl),y(l.x(O),R,w),x)f.x+=A+u;else if(typeof w.text!="string"){const gt=c.lineHeight;f.y+=va(w,gt)+u}else f.y+=_}),Qr(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=ut(e.font),s=yt(e.padding);if(!e.display)return;const o=Fe(t.rtl,this.left,this.width),r=this.ctx,a=e.position,l=i.size/2,c=s.top+l;let u,h=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),u=this.top+c,h=kt(t.align,h,this.right-d);else{const g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);u=c+kt(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}const f=kt(a,h,h+d);r.textAlign=o.textAlign(Wr(a)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,Ie(r,e.text,f,u,i)}_computeTitleHeight(){const t=this.options.title,e=ut(t.font),i=yt(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,o;if($t(t,this.left,this.right)&&$t(e,this.top,this.bottom)){for(o=this.legendHitBoxes,i=0;io.length>r.length?o:r)),t+e.size/2+i.measureText(s).width}function ig(n,t,e){let i=n;return typeof t.text!="string"&&(i=va(t,e)),i}function va(n,t){const e=n.text?n.text.length:0;return t*e}function sg(n,t){return!!((n==="mousemove"||n==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(n==="click"||n==="mouseup"))}var og={id:"legend",_element:Uo,start(n,t,e){const i=n.legend=new Uo({ctx:n.ctx,options:e,chart:n});se.configure(n,i,e),se.addBox(n,i)},stop(n){se.removeBox(n,n.legend),delete n.legend},beforeUpdate(n,t,e){const i=n.legend;se.configure(n,i,e),i.options=e},afterUpdate(n){const t=n.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(n,t){t.replay||n.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(n,t,e){const i=t.datasetIndex,s=e.chart;s.isDatasetVisible(i)?(s.hide(i),t.hidden=!0):(s.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:n=>n.chart.options.color,boxWidth:40,padding:10,generateLabels(n){const t=n.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:s,color:o,useBorderRadius:r,borderRadius:a}}=n.legend.options;return n._getSortedDatasetMetas().map(l=>{const c=l.controller.getStyle(e?0:void 0),u=yt(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(u.width+u.height)/4,strokeStyle:c.borderColor,pointStyle:i||c.pointStyle,rotation:c.rotation,textAlign:s||c.textAlign,borderRadius:r&&(a||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:n=>n.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:n=>!n.startsWith("on"),labels:{_scriptable:n=>!["generateLabels","filter","sort"].includes(n)}}};const Je={average(n){if(!n.length)return!1;let t,e,i=0,s=0,o=0;for(t=0,e=n.length;t-1?n.split(` -`):n}function rg(n,t){const{element:e,datasetIndex:i,index:s}=t,o=n.getDatasetMeta(i).controller,{label:r,value:a}=o.getLabelAndValue(s);return{chart:n,label:r,parsed:o.getParsed(s),raw:n.data.datasets[i].data[s],formattedValue:a,dataset:o.getDataset(),dataIndex:s,datasetIndex:i,element:e}}function $o(n,t){const e=n.chart.ctx,{body:i,footer:s,title:o}=n,{boxWidth:r,boxHeight:a}=t,l=ut(t.bodyFont),c=ut(t.titleFont),u=ut(t.footerFont),h=o.length,d=s.length,f=i.length,g=yt(t.padding);let p=g.height,m=0,b=i.reduce((v,_)=>v+_.before.length+_.lines.length+_.after.length,0);if(b+=n.beforeBody.length+n.afterBody.length,h&&(p+=h*c.lineHeight+(h-1)*t.titleSpacing+t.titleMarginBottom),b){const v=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;p+=f*v+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}d&&(p+=t.footerMarginTop+d*u.lineHeight+(d-1)*t.footerSpacing);let y=0;const x=function(v){m=Math.max(m,e.measureText(v).width+y)};return e.save(),e.font=c.string,$(n.title,x),e.font=l.string,$(n.beforeBody.concat(n.afterBody),x),y=t.displayColors?r+2+t.boxPadding:0,$(i,v=>{$(v.before,x),$(v.lines,x),$(v.after,x)}),y=0,e.font=u.string,$(n.footer,x),e.restore(),m+=g.width,{width:m,height:p}}function ag(n,t){const{y:e,height:i}=t;return en.height-i/2?"bottom":"center"}function lg(n,t,e,i){const{x:s,width:o}=i,r=e.caretSize+e.caretPadding;if(n==="left"&&s+o+r>t.width||n==="right"&&s-o-r<0)return!0}function cg(n,t,e,i){const{x:s,width:o}=e,{width:r,chartArea:{left:a,right:l}}=n;let c="center";return i==="center"?c=s<=(a+l)/2?"left":"right":s<=o/2?c="left":s>=r-o/2&&(c="right"),lg(c,n,t,e)&&(c="center"),c}function qo(n,t,e){const i=e.yAlign||t.yAlign||ag(n,e);return{xAlign:e.xAlign||t.xAlign||cg(n,t,e,i),yAlign:i}}function ug(n,t){let{x:e,width:i}=n;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function hg(n,t,e){let{y:i,height:s}=n;return t==="top"?i+=e:t==="bottom"?i-=s+e:i-=s/2,i}function Xo(n,t,e,i){const{caretSize:s,caretPadding:o,cornerRadius:r}=n,{xAlign:a,yAlign:l}=e,c=s+o,{topLeft:u,topRight:h,bottomLeft:d,bottomRight:f}=ve(r);let g=ug(t,a);const p=hg(t,l,c);return l==="center"?a==="left"?g+=c:a==="right"&&(g-=c):a==="left"?g-=Math.max(u,d)+s:a==="right"&&(g+=Math.max(h,f)+s),{x:ft(g,0,i.width-t.width),y:ft(p,0,i.height-t.height)}}function En(n,t,e){const i=yt(e.padding);return t==="center"?n.x+n.width/2:t==="right"?n.x+n.width-i.right:n.x+i.left}function Ko(n){return Ft([],jt(n))}function dg(n,t,e){return he(n,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Go(n,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?n.override(e):n}const wa={beforeTitle:Wt,title(n){if(n.length>0){const t=n[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex"u"?wa[t].call(e,i):s}class is extends Lt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,o=new ea(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=dg(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:i}=e,s=_t(i,"beforeTitle",this,t),o=_t(i,"title",this,t),r=_t(i,"afterTitle",this,t);let a=[];return a=Ft(a,jt(s)),a=Ft(a,jt(o)),a=Ft(a,jt(r)),a}getBeforeBody(t,e){return Ko(_t(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:i}=e,s=[];return $(t,o=>{const r={before:[],lines:[],after:[]},a=Go(i,o);Ft(r.before,jt(_t(a,"beforeLabel",this,o))),Ft(r.lines,_t(a,"label",this,o)),Ft(r.after,jt(_t(a,"afterLabel",this,o))),s.push(r)}),s}getAfterBody(t,e){return Ko(_t(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=_t(i,"beforeFooter",this,t),o=_t(i,"footer",this,t),r=_t(i,"afterFooter",this,t);let a=[];return a=Ft(a,jt(s)),a=Ft(a,jt(o)),a=Ft(a,jt(r)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],o=[],r=[];let a=[],l,c;for(l=0,c=e.length;lt.filter(u,h,d,i))),t.itemSort&&(a=a.sort((u,h)=>t.itemSort(u,h,i))),$(a,u=>{const h=Go(t.callbacks,u);s.push(_t(h,"labelColor",this,u)),o.push(_t(h,"labelPointStyle",this,u)),r.push(_t(h,"labelTextColor",this,u))}),this.labelColors=s,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let o,r=[];if(!s.length)this.opacity!==0&&(o={opacity:0});else{const a=Je[i.position].call(this,s,this._eventPosition);r=this._createItems(i),this.title=this.getTitle(r,i),this.beforeBody=this.getBeforeBody(r,i),this.body=this.getBody(r,i),this.afterBody=this.getAfterBody(r,i),this.footer=this.getFooter(r,i);const l=this._size=$o(this,i),c=Object.assign({},a,l),u=qo(this.chart,i,c),h=Xo(i,c,u,this.chart);this.xAlign=u.xAlign,this.yAlign=u.yAlign,o={opacity:1,x:h.x,y:h.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const o=this.getCaretPosition(t,i,s);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:o}=this,{caretSize:r,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:u,bottomRight:h}=ve(a),{x:d,y:f}=t,{width:g,height:p}=e;let m,b,y,x,v,_;return o==="center"?(v=f+p/2,s==="left"?(m=d,b=m-r,x=v+r,_=v-r):(m=d+g,b=m+r,x=v-r,_=v+r),y=m):(s==="left"?b=d+Math.max(l,u)+r:s==="right"?b=d+g-Math.max(c,h)-r:b=this.caretX,o==="top"?(x=f,v=x-r,m=b-r,y=b+r):(x=f+p,v=x+r,m=b+r,y=b-r),_=x),{x1:m,x2:b,x3:y,y1:x,y2:v,y3:_}}drawTitle(t,e,i){const s=this.title,o=s.length;let r,a,l;if(o){const c=Fe(i.rtl,this.x,this.width);for(t.x=En(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline="middle",r=ut(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=r.string,l=0;ly!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,dn(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),dn(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=r.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:u}=i,h=ut(i.bodyFont);let d=h.lineHeight,f=0;const g=Fe(i.rtl,this.x,this.width),p=function(M){e.fillText(M,g.x(t.x+f),t.y+d/2),t.y+=d+o},m=g.textAlign(r);let b,y,x,v,_,w,C;for(e.textAlign=r,e.textBaseline="middle",e.font=h.string,t.x=En(this,m,i),e.fillStyle=i.bodyColor,$(this.beforeBody,p),f=a&&m!=="right"?r==="center"?c/2+u:c+2+u:0,v=0,w=s.length;v0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,o=i&&i.y;if(s||o){const r=Je[t.position].call(this,this._active,this._eventPosition);if(!r)return;const a=this._size=$o(this,t),l=Object.assign({},r,this._size),c=qo(e,t,l),u=Xo(t,l,c,e);(s._to!==u.x||o._to!==u.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,u))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const r=yt(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,s,e),Gr(t,e.textDirection),o.y+=r.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),Qr(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map(({datasetIndex:a,index:l})=>{const c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!Zn(i,s),r=this._positionChanged(s,e);(o||r)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,o=this._active||[],r=this._getActiveElements(t,o,e,i),a=this._positionChanged(r,t),l=e||!Zn(r,o)||a;return l&&(this._active=r,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,s){const o=this.options;if(t.type==="mouseout")return[];if(!s)return e;const r=this.chart.getElementsAtEventForMode(t,o.mode,o,i);return o.reverse&&r.reverse(),r}_positionChanged(t,e){const{caretX:i,caretY:s,options:o}=this,r=Je[o.position].call(this,t,e);return r!==!1&&(i!==r.x||s!==r.y)}}k(is,"positioners",Je);var fg={id:"tooltip",_element:is,positioners:Je,afterInit(n,t,e){e&&(n.tooltip=new is({chart:n,options:e}))},beforeUpdate(n,t,e){n.tooltip&&n.tooltip.initialize(e)},reset(n,t,e){n.tooltip&&n.tooltip.initialize(e)},afterDraw(n){const t=n.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(n.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(n.ctx),n.notifyPlugins("afterTooltipDraw",e)}},afterEvent(n,t){if(n.tooltip){const e=t.replay;n.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(n,t)=>t.bodyFont.size,boxWidth:(n,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:wa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:n=>n!=="filter"&&n!=="itemSort"&&n!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const gg=(n,t,e,i)=>(typeof t=="string"?(e=n.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function pg(n,t,e,i){const s=n.indexOf(t);if(s===-1)return gg(n,t,e,i);const o=n.lastIndexOf(t);return s!==o?e:s}const mg=(n,t)=>n===null?null:ft(Math.round(n),0,t);function Qo(n){const t=this.getLabels();return n>=0&&ne.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}k(ss,"id","category"),k(ss,"defaults",{ticks:{callback:Qo}});function bg(n,t){const e=[],{bounds:s,step:o,min:r,max:a,precision:l,count:c,maxTicks:u,maxDigits:h,includeBounds:d}=n,f=o||1,g=u-1,{min:p,max:m}=t,b=!H(r),y=!H(a),x=!H(c),v=(m-p)/(h+1);let _=$s((m-p)/g/f)*f,w,C,M,T;if(_<1e-14&&!b&&!y)return[{value:p},{value:m}];T=Math.ceil(m/_)-Math.floor(p/_),T>g&&(_=$s(T*_/g/f)*f),H(l)||(w=Math.pow(10,l),_=Math.ceil(_*w)/w),s==="ticks"?(C=Math.floor(p/_)*_,M=Math.ceil(m/_)*_):(C=p,M=m),b&&y&&o&&yu((a-r)/o,_/1e3)?(T=Math.round(Math.min((a-r)/_,u)),_=(a-r)/T,C=r,M=a):x?(C=b?r:C,M=y?a:M,T=c-1,_=(M-C)/T):(T=(M-C)/_,nn(T,Math.round(T),_/1e3)?T=Math.round(T):T=Math.ceil(T));const A=Math.max(qs(_),qs(C));w=Math.pow(10,H(l)?A:l),C=Math.round(C*w)/w,M=Math.round(M*w)/w;let O=0;for(b&&(d&&C!==r?(e.push({value:r}),Ca)break;e.push({value:R})}return y&&d&&M!==a?e.length&&nn(e[e.length-1].value,a,Zo(a,v,n))?e[e.length-1].value=a:e.push({value:a}):(!y||M===a)&&e.push({value:M}),e}function Zo(n,t,{horizontal:e,minRotation:i}){const s=At(i),o=(e?Math.sin(s):Math.cos(s))||.001,r=.75*t*(""+n).length;return Math.min(t/o,r)}class oi extends ke{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return H(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:o}=this;const r=l=>s=e?s:l,a=l=>o=i?o:l;if(t){const l=Bt(s),c=Bt(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(s===o){let l=o===0?1:Math.abs(o*.05);a(o+l),t||r(s-l)}this.min=s,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:i}=t,s;return i?(s=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,s>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${s} ticks. Limiting to 1000.`),s=1e3)):(s=this.computeTickLimit(),e=e||11),e&&(s=Math.min(e,s)),s}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,r=bg(s,o);return t.bounds==="ticks"&&Fr(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return _n(t,this.chart.options.locale,this.options.ticks.format)}}class os extends oi{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=et(t)?t:0,this.max=et(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=At(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/s))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}k(os,"id","linear"),k(os,"defaults",{ticks:{callback:fi.formatters.numeric}});const gn=n=>Math.floor(ie(n)),pe=(n,t)=>Math.pow(10,gn(n)+t);function Jo(n){return n/Math.pow(10,gn(n))===1}function tr(n,t,e){const i=Math.pow(10,e),s=Math.floor(n/i);return Math.ceil(t/i)-s}function yg(n,t){const e=t-n;let i=gn(e);for(;tr(n,t,i)>10;)i++;for(;tr(n,t,i)<10;)i--;return Math.min(i,gn(n))}function _g(n,{min:t,max:e}){t=Pt(n.min,t);const i=[],s=gn(t);let o=yg(t,e),r=o<0?Math.pow(10,Math.abs(o)):1;const a=Math.pow(10,o),l=s>o?Math.pow(10,s):0,c=Math.round((t-l)*r)/r,u=Math.floor((t-l)/a/10)*a*10;let h=Math.floor((c-u)/Math.pow(10,o)),d=Pt(n.min,Math.round((l+u+h*Math.pow(10,o))*r)/r);for(;d=10?h=h<15?15:20:h++,h>=20&&(o++,h=2,r=o>=0?1:r),d=Math.round((l+u+h*Math.pow(10,o))*r)/r;const f=Pt(n.max,d);return i.push({value:f,major:Jo(f),significand:h}),i}class er extends ke{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=oi.prototype.parse.apply(this,[t,e]);if(i===0){this._zero=!0;return}return et(i)&&i>0?i:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=et(t)?Math.max(0,t):null,this.max=et(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!et(this._userMin)&&(this.min=t===pe(this.min,0)?pe(this.min,-1):pe(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const o=a=>i=t?i:a,r=a=>s=e?s:a;i===s&&(i<=0?(o(1),r(10)):(o(pe(i,-1)),r(pe(s,1)))),i<=0&&o(pe(s,-1)),s<=0&&r(pe(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},i=_g(e,this);return t.bounds==="ticks"&&Fr(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":_n(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=ie(t),this._valueRange=ie(this.max)-ie(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(ie(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}k(er,"id","logarithmic"),k(er,"defaults",{ticks:{callback:fi.formatters.logarithmic,major:{enabled:!0}}});function rs(n){const t=n.ticks;if(t.display&&n.display){const e=yt(t.backdropPadding);return S(t.font&&t.font.size,nt.font.size)+e.height}return 0}function xg(n,t,e){return e=K(e)?e:[e],{w:zu(n,t.string,e),h:e.length*t.lineHeight}}function nr(n,t,e,i,s){return n===i||n===s?{start:t-e/2,end:t+e/2}:ns?{start:t-e,end:t}:{start:t,end:t+e}}function vg(n){const t={l:n.left+n._padding.left,r:n.right-n._padding.right,t:n.top+n._padding.top,b:n.bottom-n._padding.bottom},e=Object.assign({},t),i=[],s=[],o=n._pointLabels.length,r=n.options.pointLabels,a=r.centerPointLabels?tt/o:0;for(let l=0;lt.r&&(a=(i.end-t.r)/o,n.r=Math.max(n.r,t.r+a)),s.startt.b&&(l=(s.end-t.b)/r,n.b=Math.max(n.b,t.b+l))}function Mg(n,t,e){const i=n.drawingArea,{extra:s,additionalAngle:o,padding:r,size:a}=e,l=n.getPointPosition(t,i+s+r,o),c=Math.round(ps(Dt(l.angle+at))),u=Tg(l.y,a.h,c),h=Pg(c),d=Dg(l.x,a.w,h);return{visible:!0,x:l.x,y:u,textAlign:h,left:d,top:u,right:d+a.w,bottom:u+a.h}}function kg(n,t){if(!t)return!0;const{left:e,top:i,right:s,bottom:o}=n;return!(qt({x:e,y:i},t)||qt({x:e,y:o},t)||qt({x:s,y:i},t)||qt({x:s,y:o},t))}function Cg(n,t,e){const i=[],s=n._pointLabels.length,o=n.options,{centerPointLabels:r,display:a}=o.pointLabels,l={extra:rs(o)/2,additionalAngle:r?tt/s:0};let c;for(let u=0;u270||e<90)&&(n-=t),n}function Sg(n,t,e){const{left:i,top:s,right:o,bottom:r}=e,{backdropColor:a}=t;if(!H(a)){const l=ve(t.borderRadius),c=yt(t.backdropPadding);n.fillStyle=a;const u=i-c.left,h=s-c.top,d=o-i+c.width,f=r-s+c.height;Object.values(l).some(g=>g!==0)?(n.beginPath(),dn(n,{x:u,y:h,w:d,h:f,radius:l}),n.fill()):n.fillRect(u,h,d,f)}}function Og(n,t){const{ctx:e,options:{pointLabels:i}}=n;for(let s=t-1;s>=0;s--){const o=n._pointLabelItems[s];if(!o.visible)continue;const r=i.setContext(n.getPointLabelContext(s));Sg(e,r,o);const a=ut(r.font),{x:l,y:c,textAlign:u}=o;Ie(e,n._pointLabels[s],l,c+a.lineHeight/2,a,{color:r.color,textAlign:u,textBaseline:"middle"})}}function Ma(n,t,e,i){const{ctx:s}=n;if(e)s.arc(n.xCenter,n.yCenter,t,0,G);else{let o=n.getPointPosition(0,t);s.moveTo(o.x,o.y);for(let r=1;r{const s=X(this.options.pointLabels.callback,[e,i],this);return s||s===0?s:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){const t=this.options;t.display&&t.pointLabels.display?vg(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){const e=G/(this._pointLabels.length||1),i=this.options.startAngle||0;return Dt(t*e+At(i))}getDistanceFromCenterForValue(t){if(H(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(H(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(h!==0){l=this.getDistanceFromCenterForValue(u.value);const d=this.getContext(h),f=s.setContext(d),g=o.setContext(d);Ag(this,f,l,r,g)}}),i.display){for(t.save(),a=r-1;a>=0;a--){const u=i.setContext(this.getPointLabelContext(a)),{color:h,lineWidth:d}=u;!d||!h||(t.lineWidth=d,t.strokeStyle=h,t.setLineDash(u.borderDash),t.lineDashOffset=u.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),c=this.getPointPosition(a,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let o,r;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;const c=i.setContext(this.getContext(l)),u=ut(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=u.string,r=t.measureText(a.label).width,t.fillStyle=c.backdropColor;const h=yt(c.backdropPadding);t.fillRect(-r/2-h.left,-o-u.size/2-h.top,r+h.width,u.size+h.height)}Ie(t,a.label,0,-o,u,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}k(zn,"id","radialLinear"),k(zn,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:fi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),k(zn,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),k(zn,"descriptors",{angleLines:{_fallback:"grid"}});const bi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},xt=Object.keys(bi);function ir(n,t){return n-t}function sr(n,t){if(H(t))return null;const e=n._adapter,{parser:i,round:s,isoWeekday:o}=n._parseOpts;let r=t;return typeof i=="function"&&(r=i(r)),et(r)||(r=typeof i=="string"?e.parse(r,i):e.parse(r)),r===null?null:(s&&(r=s==="week"&&(un(o)||o===!0)?e.startOf(r,"isoWeek",o):e.startOf(r,s)),+r)}function or(n,t,e,i){const s=xt.length;for(let o=xt.indexOf(n);o=xt.indexOf(e);o--){const r=xt[o];if(bi[r].common&&n._adapter.diff(s,i,r)>=t-1)return r}return xt[e?xt.indexOf(e):0]}function Fg(n){for(let t=xt.indexOf(n)+1,e=xt.length;t=t?e[i]:e[s];n[o]=!0}}function Ig(n,t,e,i){const s=n._adapter,o=+s.startOf(t[0].value,i),r=t[t.length-1].value;let a,l;for(a=o;a<=r;a=+s.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function ar(n,t,e){const i=[],s={},o=t.length;let r,a;for(r=0;r+t.value))}initOffsets(t=[]){let e=0,i=0,s,o;this.options.offset&&t.length&&(s=this.getDecimalForValue(t[0]),t.length===1?e=1-s:e=(this.getDecimalForValue(t[1])-s)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?i=o:i=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;e=ft(e,0,r),i=ft(i,0,r),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,o=s.time,r=o.unit||or(o.minUnit,e,i,this._getLabelCapacity(e)),a=S(s.ticks.stepSize,1),l=r==="week"?o.isoWeekday:!1,c=un(l)||l===!0,u={};let h=e,d,f;if(c&&(h=+t.startOf(h,"isoWeek",l)),h=+t.startOf(h,c?"day":r),t.diff(i,e,r)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+r);const g=s.ticks.source==="data"&&this.getDataTimestamps();for(d=h,f=0;d+p)}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const s=this.options.time.displayFormats,o=this._unit,r=e||s[o];return this._adapter.format(t,r)}_tickFormatFunction(t,e,i,s){const o=this.options,r=o.ticks.callback;if(r)return X(r,[t,e,i],this);const a=o.time.displayFormats,l=this._unit,c=this._majorUnit,u=l&&a[l],h=c&&a[c],d=i[e],f=c&&h&&d&&d.major;return this._adapter.format(t,s||(f?h:u))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(e=0,i=s.length;e=n[i].pos&&t<=n[s].pos&&({lo:i,hi:s}=xe(n,"pos",t)),{pos:o,time:a}=n[i],{pos:r,time:l}=n[s]):(t>=n[i].time&&t<=n[s].time&&({lo:i,hi:s}=xe(n,"time",t)),{time:o,pos:a}=n[i],{time:r,pos:l}=n[s]);const c=r-o;return c?a+(l-a)*(t-o)/c:a}class lr extends pn{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Bn(e,this.min),this._tableRange=Bn(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],o=[];let r,a,l,c,u;for(r=0,a=t.length;r=e&&c<=i&&s.push(c);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(r=0,a=s.length;rs-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return e.length&&i.length?t=this.normalize(e.concat(i)):t=e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Bn(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Bn(this._table,i*this._tableRange+this._minPos,!0)}}k(lr,"id","timeseries"),k(lr,"defaults",pn.defaults);function yi(n){return n==="sankey"?{type:"sankey",data:{datasets:[]},options:{animations:!1}}:n==="pie"?{type:"pie",data:{datasets:[]}}:n==="column"?{type:"bar",data:{labels:[],datasets:[]},options:{plugins:{tooltip:{callbacks:{label:function(t){let e=t.dataset.currency_code;return V(t.raw,e)}}}},maintainAspectRatio:!1,scales:{}}}:n==="line"?{options:{plugins:{tooltip:{callbacks:{label:function(t){let e=t.dataset.currency_code;return V(t.raw,e)}}}},maintainAspectRatio:!1,scales:{x:{type:"time",time:{tooltipFormat:"PP"}}}},type:"line",data:{labels:[],datasets:[]}}:{}}let ri=new dt("#36a2eb"),Re=new dt("#ff6384"),mn=new dt("#4bc0c0"),ka=new dt("#ff9f40"),Eg=new dt("#9966ff"),zg=new dt("#ffcd56"),Bg=new dt("#c9cbcf"),cr=0;window.theme==="dark"&&(Re.darken(.3).desaturate(.3),mn.darken(.3).desaturate(.3),ri.darken(.3).desaturate(.3),ka.darken(.3).desaturate(.3));let Fi=[Re,ka,ri,mn,Eg,zg,Bg,mn];function De(n,t){let e={borderColor:Re.rgbString(),backgroundColor:Re.rgbString()},i;switch(n){default:let o=Math.floor(cr/2)%Fi.length;i=new dt(Fi[o].rgbString()),i.lighten(.38),e={borderColor:Fi[o].hexString(),backgroundColor:i.hexString()};break;case"spent":i=new dt(ri.rgbString()),i.lighten(.38),e={borderColor:ri.rgbString(),backgroundColor:i.rgbString()};break;case"left":i=new dt(mn.rgbString()),i.lighten(.38),e={borderColor:mn.rgbString(),backgroundColor:i.rgbString()};break;case"overspent":i=new dt(Re.rgbString()),i.lighten(.22),e={borderColor:Re.rgbString(),backgroundColor:i.rgbString()};break}return cr++,t==="border"?e.borderColor:t==="background"?e.backgroundColor:"#FF0000"}let me=[],je=null,Ii=null,Ei=!1;const Ng=()=>({loading:!1,loadingAccounts:!1,accountList:[],autoConversion:!1,chartOptions:null,switchAutoConversion(){this.autoConversion=!this.autoConversion,Bc("autoConversion",this.autoConversion)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-accounts-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){console.log(s),this.drawChart(this.generateOptions(s)),this.loading=!1;return}new Nc().dashboard(n,t,null).then(r=>{this.chartData=r.data,window.store.set(e,r.data),console.log(r.data),this.drawChart(this.generateOptions(this.chartData)),this.loading=!1})},generateOptions(n){me=[];let t=yi("line");for(let e=0;e0){this.loadingAccounts=!1;return}const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-accounts-data",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){this.accountList=s,this.loadingAccounts=!1;return}const o=10;let r=0,a=0,l=[];Promise.all([bt("frontpageAccounts")]).then(c=>{r=c[0].length;for(let u in c[0]){let h=c[0];if(h.hasOwnProperty(u)){let d=h[u];new Bs().get(d,new Date(window.store.get("end"))).then(f=>{let g=f.data.data;const p={page:1,start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))};new Bs().transactions(g.id,p).then(m=>{let b=[];for(let y=0;y=o);y++){let x=m.data.data[y],v={title:x.attributes.group_title===null?"":x.attributes.group_title,id:x.id,transactions:[]};for(let _=0;_y.order-x.order),this.accountList=l,this.loadingAccounts=!1,window.store.set(e,l))})})}}})},init(){Promise.all([bt("viewRange","1M"),bt("autoConversion",!1),bt("language","en_US")]).then(n=>{this.autoConversion=n[1],Ei=!0,this.loadChart(),this.loadAccounts()}),window.store.observe("end",()=>{Ei&&(Ii=null,this.accountList=[],this.loadChart(),this.loadAccounts())}),window.store.observe("autoConversion",()=>{Ei&&(this.loadChart(),this.loadAccounts())})}});let Wg=class{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/budget/dashboard",{params:{start:i,end:s}})}},Ue=[],Nn=null,te=null,zi=!1,Te;const Hg=()=>({loading:!1,autoConversion:!1,loadChart(){if(this.loading!==!0){if(this.loading=!0,te!==null){this.drawChart(this.generateOptions(te)),this.loading=!1;return}this.getFreshData()}},drawChart(n){if(Nn!==null){Nn.data.datasets=n.data.datasets,Nn.update();return}Nn=new mt(document.querySelector("#budget-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-budgets-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){te=s,this.drawChart(this.generateOptions(te)),this.loading=!1;return}new Wg().dashboard(n,t,null).then(r=>{te=r.data,this.drawChart(this.generateOptions(te)),window.store.set(e,te),this.loading=!1})},generateOptions(n){Ue=[];let t=yi("column");t.options.locale=window.store.get("locale").replace("_","-"),t.options.plugins={tooltip:{callbacks:{title:function(e){return e.label},label:function(e){let i=e.dataset.label||"";return i&&(i+=": "),i+" "+V(e.parsed.y,Ue[e.parsed.x]??"EUR")}}}},t.data={labels:[],datasets:[{label:Te.t("firefly.spent"),data:[],borderWidth:1,stack:1,backgroundColor:De("spent","background"),borderColor:De("spent","border")},{label:Te.t("firefly.left"),data:[],borderWidth:1,stack:1,backgroundColor:De("left","background"),borderColor:De("left","border")},{label:Te.t("firefly.overspent"),data:[],borderWidth:1,stack:1,backgroundColor:De("overspent","background"),borderColor:De("overspent","border")}]};for(const e in n)if(n.hasOwnProperty(e)){let i=n[e],s=i.label+" ("+i.currency_code+")";t.data.labels.push(s),this.autoConversion&&(Ue.push(i.native_currency_code),t.data.datasets[0].data.push(parseFloat(i.native_entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(i.native_entries.left)),t.data.datasets[2].data.push(parseFloat(i.native_entries.overspent))),this.autoConversion||(Ue.push(i.currency_code),t.data.datasets[0].data.push(parseFloat(i.entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(i.entries.left)),t.data.datasets[2].data.push(parseFloat(i.entries.overspent)))}return t.options.scales={y:{ticks:{callback:function(e){return V(e,Ue[0]??"EUR")}}}},t},init(){Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{Te=new li;const t=n[1].replace("-","_");Te.locale=t,ci(Te,t).then(()=>{this.autoConversion=n[0],zi=!0,this.loading===!1&&this.loadChart()})}),window.store.observe("end",()=>{zi&&this.loading===!1&&(te=null,this.loadChart())}),window.store.observe("autoConversion",n=>{zi&&(this.autoConversion=n,this.loading===!1&&this.loadChart())})}});class Vg{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/category/dashboard",{params:{start:i,end:s}})}}let ur=[],$e=null,Se=null,Bi=!1;const Yg=()=>({loading:!1,autoConversion:!1,generateOptions(n){ur=[];let t=yi("column"),e={};for(const s in n)if(n.hasOwnProperty(s)){let o=n[s],r=o.currency_code;this.autoConversion&&(r=o.native_currency_code),e.hasOwnProperty(r)||(e[r]={name:r,yAxisID:"",data:{}},ur.push(r))}for(const s in n)if(n.hasOwnProperty(s)){let o=n[s],r=o.currency_code;this.autoConversion&&(r=o.native_currency_code);for(const a in e)if(e.hasOwnProperty(a)){let l=0;r===a&&(l=parseFloat(o.amount),""+o.currency_code,this.autoConversion&&(l=parseFloat(o.native_amount),""+o.native_currency_code)),e[a].data.hasOwnProperty(o.label)&&(e[a].data[o.label]=e[a].data[o.label]+l),e[a].data.hasOwnProperty(o.label)||(e[a].data[o.label]=l)}t.data.labels.includes(o.label)||t.data.labels.push(o.label)}let i=0;for(const s in e){let o="y"+s,r={label:s,currency_code:s,yAxisID:o,data:[]};for(const a in e[s].data)r.data.push(e[s].data[a]);t.data.datasets.push(r),t.options.scales.hasOwnProperty(o)||(t.options.scales[o]={beginAtZero:!0,type:"linear",position:i===1?"right":"left",ticks:{callback:function(a,l,c){return V(a,s)}}},i++)}return t},drawChart(n){if($e!==null){$e.options=n.options,$e.data=n.data,$e.update();return}$e=new mt(document.querySelector("#category-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-categories-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Se=s,this.drawChart(this.generateOptions(Se)),this.loading=!1;return}new Vg().dashboard(n,t,null).then(r=>{Se=r.data,this.drawChart(this.generateOptions(r.data)),window.store.set(e,Se),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,Se!==null){this.drawChart(this.generateOptions(Se)),this.loading=!1;return}this.getFreshData()}},init(){Promise.all([bt("autoConversion",!1)]).then(n=>{this.autoConversion=n[0],Bi=!0,this.loadChart()}),window.store.observe("end",()=>{Bi&&(this.chartData=null,this.loadChart())}),window.store.observe("autoConversion",n=>{Bi&&(this.autoConversion=n,this.loadChart())})}});let jg=class{get(t){return vt.get("/api/v2/transactions",{params:t})}};/*! +`):n}function rg(n,t){const{element:e,datasetIndex:i,index:s}=t,o=n.getDatasetMeta(i).controller,{label:r,value:a}=o.getLabelAndValue(s);return{chart:n,label:r,parsed:o.getParsed(s),raw:n.data.datasets[i].data[s],formattedValue:a,dataset:o.getDataset(),dataIndex:s,datasetIndex:i,element:e}}function $o(n,t){const e=n.chart.ctx,{body:i,footer:s,title:o}=n,{boxWidth:r,boxHeight:a}=t,l=ut(t.bodyFont),c=ut(t.titleFont),u=ut(t.footerFont),h=o.length,d=s.length,f=i.length,g=yt(t.padding);let p=g.height,m=0,b=i.reduce((v,_)=>v+_.before.length+_.lines.length+_.after.length,0);if(b+=n.beforeBody.length+n.afterBody.length,h&&(p+=h*c.lineHeight+(h-1)*t.titleSpacing+t.titleMarginBottom),b){const v=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;p+=f*v+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}d&&(p+=t.footerMarginTop+d*u.lineHeight+(d-1)*t.footerSpacing);let y=0;const x=function(v){m=Math.max(m,e.measureText(v).width+y)};return e.save(),e.font=c.string,$(n.title,x),e.font=l.string,$(n.beforeBody.concat(n.afterBody),x),y=t.displayColors?r+2+t.boxPadding:0,$(i,v=>{$(v.before,x),$(v.lines,x),$(v.after,x)}),y=0,e.font=u.string,$(n.footer,x),e.restore(),m+=g.width,{width:m,height:p}}function ag(n,t){const{y:e,height:i}=t;return en.height-i/2?"bottom":"center"}function lg(n,t,e,i){const{x:s,width:o}=i,r=e.caretSize+e.caretPadding;if(n==="left"&&s+o+r>t.width||n==="right"&&s-o-r<0)return!0}function cg(n,t,e,i){const{x:s,width:o}=e,{width:r,chartArea:{left:a,right:l}}=n;let c="center";return i==="center"?c=s<=(a+l)/2?"left":"right":s<=o/2?c="left":s>=r-o/2&&(c="right"),lg(c,n,t,e)&&(c="center"),c}function qo(n,t,e){const i=e.yAlign||t.yAlign||ag(n,e);return{xAlign:e.xAlign||t.xAlign||cg(n,t,e,i),yAlign:i}}function ug(n,t){let{x:e,width:i}=n;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function hg(n,t,e){let{y:i,height:s}=n;return t==="top"?i+=e:t==="bottom"?i-=s+e:i-=s/2,i}function Xo(n,t,e,i){const{caretSize:s,caretPadding:o,cornerRadius:r}=n,{xAlign:a,yAlign:l}=e,c=s+o,{topLeft:u,topRight:h,bottomLeft:d,bottomRight:f}=ve(r);let g=ug(t,a);const p=hg(t,l,c);return l==="center"?a==="left"?g+=c:a==="right"&&(g-=c):a==="left"?g-=Math.max(u,d)+s:a==="right"&&(g+=Math.max(h,f)+s),{x:ft(g,0,i.width-t.width),y:ft(p,0,i.height-t.height)}}function En(n,t,e){const i=yt(e.padding);return t==="center"?n.x+n.width/2:t==="right"?n.x+n.width-i.right:n.x+i.left}function Ko(n){return Ft([],jt(n))}function dg(n,t,e){return he(n,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Go(n,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?n.override(e):n}const wa={beforeTitle:Wt,title(n){if(n.length>0){const t=n[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex"u"?wa[t].call(e,i):s}class is extends Lt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,o=new ea(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=dg(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:i}=e,s=_t(i,"beforeTitle",this,t),o=_t(i,"title",this,t),r=_t(i,"afterTitle",this,t);let a=[];return a=Ft(a,jt(s)),a=Ft(a,jt(o)),a=Ft(a,jt(r)),a}getBeforeBody(t,e){return Ko(_t(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:i}=e,s=[];return $(t,o=>{const r={before:[],lines:[],after:[]},a=Go(i,o);Ft(r.before,jt(_t(a,"beforeLabel",this,o))),Ft(r.lines,_t(a,"label",this,o)),Ft(r.after,jt(_t(a,"afterLabel",this,o))),s.push(r)}),s}getAfterBody(t,e){return Ko(_t(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=_t(i,"beforeFooter",this,t),o=_t(i,"footer",this,t),r=_t(i,"afterFooter",this,t);let a=[];return a=Ft(a,jt(s)),a=Ft(a,jt(o)),a=Ft(a,jt(r)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],o=[],r=[];let a=[],l,c;for(l=0,c=e.length;lt.filter(u,h,d,i))),t.itemSort&&(a=a.sort((u,h)=>t.itemSort(u,h,i))),$(a,u=>{const h=Go(t.callbacks,u);s.push(_t(h,"labelColor",this,u)),o.push(_t(h,"labelPointStyle",this,u)),r.push(_t(h,"labelTextColor",this,u))}),this.labelColors=s,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let o,r=[];if(!s.length)this.opacity!==0&&(o={opacity:0});else{const a=Je[i.position].call(this,s,this._eventPosition);r=this._createItems(i),this.title=this.getTitle(r,i),this.beforeBody=this.getBeforeBody(r,i),this.body=this.getBody(r,i),this.afterBody=this.getAfterBody(r,i),this.footer=this.getFooter(r,i);const l=this._size=$o(this,i),c=Object.assign({},a,l),u=qo(this.chart,i,c),h=Xo(i,c,u,this.chart);this.xAlign=u.xAlign,this.yAlign=u.yAlign,o={opacity:1,x:h.x,y:h.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const o=this.getCaretPosition(t,i,s);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:o}=this,{caretSize:r,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:u,bottomRight:h}=ve(a),{x:d,y:f}=t,{width:g,height:p}=e;let m,b,y,x,v,_;return o==="center"?(v=f+p/2,s==="left"?(m=d,b=m-r,x=v+r,_=v-r):(m=d+g,b=m+r,x=v-r,_=v+r),y=m):(s==="left"?b=d+Math.max(l,u)+r:s==="right"?b=d+g-Math.max(c,h)-r:b=this.caretX,o==="top"?(x=f,v=x-r,m=b-r,y=b+r):(x=f+p,v=x+r,m=b+r,y=b-r),_=x),{x1:m,x2:b,x3:y,y1:x,y2:v,y3:_}}drawTitle(t,e,i){const s=this.title,o=s.length;let r,a,l;if(o){const c=Fe(i.rtl,this.x,this.width);for(t.x=En(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline="middle",r=ut(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=r.string,l=0;ly!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,dn(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),dn(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=r.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:u}=i,h=ut(i.bodyFont);let d=h.lineHeight,f=0;const g=Fe(i.rtl,this.x,this.width),p=function(M){e.fillText(M,g.x(t.x+f),t.y+d/2),t.y+=d+o},m=g.textAlign(r);let b,y,x,v,_,w,C;for(e.textAlign=r,e.textBaseline="middle",e.font=h.string,t.x=En(this,m,i),e.fillStyle=i.bodyColor,$(this.beforeBody,p),f=a&&m!=="right"?r==="center"?c/2+u:c+2+u:0,v=0,w=s.length;v0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,o=i&&i.y;if(s||o){const r=Je[t.position].call(this,this._active,this._eventPosition);if(!r)return;const a=this._size=$o(this,t),l=Object.assign({},r,this._size),c=qo(e,t,l),u=Xo(t,l,c,e);(s._to!==u.x||o._to!==u.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,u))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const r=yt(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,s,e),Gr(t,e.textDirection),o.y+=r.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),Qr(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map(({datasetIndex:a,index:l})=>{const c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!Zn(i,s),r=this._positionChanged(s,e);(o||r)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,o=this._active||[],r=this._getActiveElements(t,o,e,i),a=this._positionChanged(r,t),l=e||!Zn(r,o)||a;return l&&(this._active=r,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,s){const o=this.options;if(t.type==="mouseout")return[];if(!s)return e;const r=this.chart.getElementsAtEventForMode(t,o.mode,o,i);return o.reverse&&r.reverse(),r}_positionChanged(t,e){const{caretX:i,caretY:s,options:o}=this,r=Je[o.position].call(this,t,e);return r!==!1&&(i!==r.x||s!==r.y)}}k(is,"positioners",Je);var fg={id:"tooltip",_element:is,positioners:Je,afterInit(n,t,e){e&&(n.tooltip=new is({chart:n,options:e}))},beforeUpdate(n,t,e){n.tooltip&&n.tooltip.initialize(e)},reset(n,t,e){n.tooltip&&n.tooltip.initialize(e)},afterDraw(n){const t=n.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(n.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(n.ctx),n.notifyPlugins("afterTooltipDraw",e)}},afterEvent(n,t){if(n.tooltip){const e=t.replay;n.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(n,t)=>t.bodyFont.size,boxWidth:(n,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:wa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:n=>n!=="filter"&&n!=="itemSort"&&n!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const gg=(n,t,e,i)=>(typeof t=="string"?(e=n.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function pg(n,t,e,i){const s=n.indexOf(t);if(s===-1)return gg(n,t,e,i);const o=n.lastIndexOf(t);return s!==o?e:s}const mg=(n,t)=>n===null?null:ft(Math.round(n),0,t);function Qo(n){const t=this.getLabels();return n>=0&&ne.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}k(ss,"id","category"),k(ss,"defaults",{ticks:{callback:Qo}});function bg(n,t){const e=[],{bounds:s,step:o,min:r,max:a,precision:l,count:c,maxTicks:u,maxDigits:h,includeBounds:d}=n,f=o||1,g=u-1,{min:p,max:m}=t,b=!H(r),y=!H(a),x=!H(c),v=(m-p)/(h+1);let _=$s((m-p)/g/f)*f,w,C,M,T;if(_<1e-14&&!b&&!y)return[{value:p},{value:m}];T=Math.ceil(m/_)-Math.floor(p/_),T>g&&(_=$s(T*_/g/f)*f),H(l)||(w=Math.pow(10,l),_=Math.ceil(_*w)/w),s==="ticks"?(C=Math.floor(p/_)*_,M=Math.ceil(m/_)*_):(C=p,M=m),b&&y&&o&&yu((a-r)/o,_/1e3)?(T=Math.round(Math.min((a-r)/_,u)),_=(a-r)/T,C=r,M=a):x?(C=b?r:C,M=y?a:M,T=c-1,_=(M-C)/T):(T=(M-C)/_,nn(T,Math.round(T),_/1e3)?T=Math.round(T):T=Math.ceil(T));const A=Math.max(qs(_),qs(C));w=Math.pow(10,H(l)?A:l),C=Math.round(C*w)/w,M=Math.round(M*w)/w;let O=0;for(b&&(d&&C!==r?(e.push({value:r}),Ca)break;e.push({value:R})}return y&&d&&M!==a?e.length&&nn(e[e.length-1].value,a,Zo(a,v,n))?e[e.length-1].value=a:e.push({value:a}):(!y||M===a)&&e.push({value:M}),e}function Zo(n,t,{horizontal:e,minRotation:i}){const s=At(i),o=(e?Math.sin(s):Math.cos(s))||.001,r=.75*t*(""+n).length;return Math.min(t/o,r)}class oi extends ke{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return H(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:o}=this;const r=l=>s=e?s:l,a=l=>o=i?o:l;if(t){const l=Bt(s),c=Bt(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(s===o){let l=o===0?1:Math.abs(o*.05);a(o+l),t||r(s-l)}this.min=s,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:i}=t,s;return i?(s=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,s>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${s} ticks. Limiting to 1000.`),s=1e3)):(s=this.computeTickLimit(),e=e||11),e&&(s=Math.min(e,s)),s}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,r=bg(s,o);return t.bounds==="ticks"&&Fr(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return _n(t,this.chart.options.locale,this.options.ticks.format)}}class os extends oi{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=et(t)?t:0,this.max=et(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=At(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/s))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}k(os,"id","linear"),k(os,"defaults",{ticks:{callback:fi.formatters.numeric}});const gn=n=>Math.floor(ie(n)),pe=(n,t)=>Math.pow(10,gn(n)+t);function Jo(n){return n/Math.pow(10,gn(n))===1}function tr(n,t,e){const i=Math.pow(10,e),s=Math.floor(n/i);return Math.ceil(t/i)-s}function yg(n,t){const e=t-n;let i=gn(e);for(;tr(n,t,i)>10;)i++;for(;tr(n,t,i)<10;)i--;return Math.min(i,gn(n))}function _g(n,{min:t,max:e}){t=Pt(n.min,t);const i=[],s=gn(t);let o=yg(t,e),r=o<0?Math.pow(10,Math.abs(o)):1;const a=Math.pow(10,o),l=s>o?Math.pow(10,s):0,c=Math.round((t-l)*r)/r,u=Math.floor((t-l)/a/10)*a*10;let h=Math.floor((c-u)/Math.pow(10,o)),d=Pt(n.min,Math.round((l+u+h*Math.pow(10,o))*r)/r);for(;d=10?h=h<15?15:20:h++,h>=20&&(o++,h=2,r=o>=0?1:r),d=Math.round((l+u+h*Math.pow(10,o))*r)/r;const f=Pt(n.max,d);return i.push({value:f,major:Jo(f),significand:h}),i}class er extends ke{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=oi.prototype.parse.apply(this,[t,e]);if(i===0){this._zero=!0;return}return et(i)&&i>0?i:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=et(t)?Math.max(0,t):null,this.max=et(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!et(this._userMin)&&(this.min=t===pe(this.min,0)?pe(this.min,-1):pe(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const o=a=>i=t?i:a,r=a=>s=e?s:a;i===s&&(i<=0?(o(1),r(10)):(o(pe(i,-1)),r(pe(s,1)))),i<=0&&o(pe(s,-1)),s<=0&&r(pe(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},i=_g(e,this);return t.bounds==="ticks"&&Fr(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":_n(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=ie(t),this._valueRange=ie(this.max)-ie(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(ie(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}k(er,"id","logarithmic"),k(er,"defaults",{ticks:{callback:fi.formatters.logarithmic,major:{enabled:!0}}});function rs(n){const t=n.ticks;if(t.display&&n.display){const e=yt(t.backdropPadding);return S(t.font&&t.font.size,nt.font.size)+e.height}return 0}function xg(n,t,e){return e=K(e)?e:[e],{w:zu(n,t.string,e),h:e.length*t.lineHeight}}function nr(n,t,e,i,s){return n===i||n===s?{start:t-e/2,end:t+e/2}:ns?{start:t-e,end:t}:{start:t,end:t+e}}function vg(n){const t={l:n.left+n._padding.left,r:n.right-n._padding.right,t:n.top+n._padding.top,b:n.bottom-n._padding.bottom},e=Object.assign({},t),i=[],s=[],o=n._pointLabels.length,r=n.options.pointLabels,a=r.centerPointLabels?tt/o:0;for(let l=0;lt.r&&(a=(i.end-t.r)/o,n.r=Math.max(n.r,t.r+a)),s.startt.b&&(l=(s.end-t.b)/r,n.b=Math.max(n.b,t.b+l))}function Mg(n,t,e){const i=n.drawingArea,{extra:s,additionalAngle:o,padding:r,size:a}=e,l=n.getPointPosition(t,i+s+r,o),c=Math.round(ps(Dt(l.angle+at))),u=Tg(l.y,a.h,c),h=Pg(c),d=Dg(l.x,a.w,h);return{visible:!0,x:l.x,y:u,textAlign:h,left:d,top:u,right:d+a.w,bottom:u+a.h}}function kg(n,t){if(!t)return!0;const{left:e,top:i,right:s,bottom:o}=n;return!(qt({x:e,y:i},t)||qt({x:e,y:o},t)||qt({x:s,y:i},t)||qt({x:s,y:o},t))}function Cg(n,t,e){const i=[],s=n._pointLabels.length,o=n.options,{centerPointLabels:r,display:a}=o.pointLabels,l={extra:rs(o)/2,additionalAngle:r?tt/s:0};let c;for(let u=0;u270||e<90)&&(n-=t),n}function Sg(n,t,e){const{left:i,top:s,right:o,bottom:r}=e,{backdropColor:a}=t;if(!H(a)){const l=ve(t.borderRadius),c=yt(t.backdropPadding);n.fillStyle=a;const u=i-c.left,h=s-c.top,d=o-i+c.width,f=r-s+c.height;Object.values(l).some(g=>g!==0)?(n.beginPath(),dn(n,{x:u,y:h,w:d,h:f,radius:l}),n.fill()):n.fillRect(u,h,d,f)}}function Og(n,t){const{ctx:e,options:{pointLabels:i}}=n;for(let s=t-1;s>=0;s--){const o=n._pointLabelItems[s];if(!o.visible)continue;const r=i.setContext(n.getPointLabelContext(s));Sg(e,r,o);const a=ut(r.font),{x:l,y:c,textAlign:u}=o;Ie(e,n._pointLabels[s],l,c+a.lineHeight/2,a,{color:r.color,textAlign:u,textBaseline:"middle"})}}function Ma(n,t,e,i){const{ctx:s}=n;if(e)s.arc(n.xCenter,n.yCenter,t,0,G);else{let o=n.getPointPosition(0,t);s.moveTo(o.x,o.y);for(let r=1;r{const s=X(this.options.pointLabels.callback,[e,i],this);return s||s===0?s:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){const t=this.options;t.display&&t.pointLabels.display?vg(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){const e=G/(this._pointLabels.length||1),i=this.options.startAngle||0;return Dt(t*e+At(i))}getDistanceFromCenterForValue(t){if(H(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(H(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(h!==0){l=this.getDistanceFromCenterForValue(u.value);const d=this.getContext(h),f=s.setContext(d),g=o.setContext(d);Ag(this,f,l,r,g)}}),i.display){for(t.save(),a=r-1;a>=0;a--){const u=i.setContext(this.getPointLabelContext(a)),{color:h,lineWidth:d}=u;!d||!h||(t.lineWidth=d,t.strokeStyle=h,t.setLineDash(u.borderDash),t.lineDashOffset=u.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),c=this.getPointPosition(a,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let o,r;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;const c=i.setContext(this.getContext(l)),u=ut(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=u.string,r=t.measureText(a.label).width,t.fillStyle=c.backdropColor;const h=yt(c.backdropPadding);t.fillRect(-r/2-h.left,-o-u.size/2-h.top,r+h.width,u.size+h.height)}Ie(t,a.label,0,-o,u,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}k(zn,"id","radialLinear"),k(zn,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:fi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),k(zn,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),k(zn,"descriptors",{angleLines:{_fallback:"grid"}});const bi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},xt=Object.keys(bi);function ir(n,t){return n-t}function sr(n,t){if(H(t))return null;const e=n._adapter,{parser:i,round:s,isoWeekday:o}=n._parseOpts;let r=t;return typeof i=="function"&&(r=i(r)),et(r)||(r=typeof i=="string"?e.parse(r,i):e.parse(r)),r===null?null:(s&&(r=s==="week"&&(un(o)||o===!0)?e.startOf(r,"isoWeek",o):e.startOf(r,s)),+r)}function or(n,t,e,i){const s=xt.length;for(let o=xt.indexOf(n);o=xt.indexOf(e);o--){const r=xt[o];if(bi[r].common&&n._adapter.diff(s,i,r)>=t-1)return r}return xt[e?xt.indexOf(e):0]}function Fg(n){for(let t=xt.indexOf(n)+1,e=xt.length;t=t?e[i]:e[s];n[o]=!0}}function Ig(n,t,e,i){const s=n._adapter,o=+s.startOf(t[0].value,i),r=t[t.length-1].value;let a,l;for(a=o;a<=r;a=+s.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function ar(n,t,e){const i=[],s={},o=t.length;let r,a;for(r=0;r+t.value))}initOffsets(t=[]){let e=0,i=0,s,o;this.options.offset&&t.length&&(s=this.getDecimalForValue(t[0]),t.length===1?e=1-s:e=(this.getDecimalForValue(t[1])-s)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?i=o:i=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;e=ft(e,0,r),i=ft(i,0,r),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,o=s.time,r=o.unit||or(o.minUnit,e,i,this._getLabelCapacity(e)),a=S(s.ticks.stepSize,1),l=r==="week"?o.isoWeekday:!1,c=un(l)||l===!0,u={};let h=e,d,f;if(c&&(h=+t.startOf(h,"isoWeek",l)),h=+t.startOf(h,c?"day":r),t.diff(i,e,r)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+r);const g=s.ticks.source==="data"&&this.getDataTimestamps();for(d=h,f=0;d+p)}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const s=this.options.time.displayFormats,o=this._unit,r=e||s[o];return this._adapter.format(t,r)}_tickFormatFunction(t,e,i,s){const o=this.options,r=o.ticks.callback;if(r)return X(r,[t,e,i],this);const a=o.time.displayFormats,l=this._unit,c=this._majorUnit,u=l&&a[l],h=c&&a[c],d=i[e],f=c&&h&&d&&d.major;return this._adapter.format(t,s||(f?h:u))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(e=0,i=s.length;e=n[i].pos&&t<=n[s].pos&&({lo:i,hi:s}=xe(n,"pos",t)),{pos:o,time:a}=n[i],{pos:r,time:l}=n[s]):(t>=n[i].time&&t<=n[s].time&&({lo:i,hi:s}=xe(n,"time",t)),{time:o,pos:a}=n[i],{time:r,pos:l}=n[s]);const c=r-o;return c?a+(l-a)*(t-o)/c:a}class lr extends pn{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Bn(e,this.min),this._tableRange=Bn(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],o=[];let r,a,l,c,u;for(r=0,a=t.length;r=e&&c<=i&&s.push(c);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(r=0,a=s.length;rs-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return e.length&&i.length?t=this.normalize(e.concat(i)):t=e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Bn(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Bn(this._table,i*this._tableRange+this._minPos,!0)}}k(lr,"id","timeseries"),k(lr,"defaults",pn.defaults);function yi(n){return n==="sankey"?{type:"sankey",data:{datasets:[]},options:{animations:!1}}:n==="pie"?{type:"pie",data:{datasets:[]}}:n==="column"?{type:"bar",data:{labels:[],datasets:[]},options:{plugins:{tooltip:{callbacks:{label:function(t){let e=t.dataset.currency_code;return V(t.raw,e)}}}},maintainAspectRatio:!1,scales:{}}}:n==="line"?{options:{plugins:{tooltip:{callbacks:{label:function(t){let e=t.dataset.currency_code;return V(t.raw,e)}}}},maintainAspectRatio:!1,scales:{x:{type:"time",time:{tooltipFormat:"PP"}}}},type:"line",data:{labels:[],datasets:[]}}:{}}let ri=new dt("#36a2eb"),Re=new dt("#ff6384"),mn=new dt("#4bc0c0"),ka=new dt("#ff9f40"),Eg=new dt("#9966ff"),zg=new dt("#ffcd56"),Bg=new dt("#c9cbcf"),cr=0;window.theme==="dark"&&(Re.darken(.3).desaturate(.3),mn.darken(.3).desaturate(.3),ri.darken(.3).desaturate(.3),ka.darken(.3).desaturate(.3));let Fi=[Re,ka,ri,mn,Eg,zg,Bg,mn];function De(n,t){let e={borderColor:Re.rgbString(),backgroundColor:Re.rgbString()},i;switch(n){default:let o=Math.floor(cr/2)%Fi.length;i=new dt(Fi[o].rgbString()),i.lighten(.38),e={borderColor:Fi[o].hexString(),backgroundColor:i.hexString()};break;case"spent":i=new dt(ri.rgbString()),i.lighten(.38),e={borderColor:ri.rgbString(),backgroundColor:i.rgbString()};break;case"left":i=new dt(mn.rgbString()),i.lighten(.38),e={borderColor:mn.rgbString(),backgroundColor:i.rgbString()};break;case"overspent":i=new dt(Re.rgbString()),i.lighten(.22),e={borderColor:Re.rgbString(),backgroundColor:i.rgbString()};break}return cr++,t==="border"?e.borderColor:t==="background"?e.backgroundColor:"#FF0000"}let me=[],je=null,Ii=null,Ei=!1;const Ng=()=>({loading:!1,loadingAccounts:!1,accountList:[],autoConversion:!1,chartOptions:null,switchAutoConversion(){this.autoConversion=!this.autoConversion,Bc("autoConversion",this.autoConversion)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-accounts-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){console.log(s),this.drawChart(this.generateOptions(s)),this.loading=!1;return}new Nc().dashboard(n,t,null).then(r=>{this.chartData=r.data,window.store.set(e,r.data),console.log(r.data),this.drawChart(this.generateOptions(this.chartData)),this.loading=!1})},generateOptions(n){me=[];let t=yi("line");for(let e=0;e0){this.loadingAccounts=!1;return}const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-accounts-data",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){this.accountList=s,this.loadingAccounts=!1;return}const o=10;let r=0,a=0,l=[];Promise.all([bt("frontpageAccounts")]).then(c=>{r=c[0].length;for(let u in c[0]){let h=c[0];if(h.hasOwnProperty(u)){let d=h[u];new Bs().get(d,new Date(window.store.get("end"))).then(f=>{let g=f.data.data;const p={page:1,start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))};new Bs().transactions(g.id,p).then(m=>{let b=[];for(let y=0;y=o);y++){let x=m.data.data[y],v={title:x.attributes.group_title===null?"":x.attributes.group_title,id:x.id,transactions:[]};for(let _=0;_y.order-x.order),this.accountList=l,this.loadingAccounts=!1,window.store.set(e,l))})})}}})},init(){Promise.all([bt("viewRange","1M"),bt("autoConversion",!1),bt("language","en_US")]).then(n=>{this.autoConversion=n[1],Ei=!0,this.loadChart(),this.loadAccounts()}),window.store.observe("end",()=>{Ei&&(Ii=null,this.accountList=[],this.loadChart(),this.loadAccounts())}),window.store.observe("autoConversion",()=>{Ei&&(this.loadChart(),this.loadAccounts())})}});let Wg=class{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/budget/dashboard",{params:{start:i,end:s}})}},Ue=[],Nn=null,te=null,zi=!1,Te;const Hg=()=>({loading:!1,autoConversion:!1,loadChart(){if(this.loading!==!0){if(this.loading=!0,te!==null){this.drawChart(this.generateOptions(te)),this.loading=!1;return}this.getFreshData()}},drawChart(n){if(Nn!==null){Nn.data.datasets=n.data.datasets,Nn.update();return}Nn=new mt(document.querySelector("#budget-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-budgets-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){te=s,this.drawChart(this.generateOptions(te)),this.loading=!1;return}new Wg().dashboard(n,t,null).then(r=>{te=r.data,this.drawChart(this.generateOptions(te)),window.store.set(e,te),this.loading=!1})},generateOptions(n){Ue=[];let t=yi("column");t.options.locale=window.store.get("locale").replace("_","-"),t.options.plugins={tooltip:{callbacks:{title:function(e){return e.label},label:function(e){let i=e.dataset.label||"";return i&&(i+=": "),i+" "+V(e.parsed.y,Ue[e.parsed.x]??"EUR")}}}},t.data={labels:[],datasets:[{label:Te.t("firefly.spent"),data:[],borderWidth:1,stack:1,backgroundColor:De("spent","background"),borderColor:De("spent","border")},{label:Te.t("firefly.left"),data:[],borderWidth:1,stack:1,backgroundColor:De("left","background"),borderColor:De("left","border")},{label:Te.t("firefly.overspent"),data:[],borderWidth:1,stack:1,backgroundColor:De("overspent","background"),borderColor:De("overspent","border")}]};for(const e in n)if(n.hasOwnProperty(e)){let i=n[e],s=i.label+" ("+i.currency_code+")";t.data.labels.push(s),this.autoConversion&&(Ue.push(i.native_currency_code),t.data.datasets[0].data.push(parseFloat(i.native_entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(i.native_entries.left)),t.data.datasets[2].data.push(parseFloat(i.native_entries.overspent))),this.autoConversion||(Ue.push(i.currency_code),t.data.datasets[0].data.push(parseFloat(i.entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(i.entries.left)),t.data.datasets[2].data.push(parseFloat(i.entries.overspent)))}return t.options.scales={y:{ticks:{callback:function(e){return V(e,Ue[0]??"EUR")}}}},t},init(){Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{Te=new li;const t=n[1].replace("-","_");Te.locale=t,ci(Te,t).then(()=>{this.autoConversion=n[0],zi=!0,this.loading===!1&&this.loadChart()})}),window.store.observe("end",()=>{zi&&this.loading===!1&&(te=null,this.loadChart())}),window.store.observe("autoConversion",n=>{zi&&(this.autoConversion=n,this.loading===!1&&this.loadChart())})}});class Vg{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/category/dashboard",{params:{start:i,end:s}})}}let ur=[],$e=null,Se=null,Bi=!1;const Yg=()=>({loading:!1,autoConversion:!1,generateOptions(n){ur=[];let t=yi("column"),e={};for(const s in n)if(n.hasOwnProperty(s)){let o=n[s],r=o.currency_code;this.autoConversion&&(r=o.native_currency_code),e.hasOwnProperty(r)||(e[r]={name:r,yAxisID:"",data:{}},ur.push(r))}for(const s in n)if(n.hasOwnProperty(s)){let o=n[s],r=o.currency_code;this.autoConversion&&(r=o.native_currency_code);for(const a in e)if(e.hasOwnProperty(a)){let l=0;r===a&&(l=parseFloat(o.amount),""+o.currency_code,this.autoConversion&&(l=parseFloat(o.native_amount),""+o.native_currency_code)),e[a].data.hasOwnProperty(o.label)&&(e[a].data[o.label]=e[a].data[o.label]+l),e[a].data.hasOwnProperty(o.label)||(e[a].data[o.label]=l)}t.data.labels.includes(o.label)||t.data.labels.push(o.label)}let i=0;for(const s in e){let o="y"+s,r={label:s,currency_code:s,yAxisID:o,data:[]};for(const a in e[s].data)r.data.push(e[s].data[a]);t.data.datasets.push(r),t.options.scales.hasOwnProperty(o)||(t.options.scales[o]={beginAtZero:!0,type:"linear",position:i===1?"right":"left",ticks:{callback:function(a,l,c){return V(a,s)}}},i++)}return t},drawChart(n){if($e!==null){$e.options=n.options,$e.data=n.data,$e.update();return}$e=new mt(document.querySelector("#category-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-categories-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Se=s,this.drawChart(this.generateOptions(Se)),this.loading=!1;return}new Vg().dashboard(n,t,null).then(r=>{Se=r.data,this.drawChart(this.generateOptions(r.data)),window.store.set(e,Se),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,Se!==null){this.drawChart(this.generateOptions(Se)),this.loading=!1;return}this.getFreshData()}},init(){Promise.all([bt("autoConversion",!1)]).then(n=>{this.autoConversion=n[0],Bi=!0,this.loadChart()}),window.store.observe("end",()=>{Bi&&(this.chartData=null,this.loadChart())}),window.store.observe("autoConversion",n=>{Bi&&(this.autoConversion=n,this.loadChart())})}});let jg=class{list(t){return vt.get("/api/v2/transactions",{params:t})}};/*! * chartjs-chart-sankey v0.12.0 * https://github.com/kurkle/chartjs-chart-sankey#readme * (c) 2022 Jukka Kurkela * Released under the MIT license */function Ug(n){const t=[],e=K(n)?n:H(n)?[]:[n];for(;e.length;){const i=e.pop();typeof i=="string"?t.unshift.apply(t,i.split(` -`)):Array.isArray(i)?e.push.apply(e,i):H(e)||t.unshift(""+i)}return t}function Ni(n){return!n||["min","max"].indexOf(n)===-1?"max":n}const ae=n=>n!==void 0;function $g(n,t){const e=new Set(t.map(r=>r.to)),i=new Set(t.map(r=>r.from)),s=new Set([...n.keys()]);let o=0;for(;s.size;){const r=qg([...s],e);for(const a of r){const l=n.get(a);ae(l.x)||(l.x=o),s.delete(a)}s.size&&(e.clear(),t.filter(a=>s.has(a.from)).forEach(a=>e.add(a.to)),o++)}return[...n.keys()].filter(r=>!i.has(r)).forEach(r=>{const a=n.get(r);a.column||(a.x=o)}),o}function qg(n,t){const e=n.filter(i=>!t.has(i));return e.length?e:n.slice(0,1)}const Xg=(n,t)=>n.x!==t.x?n.x-t.x:n.y-t.y;let Wn=-1;function Kg(){return Wn=Wn<100?Wn+1:0,Wn}function as(n,t,e=Kg()){let i=0;for(const s of n)s.node._visited!==e&&(s.node._visited=e,i+=s.node[t].length+as(s.node[t],t,e));return i}const Ca=n=>(t,e)=>as(t.node[n],n)-as(e.node[n],n)||t.node[n].length-e.node[n].length;function Cs(n,t){n.from.sort(Ca("from"));for(const e of n.from){const i=e.node;ae(i.y)||(i.y=t,Cs(i,t)),t=Math.max(i.y+i.out,t)}return t}function _e(n,t){n.to.sort(Ca("to"));for(const e of n.to){const i=e.node;ae(i.y)||(i.y=t,_e(i,t)),t=Math.max(i.y+i.in,t)}return t}function qe(n,t){return ae(n.y)?n.y:(n.y=t,t)}function Gg(n,t){const e=n.filter(u=>u.x===0),i=n.filter(u=>u.x===t),s=e.filter(u=>!ae(u.y)),o=i.filter(u=>!ae(u.y)),r=n.filter(u=>u.x>0&&u.xMath.max(u,h.y+h.out||0),0),l=i.reduce((u,h)=>Math.max(u,h.y+h.in||0),0),c=0;return a>=l?(s.forEach(u=>{a=qe(u,a),a=Math.max(a+u.out,_e(u,a))}),o.forEach(u=>{l=qe(u,l),l=Math.max(l+u.in,_e(u,l))})):(o.forEach(u=>{l=qe(u,l),l=Math.max(l+u.in,_e(u,l))}),s.forEach(u=>{a=qe(u,a),a=Math.max(a+u.out,_e(u,a))})),r.forEach(u=>{let h=n.filter(d=>d.x===u.x&&ae(d.y)).reduce((d,f)=>Math.max(d,f.y+Math.max(f.in,f.out)),0);h=qe(u,h),h=Math.max(h+u.in,Cs(u,h)),h=Math.max(h+u.out,_e(u,h)),c=Math.max(c,h)}),Math.max(a,l,c)}function Qg(n,t){n.sort((r,a)=>Math.max(a.in,a.out)-Math.max(r.in,r.out));const e=n[0];e.y=0;const i=Cs(e,0),s=_e(e,0),o=Gg(n,t);return Math.max(i,s,o)}function Zg(n,t){let e=0,i=0;for(let s=0;s<=t;s++){let o=i;const r=n.filter(a=>a.x===s).sort((a,l)=>a.priority-l.priority);i=r[0].to.filter(a=>a.node.x>s+1).reduce((a,l)=>a+l.flow,0)||0;for(const a of r)a.y=o,o+=Math.max(a.out,a.in);e=Math.max(o,e)}return e}function Jg(n,t){let e=1,i=0,s=0,o=0;const r=[];n.sort(Xg);for(const a of n){if(a.y){if(a.x===0)r.push(a.y);else{for(i!==a.x&&(i=a.x,s=0),e=s+1;ea.y);e++);s=e}a.y+=e*t,e++}o=Math.max(o,a.y+Math.max(a.in,a.out))}return o}function tp(n,t){n.forEach(e=>{const i=Math[t](e.in||e.out,e.out||e.in),s=il.node.y+l.node.out/2-(c.node.y+c.node.out/2)).forEach((l,c)=>{s?l.addY=c*(i-l.flow)/(a-1):(l.addY=r,r+=l.flow)}),r=0,a=e.to.length,e.to.sort((l,c)=>l.node.y+l.node.in/2-(c.node.y+c.node.in/2)).forEach((l,c)=>{o?l.addY=c*(i-l.flow)/(a-1):(l.addY=r,r+=l.flow)})})}function ep(n,t,e,i){const s=[...n.values()],o=$g(n,t),a=(e?Zg(s,o):Qg(s,o))*.03,l=Jg(s,a);return tp(s,i),{maxX:o,maxY:l}}function np(n){const t=new Map;for(let i=0;is.flow-i.flow;return[...t.values()].forEach(i=>{i.from=i.from.sort(e),i.from.forEach(s=>{s.node=t.get(s.key)}),i.to=i.to.sort(e),i.to.forEach(s=>{s.node=t.get(s.key)})}),t}function hr(n,t,e){for(const i of n)if(i.key===t&&i.index===e)return i.addY;return 0}class _i extends Xt{parseObjectData(t,e,i,s){const{from:o="from",to:r="to",flow:a="flow"}=this.options.parsing,l=e.map(({[o]:y,[r]:x,[a]:v})=>({from:y,to:x,flow:v})),{xScale:c,yScale:u}=t,h=[],d=this._nodes=np(l),{column:f,priority:g,size:p}=this.getDataset();if(g)for(const y of d.values())y.key in g&&(y.priority=g[y.key]);if(f)for(const y of d.values())y.key in f&&(y.column=!0,y.x=f[y.key]);const{maxX:m,maxY:b}=ep(d,l,!!g,Ni(p));this._maxX=m,this._maxY=b;for(let y=0,x=l.length;y1){const d=c-u*l/2+h;for(let f=0;fn.type==="data"?(n.parsed._custom.x-n.parsed.x)*200:void 0,delay:n=>n.type==="data"?n.parsed.x*500+n.dataIndex*20:void 0},colors:{type:"color",properties:["colorFrom","colorTo"]}},transitions:{hide:{animations:{colors:{type:"color",properties:["colorFrom","colorTo"],to:"transparent"}}},show:{animations:{colors:{type:"color",properties:["colorFrom","colorTo"],from:"transparent"}}}}};_i.overrides={interaction:{mode:"nearest",intersect:!0},datasets:{clip:!1,parsing:!0},plugins:{tooltip:{callbacks:{title(){return""},label(n){const t=n.dataset.data[n.dataIndex];return t.from+" -> "+t.to+": "+t.flow}}},legend:{display:!1}},scales:{x:{type:"linear",bounds:"data",display:!1,min:0,offset:!1},y:{type:"linear",bounds:"data",display:!1,min:0,reverse:!0,offset:!1}},layout:{padding:{top:3,left:3,right:13,bottom:3}}};const dr=(n,t,e,i)=>n({x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y)});function ip(n,{x:t,x2:e,options:i}){let s;i.colorMode==="from"?s=Ae(i.colorFrom).alpha(.5).rgbString():i.colorMode==="to"?s=Ae(i.colorTo).alpha(.5).rgbString():(s=n.createLinearGradient(t,0,e,0),s.addColorStop(0,Ae(i.colorFrom).alpha(.5).rgbString()),s.addColorStop(1,Ae(i.colorTo).alpha(.5).rgbString())),n.fillStyle=s,n.strokeStyle=s,n.lineWidth=.5}class Ps extends Lt{constructor(t){super(),this.options=void 0,this.x=void 0,this.y=void 0,this.x2=void 0,this.y2=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const e=this,{x:i,x2:s,y:o,y2:r,height:a,progress:l}=e,{cp1:c,cp2:u}=dr(i,o,s,r);l!==0&&(t.save(),l<1&&(t.beginPath(),t.rect(i,Math.min(o,r),(s-i)*l+1,Math.abs(r-o)+a+1),t.clip()),ip(t,e),t.beginPath(),t.moveTo(i,o),t.bezierCurveTo(c.x,c.y,u.x,u.y,s,r),t.lineTo(s,r+a),t.bezierCurveTo(u.x,u.y+a,c.x,c.y+a,i,o+a),t.lineTo(i,o),t.stroke(),t.closePath(),t.fill(),t.restore())}inRange(t,e,i){const{x:s,y:o,x2:r,y2:a,height:l}=this.getProps(["x","y","x2","y2","height"],i);if(tr)return!1;const{cp1:c,cp2:u}=dr(s,o,r,a),h=(t-s)/(r-s),d={x:s,y:o},f={x:r,y:a},g=Oe(d,c,h),p=Oe(c,u,h),m=Oe(u,f,h),b=Oe(g,p,h),y=Oe(p,m,h),x=Oe(b,y,h).y;return e>=x&&e<=x+l}inXRange(t,e){const{x:i,x2:s}=this.getProps(["x","x2"],e);return t>=i&&t<=s}inYRange(t,e){const{y:i,y2:s,height:o}=this.getProps(["y","y2","height"],e),r=Math.min(i,s),a=Math.max(i,s)+o;return t>=r&&t<=a}getCenterPoint(t){const{x:e,y:i,x2:s,y2:o,height:r}=this.getProps(["x","y","x2","y2","height"],t);return{x:(e+s)/2,y:(i+o+r)/2}}tooltipPosition(t){return this.getCenterPoint(t)}getRange(t){return t==="x"?this.width/2:this.height/2}}Ps.id="flow";Ps.defaults={colorFrom:"red",colorTo:"green",colorMode:"gradient",hoverColorFrom:(n,t)=>on(t.colorFrom),hoverColorTo:(n,t)=>on(t.colorTo)};mt.register({SankeyController:_i,Flow:Ps});const fr="dashboard-sankey-data";let pt,Wi=!1,Hn=null,Ht=[],ht=!1,L={category:null,unknown_category:null,in:null,out:null,unknown_source:null,unknown_dest:null,unknown_account:null,expense_account:null,revenue_account:null,budget:null,unknown_budget:null,all_money:null};const gr=function(n){return n.includes(L.revenue_account)?"forestgreen":n.includes("("+L.in+",")?"green":n.includes(L.budget)||n.includes(L.unknown_budget)?"Orchid":n.includes("("+L.out+",")?"MediumOrchid":n.includes(L.all_money)?"blue":"red"};function Xe(n,t,e,i){if(n==="category"&&t!==null&&e==="in")return L.category+' "'+t+'" ('+L.in+(ht?", "+i+")":")");if(n==="category"&&t===null&&e==="in")return L.unknown_category+" ("+L.in+(ht?", "+i+")":")");if(n==="category"&&t!==null&&e==="out")return L.category+' "'+t+'" ('+L.out+(ht?", "+i+")":")");if(n==="category"&&t===null&&e==="out")return L.unknown_category+" ("+L.out+(ht?", "+i+")":")");if(n==="account"&&t===null&&e==="in")return L.unknown_source+(ht?" ("+i+")":"");if(n==="account"&&t!==null&&e==="in")return L.revenue_account+'"'+t+'"'+(ht?" ("+i+")":"");if(n==="account"&&t===null&&e==="out")return L.unknown_dest+(ht?" ("+i+")":"");if(n==="account"&&t!==null&&e==="out")return L.expense_account+' "'+t+'"'+(ht?" ("+i+")":"");if(n==="budget"&&t!==null)return L.budget+' "'+t+'"'+(ht?" ("+i+")":"");if(n==="budget"&&t===null)return L.unknown_budget+(ht?" ("+i+")":"");console.error('Cannot handle: type:"'+n+'", dir: "'+e+'"')}function Ke(n,t,e){if(n==="category"&&t!==null)return L.category+' "'+t+'"'+(ht?" ("+e+")":"");if(n==="category"&&t===null)return L.unknown_category+(ht?" ("+e+")":"");if(n==="account"&&t===null)return L.unknown_account+(ht?" ("+e+")":"");if(n==="account"&&t!==null)return t+(ht?" ("+e+")":"");if(n==="budget"&&t!==null)return L.budget+' "'+t+'"'+(ht?" ("+e+")":"");if(n==="budget"&&t===null)return L.unknown_budget+(ht?" ("+e+")":"");console.error('Cannot handle: type:"'+n+'"')}const sp=()=>({loading:!1,autoConversion:!1,generateOptions(){let n=yi("sankey"),t={},e={};for(let s in Ht)if(Ht.hasOwnProperty(s)){let o=Ht[s];for(let r in o.attributes.transactions)if(o.attributes.transactions.hasOwnProperty(r)){let a=o.attributes.transactions[r],l=this.autoConversion?a.native_currency_code:a.currency_code,c=this.autoConversion?parseFloat(a.native_amount):parseFloat(a.amount),u;if(a.type==="deposit"){let h=Xe("category",a.category_name,"in",l),d=Xe("account",a.source_name,"in",l);e[h]=Ke("category",a.category_name,l),e[d]=Ke("account",a.source_name,l),u=d+"-"+h+"-"+l,t.hasOwnProperty(u)||(t[u]={from:d,to:h,amount:0}),t[u].amount+=c,u=h+"-"+L.all_money+"-"+l,t.hasOwnProperty(u)||(t[u]={from:h,to:L.all_money+(this.autoConversion?" ("+l+")":""),amount:0}),t[u].amount+=c}if(a.type==="withdrawal"){let h=Xe("budget",a.budget_name,"out",l);e[h]=Ke("budget",a.budget_name,l),u=L.all_money+"-"+h+"-"+l,t.hasOwnProperty(u)||(t[u]={from:L.all_money+(this.autoConversion?" ("+l+")":""),to:h,amount:0}),t[u].amount+=c;let d=Xe("category",a.category_name,"out",l);e[d]=Ke("category",a.category_name,l),u=h+"-"+d+"-"+l,t.hasOwnProperty(u)||(t[u]={from:h,to:d,amount:0}),t[u].amount+=c;let f=Xe("account",a.destination_name,"out",l);e[f]=Ke("account",a.destination_name,l),u=d+"-"+f+"-"+l,t.hasOwnProperty(u)||(t[u]={from:d,to:f,amount:0}),t[u].amount+=c}}}let i={label:"Firefly III dashboard sankey chart",data:[],colorFrom:s=>gr(s.dataset.data[s.dataIndex]?s.dataset.data[s.dataIndex].from:""),colorTo:s=>gr(s.dataset.data[s.dataIndex]?s.dataset.data[s.dataIndex].to:""),colorMode:"gradient",labels:e,size:"min"};for(let s in t)if(t.hasOwnProperty(s)){let o=t[s];i.data.push({from:o.from,to:o.to,flow:o.amount})}return n.data.datasets.push(i),n},drawChart(n){if(Hn!==null){Hn.data.datasets=n.data.datasets,Hn.update();return}Hn=new mt(document.querySelector("#sankey-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt(fr,n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Ht=s,this.drawChart(this.generateOptions()),this.loading=!1;return}let o={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),type:"withdrawal,deposit",page:1};this.downloadTransactions(o)},downloadTransactions(n){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),i=Nt(fr,t,e);new jg().get(n).then(o=>{if(Ht=[...Ht,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>n.page){n.page++,this.downloadTransactions(n);return}window.store.set(i,Ht),this.drawChart(this.generateOptions()),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,Ht.length!==0){this.drawChart(this.generateOptions()),this.loading=!1;return}this.getFreshData()}},init(){Ht=[],Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{this.autoConversion=n[0],ht=n[0],pt=new li;const t=n[1].replace("-","_");pt.locale=t,ci(pt,t).then(()=>{L.all_money=pt.t("firefly.all_money"),L.category=pt.t("firefly.category"),L.in=pt.t("firefly.money_flowing_in"),L.out=pt.t("firefly.money_flowing_out"),L.unknown_category=pt.t("firefly.unknown_category_plain"),L.unknown_source=pt.t("firefly.unknown_source_plain"),L.unknown_dest=pt.t("firefly.unknown_dest_plain"),L.unknown_account=pt.t("firefly.unknown_any_plain"),L.unknown_budget=pt.t("firefly.unknown_budget_plain"),L.expense_account=pt.t("firefly.expense_account"),L.revenue_account=pt.t("firefly.revenue_account"),L.budget=pt.t("firefly.budget"),Wi=!0,this.loadChart()})}),window.store.observe("end",()=>{Wi&&(this.transactions=[],this.loadChart())}),window.store.observe("autoConversion",n=>{Wi&&(this.autoConversion=n,this.loadChart())})}});let op=class{get(t){return vt.get("/api/v2/subscriptions",{params:t})}paid(t){return vt.get("/api/v2/subscriptions/sum/paid",{params:t})}unpaid(t){return vt.get("/api/v2/subscriptions/sum/unpaid",{params:t})}},Hi=!1,ee,Ct={};function Pa(n){return new op().get(n).then(e=>{let i=e.data.data;for(let s in i)if(i.hasOwnProperty(s)){let o=i[s];if(o.attributes.active&&o.attributes.pay_dates.length>0){let r=o.attributes.object_group_id===null?0:o.attributes.object_group_id,a=o.attributes.object_group_title===null?ee.t("firefly.default_group_title_name_plain"):o.attributes.object_group_title,l=o.attributes.object_group_order===null?0:o.attributes.object_group_order;Ct.hasOwnProperty(r)||(Ct[r]={id:r,title:a,order:l,payment_info:{},bills:[]});let c={id:o.id,name:o.attributes.name,amount_min:o.attributes.amount_min,amount_max:o.attributes.amount_max,amount:(parseFloat(o.attributes.amount_max)+parseFloat(o.attributes.amount_min))/2,currency_code:o.attributes.currency_code,native_amount_min:o.attributes.native_amount_min,native_amount_max:o.attributes.native_amount_max,native_amount:(parseFloat(o.attributes.native_amount_max)+parseFloat(o.attributes.native_amount_min))/2,native_currency_code:o.attributes.native_currency_code,transactions:[],pay_dates:o.attributes.pay_dates,paid:o.attributes.paid_dates.length>0};c.expected_amount=n.autoConversion?V(c.native_amount,c.native_currency_code):V(c.amount,c.currency_code),c.expected_times=ee.t("firefly.subscr_expected_x_times",{times:o.attributes.pay_dates.length,amount:c.expected_amount});for(let u in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(u)){const h=o.attributes.paid_dates[u];let d=100;n.autoConversion&&(d=Math.round(-100+parseFloat(h.native_amount)*-1/parseFloat(c.native_amount)*100)),n.autoConversion||(d=Math.round(-100+parseFloat(h.amount)*-1/parseFloat(c.amount)*100));let f={amount:n.autoConversion?V(h.native_amount,h.native_currency_code):V(h.amount,h.currency_code),percentage:d,date:J(new Date(h.date),"PP"),foreign_amount:null};h.foreign_currency_code!==null&&(f.foreign_amount=n.autoConversion?h.foreign_native_amount:h.foreign_amount,f.foreign_currency_code=n.autoConversion?h.native_currency_code:h.foreign_currency_code),c.transactions.push(f)}if(Ct[r].bills.push(c),o.attributes.paid_dates.length===0){const u=o.attributes.pay_dates.length*c.amount,h=o.attributes.pay_dates.length*c.native_amount;Ct[r].payment_info.hasOwnProperty(c.currency_code)||(Ct[r].payment_info[c.currency_code]={currency_code:c.currency_code,paid:0,unpaid:0,native_currency_code:c.native_currency_code,native_paid:0,native_unpaid:0}),Ct[r].payment_info[c.currency_code].unpaid+=u,Ct[r].payment_info[c.currency_code].native_unpaid+=h}if(o.attributes.paid_dates.length>0){for(let u in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(u)){let h=o.attributes.paid_dates[u];Ct[r].payment_info.hasOwnProperty(h.currency_code)||(Ct[r].payment_info[h.currency_code]={currency_code:c.currency_code,paid:0,unpaid:0,native_currency_code:c.native_currency_code,native_paid:0,native_unpaid:0});const d=parseFloat(h.amount)*-1,f=parseFloat(h.native_amount)*-1;Ct[r].payment_info[h.currency_code].paid+=d,Ct[r].payment_info[h.currency_code].native_paid+=f}}}}return parseInt(e.data.meta.pagination.total_pages)>n.page?(n.page++,Pa(n)):Promise.resolve()})}const rp=()=>({loading:!1,autoConversion:!1,subscriptions:[],startSubscriptions(){this.loading=!0;let n=new Date(window.store.get("start")),t=new Date(window.store.get("end"));console.log("here we are");const e=window.store.get("cacheValid");let i=window.store.get(Nt("subscriptions-data-dashboard",n,t));e&&typeof i<"u",Ct={},this.subscriptions=[],console.log("cache is invalid, must download");let s={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),autoConversion:this.autoConversion,page:1};Pa(s).then(()=>{console.log("Done with download!");let o=Object.values(Ct);for(let r in o)if(o.hasOwnProperty(r)){let a=o[r];const l=Object.keys(a.payment_info);a.col_size=l.length===1?"col-6 offset-3":"col-6",a.chart_width=l.length===1?"50%":"100%",a.payment_length=l.length,this.subscriptions.push(a)}this.loading=!1})},drawPieChart(n,t,e){let i="#pie_"+n+"_"+e.currency_code;const s=this.autoConversion?e.native_unpaid:e.unpaid,o=this.autoConversion?e.native_paid:e.paid,r=this.autoConversion?e.native_currency_code:e.currency_code,l={type:"doughnut",data:{labels:[ee.t("firefly.paid"),ee.t("firefly.unpaid")],datasets:[{label:ee.t("firefly.subscriptions_in_group",{title:t}),data:[o,s],backgroundColor:["rgb(54, 162, 235)","rgb(255, 99, 132)"],hoverOffset:4}]},options:{plugins:{tooltip:{callbacks:{label:function(u){return u.dataset.label+": "+V(u.raw,r)}}}}}};var c=mt.getChart(document.querySelector(i));typeof c<"u"&&c.destroy(),new mt(document.querySelector(i),l)},init(){console.log("subscriptions init"),Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{console.log("subscriptions after promises"),this.autoConversion=n[0],Hi=!0,ee=new li;const t=n[1].replace("-","_");ee.locale=t,ci(ee,t).then(()=>{this.loading===!1&&this.startSubscriptions()})}),window.store.observe("end",()=>{Hi&&(console.log("subscriptions observe end"),this.loading===!1&&this.startSubscriptions())}),window.store.observe("autoConversion",n=>{Hi&&(console.log("subscriptions observe autoConversion"),this.autoConversion=n,this.loading===!1&&this.startSubscriptions())})}});class ap{get(t){return vt.get("/api/v2/piggy-banks",{params:t})}}let Vt={},Vi=!1,Vn;const pr="dashboard-piggies-data",lp=()=>({loading:!1,autoConversion:!1,sankeyGrouping:"account",piggies:[],getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt(pr,n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Vt=s,this.parsePiggies(),this.loading=!1;return}let o={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),page:1};this.downloadPiggyBanks(o)},downloadPiggyBanks(n){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),i=Nt(pr,t,e);new ap().get(n).then(o=>{if(Vt=[...Vt,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>n.page){n.page++,this.downloadPiggyBanks(n);return}window.store.set(i,Vt),this.parsePiggies(),this.loading=!1})},parsePiggies(){let n=[];for(let t in Vt)if(Vt.hasOwnProperty(t)){let e=Vt[t];if(e.attributes.percentage>=100||e.attributes.percentage===0)continue;let i=e.object_group_title??Vn.t("firefly.default_group_title_name_plain");n.hasOwnProperty(i)||(n[i]={id:e.object_group_id??0,title:i,order:e.object_group_order??0,piggies:[]});let s={id:e.id,name:e.attributes.name,percentage:parseInt(e.attributes.percentage),amount:this.autoConversion?e.attributes.native_current_amount:e.attributes.current_amount,left_to_save:this.autoConversion?e.attributes.native_left_to_save:e.attributes.left_to_save,target_amount:this.autoConversion?e.attributes.native_target_amount:e.attributes.target_amount,save_per_month:this.autoConversion?e.attributes.native_save_per_month:e.attributes.save_per_month,currency_code:this.autoConversion?e.attributes.native_currency_code:e.attributes.currency_code};n[i].piggies.push(s)}this.piggies=Object.values(n)},loadPiggyBanks(){if(this.loading!==!0){if(this.loading=!0,this.piggies.length!==0){this.parsePiggies(),this.loading=!1;return}this.getFreshData()}},init(){Vt=[],Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{Vn=new li;const t=n[1].replace("-","_");Vn.locale=t,ci(Vn,t).then(()=>{Vi=!0,this.autoConversion=n[0],this.loadPiggyBanks()})}),window.store.observe("end",()=>{Vi&&(Vt=[],this.loadPiggyBanks())}),window.store.observe("autoConversion",n=>{Vi&&(this.autoConversion=n,this.loadPiggyBanks())})}});/*! +`)):Array.isArray(i)?e.push.apply(e,i):H(e)||t.unshift(""+i)}return t}function Ni(n){return!n||["min","max"].indexOf(n)===-1?"max":n}const ae=n=>n!==void 0;function $g(n,t){const e=new Set(t.map(r=>r.to)),i=new Set(t.map(r=>r.from)),s=new Set([...n.keys()]);let o=0;for(;s.size;){const r=qg([...s],e);for(const a of r){const l=n.get(a);ae(l.x)||(l.x=o),s.delete(a)}s.size&&(e.clear(),t.filter(a=>s.has(a.from)).forEach(a=>e.add(a.to)),o++)}return[...n.keys()].filter(r=>!i.has(r)).forEach(r=>{const a=n.get(r);a.column||(a.x=o)}),o}function qg(n,t){const e=n.filter(i=>!t.has(i));return e.length?e:n.slice(0,1)}const Xg=(n,t)=>n.x!==t.x?n.x-t.x:n.y-t.y;let Wn=-1;function Kg(){return Wn=Wn<100?Wn+1:0,Wn}function as(n,t,e=Kg()){let i=0;for(const s of n)s.node._visited!==e&&(s.node._visited=e,i+=s.node[t].length+as(s.node[t],t,e));return i}const Ca=n=>(t,e)=>as(t.node[n],n)-as(e.node[n],n)||t.node[n].length-e.node[n].length;function Cs(n,t){n.from.sort(Ca("from"));for(const e of n.from){const i=e.node;ae(i.y)||(i.y=t,Cs(i,t)),t=Math.max(i.y+i.out,t)}return t}function _e(n,t){n.to.sort(Ca("to"));for(const e of n.to){const i=e.node;ae(i.y)||(i.y=t,_e(i,t)),t=Math.max(i.y+i.in,t)}return t}function qe(n,t){return ae(n.y)?n.y:(n.y=t,t)}function Gg(n,t){const e=n.filter(u=>u.x===0),i=n.filter(u=>u.x===t),s=e.filter(u=>!ae(u.y)),o=i.filter(u=>!ae(u.y)),r=n.filter(u=>u.x>0&&u.xMath.max(u,h.y+h.out||0),0),l=i.reduce((u,h)=>Math.max(u,h.y+h.in||0),0),c=0;return a>=l?(s.forEach(u=>{a=qe(u,a),a=Math.max(a+u.out,_e(u,a))}),o.forEach(u=>{l=qe(u,l),l=Math.max(l+u.in,_e(u,l))})):(o.forEach(u=>{l=qe(u,l),l=Math.max(l+u.in,_e(u,l))}),s.forEach(u=>{a=qe(u,a),a=Math.max(a+u.out,_e(u,a))})),r.forEach(u=>{let h=n.filter(d=>d.x===u.x&&ae(d.y)).reduce((d,f)=>Math.max(d,f.y+Math.max(f.in,f.out)),0);h=qe(u,h),h=Math.max(h+u.in,Cs(u,h)),h=Math.max(h+u.out,_e(u,h)),c=Math.max(c,h)}),Math.max(a,l,c)}function Qg(n,t){n.sort((r,a)=>Math.max(a.in,a.out)-Math.max(r.in,r.out));const e=n[0];e.y=0;const i=Cs(e,0),s=_e(e,0),o=Gg(n,t);return Math.max(i,s,o)}function Zg(n,t){let e=0,i=0;for(let s=0;s<=t;s++){let o=i;const r=n.filter(a=>a.x===s).sort((a,l)=>a.priority-l.priority);i=r[0].to.filter(a=>a.node.x>s+1).reduce((a,l)=>a+l.flow,0)||0;for(const a of r)a.y=o,o+=Math.max(a.out,a.in);e=Math.max(o,e)}return e}function Jg(n,t){let e=1,i=0,s=0,o=0;const r=[];n.sort(Xg);for(const a of n){if(a.y){if(a.x===0)r.push(a.y);else{for(i!==a.x&&(i=a.x,s=0),e=s+1;ea.y);e++);s=e}a.y+=e*t,e++}o=Math.max(o,a.y+Math.max(a.in,a.out))}return o}function tp(n,t){n.forEach(e=>{const i=Math[t](e.in||e.out,e.out||e.in),s=il.node.y+l.node.out/2-(c.node.y+c.node.out/2)).forEach((l,c)=>{s?l.addY=c*(i-l.flow)/(a-1):(l.addY=r,r+=l.flow)}),r=0,a=e.to.length,e.to.sort((l,c)=>l.node.y+l.node.in/2-(c.node.y+c.node.in/2)).forEach((l,c)=>{o?l.addY=c*(i-l.flow)/(a-1):(l.addY=r,r+=l.flow)})})}function ep(n,t,e,i){const s=[...n.values()],o=$g(n,t),a=(e?Zg(s,o):Qg(s,o))*.03,l=Jg(s,a);return tp(s,i),{maxX:o,maxY:l}}function np(n){const t=new Map;for(let i=0;is.flow-i.flow;return[...t.values()].forEach(i=>{i.from=i.from.sort(e),i.from.forEach(s=>{s.node=t.get(s.key)}),i.to=i.to.sort(e),i.to.forEach(s=>{s.node=t.get(s.key)})}),t}function hr(n,t,e){for(const i of n)if(i.key===t&&i.index===e)return i.addY;return 0}class _i extends Xt{parseObjectData(t,e,i,s){const{from:o="from",to:r="to",flow:a="flow"}=this.options.parsing,l=e.map(({[o]:y,[r]:x,[a]:v})=>({from:y,to:x,flow:v})),{xScale:c,yScale:u}=t,h=[],d=this._nodes=np(l),{column:f,priority:g,size:p}=this.getDataset();if(g)for(const y of d.values())y.key in g&&(y.priority=g[y.key]);if(f)for(const y of d.values())y.key in f&&(y.column=!0,y.x=f[y.key]);const{maxX:m,maxY:b}=ep(d,l,!!g,Ni(p));this._maxX=m,this._maxY=b;for(let y=0,x=l.length;y1){const d=c-u*l/2+h;for(let f=0;fn.type==="data"?(n.parsed._custom.x-n.parsed.x)*200:void 0,delay:n=>n.type==="data"?n.parsed.x*500+n.dataIndex*20:void 0},colors:{type:"color",properties:["colorFrom","colorTo"]}},transitions:{hide:{animations:{colors:{type:"color",properties:["colorFrom","colorTo"],to:"transparent"}}},show:{animations:{colors:{type:"color",properties:["colorFrom","colorTo"],from:"transparent"}}}}};_i.overrides={interaction:{mode:"nearest",intersect:!0},datasets:{clip:!1,parsing:!0},plugins:{tooltip:{callbacks:{title(){return""},label(n){const t=n.dataset.data[n.dataIndex];return t.from+" -> "+t.to+": "+t.flow}}},legend:{display:!1}},scales:{x:{type:"linear",bounds:"data",display:!1,min:0,offset:!1},y:{type:"linear",bounds:"data",display:!1,min:0,reverse:!0,offset:!1}},layout:{padding:{top:3,left:3,right:13,bottom:3}}};const dr=(n,t,e,i)=>n({x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y)});function ip(n,{x:t,x2:e,options:i}){let s;i.colorMode==="from"?s=Ae(i.colorFrom).alpha(.5).rgbString():i.colorMode==="to"?s=Ae(i.colorTo).alpha(.5).rgbString():(s=n.createLinearGradient(t,0,e,0),s.addColorStop(0,Ae(i.colorFrom).alpha(.5).rgbString()),s.addColorStop(1,Ae(i.colorTo).alpha(.5).rgbString())),n.fillStyle=s,n.strokeStyle=s,n.lineWidth=.5}class Ps extends Lt{constructor(t){super(),this.options=void 0,this.x=void 0,this.y=void 0,this.x2=void 0,this.y2=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const e=this,{x:i,x2:s,y:o,y2:r,height:a,progress:l}=e,{cp1:c,cp2:u}=dr(i,o,s,r);l!==0&&(t.save(),l<1&&(t.beginPath(),t.rect(i,Math.min(o,r),(s-i)*l+1,Math.abs(r-o)+a+1),t.clip()),ip(t,e),t.beginPath(),t.moveTo(i,o),t.bezierCurveTo(c.x,c.y,u.x,u.y,s,r),t.lineTo(s,r+a),t.bezierCurveTo(u.x,u.y+a,c.x,c.y+a,i,o+a),t.lineTo(i,o),t.stroke(),t.closePath(),t.fill(),t.restore())}inRange(t,e,i){const{x:s,y:o,x2:r,y2:a,height:l}=this.getProps(["x","y","x2","y2","height"],i);if(tr)return!1;const{cp1:c,cp2:u}=dr(s,o,r,a),h=(t-s)/(r-s),d={x:s,y:o},f={x:r,y:a},g=Oe(d,c,h),p=Oe(c,u,h),m=Oe(u,f,h),b=Oe(g,p,h),y=Oe(p,m,h),x=Oe(b,y,h).y;return e>=x&&e<=x+l}inXRange(t,e){const{x:i,x2:s}=this.getProps(["x","x2"],e);return t>=i&&t<=s}inYRange(t,e){const{y:i,y2:s,height:o}=this.getProps(["y","y2","height"],e),r=Math.min(i,s),a=Math.max(i,s)+o;return t>=r&&t<=a}getCenterPoint(t){const{x:e,y:i,x2:s,y2:o,height:r}=this.getProps(["x","y","x2","y2","height"],t);return{x:(e+s)/2,y:(i+o+r)/2}}tooltipPosition(t){return this.getCenterPoint(t)}getRange(t){return t==="x"?this.width/2:this.height/2}}Ps.id="flow";Ps.defaults={colorFrom:"red",colorTo:"green",colorMode:"gradient",hoverColorFrom:(n,t)=>on(t.colorFrom),hoverColorTo:(n,t)=>on(t.colorTo)};mt.register({SankeyController:_i,Flow:Ps});const fr="dashboard-sankey-data";let pt,Wi=!1,Hn=null,Ht=[],ht=!1,L={category:null,unknown_category:null,in:null,out:null,unknown_source:null,unknown_dest:null,unknown_account:null,expense_account:null,revenue_account:null,budget:null,unknown_budget:null,all_money:null};const gr=function(n){return n.includes(L.revenue_account)?"forestgreen":n.includes("("+L.in+",")?"green":n.includes(L.budget)||n.includes(L.unknown_budget)?"Orchid":n.includes("("+L.out+",")?"MediumOrchid":n.includes(L.all_money)?"blue":"red"};function Xe(n,t,e,i){if(n==="category"&&t!==null&&e==="in")return L.category+' "'+t+'" ('+L.in+(ht?", "+i+")":")");if(n==="category"&&t===null&&e==="in")return L.unknown_category+" ("+L.in+(ht?", "+i+")":")");if(n==="category"&&t!==null&&e==="out")return L.category+' "'+t+'" ('+L.out+(ht?", "+i+")":")");if(n==="category"&&t===null&&e==="out")return L.unknown_category+" ("+L.out+(ht?", "+i+")":")");if(n==="account"&&t===null&&e==="in")return L.unknown_source+(ht?" ("+i+")":"");if(n==="account"&&t!==null&&e==="in")return L.revenue_account+'"'+t+'"'+(ht?" ("+i+")":"");if(n==="account"&&t===null&&e==="out")return L.unknown_dest+(ht?" ("+i+")":"");if(n==="account"&&t!==null&&e==="out")return L.expense_account+' "'+t+'"'+(ht?" ("+i+")":"");if(n==="budget"&&t!==null)return L.budget+' "'+t+'"'+(ht?" ("+i+")":"");if(n==="budget"&&t===null)return L.unknown_budget+(ht?" ("+i+")":"");console.error('Cannot handle: type:"'+n+'", dir: "'+e+'"')}function Ke(n,t,e){if(n==="category"&&t!==null)return L.category+' "'+t+'"'+(ht?" ("+e+")":"");if(n==="category"&&t===null)return L.unknown_category+(ht?" ("+e+")":"");if(n==="account"&&t===null)return L.unknown_account+(ht?" ("+e+")":"");if(n==="account"&&t!==null)return t+(ht?" ("+e+")":"");if(n==="budget"&&t!==null)return L.budget+' "'+t+'"'+(ht?" ("+e+")":"");if(n==="budget"&&t===null)return L.unknown_budget+(ht?" ("+e+")":"");console.error('Cannot handle: type:"'+n+'"')}const sp=()=>({loading:!1,autoConversion:!1,generateOptions(){let n=yi("sankey"),t={},e={};for(let s in Ht)if(Ht.hasOwnProperty(s)){let o=Ht[s];for(let r in o.attributes.transactions)if(o.attributes.transactions.hasOwnProperty(r)){let a=o.attributes.transactions[r],l=this.autoConversion?a.native_currency_code:a.currency_code,c=this.autoConversion?parseFloat(a.native_amount):parseFloat(a.amount),u;if(a.type==="deposit"){let h=Xe("category",a.category_name,"in",l),d=Xe("account",a.source_name,"in",l);e[h]=Ke("category",a.category_name,l),e[d]=Ke("account",a.source_name,l),u=d+"-"+h+"-"+l,t.hasOwnProperty(u)||(t[u]={from:d,to:h,amount:0}),t[u].amount+=c,u=h+"-"+L.all_money+"-"+l,t.hasOwnProperty(u)||(t[u]={from:h,to:L.all_money+(this.autoConversion?" ("+l+")":""),amount:0}),t[u].amount+=c}if(a.type==="withdrawal"){let h=Xe("budget",a.budget_name,"out",l);e[h]=Ke("budget",a.budget_name,l),u=L.all_money+"-"+h+"-"+l,t.hasOwnProperty(u)||(t[u]={from:L.all_money+(this.autoConversion?" ("+l+")":""),to:h,amount:0}),t[u].amount+=c;let d=Xe("category",a.category_name,"out",l);e[d]=Ke("category",a.category_name,l),u=h+"-"+d+"-"+l,t.hasOwnProperty(u)||(t[u]={from:h,to:d,amount:0}),t[u].amount+=c;let f=Xe("account",a.destination_name,"out",l);e[f]=Ke("account",a.destination_name,l),u=d+"-"+f+"-"+l,t.hasOwnProperty(u)||(t[u]={from:d,to:f,amount:0}),t[u].amount+=c}}}let i={label:"Firefly III dashboard sankey chart",data:[],colorFrom:s=>gr(s.dataset.data[s.dataIndex]?s.dataset.data[s.dataIndex].from:""),colorTo:s=>gr(s.dataset.data[s.dataIndex]?s.dataset.data[s.dataIndex].to:""),colorMode:"gradient",labels:e,size:"min"};for(let s in t)if(t.hasOwnProperty(s)){let o=t[s];i.data.push({from:o.from,to:o.to,flow:o.amount})}return n.data.datasets.push(i),n},drawChart(n){if(Hn!==null){Hn.data.datasets=n.data.datasets,Hn.update();return}Hn=new mt(document.querySelector("#sankey-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt(fr,n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Ht=s,this.drawChart(this.generateOptions()),this.loading=!1;return}let o={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),type:"withdrawal,deposit",page:1};this.downloadTransactions(o)},downloadTransactions(n){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),i=Nt(fr,t,e);new jg().list(n).then(o=>{if(Ht=[...Ht,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>n.page){n.page++,this.downloadTransactions(n);return}window.store.set(i,Ht),this.drawChart(this.generateOptions()),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,Ht.length!==0){this.drawChart(this.generateOptions()),this.loading=!1;return}this.getFreshData()}},init(){Ht=[],Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{this.autoConversion=n[0],ht=n[0],pt=new li;const t=n[1].replace("-","_");pt.locale=t,ci(pt,t).then(()=>{L.all_money=pt.t("firefly.all_money"),L.category=pt.t("firefly.category"),L.in=pt.t("firefly.money_flowing_in"),L.out=pt.t("firefly.money_flowing_out"),L.unknown_category=pt.t("firefly.unknown_category_plain"),L.unknown_source=pt.t("firefly.unknown_source_plain"),L.unknown_dest=pt.t("firefly.unknown_dest_plain"),L.unknown_account=pt.t("firefly.unknown_any_plain"),L.unknown_budget=pt.t("firefly.unknown_budget_plain"),L.expense_account=pt.t("firefly.expense_account"),L.revenue_account=pt.t("firefly.revenue_account"),L.budget=pt.t("firefly.budget"),Wi=!0,this.loadChart()})}),window.store.observe("end",()=>{Wi&&(this.transactions=[],this.loadChart())}),window.store.observe("autoConversion",n=>{Wi&&(this.autoConversion=n,this.loadChart())})}});let op=class{list(t){return vt.get("/api/v2/subscriptions",{params:t})}paid(t){return vt.get("/api/v2/subscriptions/sum/paid",{params:t})}unpaid(t){return vt.get("/api/v2/subscriptions/sum/unpaid",{params:t})}},Hi=!1,ee,Ct={};function Pa(n){return new op().list(n).then(e=>{let i=e.data.data;for(let s in i)if(i.hasOwnProperty(s)){let o=i[s];if(o.attributes.active&&o.attributes.pay_dates.length>0){let r=o.attributes.object_group_id===null?0:o.attributes.object_group_id,a=o.attributes.object_group_title===null?ee.t("firefly.default_group_title_name_plain"):o.attributes.object_group_title,l=o.attributes.object_group_order===null?0:o.attributes.object_group_order;Ct.hasOwnProperty(r)||(Ct[r]={id:r,title:a,order:l,payment_info:{},bills:[]});let c={id:o.id,name:o.attributes.name,amount_min:o.attributes.amount_min,amount_max:o.attributes.amount_max,amount:(parseFloat(o.attributes.amount_max)+parseFloat(o.attributes.amount_min))/2,currency_code:o.attributes.currency_code,native_amount_min:o.attributes.native_amount_min,native_amount_max:o.attributes.native_amount_max,native_amount:(parseFloat(o.attributes.native_amount_max)+parseFloat(o.attributes.native_amount_min))/2,native_currency_code:o.attributes.native_currency_code,transactions:[],pay_dates:o.attributes.pay_dates,paid:o.attributes.paid_dates.length>0};c.expected_amount=n.autoConversion?V(c.native_amount,c.native_currency_code):V(c.amount,c.currency_code),c.expected_times=ee.t("firefly.subscr_expected_x_times",{times:o.attributes.pay_dates.length,amount:c.expected_amount});for(let u in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(u)){const h=o.attributes.paid_dates[u];let d=100;n.autoConversion&&(d=Math.round(-100+parseFloat(h.native_amount)*-1/parseFloat(c.native_amount)*100)),n.autoConversion||(d=Math.round(-100+parseFloat(h.amount)*-1/parseFloat(c.amount)*100));let f={amount:n.autoConversion?V(h.native_amount,h.native_currency_code):V(h.amount,h.currency_code),percentage:d,date:J(new Date(h.date),"PP"),foreign_amount:null};h.foreign_currency_code!==null&&(f.foreign_amount=n.autoConversion?h.foreign_native_amount:h.foreign_amount,f.foreign_currency_code=n.autoConversion?h.native_currency_code:h.foreign_currency_code),c.transactions.push(f)}if(Ct[r].bills.push(c),o.attributes.paid_dates.length===0){const u=o.attributes.pay_dates.length*c.amount,h=o.attributes.pay_dates.length*c.native_amount;Ct[r].payment_info.hasOwnProperty(c.currency_code)||(Ct[r].payment_info[c.currency_code]={currency_code:c.currency_code,paid:0,unpaid:0,native_currency_code:c.native_currency_code,native_paid:0,native_unpaid:0}),Ct[r].payment_info[c.currency_code].unpaid+=u,Ct[r].payment_info[c.currency_code].native_unpaid+=h}if(o.attributes.paid_dates.length>0){for(let u in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(u)){let h=o.attributes.paid_dates[u];Ct[r].payment_info.hasOwnProperty(h.currency_code)||(Ct[r].payment_info[h.currency_code]={currency_code:c.currency_code,paid:0,unpaid:0,native_currency_code:c.native_currency_code,native_paid:0,native_unpaid:0});const d=parseFloat(h.amount)*-1,f=parseFloat(h.native_amount)*-1;Ct[r].payment_info[h.currency_code].paid+=d,Ct[r].payment_info[h.currency_code].native_paid+=f}}}}return parseInt(e.data.meta.pagination.total_pages)>n.page?(n.page++,Pa(n)):Promise.resolve()})}const rp=()=>({loading:!1,autoConversion:!1,subscriptions:[],startSubscriptions(){this.loading=!0;let n=new Date(window.store.get("start")),t=new Date(window.store.get("end"));console.log("here we are");const e=window.store.get("cacheValid");let i=window.store.get(Nt("subscriptions-data-dashboard",n,t));e&&typeof i<"u",Ct={},this.subscriptions=[],console.log("cache is invalid, must download");let s={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),autoConversion:this.autoConversion,page:1};Pa(s).then(()=>{console.log("Done with download!");let o=Object.values(Ct);for(let r in o)if(o.hasOwnProperty(r)){let a=o[r];const l=Object.keys(a.payment_info);a.col_size=l.length===1?"col-6 offset-3":"col-6",a.chart_width=l.length===1?"50%":"100%",a.payment_length=l.length,this.subscriptions.push(a)}this.loading=!1})},drawPieChart(n,t,e){let i="#pie_"+n+"_"+e.currency_code;const s=this.autoConversion?e.native_unpaid:e.unpaid,o=this.autoConversion?e.native_paid:e.paid,r=this.autoConversion?e.native_currency_code:e.currency_code,l={type:"doughnut",data:{labels:[ee.t("firefly.paid"),ee.t("firefly.unpaid")],datasets:[{label:ee.t("firefly.subscriptions_in_group",{title:t}),data:[o,s],backgroundColor:["rgb(54, 162, 235)","rgb(255, 99, 132)"],hoverOffset:4}]},options:{plugins:{tooltip:{callbacks:{label:function(u){return u.dataset.label+": "+V(u.raw,r)}}}}}};var c=mt.getChart(document.querySelector(i));typeof c<"u"&&c.destroy(),new mt(document.querySelector(i),l)},init(){console.log("subscriptions init"),Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{console.log("subscriptions after promises"),this.autoConversion=n[0],Hi=!0,ee=new li;const t=n[1].replace("-","_");ee.locale=t,ci(ee,t).then(()=>{this.loading===!1&&this.startSubscriptions()})}),window.store.observe("end",()=>{Hi&&(console.log("subscriptions observe end"),this.loading===!1&&this.startSubscriptions())}),window.store.observe("autoConversion",n=>{Hi&&(console.log("subscriptions observe autoConversion"),this.autoConversion=n,this.loading===!1&&this.startSubscriptions())})}});class ap{list(t){return vt.get("/api/v2/piggy-banks",{params:t})}}let Vt={},Vi=!1,Vn;const pr="dashboard-piggies-data",lp=()=>({loading:!1,autoConversion:!1,sankeyGrouping:"account",piggies:[],getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt(pr,n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Vt=s,this.parsePiggies(),this.loading=!1;return}let o={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),page:1};this.downloadPiggyBanks(o)},downloadPiggyBanks(n){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),i=Nt(pr,t,e);new ap().list(n).then(o=>{if(Vt=[...Vt,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>n.page){n.page++,this.downloadPiggyBanks(n);return}window.store.set(i,Vt),this.parsePiggies(),this.loading=!1})},parsePiggies(){let n=[];for(let t in Vt)if(Vt.hasOwnProperty(t)){let e=Vt[t];if(e.attributes.percentage>=100||e.attributes.percentage===0)continue;let i=e.object_group_title??Vn.t("firefly.default_group_title_name_plain");n.hasOwnProperty(i)||(n[i]={id:e.object_group_id??0,title:i,order:e.object_group_order??0,piggies:[]});let s={id:e.id,name:e.attributes.name,percentage:parseInt(e.attributes.percentage),amount:this.autoConversion?e.attributes.native_current_amount:e.attributes.current_amount,left_to_save:this.autoConversion?e.attributes.native_left_to_save:e.attributes.left_to_save,target_amount:this.autoConversion?e.attributes.native_target_amount:e.attributes.target_amount,save_per_month:this.autoConversion?e.attributes.native_save_per_month:e.attributes.save_per_month,currency_code:this.autoConversion?e.attributes.native_currency_code:e.attributes.currency_code};n[i].piggies.push(s)}this.piggies=Object.values(n)},loadPiggyBanks(){if(this.loading!==!0){if(this.loading=!0,this.piggies.length!==0){this.parsePiggies(),this.loading=!1;return}this.getFreshData()}},init(){Vt=[],Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{Vn=new li;const t=n[1].replace("-","_");Vn.locale=t,ci(Vn,t).then(()=>{Vi=!0,this.autoConversion=n[0],this.loadPiggyBanks()})}),window.store.observe("end",()=>{Vi&&(Vt=[],this.loadPiggyBanks())}),window.store.observe("autoConversion",n=>{Vi&&(this.autoConversion=n,this.loadPiggyBanks())})}});/*! * chartjs-adapter-date-fns v3.0.0 * https://www.chartjs.org * (c) 2022 chartjs-adapter-date-fns Contributors diff --git a/public/build/assets/load-translations-9a154502.js b/public/build/assets/load-translations-87b32220.js similarity index 88% rename from public/build/assets/load-translations-9a154502.js rename to public/build/assets/load-translations-87b32220.js index 4f53dc6dd5..dc6fdafd0c 100644 --- a/public/build/assets/load-translations-9a154502.js +++ b/public/build/assets/load-translations-87b32220.js @@ -1,18 +1,18 @@ function bind$4(t,e){return function(){return t.apply(e,arguments)}}const{toString:toString$7}=Object.prototype,{getPrototypeOf}=Object,kindOf=(t=>e=>{const a=toString$7.call(e);return t[a]||(t[a]=a.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=t=>(t=t.toLowerCase(),e=>kindOf(e)===t),typeOfTest=t=>e=>typeof e===t,{isArray:isArray$c}=Array,isUndefined=typeOfTest("undefined");function isBuffer$3(t){return t!==null&&!isUndefined(t)&&t.constructor!==null&&!isUndefined(t.constructor)&&isFunction$5(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&isArrayBuffer(t.buffer),e}const isString$1=typeOfTest("string"),isFunction$5=typeOfTest("function"),isNumber=typeOfTest("number"),isObject$b=t=>t!==null&&typeof t=="object",isBoolean=t=>t===!0||t===!1,isPlainObject=t=>{if(kindOf(t)!=="object")return!1;const e=getPrototypeOf(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=t=>isObject$b(t)&&isFunction$5(t.pipe),isFormData=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||isFunction$5(t.append)&&((e=kindOf(t))==="formdata"||e==="object"&&isFunction$5(t.toString)&&t.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),trim$2=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(t,e,{allOwnKeys:a=!1}={}){if(t===null||typeof t>"u")return;let r,n;if(typeof t!="object"&&(t=[t]),isArray$c(t))for(r=0,n=t.length;r0;)if(n=a[r],e===n.toLowerCase())return n;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),isContextDefined=t=>!isUndefined(t)&&t!==_global;function merge(){const{caseless:t}=isContextDefined(this)&&this||{},e={},a=(r,n)=>{const i=t&&findKey$1(e,n)||n;isPlainObject(e[i])&&isPlainObject(r)?e[i]=merge(e[i],r):isPlainObject(r)?e[i]=merge({},r):isArray$c(r)?e[i]=r.slice():e[i]=r};for(let r=0,n=arguments.length;r(forEach(e,(n,i)=>{a&&isFunction$5(n)?t[i]=bind$4(n,a):t[i]=n},{allOwnKeys:r}),t),stripBOM=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),inherits=(t,e,a,r)=>{t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),a&&Object.assign(t.prototype,a)},toFlatObject=(t,e,a,r)=>{let n,i,o;const s={};if(e=e||{},t==null)return e;do{for(n=Object.getOwnPropertyNames(t),i=n.length;i-- >0;)o=n[i],(!r||r(o,t,e))&&!s[o]&&(e[o]=t[o],s[o]=!0);t=a!==!1&&getPrototypeOf(t)}while(t&&(!a||a(t,e))&&t!==Object.prototype);return e},endsWith=(t,e,a)=>{t=String(t),(a===void 0||a>t.length)&&(a=t.length),a-=e.length;const r=t.indexOf(e,a);return r!==-1&&r===a},toArray=t=>{if(!t)return null;if(isArray$c(t))return t;let e=t.length;if(!isNumber(e))return null;const a=new Array(e);for(;e-- >0;)a[e]=t[e];return a},isTypedArray$3=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(t,e)=>{const r=(t&&t[Symbol.iterator]).call(t);let n;for(;(n=r.next())&&!n.done;){const i=n.value;e.call(t,i[0],i[1])}},matchAll=(t,e)=>{let a;const r=[];for(;(a=t.exec(e))!==null;)r.push(a);return r},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(a,r,n){return r.toUpperCase()+n}),hasOwnProperty$c=(({hasOwnProperty:t})=>(e,a)=>t.call(e,a))(Object.prototype),isRegExp=kindOfTest("RegExp"),reduceDescriptors=(t,e)=>{const a=Object.getOwnPropertyDescriptors(t),r={};forEach(a,(n,i)=>{let o;(o=e(n,i,t))!==!1&&(r[i]=o||n)}),Object.defineProperties(t,r)},freezeMethods=t=>{reduceDescriptors(t,(e,a)=>{if(isFunction$5(t)&&["arguments","caller","callee"].indexOf(a)!==-1)return!1;const r=t[a];if(isFunction$5(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+a+"'")})}})},toObjectSet=(t,e)=>{const a={},r=n=>{n.forEach(i=>{a[i]=!0})};return isArray$c(t)?r(t):r(String(t).split(e)),a},noop$3=()=>{},toFiniteNumber=(t,e)=>(t=+t,Number.isFinite(t)?t:e),ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(t=16,e=ALPHABET.ALPHA_DIGIT)=>{let a="";const{length:r}=e;for(;t--;)a+=e[Math.random()*r|0];return a};function isSpecCompliantForm(t){return!!(t&&isFunction$5(t.append)&&t[Symbol.toStringTag]==="FormData"&&t[Symbol.iterator])}const toJSONObject=t=>{const e=new Array(10),a=(r,n)=>{if(isObject$b(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[n]=r;const i=isArray$c(r)?[]:{};return forEach(r,(o,s)=>{const u=a(o,n+1);!isUndefined(u)&&(i[s]=u)}),e[n]=void 0,i}}return r};return a(t,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=t=>t&&(isObject$b(t)||isFunction$5(t))&&isFunction$5(t.then)&&isFunction$5(t.catch),utils={isArray:isArray$c,isArrayBuffer,isBuffer:isBuffer$3,isFormData,isArrayBufferView,isString:isString$1,isNumber,isBoolean,isObject:isObject$b,isPlainObject,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp,isFunction:isFunction$5,isStream,isURLSearchParams,isTypedArray:isTypedArray$3,isFileList,forEach,merge,extend,trim:trim$2,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty:hasOwnProperty$c,hasOwnProp:hasOwnProperty$c,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$3,toFiniteNumber,findKey:findKey$1,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(t,e,a,r,n){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),a&&(this.config=a),r&&(this.request=r),n&&(this.response=n)}utils.inherits(AxiosError,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{descriptors[t]={value:t}});Object.defineProperties(AxiosError,descriptors);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(t,e,a,r,n,i)=>{const o=Object.create(prototype$1);return utils.toFlatObject(t,o,function(u){return u!==Error.prototype},s=>s!=="isAxiosError"),AxiosError.call(o,t.message,e,a,r,n),o.cause=t,o.name=t.name,i&&Object.assign(o,i),o};const httpAdapter=null;function isVisitable(t){return utils.isPlainObject(t)||utils.isArray(t)}function removeBrackets(t){return utils.endsWith(t,"[]")?t.slice(0,-2):t}function renderKey(t,e,a){return t?t.concat(e).map(function(n,i){return n=removeBrackets(n),!a&&i?"["+n+"]":n}).join(a?".":""):e}function isFlatArray(t){return utils.isArray(t)&&!t.some(isVisitable)}const predicates=utils.toFlatObject(utils,{},null,function(e){return/^is[A-Z]/.test(e)});function toFormData(t,e,a){if(!utils.isObject(t))throw new TypeError("target must be an object");e=e||new FormData,a=utils.toFlatObject(a,{metaTokens:!0,dots:!1,indexes:!1},!1,function(O,M){return!utils.isUndefined(M[O])});const r=a.metaTokens,n=a.visitor||l,i=a.dots,o=a.indexes,u=(a.Blob||typeof Blob<"u"&&Blob)&&utils.isSpecCompliantForm(e);if(!utils.isFunction(n))throw new TypeError("visitor must be a function");function c(T){if(T===null)return"";if(utils.isDate(T))return T.toISOString();if(!u&&utils.isBlob(T))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils.isArrayBuffer(T)||utils.isTypedArray(T)?u&&typeof Blob=="function"?new Blob([T]):Buffer.from(T):T}function l(T,O,M){let C=T;if(T&&!M&&typeof T=="object"){if(utils.endsWith(O,"{}"))O=r?O:O.slice(0,-2),T=JSON.stringify(T);else if(utils.isArray(T)&&isFlatArray(T)||(utils.isFileList(T)||utils.endsWith(O,"[]"))&&(C=utils.toArray(T)))return O=removeBrackets(O),C.forEach(function(L,D){!(utils.isUndefined(L)||L===null)&&e.append(o===!0?renderKey([O],D,i):o===null?O:O+"[]",c(L))}),!1}return isVisitable(T)?!0:(e.append(renderKey(M,O,i),c(T)),!1)}const p=[],v=Object.assign(predicates,{defaultVisitor:l,convertValue:c,isVisitable});function S(T,O){if(!utils.isUndefined(T)){if(p.indexOf(T)!==-1)throw Error("Circular reference detected in "+O.join("."));p.push(T),utils.forEach(T,function(C,w){(!(utils.isUndefined(C)||C===null)&&n.call(e,C,utils.isString(w)?w.trim():w,O,v))===!0&&S(C,O?O.concat(w):[w])}),p.pop()}}if(!utils.isObject(t))throw new TypeError("data must be an object");return S(t),e}function encode$1(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function AxiosURLSearchParams(t,e){this._pairs=[],t&&toFormData(t,this,e)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function(e,a){this._pairs.push([e,a])};prototype.toString=function(e){const a=e?function(r){return e.call(this,r,encode$1)}:encode$1;return this._pairs.map(function(n){return a(n[0])+"="+a(n[1])},"").join("&")};function encode(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(t,e,a){if(!e)return t;const r=a&&a.encode||encode,n=a&&a.serialize;let i;if(n?i=n(e,a):i=utils.isURLSearchParams(e)?e.toString():new AxiosURLSearchParams(e,a).toString(r),i){const o=t.indexOf("#");o!==-1&&(t=t.slice(0,o)),t+=(t.indexOf("?")===-1?"?":"&")+i}return t}class InterceptorManager{constructor(){this.handlers=[]}use(e,a,r){return this.handlers.push({fulfilled:e,rejected:a,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){utils.forEach(this.handlers,function(r){r!==null&&e(r)})}}const InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,isStandardBrowserEnv=(()=>{let t;return typeof navigator<"u"&&((t=navigator.product)==="ReactNative"||t==="NativeScript"||t==="NS")?!1:typeof window<"u"&&typeof document<"u"})(),isStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),platform={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},isStandardBrowserEnv,isStandardBrowserWebWorkerEnv,protocols:["http","https","file","blob","url","data"]};function toURLEncodedForm(t,e){return toFormData(t,new platform.classes.URLSearchParams,Object.assign({visitor:function(a,r,n,i){return platform.isNode&&utils.isBuffer(a)?(this.append(r,a.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},e))}function parsePropPath(t){return utils.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function arrayToObject(t){const e={},a=Object.keys(t);let r;const n=a.length;let i;for(r=0;r=a.length;return o=!o&&utils.isArray(n)?n.length:o,u?(utils.hasOwnProp(n,o)?n[o]=[n[o],r]:n[o]=r,!s):((!n[o]||!utils.isObject(n[o]))&&(n[o]=[]),e(a,r,n[o],i)&&utils.isArray(n[o])&&(n[o]=arrayToObject(n[o])),!s)}if(utils.isFormData(t)&&utils.isFunction(t.entries)){const a={};return utils.forEachEntry(t,(r,n)=>{e(parsePropPath(r),n,a,0)}),a}return null}function stringifySafely(t,e,a){if(utils.isString(t))try{return(e||JSON.parse)(t),utils.trim(t)}catch(r){if(r.name!=="SyntaxError")throw r}return(a||JSON.stringify)(t)}const defaults={transitional:transitionalDefaults,adapter:["xhr","http"],transformRequest:[function(e,a){const r=a.getContentType()||"",n=r.indexOf("application/json")>-1,i=utils.isObject(e);if(i&&utils.isHTMLForm(e)&&(e=new FormData(e)),utils.isFormData(e))return n&&n?JSON.stringify(formDataToJSON(e)):e;if(utils.isArrayBuffer(e)||utils.isBuffer(e)||utils.isStream(e)||utils.isFile(e)||utils.isBlob(e))return e;if(utils.isArrayBufferView(e))return e.buffer;if(utils.isURLSearchParams(e))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(e,this.formSerializer).toString();if((s=utils.isFileList(e))||r.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return toFormData(s?{"files[]":e}:e,u&&new u,this.formSerializer)}}return i||n?(a.setContentType("application/json",!1),stringifySafely(e)):e}],transformResponse:[function(e){const a=this.transitional||defaults.transitional,r=a&&a.forcedJSONParsing,n=this.responseType==="json";if(e&&utils.isString(e)&&(r&&!this.responseType||n)){const o=!(a&&a.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(s){if(o)throw s.name==="SyntaxError"?AxiosError.from(s,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):s}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils.forEach(["delete","get","head","post","put","patch"],t=>{defaults.headers[t]={}});const defaults$1=defaults,ignoreDuplicateOf=utils.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),parseHeaders=t=>{const e={};let a,r,n;return t&&t.split(` `).forEach(function(o){n=o.indexOf(":"),a=o.substring(0,n).trim().toLowerCase(),r=o.substring(n+1).trim(),!(!a||e[a]&&ignoreDuplicateOf[a])&&(a==="set-cookie"?e[a]?e[a].push(r):e[a]=[r]:e[a]=e[a]?e[a]+", "+r:r)}),e},$internals=Symbol("internals");function normalizeHeader(t){return t&&String(t).trim().toLowerCase()}function normalizeValue(t){return t===!1||t==null?t:utils.isArray(t)?t.map(normalizeValue):String(t)}function parseTokens(t){const e=Object.create(null),a=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=a.exec(t);)e[r[1]]=r[2];return e}const isValidHeaderName=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function matchHeaderValue(t,e,a,r,n){if(utils.isFunction(r))return r.call(this,e,a);if(n&&(e=a),!!utils.isString(e)){if(utils.isString(r))return e.indexOf(r)!==-1;if(utils.isRegExp(r))return r.test(e)}}function formatHeader(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,a,r)=>a.toUpperCase()+r)}function buildAccessors(t,e){const a=utils.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+a,{value:function(n,i,o){return this[r].call(this,e,n,i,o)},configurable:!0})})}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,a,r){const n=this;function i(s,u,c){const l=normalizeHeader(u);if(!l)throw new Error("header name must be a non-empty string");const p=utils.findKey(n,l);(!p||n[p]===void 0||c===!0||c===void 0&&n[p]!==!1)&&(n[p||u]=normalizeValue(s))}const o=(s,u)=>utils.forEach(s,(c,l)=>i(c,l,u));return utils.isPlainObject(e)||e instanceof this.constructor?o(e,a):utils.isString(e)&&(e=e.trim())&&!isValidHeaderName(e)?o(parseHeaders(e),a):e!=null&&i(a,e,r),this}get(e,a){if(e=normalizeHeader(e),e){const r=utils.findKey(this,e);if(r){const n=this[r];if(!a)return n;if(a===!0)return parseTokens(n);if(utils.isFunction(a))return a.call(this,n,r);if(utils.isRegExp(a))return a.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,a){if(e=normalizeHeader(e),e){const r=utils.findKey(this,e);return!!(r&&this[r]!==void 0&&(!a||matchHeaderValue(this,this[r],r,a)))}return!1}delete(e,a){const r=this;let n=!1;function i(o){if(o=normalizeHeader(o),o){const s=utils.findKey(r,o);s&&(!a||matchHeaderValue(r,r[s],s,a))&&(delete r[s],n=!0)}}return utils.isArray(e)?e.forEach(i):i(e),n}clear(e){const a=Object.keys(this);let r=a.length,n=!1;for(;r--;){const i=a[r];(!e||matchHeaderValue(this,this[i],i,e,!0))&&(delete this[i],n=!0)}return n}normalize(e){const a=this,r={};return utils.forEach(this,(n,i)=>{const o=utils.findKey(r,i);if(o){a[o]=normalizeValue(n),delete a[i];return}const s=e?formatHeader(i):String(i).trim();s!==i&&delete a[i],a[s]=normalizeValue(n),r[s]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const a=Object.create(null);return utils.forEach(this,(r,n)=>{r!=null&&r!==!1&&(a[n]=e&&utils.isArray(r)?r.join(", "):r)}),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,a])=>e+": "+a).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...a){const r=new this(e);return a.forEach(n=>r.set(n)),r}static accessor(e){const r=(this[$internals]=this[$internals]={accessors:{}}).accessors,n=this.prototype;function i(o){const s=normalizeHeader(o);r[s]||(buildAccessors(n,o),r[s]=!0)}return utils.isArray(e)?e.forEach(i):i(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils.reduceDescriptors(AxiosHeaders.prototype,({value:t},e)=>{let a=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(r){this[a]=r}}});utils.freezeMethods(AxiosHeaders);const AxiosHeaders$1=AxiosHeaders;function transformData(t,e){const a=this||defaults$1,r=e||a,n=AxiosHeaders$1.from(r.headers);let i=r.data;return utils.forEach(t,function(s){i=s.call(a,i,n.normalize(),e?e.status:void 0)}),n.normalize(),i}function isCancel(t){return!!(t&&t.__CANCEL__)}function CanceledError(t,e,a){AxiosError.call(this,t??"canceled",AxiosError.ERR_CANCELED,e,a),this.name="CanceledError"}utils.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(t,e,a){const r=a.config.validateStatus;!a.status||!r||r(a.status)?t(a):e(new AxiosError("Request failed with status code "+a.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))}const cookies=platform.isStandardBrowserEnv?function(){return{write:function(a,r,n,i,o,s){const u=[];u.push(a+"="+encodeURIComponent(r)),utils.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),utils.isString(i)&&u.push("path="+i),utils.isString(o)&&u.push("domain="+o),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(a){const r=document.cookie.match(new RegExp("(^|;\\s*)("+a+")=([^;]*)"));return r?decodeURIComponent(r[3]):null},remove:function(a){this.write(a,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function isAbsoluteURL(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function combineURLs(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}function buildFullPath(t,e){return t&&!isAbsoluteURL(e)?combineURLs(t,e):e}const isURLSameOrigin=platform.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");let r;function n(i){let o=i;return e&&(a.setAttribute("href",o),o=a.href),a.setAttribute("href",o),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:a.pathname.charAt(0)==="/"?a.pathname:"/"+a.pathname}}return r=n(window.location.href),function(o){const s=utils.isString(o)?n(o):o;return s.protocol===r.protocol&&s.host===r.host}}():function(){return function(){return!0}}();function parseProtocol(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function speedometer(t,e){t=t||10;const a=new Array(t),r=new Array(t);let n=0,i=0,o;return e=e!==void 0?e:1e3,function(u){const c=Date.now(),l=r[i];o||(o=c),a[n]=u,r[n]=c;let p=i,v=0;for(;p!==n;)v+=a[p++],p=p%t;if(n=(n+1)%t,n===i&&(i=(i+1)%t),c-o{const i=n.loaded,o=n.lengthComputable?n.total:void 0,s=i-a,u=r(s),c=i<=o;a=i;const l={loaded:i,total:o,progress:o?i/o:void 0,bytes:s,rate:u||void 0,estimated:u&&o&&c?(o-i)/u:void 0,event:n};l[e?"download":"upload"]=!0,t(l)}}const isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(t){return new Promise(function(a,r){let n=t.data;const i=AxiosHeaders$1.from(t.headers).normalize(),o=t.responseType;let s;function u(){t.cancelToken&&t.cancelToken.unsubscribe(s),t.signal&&t.signal.removeEventListener("abort",s)}let c;utils.isFormData(n)&&(platform.isStandardBrowserEnv||platform.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.getContentType(/^\s*multipart\/form-data/)?utils.isString(c=i.getContentType())&&i.setContentType(c.replace(/^\s*(multipart\/form-data);+/,"$1")):i.setContentType("multipart/form-data"));let l=new XMLHttpRequest;if(t.auth){const T=t.auth.username||"",O=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";i.set("Authorization","Basic "+btoa(T+":"+O))}const p=buildFullPath(t.baseURL,t.url);l.open(t.method.toUpperCase(),buildURL(p,t.params,t.paramsSerializer),!0),l.timeout=t.timeout;function v(){if(!l)return;const T=AxiosHeaders$1.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders()),M={data:!o||o==="text"||o==="json"?l.responseText:l.response,status:l.status,statusText:l.statusText,headers:T,config:t,request:l};settle(function(w){a(w),u()},function(w){r(w),u()},M),l=null}if("onloadend"in l?l.onloadend=v:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(v)},l.onabort=function(){l&&(r(new AxiosError("Request aborted",AxiosError.ECONNABORTED,t,l)),l=null)},l.onerror=function(){r(new AxiosError("Network Error",AxiosError.ERR_NETWORK,t,l)),l=null},l.ontimeout=function(){let O=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const M=t.transitional||transitionalDefaults;t.timeoutErrorMessage&&(O=t.timeoutErrorMessage),r(new AxiosError(O,M.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,t,l)),l=null},platform.isStandardBrowserEnv){const T=(t.withCredentials||isURLSameOrigin(p))&&t.xsrfCookieName&&cookies.read(t.xsrfCookieName);T&&i.set(t.xsrfHeaderName,T)}n===void 0&&i.setContentType(null),"setRequestHeader"in l&&utils.forEach(i.toJSON(),function(O,M){l.setRequestHeader(M,O)}),utils.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),o&&o!=="json"&&(l.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&l.addEventListener("progress",progressEventReducer(t.onDownloadProgress,!0)),typeof t.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",progressEventReducer(t.onUploadProgress)),(t.cancelToken||t.signal)&&(s=T=>{l&&(r(!T||T.type?new CanceledError(null,t,l):T),l.abort(),l=null)},t.cancelToken&&t.cancelToken.subscribe(s),t.signal&&(t.signal.aborted?s():t.signal.addEventListener("abort",s)));const S=parseProtocol(p);if(S&&platform.protocols.indexOf(S)===-1){r(new AxiosError("Unsupported protocol "+S+":",AxiosError.ERR_BAD_REQUEST,t));return}l.send(n||null)})},knownAdapters={http:httpAdapter,xhr:xhrAdapter};utils.forEach(knownAdapters,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const renderReason=t=>`- ${t}`,isResolvedHandle=t=>utils.isFunction(t)||t===null||t===!1,adapters={getAdapter:t=>{t=utils.isArray(t)?t:[t];const{length:e}=t;let a,r;const n={};for(let i=0;i`adapter ${s} `+(u===!1?"is not supported by the environment":"is not available in the build"));let o=e?i.length>1?`since : +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...a){const r=new this(e);return a.forEach(n=>r.set(n)),r}static accessor(e){const r=(this[$internals]=this[$internals]={accessors:{}}).accessors,n=this.prototype;function i(o){const s=normalizeHeader(o);r[s]||(buildAccessors(n,o),r[s]=!0)}return utils.isArray(e)?e.forEach(i):i(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils.reduceDescriptors(AxiosHeaders.prototype,({value:t},e)=>{let a=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(r){this[a]=r}}});utils.freezeMethods(AxiosHeaders);const AxiosHeaders$1=AxiosHeaders;function transformData(t,e){const a=this||defaults$1,r=e||a,n=AxiosHeaders$1.from(r.headers);let i=r.data;return utils.forEach(t,function(s){i=s.call(a,i,n.normalize(),e?e.status:void 0)}),n.normalize(),i}function isCancel(t){return!!(t&&t.__CANCEL__)}function CanceledError(t,e,a){AxiosError.call(this,t??"canceled",AxiosError.ERR_CANCELED,e,a),this.name="CanceledError"}utils.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(t,e,a){const r=a.config.validateStatus;!a.status||!r||r(a.status)?t(a):e(new AxiosError("Request failed with status code "+a.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))}const cookies=platform.isStandardBrowserEnv?function(){return{write:function(a,r,n,i,o,s){const u=[];u.push(a+"="+encodeURIComponent(r)),utils.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),utils.isString(i)&&u.push("path="+i),utils.isString(o)&&u.push("domain="+o),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(a){const r=document.cookie.match(new RegExp("(^|;\\s*)("+a+")=([^;]*)"));return r?decodeURIComponent(r[3]):null},remove:function(a){this.write(a,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function isAbsoluteURL(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function combineURLs(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}function buildFullPath(t,e){return t&&!isAbsoluteURL(e)?combineURLs(t,e):e}const isURLSameOrigin=platform.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");let r;function n(i){let o=i;return e&&(a.setAttribute("href",o),o=a.href),a.setAttribute("href",o),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:a.pathname.charAt(0)==="/"?a.pathname:"/"+a.pathname}}return r=n(window.location.href),function(o){const s=utils.isString(o)?n(o):o;return s.protocol===r.protocol&&s.host===r.host}}():function(){return function(){return!0}}();function parseProtocol(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function speedometer(t,e){t=t||10;const a=new Array(t),r=new Array(t);let n=0,i=0,o;return e=e!==void 0?e:1e3,function(u){const c=Date.now(),l=r[i];o||(o=c),a[n]=u,r[n]=c;let p=i,v=0;for(;p!==n;)v+=a[p++],p=p%t;if(n=(n+1)%t,n===i&&(i=(i+1)%t),c-o{const i=n.loaded,o=n.lengthComputable?n.total:void 0,s=i-a,u=r(s),c=i<=o;a=i;const l={loaded:i,total:o,progress:o?i/o:void 0,bytes:s,rate:u||void 0,estimated:u&&o&&c?(o-i)/u:void 0,event:n};l[e?"download":"upload"]=!0,t(l)}}const isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(t){return new Promise(function(a,r){let n=t.data;const i=AxiosHeaders$1.from(t.headers).normalize(),o=t.responseType;let s;function u(){t.cancelToken&&t.cancelToken.unsubscribe(s),t.signal&&t.signal.removeEventListener("abort",s)}let c;utils.isFormData(n)&&(platform.isStandardBrowserEnv||platform.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.getContentType(/^\s*multipart\/form-data/)?utils.isString(c=i.getContentType())&&i.setContentType(c.replace(/^\s*(multipart\/form-data);+/,"$1")):i.setContentType("multipart/form-data"));let l=new XMLHttpRequest;if(t.auth){const T=t.auth.username||"",O=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";i.set("Authorization","Basic "+btoa(T+":"+O))}const p=buildFullPath(t.baseURL,t.url);l.open(t.method.toUpperCase(),buildURL(p,t.params,t.paramsSerializer),!0),l.timeout=t.timeout;function v(){if(!l)return;const T=AxiosHeaders$1.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders()),M={data:!o||o==="text"||o==="json"?l.responseText:l.response,status:l.status,statusText:l.statusText,headers:T,config:t,request:l};settle(function(w){a(w),u()},function(w){r(w),u()},M),l=null}if("onloadend"in l?l.onloadend=v:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(v)},l.onabort=function(){l&&(r(new AxiosError("Request aborted",AxiosError.ECONNABORTED,t,l)),l=null)},l.onerror=function(){r(new AxiosError("Network Error",AxiosError.ERR_NETWORK,t,l)),l=null},l.ontimeout=function(){let O=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const M=t.transitional||transitionalDefaults;t.timeoutErrorMessage&&(O=t.timeoutErrorMessage),r(new AxiosError(O,M.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,t,l)),l=null},platform.isStandardBrowserEnv){const T=isURLSameOrigin(p)&&t.xsrfCookieName&&cookies.read(t.xsrfCookieName);T&&i.set(t.xsrfHeaderName,T)}n===void 0&&i.setContentType(null),"setRequestHeader"in l&&utils.forEach(i.toJSON(),function(O,M){l.setRequestHeader(M,O)}),utils.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),o&&o!=="json"&&(l.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&l.addEventListener("progress",progressEventReducer(t.onDownloadProgress,!0)),typeof t.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",progressEventReducer(t.onUploadProgress)),(t.cancelToken||t.signal)&&(s=T=>{l&&(r(!T||T.type?new CanceledError(null,t,l):T),l.abort(),l=null)},t.cancelToken&&t.cancelToken.subscribe(s),t.signal&&(t.signal.aborted?s():t.signal.addEventListener("abort",s)));const S=parseProtocol(p);if(S&&platform.protocols.indexOf(S)===-1){r(new AxiosError("Unsupported protocol "+S+":",AxiosError.ERR_BAD_REQUEST,t));return}l.send(n||null)})},knownAdapters={http:httpAdapter,xhr:xhrAdapter};utils.forEach(knownAdapters,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const renderReason=t=>`- ${t}`,isResolvedHandle=t=>utils.isFunction(t)||t===null||t===!1,adapters={getAdapter:t=>{t=utils.isArray(t)?t:[t];const{length:e}=t;let a,r;const n={};for(let i=0;i`adapter ${s} `+(u===!1?"is not supported by the environment":"is not available in the build"));let o=e?i.length>1?`since : `+i.map(renderReason).join(` -`):" "+renderReason(i[0]):"as no adapter specified";throw new AxiosError("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return r},adapters:knownAdapters};function throwIfCancellationRequested(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new CanceledError(null,t)}function dispatchRequest(t){return throwIfCancellationRequested(t),t.headers=AxiosHeaders$1.from(t.headers),t.data=transformData.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(t.adapter||defaults$1.adapter)(t).then(function(r){return throwIfCancellationRequested(t),r.data=transformData.call(t,t.transformResponse,r),r.headers=AxiosHeaders$1.from(r.headers),r},function(r){return isCancel(r)||(throwIfCancellationRequested(t),r&&r.response&&(r.response.data=transformData.call(t,t.transformResponse,r.response),r.response.headers=AxiosHeaders$1.from(r.response.headers))),Promise.reject(r)})}const headersToObject=t=>t instanceof AxiosHeaders$1?t.toJSON():t;function mergeConfig(t,e){e=e||{};const a={};function r(c,l,p){return utils.isPlainObject(c)&&utils.isPlainObject(l)?utils.merge.call({caseless:p},c,l):utils.isPlainObject(l)?utils.merge({},l):utils.isArray(l)?l.slice():l}function n(c,l,p){if(utils.isUndefined(l)){if(!utils.isUndefined(c))return r(void 0,c,p)}else return r(c,l,p)}function i(c,l){if(!utils.isUndefined(l))return r(void 0,l)}function o(c,l){if(utils.isUndefined(l)){if(!utils.isUndefined(c))return r(void 0,c)}else return r(void 0,l)}function s(c,l,p){if(p in e)return r(c,l);if(p in t)return r(void 0,c)}const u={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(c,l)=>n(headersToObject(c),headersToObject(l),!0)};return utils.forEach(Object.keys(Object.assign({},t,e)),function(l){const p=u[l]||n,v=p(t[l],e[l],l);utils.isUndefined(v)&&p!==s||(a[l]=v)}),a}const VERSION$1="1.5.1",validators$1={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{validators$1[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}});const deprecatedWarnings={};validators$1.transitional=function(e,a,r){function n(i,o){return"[Axios v"+VERSION$1+"] Transitional option '"+i+"'"+o+(r?". "+r:"")}return(i,o,s)=>{if(e===!1)throw new AxiosError(n(o," has been removed"+(a?" in "+a:"")),AxiosError.ERR_DEPRECATED);return a&&!deprecatedWarnings[o]&&(deprecatedWarnings[o]=!0,console.warn(n(o," has been deprecated since v"+a+" and will be removed in the near future"))),e?e(i,o,s):!0}};function assertOptions(t,e,a){if(typeof t!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let n=r.length;for(;n-- >0;){const i=r[n],o=e[i];if(o){const s=t[i],u=s===void 0||o(s,i,t);if(u!==!0)throw new AxiosError("option "+i+" must be "+u,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(a!==!0)throw new AxiosError("Unknown option "+i,AxiosError.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$1},validators=validator.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}request(e,a){typeof e=="string"?(a=a||{},a.url=e):a=e||{},a=mergeConfig(this.defaults,a);const{transitional:r,paramsSerializer:n,headers:i}=a;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),n!=null&&(utils.isFunction(n)?a.paramsSerializer={serialize:n}:validator.assertOptions(n,{encode:validators.function,serialize:validators.function},!0)),a.method=(a.method||this.defaults.method||"get").toLowerCase();let o=i&&utils.merge(i.common,i[a.method]);i&&utils.forEach(["delete","get","head","post","put","patch","common"],T=>{delete i[T]}),a.headers=AxiosHeaders$1.concat(o,i);const s=[];let u=!0;this.interceptors.request.forEach(function(O){typeof O.runWhen=="function"&&O.runWhen(a)===!1||(u=u&&O.synchronous,s.unshift(O.fulfilled,O.rejected))});const c=[];this.interceptors.response.forEach(function(O){c.push(O.fulfilled,O.rejected)});let l,p=0,v;if(!u){const T=[dispatchRequest.bind(this),void 0];for(T.unshift.apply(T,s),T.push.apply(T,c),v=T.length,l=Promise.resolve(a);p{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](n);r._listeners=null}),this.promise.then=n=>{let i;const o=new Promise(s=>{r.subscribe(s),i=s}).then(n);return o.cancel=function(){r.unsubscribe(i)},o},e(function(i,o,s){r.reason||(r.reason=new CanceledError(i,o,s),a(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const a=this._listeners.indexOf(e);a!==-1&&this._listeners.splice(a,1)}static source(){let e;return{token:new CancelToken(function(n){e=n}),cancel:e}}}const CancelToken$1=CancelToken;function spread(t){return function(a){return t.apply(null,a)}}function isAxiosError(t){return utils.isObject(t)&&t.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([t,e])=>{HttpStatusCode[e]=t});const HttpStatusCode$1=HttpStatusCode;function createInstance(t){const e=new Axios$1(t),a=bind$4(Axios$1.prototype.request,e);return utils.extend(a,Axios$1.prototype,e,{allOwnKeys:!0}),utils.extend(a,e,null,{allOwnKeys:!0}),a.create=function(n){return createInstance(mergeConfig(t,n))},a}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=t=>formDataToJSON(utils.isHTMLForm(t)?new FormData(t):t);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const axios$1=axios;var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var assign=make_assign(),create$2=make_create(),trim$1=make_trim(),Global$5=typeof window<"u"?window:commonjsGlobal,util$7={assign,create:create$2,trim:trim$1,bind:bind$3,slice:slice$2,each:each$8,map,pluck:pluck$1,isList:isList$1,isFunction:isFunction$4,isObject:isObject$a,Global:Global$5};function make_assign(){return Object.assign?Object.assign:function(e,a,r,n){for(var i=1;i"u"?null:console;if(t){var e=t.warn?t.warn:t.log;e.apply(t,arguments)}}function createStore(t,e,a){a||(a=""),t&&!isList(t)&&(t=[t]),e&&!isList(e)&&(e=[e]);var r=a?"__storejs_"+a+"_":"",n=a?new RegExp("^"+r):null,i=/^[a-zA-Z0-9_\-]*$/;if(!i.test(a))throw new Error("store.js namespaces can only have alphanumerics + underscores and dashes");var o={_namespacePrefix:r,_namespaceRegexp:n,_testStorage:function(u){try{var c="__storejs__test__";u.write(c,c);var l=u.read(c)===c;return u.remove(c),l}catch{return!1}},_assignPluginFnProp:function(u,c){var l=this[c];this[c]=function(){var v=slice$1(arguments,0),S=this;function T(){if(l)return each$7(arguments,function(M,C){v[C]=M}),l.apply(S,v)}var O=[T].concat(v);return u.apply(S,O)}},_serialize:function(u){return JSON.stringify(u)},_deserialize:function(u,c){if(!u)return c;var l="";try{l=JSON.parse(u)}catch{l=u}return l!==void 0?l:c},_addStorage:function(u){this.enabled||this._testStorage(u)&&(this.storage=u,this.enabled=!0)},_addPlugin:function(u){var c=this;if(isList(u)){each$7(u,function(v){c._addPlugin(v)});return}var l=pluck(this.plugins,function(v){return u===v});if(!l){if(this.plugins.push(u),!isFunction$3(u))throw new Error("Plugins must be function values that return objects");var p=u.call(this);if(!isObject$9(p))throw new Error("Plugins must return an object of function properties");each$7(p,function(v,S){if(!isFunction$3(v))throw new Error("Bad plugin property: "+S+" from plugin "+u.name+". Plugins should only return functions.");c._assignPluginFnProp(v,S)})}},addStorage:function(u){_warn("store.addStorage(storage) is deprecated. Use createStore([storages])"),this._addStorage(u)}},s=create$1(o,storeAPI,{plugins:[]});return s.raw={},each$7(s,function(u,c){isFunction$3(u)&&(s.raw[c]=bind$2(s,u))}),each$7(t,function(u){s._addStorage(u)}),each$7(e,function(u){s._addPlugin(u)}),s}var util$5=util$7,Global$4=util$5.Global,localStorage_1={name:"localStorage",read:read$6,write:write$6,each:each$6,remove:remove$5,clearAll:clearAll$5};function localStorage(){return Global$4.localStorage}function read$6(t){return localStorage().getItem(t)}function write$6(t,e){return localStorage().setItem(t,e)}function each$6(t){for(var e=localStorage().length-1;e>=0;e--){var a=localStorage().key(e);t(read$6(a),a)}}function remove$5(t){return localStorage().removeItem(t)}function clearAll$5(){return localStorage().clear()}var util$4=util$7,Global$3=util$4.Global,oldFFGlobalStorage={name:"oldFF-globalStorage",read:read$5,write:write$5,each:each$5,remove:remove$4,clearAll:clearAll$4},globalStorage=Global$3.globalStorage;function read$5(t){return globalStorage[t]}function write$5(t,e){globalStorage[t]=e}function each$5(t){for(var e=globalStorage.length-1;e>=0;e--){var a=globalStorage.key(e);t(globalStorage[a],a)}}function remove$4(t){return globalStorage.removeItem(t)}function clearAll$4(){each$5(function(t,e){delete globalStorage[t]})}var util$3=util$7,Global$2=util$3.Global,oldIEUserDataStorage={name:"oldIE-userDataStorage",write:write$4,read:read$4,each:each$4,remove:remove$3,clearAll:clearAll$3},storageName="storejs",doc$1=Global$2.document,_withStorageEl=_makeIEStorageElFunction(),disable=(Global$2.navigator?Global$2.navigator.userAgent:"").match(/ (MSIE 8|MSIE 9|MSIE 10)\./);function write$4(t,e){if(!disable){var a=fixKey(t);_withStorageEl(function(r){r.setAttribute(a,e),r.save(storageName)})}}function read$4(t){if(!disable){var e=fixKey(t),a=null;return _withStorageEl(function(r){a=r.getAttribute(e)}),a}}function each$4(t){_withStorageEl(function(e){for(var a=e.XMLDocument.documentElement.attributes,r=a.length-1;r>=0;r--){var n=a[r];t(e.getAttribute(n.name),n.name)}})}function remove$3(t){var e=fixKey(t);_withStorageEl(function(a){a.removeAttribute(e),a.save(storageName)})}function clearAll$3(){_withStorageEl(function(t){var e=t.XMLDocument.documentElement.attributes;t.load(storageName);for(var a=e.length-1;a>=0;a--)t.removeAttribute(e[a].name);t.save(storageName)})}var forbiddenCharsRegex=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function fixKey(t){return t.replace(/^\d/,"___$&").replace(forbiddenCharsRegex,"___")}function _makeIEStorageElFunction(){if(!doc$1||!doc$1.documentElement||!doc$1.documentElement.addBehavior)return null;var t="script",e,a,r;try{a=new ActiveXObject("htmlfile"),a.open(),a.write("<"+t+">document.w=window'),a.close(),e=a.w.frames[0].document,r=e.createElement("div")}catch{r=doc$1.createElement("div"),e=doc$1.body}return function(n){var i=[].slice.call(arguments,0);i.unshift(r),e.appendChild(r),r.addBehavior("#default#userData"),r.load(storageName),n.apply(this,i),e.removeChild(r)}}var util$2=util$7,Global$1=util$2.Global,trim=util$2.trim,cookieStorage={name:"cookieStorage",read:read$3,write:write$3,each:each$3,remove:remove$2,clearAll:clearAll$2},doc=Global$1.document;function read$3(t){if(!t||!_has(t))return null;var e="(?:^|.*;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(doc.cookie.replace(new RegExp(e),"$1"))}function each$3(t){for(var e=doc.cookie.split(/; ?/g),a=e.length-1;a>=0;a--)if(trim(e[a])){var r=e[a].split("="),n=unescape(r[0]),i=unescape(r[1]);t(i,n)}}function write$3(t,e){t&&(doc.cookie=escape(t)+"="+escape(e)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/")}function remove$2(t){!t||!_has(t)||(doc.cookie=escape(t)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function clearAll$2(){each$3(function(t,e){remove$2(e)})}function _has(t){return new RegExp("(?:^|;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(doc.cookie)}var util$1=util$7,Global=util$1.Global,sessionStorage_1={name:"sessionStorage",read:read$2,write:write$2,each:each$2,remove:remove$1,clearAll:clearAll$1};function sessionStorage(){return Global.sessionStorage}function read$2(t){return sessionStorage().getItem(t)}function write$2(t,e){return sessionStorage().setItem(t,e)}function each$2(t){for(var e=sessionStorage().length-1;e>=0;e--){var a=sessionStorage().key(e);t(read$2(a),a)}}function remove$1(t){return sessionStorage().removeItem(t)}function clearAll$1(){return sessionStorage().clear()}var memoryStorage_1={name:"memoryStorage",read:read$1,write:write$1,each:each$1,remove,clearAll},memoryStorage={};function read$1(t){return memoryStorage[t]}function write$1(t,e){memoryStorage[t]=e}function each$1(t){for(var e in memoryStorage)memoryStorage.hasOwnProperty(e)&&t(memoryStorage[e],e)}function remove(t){delete memoryStorage[t]}function clearAll(t){memoryStorage={}}var all=[localStorage_1,oldFFGlobalStorage,oldIEUserDataStorage,cookieStorage,sessionStorage_1,memoryStorage_1],json2$1={},hasRequiredJson2;function requireJson2(){return hasRequiredJson2||(hasRequiredJson2=1,typeof JSON!="object"&&(JSON={}),function(){var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;function f(t){return t<10?"0"+t:t}function this_value(){return this.valueOf()}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;function quote(t){return rx_escapable.lastIndex=0,rx_escapable.test(t)?'"'+t.replace(rx_escapable,function(e){var a=meta[e];return typeof a=="string"?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var a,r,n,i,o=gap,s,u=e[t];switch(u&&typeof u=="object"&&typeof u.toJSON=="function"&&(u=u.toJSON(t)),typeof rep=="function"&&(u=rep.call(e,t,u)),typeof u){case"string":return quote(u);case"number":return isFinite(u)?String(u):"null";case"boolean":case"null":return String(u);case"object":if(!u)return"null";if(gap+=indent,s=[],Object.prototype.toString.apply(u)==="[object Array]"){for(i=u.length,a=0;at instanceof AxiosHeaders$1?t.toJSON():t;function mergeConfig(t,e){e=e||{};const a={};function r(c,l,p){return utils.isPlainObject(c)&&utils.isPlainObject(l)?utils.merge.call({caseless:p},c,l):utils.isPlainObject(l)?utils.merge({},l):utils.isArray(l)?l.slice():l}function n(c,l,p){if(utils.isUndefined(l)){if(!utils.isUndefined(c))return r(void 0,c,p)}else return r(c,l,p)}function i(c,l){if(!utils.isUndefined(l))return r(void 0,l)}function o(c,l){if(utils.isUndefined(l)){if(!utils.isUndefined(c))return r(void 0,c)}else return r(void 0,l)}function s(c,l,p){if(p in e)return r(c,l);if(p in t)return r(void 0,c)}const u={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(c,l)=>n(headersToObject(c),headersToObject(l),!0)};return utils.forEach(Object.keys(Object.assign({},t,e)),function(l){const p=u[l]||n,v=p(t[l],e[l],l);utils.isUndefined(v)&&p!==s||(a[l]=v)}),a}const VERSION$1="1.6.0",validators$1={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{validators$1[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}});const deprecatedWarnings={};validators$1.transitional=function(e,a,r){function n(i,o){return"[Axios v"+VERSION$1+"] Transitional option '"+i+"'"+o+(r?". "+r:"")}return(i,o,s)=>{if(e===!1)throw new AxiosError(n(o," has been removed"+(a?" in "+a:"")),AxiosError.ERR_DEPRECATED);return a&&!deprecatedWarnings[o]&&(deprecatedWarnings[o]=!0,console.warn(n(o," has been deprecated since v"+a+" and will be removed in the near future"))),e?e(i,o,s):!0}};function assertOptions(t,e,a){if(typeof t!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let n=r.length;for(;n-- >0;){const i=r[n],o=e[i];if(o){const s=t[i],u=s===void 0||o(s,i,t);if(u!==!0)throw new AxiosError("option "+i+" must be "+u,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(a!==!0)throw new AxiosError("Unknown option "+i,AxiosError.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$1},validators=validator.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}request(e,a){typeof e=="string"?(a=a||{},a.url=e):a=e||{},a=mergeConfig(this.defaults,a);const{transitional:r,paramsSerializer:n,headers:i}=a;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),n!=null&&(utils.isFunction(n)?a.paramsSerializer={serialize:n}:validator.assertOptions(n,{encode:validators.function,serialize:validators.function},!0)),a.method=(a.method||this.defaults.method||"get").toLowerCase();let o=i&&utils.merge(i.common,i[a.method]);i&&utils.forEach(["delete","get","head","post","put","patch","common"],T=>{delete i[T]}),a.headers=AxiosHeaders$1.concat(o,i);const s=[];let u=!0;this.interceptors.request.forEach(function(O){typeof O.runWhen=="function"&&O.runWhen(a)===!1||(u=u&&O.synchronous,s.unshift(O.fulfilled,O.rejected))});const c=[];this.interceptors.response.forEach(function(O){c.push(O.fulfilled,O.rejected)});let l,p=0,v;if(!u){const T=[dispatchRequest.bind(this),void 0];for(T.unshift.apply(T,s),T.push.apply(T,c),v=T.length,l=Promise.resolve(a);p{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](n);r._listeners=null}),this.promise.then=n=>{let i;const o=new Promise(s=>{r.subscribe(s),i=s}).then(n);return o.cancel=function(){r.unsubscribe(i)},o},e(function(i,o,s){r.reason||(r.reason=new CanceledError(i,o,s),a(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const a=this._listeners.indexOf(e);a!==-1&&this._listeners.splice(a,1)}static source(){let e;return{token:new CancelToken(function(n){e=n}),cancel:e}}}const CancelToken$1=CancelToken;function spread(t){return function(a){return t.apply(null,a)}}function isAxiosError(t){return utils.isObject(t)&&t.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([t,e])=>{HttpStatusCode[e]=t});const HttpStatusCode$1=HttpStatusCode;function createInstance(t){const e=new Axios$1(t),a=bind$4(Axios$1.prototype.request,e);return utils.extend(a,Axios$1.prototype,e,{allOwnKeys:!0}),utils.extend(a,e,null,{allOwnKeys:!0}),a.create=function(n){return createInstance(mergeConfig(t,n))},a}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=t=>formDataToJSON(utils.isHTMLForm(t)?new FormData(t):t);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const axios$1=axios;var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var assign=make_assign(),create$2=make_create(),trim$1=make_trim(),Global$5=typeof window<"u"?window:commonjsGlobal,util$7={assign,create:create$2,trim:trim$1,bind:bind$3,slice:slice$2,each:each$8,map,pluck:pluck$1,isList:isList$1,isFunction:isFunction$4,isObject:isObject$a,Global:Global$5};function make_assign(){return Object.assign?Object.assign:function(e,a,r,n){for(var i=1;i"u"?null:console;if(t){var e=t.warn?t.warn:t.log;e.apply(t,arguments)}}function createStore(t,e,a){a||(a=""),t&&!isList(t)&&(t=[t]),e&&!isList(e)&&(e=[e]);var r=a?"__storejs_"+a+"_":"",n=a?new RegExp("^"+r):null,i=/^[a-zA-Z0-9_\-]*$/;if(!i.test(a))throw new Error("store.js namespaces can only have alphanumerics + underscores and dashes");var o={_namespacePrefix:r,_namespaceRegexp:n,_testStorage:function(u){try{var c="__storejs__test__";u.write(c,c);var l=u.read(c)===c;return u.remove(c),l}catch{return!1}},_assignPluginFnProp:function(u,c){var l=this[c];this[c]=function(){var v=slice$1(arguments,0),S=this;function T(){if(l)return each$7(arguments,function(M,C){v[C]=M}),l.apply(S,v)}var O=[T].concat(v);return u.apply(S,O)}},_serialize:function(u){return JSON.stringify(u)},_deserialize:function(u,c){if(!u)return c;var l="";try{l=JSON.parse(u)}catch{l=u}return l!==void 0?l:c},_addStorage:function(u){this.enabled||this._testStorage(u)&&(this.storage=u,this.enabled=!0)},_addPlugin:function(u){var c=this;if(isList(u)){each$7(u,function(v){c._addPlugin(v)});return}var l=pluck(this.plugins,function(v){return u===v});if(!l){if(this.plugins.push(u),!isFunction$3(u))throw new Error("Plugins must be function values that return objects");var p=u.call(this);if(!isObject$9(p))throw new Error("Plugins must return an object of function properties");each$7(p,function(v,S){if(!isFunction$3(v))throw new Error("Bad plugin property: "+S+" from plugin "+u.name+". Plugins should only return functions.");c._assignPluginFnProp(v,S)})}},addStorage:function(u){_warn("store.addStorage(storage) is deprecated. Use createStore([storages])"),this._addStorage(u)}},s=create$1(o,storeAPI,{plugins:[]});return s.raw={},each$7(s,function(u,c){isFunction$3(u)&&(s.raw[c]=bind$2(s,u))}),each$7(t,function(u){s._addStorage(u)}),each$7(e,function(u){s._addPlugin(u)}),s}var util$5=util$7,Global$4=util$5.Global,localStorage_1={name:"localStorage",read:read$6,write:write$6,each:each$6,remove:remove$5,clearAll:clearAll$5};function localStorage(){return Global$4.localStorage}function read$6(t){return localStorage().getItem(t)}function write$6(t,e){return localStorage().setItem(t,e)}function each$6(t){for(var e=localStorage().length-1;e>=0;e--){var a=localStorage().key(e);t(read$6(a),a)}}function remove$5(t){return localStorage().removeItem(t)}function clearAll$5(){return localStorage().clear()}var util$4=util$7,Global$3=util$4.Global,oldFFGlobalStorage={name:"oldFF-globalStorage",read:read$5,write:write$5,each:each$5,remove:remove$4,clearAll:clearAll$4},globalStorage=Global$3.globalStorage;function read$5(t){return globalStorage[t]}function write$5(t,e){globalStorage[t]=e}function each$5(t){for(var e=globalStorage.length-1;e>=0;e--){var a=globalStorage.key(e);t(globalStorage[a],a)}}function remove$4(t){return globalStorage.removeItem(t)}function clearAll$4(){each$5(function(t,e){delete globalStorage[t]})}var util$3=util$7,Global$2=util$3.Global,oldIEUserDataStorage={name:"oldIE-userDataStorage",write:write$4,read:read$4,each:each$4,remove:remove$3,clearAll:clearAll$3},storageName="storejs",doc$1=Global$2.document,_withStorageEl=_makeIEStorageElFunction(),disable=(Global$2.navigator?Global$2.navigator.userAgent:"").match(/ (MSIE 8|MSIE 9|MSIE 10)\./);function write$4(t,e){if(!disable){var a=fixKey(t);_withStorageEl(function(r){r.setAttribute(a,e),r.save(storageName)})}}function read$4(t){if(!disable){var e=fixKey(t),a=null;return _withStorageEl(function(r){a=r.getAttribute(e)}),a}}function each$4(t){_withStorageEl(function(e){for(var a=e.XMLDocument.documentElement.attributes,r=a.length-1;r>=0;r--){var n=a[r];t(e.getAttribute(n.name),n.name)}})}function remove$3(t){var e=fixKey(t);_withStorageEl(function(a){a.removeAttribute(e),a.save(storageName)})}function clearAll$3(){_withStorageEl(function(t){var e=t.XMLDocument.documentElement.attributes;t.load(storageName);for(var a=e.length-1;a>=0;a--)t.removeAttribute(e[a].name);t.save(storageName)})}var forbiddenCharsRegex=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function fixKey(t){return t.replace(/^\d/,"___$&").replace(forbiddenCharsRegex,"___")}function _makeIEStorageElFunction(){if(!doc$1||!doc$1.documentElement||!doc$1.documentElement.addBehavior)return null;var t="script",e,a,r;try{a=new ActiveXObject("htmlfile"),a.open(),a.write("<"+t+">document.w=window'),a.close(),e=a.w.frames[0].document,r=e.createElement("div")}catch{r=doc$1.createElement("div"),e=doc$1.body}return function(n){var i=[].slice.call(arguments,0);i.unshift(r),e.appendChild(r),r.addBehavior("#default#userData"),r.load(storageName),n.apply(this,i),e.removeChild(r)}}var util$2=util$7,Global$1=util$2.Global,trim=util$2.trim,cookieStorage={name:"cookieStorage",read:read$3,write:write$3,each:each$3,remove:remove$2,clearAll:clearAll$2},doc=Global$1.document;function read$3(t){if(!t||!_has(t))return null;var e="(?:^|.*;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(doc.cookie.replace(new RegExp(e),"$1"))}function each$3(t){for(var e=doc.cookie.split(/; ?/g),a=e.length-1;a>=0;a--)if(trim(e[a])){var r=e[a].split("="),n=unescape(r[0]),i=unescape(r[1]);t(i,n)}}function write$3(t,e){t&&(doc.cookie=escape(t)+"="+escape(e)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/")}function remove$2(t){!t||!_has(t)||(doc.cookie=escape(t)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function clearAll$2(){each$3(function(t,e){remove$2(e)})}function _has(t){return new RegExp("(?:^|;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(doc.cookie)}var util$1=util$7,Global=util$1.Global,sessionStorage_1={name:"sessionStorage",read:read$2,write:write$2,each:each$2,remove:remove$1,clearAll:clearAll$1};function sessionStorage(){return Global.sessionStorage}function read$2(t){return sessionStorage().getItem(t)}function write$2(t,e){return sessionStorage().setItem(t,e)}function each$2(t){for(var e=sessionStorage().length-1;e>=0;e--){var a=sessionStorage().key(e);t(read$2(a),a)}}function remove$1(t){return sessionStorage().removeItem(t)}function clearAll$1(){return sessionStorage().clear()}var memoryStorage_1={name:"memoryStorage",read:read$1,write:write$1,each:each$1,remove,clearAll},memoryStorage={};function read$1(t){return memoryStorage[t]}function write$1(t,e){memoryStorage[t]=e}function each$1(t){for(var e in memoryStorage)memoryStorage.hasOwnProperty(e)&&t(memoryStorage[e],e)}function remove(t){delete memoryStorage[t]}function clearAll(t){memoryStorage={}}var all=[localStorage_1,oldFFGlobalStorage,oldIEUserDataStorage,cookieStorage,sessionStorage_1,memoryStorage_1],json2$1={},hasRequiredJson2;function requireJson2(){return hasRequiredJson2||(hasRequiredJson2=1,typeof JSON!="object"&&(JSON={}),function(){var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;function f(t){return t<10?"0"+t:t}function this_value(){return this.valueOf()}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;function quote(t){return rx_escapable.lastIndex=0,rx_escapable.test(t)?'"'+t.replace(rx_escapable,function(e){var a=meta[e];return typeof a=="string"?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var a,r,n,i,o=gap,s,u=e[t];switch(u&&typeof u=="object"&&typeof u.toJSON=="function"&&(u=u.toJSON(t)),typeof rep=="function"&&(u=rep.call(e,t,u)),typeof u){case"string":return quote(u);case"number":return isFinite(u)?String(u):"null";case"boolean":case"null":return String(u);case"object":if(!u)return"null";if(gap+=indent,s=[],Object.prototype.toString.apply(u)==="[object Array]"){for(i=u.length,a=0;alastFlushedIndex&&queue.splice(e,1)}function queueFlush(){!flushing&&!flushPending&&(flushPending=!0,queueMicrotask(flushJobs))}function flushJobs(){flushPending=!1,flushing=!0;for(let t=0;tt.effect(e,{scheduler:a=>{shouldSchedule?scheduler(a):a()}}),raw=t.raw}function overrideEffect(t){effect$3=t}function elementBoundEffect(t){let e=()=>{};return[r=>{let n=effect$3(r);return t._x_effects||(t._x_effects=new Set,t._x_runEffects=()=>{t._x_effects.forEach(i=>i())}),t._x_effects.add(n),e=()=>{n!==void 0&&(t._x_effects.delete(n),release(n))},n},()=>{e()}]}function dispatch(t,e,a={}){t.dispatchEvent(new CustomEvent(e,{detail:a,bubbles:!0,composed:!0,cancelable:!0}))}function walk(t,e){if(typeof ShadowRoot=="function"&&t instanceof ShadowRoot){Array.from(t.children).forEach(n=>walk(n,e));return}let a=!1;if(e(t,()=>a=!0),a)return;let r=t.firstElementChild;for(;r;)walk(r,e),r=r.nextElementSibling}function warn(t,...e){console.warn(`Alpine Warning: ${t}`,...e)}var started=!1;function start$1(){started&&warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),started=!0,document.body||warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `