From 72ffef1ab8bc6a8707b451992a66ec8efe7c97bf Mon Sep 17 00:00:00 2001 From: Wolfgang <119065796+wolfgang101@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:20:29 +0100 Subject: [PATCH 01/76] Task/extend documentation by ENABLE_FEATURE_AUTH_TOKEN environment variable (#6189) * Extend documentation --- README.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 35276b232..8b6fe2296 100644 --- a/README.md +++ b/README.md @@ -85,31 +85,32 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c ### Supported Environment Variables -| Name | Type | Default Value | Description | -| ------------------------ | --------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `ACCESS_TOKEN_SALT` | `string` | | A random string used as salt for access tokens | -| `API_KEY_COINGECKO_DEMO` | `string` (optional) |   | The _CoinGecko_ Demo API key | -| `API_KEY_COINGECKO_PRO` | `string` (optional) | | The _CoinGecko_ Pro API key | -| `DATABASE_URL` | `string` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` | -| `HOST` | `string` (optional) | `0.0.0.0` | The host where the Ghostfolio application will run on | -| `JWT_SECRET_KEY` | `string` | | A random string used for _JSON Web Tokens_ (JWT) | -| `LOG_LEVELS` | `string[]` (optional) | | The logging levels for the Ghostfolio application, e.g. `["debug","error","log","warn"]` | -| `PORT` | `number` (optional) | `3333` | The port where the Ghostfolio application will run on | -| `POSTGRES_DB` | `string` | | The name of the _PostgreSQL_ database | -| `POSTGRES_PASSWORD` | `string` | | The password of the _PostgreSQL_ database | -| `POSTGRES_USER` | `string` | | The user of the _PostgreSQL_ database | -| `REDIS_DB` | `number` (optional) | `0` | The database index of _Redis_ | -| `REDIS_HOST` | `string` | | The host where _Redis_ is running | -| `REDIS_PASSWORD` | `string` | | The password of _Redis_ | -| `REDIS_PORT` | `number` | | The port where _Redis_ is running | -| `REQUEST_TIMEOUT` | `number` (optional) | `2000` | The timeout of network requests to data providers in milliseconds | -| `ROOT_URL` | `string` (optional) | `http://0.0.0.0:3333` | The root URL of the Ghostfolio application, used for generating callback URLs and external links. | +| Name | Type | Default Value | Description | +| --------------------------- | --------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `ACCESS_TOKEN_SALT` | `string` | | A random string used as salt for access tokens | +| `API_KEY_COINGECKO_DEMO` | `string` (optional) |   | The _CoinGecko_ Demo API key | +| `API_KEY_COINGECKO_PRO` | `string` (optional) | | The _CoinGecko_ Pro API key | +| `DATABASE_URL` | `string` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` | +| `ENABLE_FEATURE_AUTH_TOKEN` | `boolean` (optional) | `true` | Enables authentication via security token | +| `HOST` | `string` (optional) | `0.0.0.0` | The host where the Ghostfolio application will run on | +| `JWT_SECRET_KEY` | `string` | | A random string used for _JSON Web Tokens_ (JWT) | +| `LOG_LEVELS` | `string[]` (optional) | | The logging levels for the Ghostfolio application, e.g. `["debug","error","log","warn"]` | +| `PORT` | `number` (optional) | `3333` | The port where the Ghostfolio application will run on | +| `POSTGRES_DB` | `string` | | The name of the _PostgreSQL_ database | +| `POSTGRES_PASSWORD` | `string` | | The password of the _PostgreSQL_ database | +| `POSTGRES_USER` | `string` | | The user of the _PostgreSQL_ database | +| `REDIS_DB` | `number` (optional) | `0` | The database index of _Redis_ | +| `REDIS_HOST` | `string` | | The host where _Redis_ is running | +| `REDIS_PASSWORD` | `string` | | The password of _Redis_ | +| `REDIS_PORT` | `number` | | The port where _Redis_ is running | +| `REQUEST_TIMEOUT` | `number` (optional) | `2000` | The timeout of network requests to data providers in milliseconds | +| `ROOT_URL` | `string` (optional) | `http://0.0.0.0:3333` | The root URL of the Ghostfolio application, used for generating callback URLs and external links. | #### OpenID Connect OIDC (Experimental) | Name | Type | Default Value | Description | | -------------------------- | --------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------- | -| `ENABLE_FEATURE_AUTH_OIDC` | `boolean` (optional) | `false` | Enables _OpenID Connect_ authentication | +| `ENABLE_FEATURE_AUTH_OIDC` | `boolean` (optional) | `false` | Enables authentication via _OpenID Connect_ | | `OIDC_AUTHORIZATION_URL` | `string` (optional) | | Manual override for the OIDC authorization endpoint (falls back to the discovery from the issuer) | | `OIDC_CALLBACK_URL` | `string` (optional) | `${ROOT_URL}/api/auth/oidc/callback` | The OIDC callback URL | | `OIDC_CLIENT_ID` | `string` | | The OIDC client ID | From 723e154e65ab2d7bd1076da7cdf92fd2faae9730 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 17:32:23 +0100 Subject: [PATCH 02/76] Feature/restore support for specific calendar year date ranges in holdings (#6186) * Restore specific calendar year date ranges * Update changelog --- CHANGELOG.md | 4 +++ .../calculator/roai/portfolio-calculator.ts | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a07743c34..5063cae44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Set up the language localization for Korean (`ko`) +### Changed + +- Restored the support for specific calendar year date ranges (`2024`, `2023`, `2022`, etc.) in the holdings table (experimental) + ## 2.229.0 - 2026-01-11 ### Changed diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 2ceed015d..fe912510a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -13,7 +13,14 @@ import { PerformanceCalculationType } from '@ghostfolio/common/types/performance import { Logger } from '@nestjs/common'; import { Big } from 'big.js'; -import { addMilliseconds, differenceInDays, format, isBefore } from 'date-fns'; +import { + addMilliseconds, + differenceInDays, + eachYearOfInterval, + format, + isBefore, + isThisYear +} from 'date-fns'; import { cloneDeep, sortBy } from 'lodash'; export class RoaiPortfolioCalculator extends PortfolioCalculator { @@ -837,15 +844,14 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { 'max', 'mtd', 'wtd', - 'ytd' - // TODO: - // ...eachYearOfInterval({ end, start }) - // .filter((date) => { - // return !isThisYear(date); - // }) - // .map((date) => { - // return format(date, 'yyyy'); - // }) + 'ytd', + ...eachYearOfInterval({ end, start }) + .filter((date) => { + return !isThisYear(date); + }) + .map((date) => { + return format(date, 'yyyy'); + }) ] as DateRange[]) { const dateInterval = getIntervalFromDateRange(dateRange); const endDate = dateInterval.endDate; From 9fd7924f2cf886945a3f59f356bb399b056777c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:20:55 +0100 Subject: [PATCH 03/76] Task/update locales (#6156) * Update locales Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 266 +++++++-------- apps/client/src/locales/messages.de.xlf | 266 +++++++-------- apps/client/src/locales/messages.es.xlf | 266 +++++++-------- apps/client/src/locales/messages.fr.xlf | 266 +++++++-------- apps/client/src/locales/messages.it.xlf | 266 +++++++-------- apps/client/src/locales/messages.ko.xlf | 408 +++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 266 +++++++-------- apps/client/src/locales/messages.pl.xlf | 266 +++++++-------- apps/client/src/locales/messages.pt.xlf | 266 +++++++-------- apps/client/src/locales/messages.tr.xlf | 266 +++++++-------- apps/client/src/locales/messages.uk.xlf | 266 +++++++-------- apps/client/src/locales/messages.xlf | 266 +++++++-------- apps/client/src/locales/messages.zh.xlf | 266 +++++++-------- 13 files changed, 1848 insertions(+), 1752 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 762f8f73a..e48a2ad47 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -102,7 +102,7 @@ El risc d’assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -387,7 +387,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -403,7 +403,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -467,7 +467,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -479,7 +479,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -495,7 +495,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -523,7 +523,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -555,11 +555,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -571,7 +571,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -603,7 +603,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -639,7 +639,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -863,7 +863,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -871,7 +871,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -891,7 +891,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -899,7 +899,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -907,7 +907,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -927,7 +927,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -1015,7 +1015,7 @@ Oooh! No s’han pogut recopilar les dades históriques. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1023,7 +1023,7 @@ El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -1175,7 +1175,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1243,7 +1243,7 @@ Està segur qeu vol eliminar aquest cupó? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1251,7 +1251,7 @@ Està segur que vol eliminar aquest missatge del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1259,7 +1259,7 @@ Està segur que vol depurar el cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1267,7 +1267,7 @@ Si us plau, afegeixi el seu missatge del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1403,7 +1403,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1427,7 +1427,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1499,7 +1499,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1567,11 +1567,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1607,7 +1607,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1703,7 +1703,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1739,7 +1739,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1955,7 +1955,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2003,7 +2003,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -2355,7 +2355,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2363,11 +2363,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2375,11 +2375,11 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2387,11 +2387,11 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2399,11 +2399,11 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2455,7 +2455,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2547,7 +2547,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2555,7 +2555,7 @@ De debò vols tancar el teu compte de Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -2563,7 +2563,7 @@ De debò vols eliminar aquest mètode d’inici de sessió? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2579,7 +2579,7 @@ Ups! Hi ha hagut un error en configurar l’autenticació biomètrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -2587,7 +2587,7 @@ Vista del presentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2595,7 +2595,7 @@ Protecció per a informació sensible com ara rendiments absoluts i valors de quantitat apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2631,7 +2631,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2639,7 +2639,7 @@ Format de data i número apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2647,7 +2647,7 @@ Aparença apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2655,7 +2655,7 @@ Llum apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2663,7 +2663,7 @@ Fosc apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2671,7 +2671,7 @@ Mode Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2683,7 +2683,7 @@ Experiència sense distraccions per a temps turbulents apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2699,7 +2699,7 @@ Autenticació biomètrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2707,7 +2707,7 @@ Inicieu la sessió amb l’empremta digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2715,7 +2715,7 @@ Característiques experimentals apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2723,7 +2723,7 @@ Doneu un cop d’ull a les properes funcionalitats apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2731,7 +2731,7 @@ Exporta dades apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2739,7 +2739,7 @@ Zona de perill apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -2747,7 +2747,7 @@ Tanca el compte apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -3227,11 +3227,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3416,7 +3416,7 @@ Programari de codi obert apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3428,7 +3428,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -4040,7 +4040,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4528,7 +4528,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -4856,11 +4856,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -5001,7 +5001,7 @@ Suïssa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5013,7 +5013,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5429,7 +5429,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5437,11 +5437,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5449,7 +5449,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5457,11 +5457,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5469,7 +5469,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5477,7 +5477,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5489,7 +5489,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -5497,11 +5497,11 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -5685,11 +5685,11 @@ Assignació libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5705,7 +5705,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -6001,7 +6001,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -6337,7 +6337,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ Aplicació apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Pressupost apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Oficina familiar apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Wealth apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Wealth Management apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 9a429cfad..d70c2ad1d 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -26,7 +26,7 @@ Das Ausfallrisiko beim Börsenhandel kann erheblich sein. Es ist nicht ratsam, Geld zu investieren, welches du kurzfristig benötigst. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -146,7 +146,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -158,7 +158,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -174,7 +174,7 @@ Gesamt libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -202,11 +202,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -218,7 +218,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -250,7 +250,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -286,7 +286,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -490,7 +490,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -518,7 +518,7 @@ Möchtest du diesen Gutscheincode wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -526,7 +526,7 @@ Möchtest du den Cache wirklich leeren? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -534,7 +534,7 @@ Bitte gebe deine Systemmeldung ein: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -654,7 +654,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -730,7 +730,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -790,7 +790,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -830,7 +830,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1046,11 +1046,11 @@ Allokation libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1066,7 +1066,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1078,7 +1078,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1086,11 +1086,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1098,11 +1098,11 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1110,11 +1110,11 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1122,11 +1122,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1234,7 +1234,7 @@ Möchtest du diese Anmeldemethode wirklich löschen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1278,7 +1278,7 @@ Präsentationsansicht apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1298,7 +1298,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1306,7 +1306,7 @@ Datums- und Zahlenformat apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1314,7 +1314,7 @@ Zen Modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1326,7 +1326,7 @@ Einloggen mit Fingerabdruck apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1338,7 +1338,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1450,7 +1450,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1470,7 +1470,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1486,7 +1486,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1930,7 +1930,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1994,7 +1994,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2070,7 +2070,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2146,7 +2146,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2626,7 +2626,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2654,7 +2654,7 @@ Experimentelle Funktionen apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2662,11 +2662,11 @@ Das Formular konnte nicht validiert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2714,7 +2714,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2722,7 +2722,7 @@ Aussehen apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2730,7 +2730,7 @@ Hell apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2738,7 +2738,7 @@ Dunkel apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3374,7 +3374,7 @@ Ausblenden von sensiblen Informationen wie absoluter Performance und Stückzahl apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3382,7 +3382,7 @@ Unbeschwertes Erlebnis für turbulente Zeiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3390,7 +3390,7 @@ Vorschau auf kommende Funktionalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3618,11 +3618,11 @@ Das Anlageprofil konnte nicht gespeichert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3846,7 +3846,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3882,7 +3882,7 @@ Das Anlageprofil wurde gespeichert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3890,7 +3890,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4078,7 +4078,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4218,7 +4218,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4494,7 +4494,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4502,7 +4502,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4638,7 +4638,7 @@ Biometrische Authentifizierung apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4730,7 +4730,7 @@ Daten exportieren apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4738,7 +4738,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4790,11 +4790,11 @@ Die Scraper Konfiguration konnte nicht geparsed werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5348,7 +5348,7 @@ Schweiz apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5360,7 +5360,7 @@ Weltweit apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5712,7 +5712,7 @@ Ups! Die historischen Daten konnten nicht geparsed werden. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5720,7 +5720,7 @@ Möchtest du diese Systemmeldung wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5780,7 +5780,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5884,7 +5884,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5940,7 +5940,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5948,11 +5948,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5960,7 +5960,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5968,11 +5968,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5980,7 +5980,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -6016,7 +6016,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6028,7 +6028,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6036,11 +6036,11 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6233,7 +6233,7 @@ Möchtest du dieses Ghostfolio Konto wirklich schliessen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6241,7 +6241,7 @@ Gefahrenzone apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6249,7 +6249,7 @@ Konto schliessen apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6289,7 +6289,7 @@ Ups! Beim Einrichten der biometrischen Authentifizierung ist ein Fehler aufgetreten. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6305,7 +6305,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6361,7 +6361,7 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6369,7 +6369,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6377,7 +6377,7 @@ Budgetierung apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6393,47 +6393,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6441,7 +6445,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6449,7 +6453,7 @@ Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6461,7 +6465,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6473,7 +6477,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6481,7 +6485,7 @@ Datenschutz apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6489,7 +6493,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6497,7 +6501,7 @@ Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6505,7 +6509,7 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6513,7 +6517,7 @@ Vermögen apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6521,7 +6525,7 @@ Vermögensverwaltung apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6681,7 +6685,7 @@ Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7215,7 +7219,7 @@ Möchtest du den API-Schlüssel wirklich löschen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7383,7 +7387,7 @@ Bitte gebe deinen Ghostfolio API-Schlüssel ein. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7407,7 +7411,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7415,7 +7419,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7455,7 +7459,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7463,7 +7467,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7487,7 +7491,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7507,7 +7511,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7611,7 +7615,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7623,7 +7627,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7631,7 +7635,7 @@ Konto, Position oder Seite finden... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7696,7 +7700,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7704,7 +7708,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo Benutzerkonto wurde synchronisiert. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 9be8108bd..89e67975f 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -27,7 +27,7 @@ El riesgo de pérdida en trading puede ser sustancial. No es aconsejable invertir dinero que puedas necesitar a corto plazo. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -147,7 +147,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -159,7 +159,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -175,7 +175,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -203,11 +203,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -219,7 +219,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -251,7 +251,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -287,7 +287,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -491,7 +491,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -519,7 +519,7 @@ ¿Estás seguro de eliminar este cupón? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -527,7 +527,7 @@ ¿Estás seguro de limpiar la caché? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -535,7 +535,7 @@ Por favor, establece tu mensaje del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -639,7 +639,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -715,7 +715,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -775,7 +775,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -815,7 +815,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1031,11 +1031,11 @@ Distribución libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1051,7 +1051,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1063,7 +1063,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1071,11 +1071,11 @@ Desde principio de año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1083,11 +1083,11 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1095,11 +1095,11 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1107,11 +1107,11 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1219,7 +1219,7 @@ ¿Estás seguro de eliminar este método de acceso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1263,7 +1263,7 @@ Vista del presentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1283,7 +1283,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1291,7 +1291,7 @@ Formato de fecha y número apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1299,7 +1299,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1311,7 +1311,7 @@ Iniciar sesión con huella digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1323,7 +1323,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1435,7 +1435,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1455,7 +1455,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1471,7 +1471,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1915,7 +1915,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1979,7 +1979,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2055,7 +2055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2131,7 +2131,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2611,7 +2611,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2639,7 +2639,7 @@ Funcionalidades experimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2659,11 +2659,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2699,7 +2699,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2707,7 +2707,7 @@ Apariencia apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2715,7 +2715,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2723,7 +2723,7 @@ Oscuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3359,7 +3359,7 @@ Protección de información confidencial como rendimientos absolutos y valores cuantitativos apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3367,7 +3367,7 @@ Experiencia sin distracciones para tiempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3375,7 +3375,7 @@ Un adelanto de las próximas funciones apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3603,11 +3603,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3823,7 +3823,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3859,7 +3859,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3867,7 +3867,7 @@ ¿Realmente deseas eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4055,7 +4055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4195,7 +4195,7 @@ Software de código abierto apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4471,7 +4471,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4479,7 +4479,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4615,7 +4615,7 @@ Autenticación biométrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4707,7 +4707,7 @@ Exportar datos apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4715,7 +4715,7 @@ Monedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4767,11 +4767,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5325,7 +5325,7 @@ Suiza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5337,7 +5337,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5689,7 +5689,7 @@ ¡Ups! No se pudieron analizar los datos históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5697,7 +5697,7 @@ ¿Realmente deseas eliminar este mensaje del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5757,7 +5757,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5861,7 +5861,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5917,7 +5917,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5925,11 +5925,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5937,7 +5937,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5945,11 +5945,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5957,7 +5957,7 @@ El año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5993,7 +5993,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6005,7 +6005,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6013,11 +6013,11 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6210,7 +6210,7 @@ ¿Estás seguro de querer borrar tu cuenta de Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6218,7 +6218,7 @@ Zona peligrosa apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6226,7 +6226,7 @@ Eliminar cuenta apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6266,7 +6266,7 @@ ¡Ups! Hubo un error al configurar la autenticación biométrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6282,7 +6282,7 @@ Puntos de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6338,7 +6338,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6346,7 +6346,7 @@ Aplicación apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6354,7 +6354,7 @@ Presupuestación apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6370,47 +6370,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6418,7 +6422,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6426,7 +6430,7 @@ Inversor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6438,7 +6442,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6450,7 +6454,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6458,7 +6462,7 @@ Privacidad apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6466,7 +6470,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6474,7 +6478,7 @@ Herramienta apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6482,7 +6486,7 @@ Experiencia del usuario apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6490,7 +6494,7 @@ Riqueza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6498,7 +6502,7 @@ Gestión de patrimonios apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6658,7 +6662,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7192,7 +7196,7 @@ ¿Realmente deseas eliminar la clave API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,7 @@ Por favor, ingresa tu clave API de Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7384,7 +7388,7 @@ Perezoso apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7396,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7436,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7444,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7464,7 +7468,7 @@ Cambiar libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7484,7 +7488,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7588,7 +7592,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7600,7 +7604,7 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7612,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7677,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7685,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7777,7 +7781,7 @@ ¿Realmente deseas eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7822,7 @@ La cuenta de usuario de demostración se ha sincronizado. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8032,7 +8036,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 5bb9d6489..dc25b2c05 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -6,7 +6,7 @@ Le risque de perte en investissant peut être important. Il est déconseillé d’investir de l’argent dont vous pourriez avoir besoin à court terme. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -110,7 +110,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -154,7 +154,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -166,7 +166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -182,7 +182,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -210,7 +210,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -230,7 +230,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -258,11 +258,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -274,7 +274,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -306,7 +306,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -342,7 +342,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -534,7 +534,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -554,7 +554,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -710,7 +710,7 @@ Voulez-vous vraiment supprimer ce code promotionnel ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -718,7 +718,7 @@ Voulez-vous vraiment vider le cache ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -726,7 +726,7 @@ Veuillez définir votre message système : apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -850,7 +850,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -902,11 +902,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -934,7 +934,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1010,7 +1010,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1098,7 +1098,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1290,7 +1290,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1310,7 +1310,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1318,11 +1318,11 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1330,11 +1330,11 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1342,11 +1342,11 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1354,11 +1354,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1474,7 +1474,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -1514,7 +1514,7 @@ Voulez-vous vraiment supprimer cette méthode de connexion ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1558,7 +1558,7 @@ Vue de Présentation apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1586,7 +1586,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1594,7 +1594,7 @@ Format de date et d’heure apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1602,7 +1602,7 @@ Apparence apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -1610,7 +1610,7 @@ Clair apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -1618,7 +1618,7 @@ Sombre apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -1626,7 +1626,7 @@ Mode Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1638,7 +1638,7 @@ Se connecter avec empreinte apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1646,7 +1646,7 @@ Fonctionnalités expérimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -1658,7 +1658,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2078,7 +2078,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2094,7 +2094,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2574,7 +2574,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -2874,11 +2874,11 @@ Part libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -2894,7 +2894,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -3358,7 +3358,7 @@ Protection pour les informations sensibles telles que la performance absolue et les montants apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3366,7 +3366,7 @@ Expérience sans distraction pour les périodes tumultueuses apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3374,7 @@ Avant-première de fonctionnalités futures apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3602,11 +3602,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3822,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3858,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3866,7 +3866,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4054,7 +4054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4194,7 @@ Logiciel Open Source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4470,7 +4470,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4478,7 +4478,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4614,7 +4614,7 @@ Authentication biométrique apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4706,7 +4706,7 @@ Exporter les Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4714,7 +4714,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4766,11 +4766,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5324,7 +5324,7 @@ Suisse apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5336,7 +5336,7 @@ Mondial apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5688,7 +5688,7 @@ Oops! Echec du parsing des données historiques. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Confirmer la suppresion de ce message système? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Confirmer la suppresion de votre compte Ghostfolio ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Zone de danger apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Supprimer le compte apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Oops! Une erreur s’est produite lors de la configuration de l’authentification biométrique. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Budget apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investisseur apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Confidentialité apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Logiciels apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Outils apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Expérience Utilisateur apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Patrimoine apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Gestion de Patrimoine apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Voulez-vous vraiment supprimer la clé API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Veuillez saisir votre clé API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Le compte utilisateur de démonstration a été synchronisé. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 2986e8ee4..c021470ef 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -27,7 +27,7 @@ Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -147,7 +147,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -159,7 +159,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -175,7 +175,7 @@ Totale libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -203,11 +203,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -219,7 +219,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -251,7 +251,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -287,7 +287,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -491,7 +491,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -519,7 +519,7 @@ Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -527,7 +527,7 @@ Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -535,7 +535,7 @@ Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -639,7 +639,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -715,7 +715,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -775,7 +775,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -815,7 +815,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1031,11 +1031,11 @@ Allocazione libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1051,7 +1051,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1063,7 +1063,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1071,11 +1071,11 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1083,11 +1083,11 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1095,11 +1095,11 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1107,11 +1107,11 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1219,7 +1219,7 @@ Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1263,7 +1263,7 @@ Vista presentatore apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1283,7 +1283,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1291,7 +1291,7 @@ Formato data e numero apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1299,7 +1299,7 @@ Modalità Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1311,7 +1311,7 @@ Accesso con impronta digitale apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1323,7 +1323,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1435,7 +1435,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1455,7 +1455,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1471,7 +1471,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1915,7 +1915,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1979,7 +1979,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2055,7 +2055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2131,7 +2131,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2611,7 +2611,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2639,7 +2639,7 @@ Funzionalità sperimentali apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2659,11 +2659,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2699,7 +2699,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2707,7 +2707,7 @@ Aspetto apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2715,7 +2715,7 @@ Chiaro apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2723,7 +2723,7 @@ Scuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3359,7 +3359,7 @@ Protezione delle informazioni sensibili come le prestazioni assolute e i valori quantitativi apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3367,7 +3367,7 @@ Esperienza priva di distrazioni per i periodi più turbolenti apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3375,7 +3375,7 @@ Un’anteprima delle funzionalità in arrivo apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3603,11 +3603,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3823,7 +3823,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3859,7 +3859,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3867,7 +3867,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4055,7 +4055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4195,7 +4195,7 @@ Software open source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4471,7 +4471,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4479,7 +4479,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4615,7 +4615,7 @@ Autenticazione biometrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4707,7 +4707,7 @@ Esporta dati apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4715,7 +4715,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4767,11 +4767,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5325,7 +5325,7 @@ Svizzera apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5337,7 +5337,7 @@ Globale apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5689,7 +5689,7 @@ Ops! Impossibile elaborare i dati storici. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5697,7 +5697,7 @@ Confermi di voler cancellare questo messaggio di sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5757,7 +5757,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5861,7 +5861,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5917,7 +5917,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5925,11 +5925,11 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5937,7 +5937,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5945,11 +5945,11 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5957,7 +5957,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5993,7 +5993,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6005,7 +6005,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6013,11 +6013,11 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6210,7 +6210,7 @@ Confermi di voler chiudere il tuo account Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6218,7 +6218,7 @@ Zona di Pericolo apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6226,7 +6226,7 @@ Chiudi l’account apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6266,7 +6266,7 @@ Ops! C’è stato un errore impostando l’autenticazione biometrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6282,7 +6282,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6338,7 +6338,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6346,7 +6346,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6354,7 +6354,7 @@ Budgeting apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6370,47 +6370,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6418,7 +6422,7 @@ Ufficio familiare apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6426,7 +6430,7 @@ Investitore apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6438,7 +6442,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6450,7 +6454,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6458,7 +6462,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6466,7 +6470,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6474,7 +6478,7 @@ Strumento apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6482,7 +6486,7 @@ Esperienza Utente apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6490,7 +6494,7 @@ Ricchezza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6498,7 +6502,7 @@ Gestione Patrimoniale apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6658,7 +6662,7 @@ Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7192,7 +7196,7 @@ Vuoi davvero eliminare l’API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,7 @@ Inserisci la tua API key di Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7384,7 +7388,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7396,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7436,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7444,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7464,7 +7468,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7484,7 +7488,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7588,7 +7592,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7600,7 +7604,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7612,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7677,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7685,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7777,7 +7781,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7822,7 @@ L’account utente demo è stato sincronizzato. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8032,7 +8036,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 0e0492f24..133425cab 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -1,6 +1,6 @@ - + about @@ -216,7 +216,7 @@ 거래에는 상당한 손실 위험이 따를 수 있습니다. 단기적으로 필요할 수 있는 자금의 투자는 권장되지 않습니다. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -304,7 +304,7 @@ 이 부여된 접근 권한을 정말로 회수하시겠습니까? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -320,7 +320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -336,7 +336,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -368,7 +368,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -400,7 +400,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -412,7 +412,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -428,7 +428,7 @@ 합계 libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -436,11 +436,11 @@ 통화 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -456,7 +456,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -488,11 +488,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -504,7 +504,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -536,7 +536,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -552,7 +552,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -572,7 +572,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -624,7 +624,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -760,7 +760,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -788,7 +788,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -804,7 +804,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -816,7 +816,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -896,7 +896,7 @@ 이런! 과거 데이터를 파싱할 수 없습니다. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -936,7 +936,7 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -948,7 +948,7 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -968,11 +968,11 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -988,11 +988,11 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1004,7 +1004,7 @@ 심볼 매핑 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -1020,7 +1020,7 @@ 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -1028,7 +1028,7 @@ 메모 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1068,7 +1068,7 @@ 이름, 심볼 또는 ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1088,7 +1088,7 @@ 이 쿠폰을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1096,7 +1096,7 @@ 이 시스템 메시지를 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1104,7 +1104,7 @@ 정말로 캐시를 플러시하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1112,7 +1112,7 @@ 시스템 메시지를 설정하십시오: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1236,11 +1236,11 @@ 링크 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1251,12 +1251,20 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 578 + + Do you really want to delete this platform? 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1280,7 +1288,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 199 @@ -1352,7 +1360,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 215 @@ -1415,6 +1423,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 554 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 557 + + Compare with... 비교해보세요... @@ -1448,7 +1468,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1460,7 +1480,7 @@ 기준 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1524,7 +1544,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1664,7 +1684,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 191 @@ -1712,7 +1732,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1900,7 +1920,7 @@ 비상금 금액을 설정해 주세요. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1936,7 +1956,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2124,7 +2144,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2132,11 +2152,11 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2144,11 +2164,11 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2156,11 +2176,11 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2168,11 +2188,11 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2204,7 +2224,7 @@ 쿠폰 코드를 입력해주세요. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2212,7 +2232,7 @@ 쿠폰 코드를 사용할 수 없습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2220,7 +2240,7 @@ 쿠폰 코드가 사용되었습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2228,7 +2248,7 @@ 새로고침 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2272,11 +2292,11 @@ 자동 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2284,7 +2304,7 @@ 이 로그인 방법을 정말로 제거하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2292,7 +2312,7 @@ 발표자 보기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2300,7 +2320,7 @@ 절대 성과 및 수량 값과 같은 민감한 정보를 보호합니다. apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2324,11 +2344,11 @@ 장소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2336,7 +2356,7 @@ 날짜 및 숫자 형식 apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2344,7 +2364,7 @@ 테마 apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2352,7 +2372,7 @@ 라이트 apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2360,7 +2380,7 @@ 다크 apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2368,7 +2388,7 @@ 프라이버시 모드 apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2380,7 +2400,7 @@ 격동의 시대에 방해받지 않는 경험 apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2396,7 +2416,7 @@ 생체인증 apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2404,7 +2424,7 @@ 지문으로 로그인 apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2412,7 +2432,7 @@ 실험적 기능 apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2420,7 +2440,7 @@ 곧 출시될 기능 미리보기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2432,7 +2452,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2444,7 +2464,7 @@ 데이터 내보내기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2488,7 +2508,7 @@ 좋아요 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2756,7 +2776,7 @@ 개요 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2895,6 +2915,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 509 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 512 + + Discover the latest Ghostfolio updates and insights on personal finance 개인 금융에 대한 최신 Ghostfolio 업데이트와 통찰력을 알아보세요 @@ -3052,7 +3084,7 @@ 오픈 소스 소프트웨어 apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3064,7 +3096,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3132,7 +3164,7 @@ 시장 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3628,7 +3660,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3660,7 +3692,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4423,6 +4455,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 588 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 591 + + It’s free. 무료입니다. @@ -4785,7 +4829,7 @@ 스위스 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4797,7 +4841,7 @@ 글로벌 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5101,11 +5145,11 @@ 배당 libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5121,7 +5165,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5161,11 +5205,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5193,11 +5237,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5365,7 +5409,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5409,7 +5453,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5745,7 +5789,7 @@ 현재 시장가격은 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 706 @@ -5753,7 +5797,7 @@ 시험 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5865,7 +5909,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5897,7 +5941,7 @@ 연초 현재 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5905,7 +5949,7 @@ 이번주 현재까지 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5913,7 +5957,7 @@ 월간 누계 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5921,11 +5965,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5933,11 +5977,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5973,7 +6017,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5985,7 +6029,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -5993,11 +6037,11 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6038,7 +6082,7 @@ 데이터 수집 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6190,7 +6234,7 @@ 계정 폐쇄 apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6198,7 +6242,7 @@ 정말로 Ghostfolio 계정을 폐쇄하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6206,7 +6250,7 @@ 위험지대 apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6238,7 +6282,7 @@ 포함 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6246,7 +6290,7 @@ 이런! 생체 인증을 설정하는 중에 오류가 발생했습니다. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6286,7 +6330,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6318,7 +6362,7 @@ 재산 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6334,47 +6378,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6422,7 +6470,7 @@ 사용자 경험 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6430,7 +6478,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6438,7 +6486,7 @@ 도구 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6446,7 +6494,7 @@ 투자자 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6454,7 +6502,7 @@ 자산관리 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6494,7 +6542,7 @@ 대안 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6502,7 +6550,7 @@ 패밀리오피스 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6514,7 +6562,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6522,7 +6570,7 @@ 소프트웨어 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6554,7 +6602,7 @@ 예산 편성 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6574,7 +6622,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6614,7 +6662,7 @@ 은둔 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6638,7 +6686,7 @@ 오류 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 697 @@ -6646,11 +6694,11 @@ 취소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6734,7 +6782,7 @@ 닫다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7164,7 +7212,7 @@ API 키를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7216,7 +7264,7 @@ API 키를 생성할 수 없습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7224,7 +7272,7 @@ 정말로 새 API 키를 생성하시겠습니까? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7232,7 +7280,7 @@ Ghostfolio 프리미엄 데이터 공급자 API 키 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7240,7 +7288,7 @@ 자체 호스팅 환경에서 이 API 키를 설정하세요. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7264,7 +7312,7 @@ 구하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7284,7 +7332,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7340,7 +7388,7 @@ Ghostfolio API 키를 입력하세요. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7356,7 +7404,7 @@ 링크가 클립보드에 복사되었습니다. apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7364,7 +7412,7 @@ 방법 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7372,7 +7420,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7380,7 +7428,7 @@ 선택자 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7388,7 +7436,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 229 @@ -7396,7 +7444,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 225 @@ -7404,7 +7452,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7412,7 +7460,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 229 @@ -7420,7 +7468,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 225 @@ -7444,7 +7492,7 @@ 변화 libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7464,7 +7512,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7568,7 +7616,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 241 @@ -7576,7 +7624,7 @@ 계정, 보유 또는 페이지 찾기... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7584,7 +7632,7 @@ 보안 토큰 apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7653,7 +7701,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 633 @@ -7661,7 +7709,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 641 @@ -7669,7 +7717,7 @@ 적용하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7733,7 +7781,7 @@ 이 항목을 정말로 삭제하시겠습니까? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7782,7 +7830,7 @@ 데모 사용자 계정이 동기화되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7988,7 +8036,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 195 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index c34f259bc..18e271b0d 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -26,7 +26,7 @@ Het risico op verlies bij handelen kan aanzienlijk zijn. Het is niet aan te raden om geld te investeren dat je misschien op korte termijn nodig heeft. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -146,7 +146,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -158,7 +158,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -174,7 +174,7 @@ Totaal libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -202,11 +202,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -218,7 +218,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -250,7 +250,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -286,7 +286,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -490,7 +490,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -518,7 +518,7 @@ Wil je deze coupon echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -526,7 +526,7 @@ Wil je echt de cache legen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -534,7 +534,7 @@ Stel je systeemboodschap in: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -638,7 +638,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -714,7 +714,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -774,7 +774,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -814,7 +814,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1030,11 +1030,11 @@ Allocatie libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1050,7 +1050,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1062,7 +1062,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1070,11 +1070,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1082,11 +1082,11 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1094,11 +1094,11 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1106,11 +1106,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1218,7 +1218,7 @@ Wil je deze aanmeldingsmethode echt verwijderen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1262,7 +1262,7 @@ Presentatie weergave apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1282,7 +1282,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1290,7 +1290,7 @@ Datum- en getalnotatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1298,7 +1298,7 @@ Zen-modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1310,7 +1310,7 @@ Aanmelden met vingerafdruk apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1322,7 +1322,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1434,7 +1434,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1454,7 +1454,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1470,7 +1470,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1914,7 +1914,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1978,7 +1978,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2054,7 +2054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2130,7 +2130,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2610,7 +2610,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2638,7 +2638,7 @@ Experimentele functies apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2658,11 +2658,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2698,7 +2698,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2706,7 +2706,7 @@ Weergave apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2714,7 +2714,7 @@ Licht apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2722,7 +2722,7 @@ Donker apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3358,7 +3358,7 @@ Bescherming voor gevoelige informatie zoals absoluut rendement en hoeveelheden apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3366,7 +3366,7 @@ Afleidingsvrije ervaring voor roerige tijden apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3374,7 @@ Voorproefje van nieuwe functionaliteit apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3602,11 +3602,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3822,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3858,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3866,7 +3866,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4054,7 +4054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4194,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4470,7 +4470,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4478,7 +4478,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4614,7 +4614,7 @@ Biometrische authenticatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4706,7 +4706,7 @@ Exporteer Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4714,7 +4714,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4766,11 +4766,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5324,7 +5324,7 @@ Zwitserland apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5336,7 +5336,7 @@ Wereldwijd apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5688,7 +5688,7 @@ Oeps! Ophalen van historische data is mislukt. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Wilt u dit systeembericht echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Wilt u uw Ghostfolio account echt sluiten? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Gevarenzone apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Account Sluiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Oeps! Er is een fout opgetreden met het instellen van de biometrische authenticatie. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternatief apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Budgetteren apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Familiekantoor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investeerder apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Hulpmiddel apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Gebruikers Ervaring apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Vermogen apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Vermogensbeheer apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Wilt u de API-sleutel echt verwijderen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Voer uw Ghostfolio API-sleutel in. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo-gebruikersaccount is gesynchroniseerd. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 2241e6a9a..8cb13184b 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -215,7 +215,7 @@ Ryzyko strat na rynku może być znaczne. Nie jest zalecane inwestowanie pieniędzy, które mogą być potrzebne w krótkim okresie. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -319,7 +319,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -335,7 +335,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -391,7 +391,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -403,7 +403,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -419,7 +419,7 @@ Suma libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -447,7 +447,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -479,11 +479,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -495,7 +495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -527,7 +527,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -563,7 +563,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -751,7 +751,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -771,7 +771,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -779,7 +779,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -795,7 +795,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -815,7 +815,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -871,7 +871,7 @@ Ups! Nie udało się sparsować danych historycznych. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1055,7 +1055,7 @@ Czy naprawdę chcesz usunąć ten kupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1063,7 +1063,7 @@ Czy naprawdę chcesz usunąć tę wiadomość systemową? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1071,7 +1071,7 @@ Czy naprawdę chcesz wyczyścić pamięć podręczną? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1079,7 +1079,7 @@ Proszę ustawić swoją wiadomość systemową: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1223,7 +1223,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1231,7 +1231,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1255,7 +1255,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1327,7 +1327,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1395,11 +1395,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1435,7 +1435,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1511,7 +1511,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1651,7 +1651,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1699,7 +1699,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1923,7 +1923,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2111,7 +2111,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2119,11 +2119,11 @@ Liczony od początku roku (year-to-date) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2131,11 +2131,11 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2143,11 +2143,11 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2155,11 +2155,11 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2263,7 +2263,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2271,7 +2271,7 @@ Czy na pewno chcesz usunąć tą metode logowania? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2279,7 +2279,7 @@ Widok Prezentera apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2287,7 +2287,7 @@ Ochrona dla wrażliwych informacji takich jak wyniki i wartości ilościowe apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2315,7 +2315,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2323,7 +2323,7 @@ Format daty i liczb apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2331,7 +2331,7 @@ Wygląd (tryb) apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2339,7 +2339,7 @@ Jasny apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2347,7 +2347,7 @@ Ciemny apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2355,7 +2355,7 @@ Tryb Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2367,7 +2367,7 @@ Doświadczenie bez zakłóceń w niespokojnych czasach apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2383,7 +2383,7 @@ Uwierzytelnianie Biometryczne apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2391,7 +2391,7 @@ Logowanie za pomocą linii papilarnych apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2399,7 +2399,7 @@ Funkcje Eksperymentalne apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2407,7 +2407,7 @@ Podgląd nadchodzących funkcjonalności apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2419,7 +2419,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2431,7 +2431,7 @@ Eksportuj Dane apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2887,11 +2887,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3051,7 +3051,7 @@ Oprogramowanie Open Source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3063,7 +3063,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3659,7 +3659,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4427,11 +4427,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4784,7 +4784,7 @@ Szwajcaria apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4796,7 +4796,7 @@ Globalny apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5076,11 +5076,11 @@ Podział libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5096,7 +5096,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5384,7 +5384,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5756,7 +5756,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Czy na pewno chcesz zamknąć swoje konto Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Strefa Zagrożenia apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Zamknij Konto apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Ups! Wystąpił błąd podczas konfigurowania uwierzytelniania biometrycznego. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternatywa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ Aplikacja apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Budżetowanie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Biuro Rodzinne apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Inwestor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Prywatność apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Oprogramowanie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Narzędzie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Doświadczenie Użytkownika apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Majątek apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Zarządzanie Majątkiem apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Czy na pewno chcesz usunąć klucz API?? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Wprowadź swój klucz API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Konto użytkownika demonstracyjnego zostało zsynchronizowane. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 188bda9c8..562e5db2a 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -6,7 +6,7 @@ O risco de perda em investimentos pode ser substancial. Não é aconselhável investir dinheiro que possa vir a precisar a curto prazo. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -110,7 +110,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -154,7 +154,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -166,7 +166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -182,7 +182,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -210,7 +210,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -230,7 +230,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -258,11 +258,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -274,7 +274,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -306,7 +306,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -342,7 +342,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -534,7 +534,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -554,7 +554,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -610,7 +610,7 @@ Deseja realmente eliminar este cupão? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -618,7 +618,7 @@ Deseja realmente limpar a cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -626,7 +626,7 @@ Por favor, defina a sua mensagem do sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -718,7 +718,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -770,11 +770,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -802,7 +802,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -878,7 +878,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -982,7 +982,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1174,7 +1174,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1274,11 +1274,11 @@ Alocação libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1294,7 +1294,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1306,7 +1306,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1314,11 +1314,11 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1326,11 +1326,11 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1338,11 +1338,11 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1350,11 +1350,11 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1470,7 +1470,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -1510,7 +1510,7 @@ Deseja realmente remover este método de início de sessão? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1554,7 +1554,7 @@ Vista do Apresentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1590,7 +1590,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1598,7 +1598,7 @@ Formato de números e datas apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1606,7 +1606,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1618,7 +1618,7 @@ Aparência apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -1626,7 +1626,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -1634,7 +1634,7 @@ Escuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -1642,7 +1642,7 @@ Iniciar sessão com impressão digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1650,7 +1650,7 @@ Funcionalidades Experimentais apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -1662,7 +1662,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2058,7 +2058,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2074,7 +2074,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2510,7 +2510,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3358,7 +3358,7 @@ Proteção para informações sensíveis, como desempenhos absolutos e valores quantitativos apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3366,7 +3366,7 @@ Experiência sem distrações para tempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3374,7 @@ Acesso antecipado a funcionalidades futuras apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3602,11 +3602,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3822,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3858,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3866,7 +3866,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4054,7 +4054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4194,7 @@ Software de código aberto apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4470,7 +4470,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4478,7 +4478,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4614,7 +4614,7 @@ Autenticação biométrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4706,7 +4706,7 @@ Exportar dados apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4714,7 +4714,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4766,11 +4766,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5324,7 +5324,7 @@ Suíça apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5336,7 +5336,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5688,7 +5688,7 @@ Ops! Não foi possível analisar os dados históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Você realmente deseja excluir esta mensagem do sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Você realmente deseja encerrar sua conta Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Zona de perigo apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Fechar conta apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Ops! Ocorreu um erro ao configurar a autenticação biométrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternativo apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ Aplicativo apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Orçamento apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Escritório Familiar apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investidor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Privacidade apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Programas apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Ferramenta apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Experiência do usuário apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Fortuna apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Gestão de patrimônio apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Você realmente deseja excluir a chave de API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index cd713e26a..bd1389a49 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -187,7 +187,7 @@ Alım satımda kayıp riski büyük boyutta olabilir. Kısa vadede ihtiyaç duyabileceğiniz parayla yatırım yapmak tavsiye edilmez. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -291,7 +291,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -307,7 +307,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -351,7 +351,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -363,7 +363,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -379,7 +379,7 @@ Toplam libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -407,7 +407,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -439,11 +439,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -455,7 +455,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -487,7 +487,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -523,7 +523,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -715,7 +715,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -735,7 +735,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -743,7 +743,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -751,7 +751,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -771,7 +771,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -971,7 +971,7 @@ Bu kuponu gerçekten silmek istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -979,7 +979,7 @@ Önbelleği temizlemeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -987,7 +987,7 @@ Lütfen sistem mesajınızı belirleyin: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1139,7 +1139,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1147,7 +1147,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1171,7 +1171,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1195,7 +1195,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1263,11 +1263,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1303,7 +1303,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1379,7 +1379,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1519,7 +1519,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1567,7 +1567,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1779,7 +1779,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1979,7 +1979,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1987,11 +1987,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1999,11 +1999,11 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2011,11 +2011,11 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2023,11 +2023,11 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2451,11 +2451,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -2583,7 +2583,7 @@ Zen Modu apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2627,7 +2627,7 @@ Açık Kaynak Yazılım apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -2639,7 +2639,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3159,7 +3159,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -3911,11 +3911,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4268,7 +4268,7 @@ İsviçre apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4280,7 +4280,7 @@ Küresel apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -4348,7 +4348,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -4388,7 +4388,7 @@ Bu giriş yöntemini kaldırmayı gerçekten istiyor musunuz? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -4444,7 +4444,7 @@ Sunum Görünümü apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -4452,7 +4452,7 @@ Gerçek performans ve miktar değerleri gibi hassas bilgilerin saklanması için apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -4480,7 +4480,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -4488,7 +4488,7 @@ Tarih ve Sayı Formatları apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -4496,7 +4496,7 @@ Görünüm apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -4504,7 +4504,7 @@ Açık apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -4512,7 +4512,7 @@ Koyu apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -4520,7 +4520,7 @@ Çalkantılı zamanlar için dikkat dağıtmayan bir deneyim apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -4536,7 +4536,7 @@ Biyometrik Kimlik Doğrulama apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4544,7 +4544,7 @@ Parmak iziyle oturum aç apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -4552,7 +4552,7 @@ Deneysel Özellikler apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -4560,7 +4560,7 @@ Gelecek özelliklere göz atın apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -4572,7 +4572,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4584,7 +4584,7 @@ Verileri Dışa Aktar apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4772,11 +4772,11 @@ Dağılım libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4792,7 +4792,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5080,7 +5080,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5688,7 +5688,7 @@ Hay Allah! Geçmiş veriler ayrıştırılamadı. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Bu sistem mesajını silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Ghostfolio hesabınızı kapatmak istediğinize emin misiniz? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Tehlikeli Alan apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Hesabı Kapat apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Oops! Biyometrik kimlik doğrulama ayarlanırken bir hata oluştu. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternatif apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Bütçeleme apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Aile Ofisi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Yatırımcı apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Gizlilik apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Yazılım apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Araç apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Kullanıcı Deneyimi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Zenginlik apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Zenginlik Yönetimi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ API anahtarını silmek istediğinize emin misiniz? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Lütfen Ghostfolio API anahtarınızı girin. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo kullanıcı hesabı senkronize edildi. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index c38c8d417..7ad8133b3 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -102,7 +102,7 @@ Ризик втрат у торгівлі може бути суттєвим. Не рекомендується інвестувати гроші, які можуть знадобитися в короткостроковій перспективі. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -403,7 +403,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -419,7 +419,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -483,7 +483,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -495,7 +495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -511,7 +511,7 @@ Загалом libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -539,7 +539,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -571,11 +571,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -587,7 +587,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -619,7 +619,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -655,7 +655,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -843,7 +843,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -851,7 +851,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -871,7 +871,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -879,7 +879,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -887,7 +887,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -923,7 +923,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -1011,7 +1011,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -1019,7 +1019,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -1155,7 +1155,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1239,7 +1239,7 @@ Ви дійсно хочете видалити цей купон? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1247,7 +1247,7 @@ Ви дійсно хочете видалити це системне повідомлення? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1255,7 +1255,7 @@ Ви дійсно хочете очистити кеш? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1263,7 +1263,7 @@ Будь ласка, встановіть ваше системне повідомлення: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1391,7 +1391,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1415,7 +1415,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1507,7 +1507,7 @@ Ви дійсно хочете видалити ключ API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -1515,7 +1515,7 @@ Будь ласка, введіть ваш ключ API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -1623,7 +1623,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1679,11 +1679,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1719,7 +1719,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1815,7 +1815,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1875,7 +1875,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2091,7 +2091,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2139,7 +2139,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -2567,7 +2567,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2575,11 +2575,11 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2587,11 +2587,11 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2599,11 +2599,11 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2611,11 +2611,11 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2667,7 +2667,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2835,7 +2835,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2843,7 +2843,7 @@ Ви дійсно хочете закрити ваш обліковий запис Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -2851,7 +2851,7 @@ Ви дійсно хочете вилучити цей спосіб входу? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2867,7 +2867,7 @@ Упс! Виникла помилка під час налаштування біометричної автентифікації. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -2875,7 +2875,7 @@ Режим доповідача apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2883,7 +2883,7 @@ Захист конфіденційної інформації, такої як абсолютні показники та кількісні значення apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2919,7 +2919,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2927,7 +2927,7 @@ Формат дати та чисел apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2935,7 +2935,7 @@ Зовнішній вигляд apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2943,7 +2943,7 @@ Світлий apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2951,7 +2951,7 @@ Темний apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2959,7 +2959,7 @@ Режим дзен apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2971,7 +2971,7 @@ Досвід без відволікань для неспокійних часів apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2987,7 +2987,7 @@ Біометрична аутентифікація apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2995,7 +2995,7 @@ Увійти з відбитком пальця apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -3003,7 +3003,7 @@ Експериментальні функції apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -3011,7 +3011,7 @@ Попередній перегляд майбутніх функцій apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3019,7 +3019,7 @@ Експортувати дані apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -3027,7 +3027,7 @@ Зона небезпеки apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -3035,7 +3035,7 @@ Закрити обліковий запис apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -3507,11 +3507,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3696,7 +3696,7 @@ Програмне забезпечення з відкритим кодом apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3708,7 +3708,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -4320,7 +4320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4844,7 +4844,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5212,11 +5212,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -5431,7 +5431,7 @@ Швейцарія apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5443,7 +5443,7 @@ Глобальний apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5455,7 +5455,7 @@ Альтернатива apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -5463,7 +5463,7 @@ Додаток apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -5471,7 +5471,7 @@ Бюджетування apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -5487,47 +5487,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -5535,7 +5539,7 @@ Сімейний офіс apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -5543,7 +5547,7 @@ Інвестор apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -5555,7 +5559,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -5567,7 +5571,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -5575,7 +5579,7 @@ Конфіденційність apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -5583,7 +5587,7 @@ Програмне забезпечення apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -5591,7 +5595,7 @@ Інструмент apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -5599,7 +5603,7 @@ Користувацький досвід apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -5607,7 +5611,7 @@ Багатство apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -5615,7 +5619,7 @@ Управління багатством apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6155,7 +6159,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -6163,11 +6167,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -6175,7 +6179,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -6183,11 +6187,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -6195,7 +6199,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -6203,7 +6207,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6215,7 +6219,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6223,11 +6227,11 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6419,7 +6423,7 @@ Упс! Не вдалося отримати історичні дані. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -6427,11 +6431,11 @@ Розподіл libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6447,7 +6451,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -6843,7 +6847,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -7383,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 6888369ab..d91a8d438 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -203,7 +203,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -297,7 +297,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -312,7 +312,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -373,7 +373,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -385,7 +385,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -400,7 +400,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -427,7 +427,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -458,11 +458,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -474,7 +474,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -505,7 +505,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -540,7 +540,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -711,7 +711,7 @@ Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -729,14 +729,14 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -750,7 +750,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -769,7 +769,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -833,7 +833,7 @@ Oops! Could not parse historical data. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1009,28 +1009,28 @@ Do you really want to delete this coupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 Do you really want to delete this system message? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 Do you really want to flush the cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 Please set your system message: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1158,14 +1158,14 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1186,7 +1186,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1250,7 +1250,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1311,11 +1311,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1348,7 +1348,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1419,7 +1419,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1544,7 +1544,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1588,7 +1588,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1793,7 +1793,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1968,51 +1968,51 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2105,28 +2105,28 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 Do you really want to remove this sign in method? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 Presenter View apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 Protection for sensitive information like absolute performances and quantity values apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2151,42 +2151,42 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 Date and number format apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 Appearance apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 Light apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 Dark apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 Zen Mode apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2197,7 +2197,7 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2211,28 +2211,28 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 Sign in with fingerprint apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 Experimental Features apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2243,7 +2243,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2254,7 +2254,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2683,11 +2683,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -2830,7 +2830,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -2841,7 +2841,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3380,7 +3380,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4070,11 +4070,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4403,7 +4403,7 @@ Switzerland apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4414,7 +4414,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -4687,11 +4687,11 @@ Allocation libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4706,7 +4706,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -4970,7 +4970,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5270,7 +5270,7 @@ The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5378,7 +5378,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5406,43 +5406,43 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5474,7 +5474,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5486,18 +5486,18 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -5668,21 +5668,21 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 Do you really want to close your Ghostfolio account? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -5717,7 +5717,7 @@ Oops! There was an error setting up biometric authentication. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -5752,7 +5752,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -5780,7 +5780,7 @@ Wealth apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -5795,47 +5795,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -5877,35 +5881,35 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 Wealth Management apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -5940,14 +5944,14 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -5958,14 +5962,14 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -5993,7 +5997,7 @@ Budgeting apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6011,7 +6015,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6046,7 +6050,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6067,7 +6071,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -6545,7 +6549,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -6705,7 +6709,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -6747,14 +6751,14 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -6768,14 +6772,14 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -6796,7 +6800,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6815,7 +6819,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6907,21 +6911,21 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -6983,14 +6987,14 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7054,7 +7058,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7098,7 +7102,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7282,7 +7286,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 02f90631d..f8af582de 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -216,7 +216,7 @@ 交易存在巨大亏损风险,因此不应投入您短期内可能急需的资金。 apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -320,7 +320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -336,7 +336,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -400,7 +400,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -412,7 +412,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -428,7 +428,7 @@ 总计 libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -456,7 +456,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -488,11 +488,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -504,7 +504,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -536,7 +536,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -572,7 +572,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -760,7 +760,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -788,7 +788,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -804,7 +804,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -880,7 +880,7 @@ 哎呀!无法解析历史数据。 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1064,7 +1064,7 @@ 您确实要删除此优惠券吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1072,7 +1072,7 @@ 您真的要删除这条系统消息吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1080,7 +1080,7 @@ 您真的要刷新缓存吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1088,7 +1088,7 @@ 请设置您的系统消息: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1232,7 +1232,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1240,7 +1240,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1264,7 +1264,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1336,7 +1336,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1404,11 +1404,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1444,7 +1444,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1520,7 +1520,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1660,7 +1660,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1708,7 +1708,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1932,7 +1932,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2120,7 +2120,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2128,11 +2128,11 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2140,11 +2140,11 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2152,11 +2152,11 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2164,11 +2164,11 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2272,7 +2272,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2280,7 +2280,7 @@ 您确实要删除此登录方法吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2288,7 +2288,7 @@ 演示者视图 apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2296,7 +2296,7 @@ 保护绝对业绩、金额等敏感信息 apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2324,7 +2324,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2332,7 +2332,7 @@ 日期和数字格式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2340,7 +2340,7 @@ 外观 apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2348,7 +2348,7 @@ 明亮 apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2356,7 +2356,7 @@ 黑暗 apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2364,7 +2364,7 @@ 极简模式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2376,7 +2376,7 @@ 动荡时期的无干扰体验 apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2392,7 +2392,7 @@ 生物识别认证 apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2400,7 +2400,7 @@ 使用指纹登录 apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2408,7 +2408,7 @@ 实验性功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2416,7 +2416,7 @@ 预览即将推出的功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2428,7 +2428,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2440,7 +2440,7 @@ 导出数据 apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2896,11 +2896,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3060,7 +3060,7 @@ 开源软件 apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3072,7 +3072,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3668,7 +3668,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4436,11 +4436,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4805,7 +4805,7 @@ 瑞士 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4817,7 +4817,7 @@ 全球的 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5121,11 +5121,11 @@ 分配 libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5141,7 +5141,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5429,7 +5429,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5765,7 +5765,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5885,7 +5885,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5917,7 +5917,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5925,7 +5925,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5933,7 +5933,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5941,11 +5941,11 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5953,11 +5953,11 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5993,7 +5993,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6005,7 +6005,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6013,11 +6013,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6210,7 +6210,7 @@ 您确定要关闭您的 Ghostfolio 账户吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6218,7 +6218,7 @@ 危险区域 apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6226,7 +6226,7 @@ 关闭账户 apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6266,7 +6266,7 @@ 哎呀!设置生物识别认证时发生错误。 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6282,7 +6282,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6338,7 +6338,7 @@ 另类 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6346,7 +6346,7 @@ 应用 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6354,7 +6354,7 @@ 预算管理 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6370,47 +6370,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6418,7 +6422,7 @@ 家族办公室 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6426,7 +6430,7 @@ 投资者 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6438,7 +6442,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6450,7 +6454,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6458,7 +6462,7 @@ 隐私 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6466,7 +6470,7 @@ 软件 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6474,7 +6478,7 @@ 工具 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6482,7 +6486,7 @@ 用户体验 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6490,7 +6494,7 @@ 财富 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6498,7 +6502,7 @@ 财富管理 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6658,7 +6662,7 @@ 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7192,7 +7196,7 @@ 您确定要删除此 API 密钥吗? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,7 @@ 请输入您的 Ghostfolio API 密钥。 apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7384,7 +7388,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7396,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7436,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7444,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7464,7 +7468,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7484,7 +7488,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7588,7 +7592,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7600,7 +7604,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7612,7 @@ 查找账户、持仓或页面... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7677,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7685,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7777,7 +7781,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7822,7 @@ 演示用户账户已同步。 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8032,7 +8036,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 From 3e8c21aa20052d671e9ae5117457c10cc632c9d0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:25:25 +0100 Subject: [PATCH 04/76] Task/extend referral brokers (#6193) * Add Monefit --- apps/client/src/app/pages/pricing/pricing-page.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index f818e6b11..831f0809c 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -82,6 +82,7 @@ export class GfPricingPageComponent implements OnDestroy, OnInit { 'frankly', 'Interactive Brokers', 'Mintos', + 'Monefit SmartSaver', 'Swissquote', 'VIAC', 'Zak' From 6727fb2b74e9f694445670f4e9c0b5fda27dfe3c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:25:59 +0100 Subject: [PATCH 05/76] Bugfix/total fee calculation related to activities in custom currency (#6191) * Fix total fee calculation related to activities in custom currency * Update changelog --- CHANGELOG.md | 5 +++++ apps/api/src/app/portfolio/portfolio.service.ts | 8 ++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5063cae44..431218b21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Restored the support for specific calendar year date ranges (`2024`, `2023`, `2022`, etc.) in the holdings table (experimental) +### Fixed + +- Fixed the total fee calculation in the holding detail dialog related to activities in a custom currency +- Fixed the total fee calculation in the summary related to activities in a custom currency + ## 2.229.0 - 2026-01-11 ### Changed diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 4bc10bd49..d9783f34c 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -792,7 +792,7 @@ export class PortfolioService { averagePrice, currency, dividendInBaseCurrency, - fee, + feeInBaseCurrency, firstBuyDate, grossPerformance, grossPerformancePercentage, @@ -928,11 +928,7 @@ export class PortfolioService { dividendYieldPercent: dividendYieldPercent.toNumber(), dividendYieldPercentWithCurrencyEffect: dividendYieldPercentWithCurrencyEffect.toNumber(), - feeInBaseCurrency: this.exchangeRateDataService.toCurrency( - fee.toNumber(), - SymbolProfile.currency, - userCurrency - ), + feeInBaseCurrency: feeInBaseCurrency.toNumber(), grossPerformance: grossPerformance?.toNumber(), grossPerformancePercent: grossPerformancePercentage?.toNumber(), grossPerformancePercentWithCurrencyEffect: From e629d1b43bc093e9f3e74b1eaa51281cafff481a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:27:59 +0100 Subject: [PATCH 06/76] Release 2.230.0 (#6194) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 431218b21..f91e423fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.230.0 - 2026-01-14 ### Added diff --git a/package-lock.json b/package-lock.json index 60cf31da5..c1dd937b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.229.0", + "version": "2.230.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.229.0", + "version": "2.230.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 63612d7fa..39c64bbbc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.229.0", + "version": "2.230.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From aa41cb404b24e61eae03acf90a985a96d6bc82ee Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 15 Jan 2026 17:20:55 +0100 Subject: [PATCH 07/76] Task/remove deprecated platforms from info service (#6137) * Remove platforms from info service * Update changelog --- CHANGELOG.md | 6 ++++++ .../src/app/endpoints/platforms/platforms.controller.ts | 4 +++- apps/api/src/app/info/info.service.ts | 7 ------- libs/common/src/lib/interfaces/info-item.interface.ts | 6 +----- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f91e423fe..5bbf0c8d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Removed the deprecated platforms from the info service + ## 2.230.0 - 2026-01-14 ### Added diff --git a/apps/api/src/app/endpoints/platforms/platforms.controller.ts b/apps/api/src/app/endpoints/platforms/platforms.controller.ts index 46303a3f8..92ba77297 100644 --- a/apps/api/src/app/endpoints/platforms/platforms.controller.ts +++ b/apps/api/src/app/endpoints/platforms/platforms.controller.ts @@ -15,7 +15,9 @@ export class PlatformsController { @HasPermission(permissions.readPlatforms) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getPlatforms(): Promise { - const platforms = await this.platformService.getPlatforms(); + const platforms = await this.platformService.getPlatforms({ + orderBy: { name: 'asc' } + }); return { platforms }; } diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index c5152c1a2..9b4a4d597 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -1,4 +1,3 @@ -import { PlatformService } from '@ghostfolio/api/app/platform/platform.service'; import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; import { SubscriptionService } from '@ghostfolio/api/app/subscription/subscription.service'; import { UserService } from '@ghostfolio/api/app/user/user.service'; @@ -38,7 +37,6 @@ export class InfoService { private readonly configurationService: ConfigurationService, private readonly exchangeRateDataService: ExchangeRateDataService, private readonly jwtService: JwtService, - private readonly platformService: PlatformService, private readonly propertyService: PropertyService, private readonly redisCacheService: RedisCacheService, private readonly subscriptionService: SubscriptionService, @@ -103,16 +101,12 @@ export class InfoService { benchmarks, demoAuthToken, isUserSignupEnabled, - platforms, statistics, subscriptionOffer ] = await Promise.all([ this.benchmarkService.getBenchmarkAssetProfiles(), this.getDemoAuthToken(), this.propertyService.isUserSignupEnabled(), - this.platformService.getPlatforms({ - orderBy: { name: 'asc' } - }), this.getStatistics(), this.subscriptionService.getSubscriptionOffer({ key: 'default' }) ]); @@ -127,7 +121,6 @@ export class InfoService { demoAuthToken, globalPermissions, isReadOnlyMode, - platforms, statistics, subscriptionOffer, baseCurrency: DEFAULT_CURRENCY, diff --git a/libs/common/src/lib/interfaces/info-item.interface.ts b/libs/common/src/lib/interfaces/info-item.interface.ts index 119a94a7c..01897c066 100644 --- a/libs/common/src/lib/interfaces/info-item.interface.ts +++ b/libs/common/src/lib/interfaces/info-item.interface.ts @@ -1,4 +1,4 @@ -import { Platform, SymbolProfile } from '@prisma/client'; +import { SymbolProfile } from '@prisma/client'; import { Statistics } from './statistics.interface'; import { SubscriptionOffer } from './subscription-offer.interface'; @@ -13,10 +13,6 @@ export interface InfoItem { globalPermissions: string[]; isDataGatheringEnabled?: string; isReadOnlyMode?: boolean; - - /** @deprecated */ - platforms: Platform[]; - statistics: Statistics; subscriptionOffer?: SubscriptionOffer; } From f19e417068efcd01a0ac63e38391f61c19025f9c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 09:47:22 +0100 Subject: [PATCH 08/76] Task/remove deprecated activities from portfolio holding response (#6157) * Remove deprecated activities * Update changelog --- CHANGELOG.md | 1 + .../src/app/portfolio/portfolio.service.ts | 1 - .../portfolio-holding-response.interface.ts | 4 ---- libs/ui/src/lib/services/data.service.ts | 19 +++---------------- 4 files changed, 4 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bbf0c8d4..779b24981 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Removed the deprecated platforms from the info service +- Removed the deprecated activities from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` ## 2.230.0 - 2026-01-14 diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index d9783f34c..5fc2224eb 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -920,7 +920,6 @@ export class PortfolioService { marketPriceMin, SymbolProfile, tags, - activities: activitiesOfHolding, activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 4ec42933a..95c1c3689 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -1,5 +1,4 @@ import { - Activity, Benchmark, DataProviderInfo, EnhancedSymbolProfile, @@ -9,9 +8,6 @@ import { import { Tag } from '@prisma/client'; export interface PortfolioHoldingResponse { - /** @deprecated */ - activities: Activity[]; - activitiesCount: number; averagePrice: number; dataProviderInfo: DataProviderInfo; diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 21eec06c3..37443cd20 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -424,22 +424,9 @@ export class DataService { dataSource: DataSource; symbol: string; }) { - return this.http - .get( - `/api/v1/portfolio/holding/${dataSource}/${symbol}` - ) - .pipe( - map((data) => { - if (data.activities) { - for (const order of data.activities) { - order.createdAt = parseISO(order.createdAt as unknown as string); - order.date = parseISO(order.date as unknown as string); - } - } - - return data; - }) - ); + return this.http.get( + `/api/v1/portfolio/holding/${dataSource}/${symbol}` + ); } public fetchInfo(): InfoItem { From 3359ea1d2027cab75eeedf72b610e76008074292 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 11:46:41 +0100 Subject: [PATCH 09/76] Bugfix/numeric parsing error in X-ray page (#6198) * Fix numeric parsing error related to cash positions * Update changelog --- CHANGELOG.md | 4 ++++ .../api/src/app/portfolio/calculator/portfolio-calculator.ts | 5 ++--- .../calculator/roai/portfolio-calculator-cash.spec.ts | 2 +- .../calculator/roai/portfolio-calculator-valuable.spec.ts | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 779b24981..c7757c1c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed the deprecated platforms from the info service - Removed the deprecated activities from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +### Fixed + +- Fixed a numeric parsing error related to cash positions on the _X-ray_ page + ## 2.230.0 - 2026-01-14 ### Added diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 8f6cb0efc..dfc39afa5 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -433,9 +433,8 @@ export abstract class PortfolioCalculator { investment: totalInvestment, investmentWithCurrencyEffect: totalInvestmentWithCurrencyEffect, marketPrice: - marketSymbolMap[endDateString]?.[item.symbol]?.toNumber() ?? null, - marketPriceInBaseCurrency: - marketPriceInBaseCurrency?.toNumber() ?? null, + marketSymbolMap[endDateString]?.[item.symbol]?.toNumber() ?? 1, + marketPriceInBaseCurrency: marketPriceInBaseCurrency?.toNumber() ?? 1, netPerformance: !hasErrors ? (netPerformance ?? null) : null, netPerformancePercentage: !hasErrors ? (netPerformancePercentage ?? null) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index f5a4ca634..c9adebc44 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -247,7 +247,7 @@ describe('PortfolioCalculator', () => { includeInTotalAssetValue: false, investment: new Big(1820), investmentWithCurrencyEffect: new Big(1750), - marketPrice: null, + marketPrice: 1, marketPriceInBaseCurrency: 0.91, netPerformance: new Big(0), netPerformancePercentage: new Big(0), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 3c7c3be4b..1db133288 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -129,7 +129,7 @@ describe('PortfolioCalculator', () => { grossPerformanceWithCurrencyEffect: new Big('0'), investment: new Big('500000'), investmentWithCurrencyEffect: new Big('500000'), - marketPrice: null, + marketPrice: 1, marketPriceInBaseCurrency: 500000, netPerformance: new Big('0'), netPerformancePercentage: new Big('0'), From d9a4d261e4954e55a73196cb7492b68478b348b8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 11:58:28 +0100 Subject: [PATCH 10/76] Bugfix/total fee calculation related to activities in custom currency (part 2) (#6199) * Fix total fee calculation related to activities in custom currency * Update changelog --- CHANGELOG.md | 2 ++ .../portfolio/calculator/portfolio-calculator.ts | 14 +++++++------- .../portfolio-calculator-baln-buy-and-buy.spec.ts | 2 ++ ...tor-baln-buy-and-sell-in-two-activities.spec.ts | 3 +++ .../portfolio-calculator-baln-buy-and-sell.spec.ts | 2 ++ .../roai/portfolio-calculator-baln-buy.spec.ts | 3 +++ ...-calculator-btceur-in-base-currency-eur.spec.ts | 1 + .../roai/portfolio-calculator-btceur.spec.ts | 1 + ...alculator-btcusd-buy-and-sell-partially.spec.ts | 2 ++ .../roai/portfolio-calculator-btcusd-short.spec.ts | 1 + .../roai/portfolio-calculator-btcusd.spec.ts | 1 + .../roai/portfolio-calculator-fee.spec.ts | 1 + .../roai/portfolio-calculator-googl-buy.spec.ts | 1 + .../roai/portfolio-calculator-liability.spec.ts | 1 + .../portfolio-calculator-msft-buy-and-sell.spec.ts | 7 +++++-- ...folio-calculator-msft-buy-with-dividend.spec.ts | 2 ++ ...-calculator-novn-buy-and-sell-partially.spec.ts | 1 + .../portfolio-calculator-novn-buy-and-sell.spec.ts | 1 + .../roai/portfolio-calculator-valuable.spec.ts | 1 + .../interfaces/portfolio-order-item.interface.ts | 1 - .../interfaces/portfolio-order.interface.ts | 1 + .../transaction-point-symbol.interface.ts | 1 + 22 files changed, 40 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7757c1c4..de71fcf0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed a numeric parsing error related to cash positions on the _X-ray_ page +- Fixed the total fee calculation in the holding detail dialog related to activities in a custom currency +- Fixed the total fee calculation in the summary related to activities in a custom currency ## 2.230.0 - 2026-01-14 diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index dfc39afa5..8fee1957c 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -120,6 +120,7 @@ export abstract class PortfolioCalculator { ({ date, feeInAssetProfileCurrency, + feeInBaseCurrency, quantity, SymbolProfile, tags = [], @@ -142,6 +143,7 @@ export abstract class PortfolioCalculator { type, date: format(date, DATE_FORMAT), fee: new Big(feeInAssetProfileCurrency), + feeInBaseCurrency: new Big(feeInBaseCurrency), quantity: new Big(quantity), unitPrice: new Big(unitPriceInAssetProfileCurrency) }; @@ -336,12 +338,6 @@ export abstract class PortfolioCalculator { } = {}; for (const item of lastTransactionPoint.items) { - const feeInBaseCurrency = item.fee.mul( - exchangeRatesByCurrency[`${item.currency}${this.currency}`]?.[ - lastTransactionPoint.date - ] ?? 1 - ); - const marketPriceInBaseCurrency = ( marketSymbolMap[endDateString]?.[item.symbol] ?? item.averagePrice ).mul( @@ -408,7 +404,6 @@ export abstract class PortfolioCalculator { } positions.push({ - feeInBaseCurrency, includeInTotalAssetValue, timeWeightedInvestment, timeWeightedInvestmentWithCurrencyEffect, @@ -418,6 +413,7 @@ export abstract class PortfolioCalculator { dividend: totalDividend, dividendInBaseCurrency: totalDividendInBaseCurrency, fee: item.fee, + feeInBaseCurrency: item.feeInBaseCurrency, firstBuyDate: item.firstBuyDate, grossPerformance: !hasErrors ? (grossPerformance ?? null) : null, grossPerformancePercentage: !hasErrors @@ -937,6 +933,7 @@ export abstract class PortfolioCalculator { for (const { date, fee, + feeInBaseCurrency, quantity, SymbolProfile, tags, @@ -1001,6 +998,8 @@ export abstract class PortfolioCalculator { : investment.div(newQuantity).abs(), dividend: new Big(0), fee: oldAccumulatedSymbol.fee.plus(fee), + feeInBaseCurrency: + oldAccumulatedSymbol.feeInBaseCurrency.plus(feeInBaseCurrency), firstBuyDate: oldAccumulatedSymbol.firstBuyDate, includeInHoldings: oldAccumulatedSymbol.includeInHoldings, quantity: newQuantity, @@ -1013,6 +1012,7 @@ export abstract class PortfolioCalculator { currency, dataSource, fee, + feeInBaseCurrency, skipErrors, symbol, tags, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index f0e2f6488..6b56b39a2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-22'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.65, + feeInBaseCurrency: 1.65, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 10b1fabd3..2aad0cb26 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-22'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.65, + feeInBaseCurrency: 1.65, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -117,6 +119,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 32cd9f7d4..35e4309eb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-22'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.65, + feeInBaseCurrency: 1.65, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index bfa4d06f3..ebce2ac1c 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -208,6 +209,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -247,6 +249,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts index 84ea6c251..774c1d2f6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts @@ -110,6 +110,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 3.94, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 32b3f05c2..9ca8b2d36 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 4.46, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 0c111fab2..3648eb84b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -100,6 +100,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2015-01-01'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -115,6 +116,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2017-12-31'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts index 618dc805c..6a45f79c6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 716ec7a59..5179fdaa6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 4.46, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts index aae77c876..59a5531df 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-09-01'), feeInAssetProfileCurrency: 49, + feeInBaseCurrency: 49, quantity: 0, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index 495728e22..fa38d0030 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -99,6 +99,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2023-01-03'), feeInAssetProfileCurrency: 1, + feeInBaseCurrency: 0.9238, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts index 1fd88dacc..acbf6a66b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2023-01-01'), // Date in future feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts index 4c8ccdcf5..baa6ae1ed 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts @@ -80,6 +80,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2024-03-08'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 0.3333333333333333, SymbolProfile: { ...symbolProfileDummyData, @@ -94,8 +95,9 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2024-03-13'), - quantity: 0.6666666666666666, feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 0.6666666666666666, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', @@ -109,8 +111,9 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2024-03-14'), - quantity: 1, feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 0331e163e..ab7480bbf 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-09-16'), feeInAssetProfileCurrency: 19, + feeInBaseCurrency: 19, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-16'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 650944421..32a1b02f3 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -101,6 +101,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index 2e408dc3c..f2903f3cd 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -101,6 +101,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 1db133288..3a00c022c 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2022-01-01'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts b/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts index 06e471d67..42759b521 100644 --- a/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts @@ -3,7 +3,6 @@ import { Big } from 'big.js'; import { PortfolioOrder } from './portfolio-order.interface'; export interface PortfolioOrderItem extends PortfolioOrder { - feeInBaseCurrency?: Big; feeInBaseCurrencyWithCurrencyEffect?: Big; itemType?: 'end' | 'start'; unitPriceFromMarketData?: Big; diff --git a/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts b/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts index fcc8322fc..2dbd68f12 100644 --- a/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts @@ -3,6 +3,7 @@ import { Activity } from '@ghostfolio/common/interfaces'; export interface PortfolioOrder extends Pick { date: string; fee: Big; + feeInBaseCurrency: Big; quantity: Big; SymbolProfile: Pick< Activity['SymbolProfile'], diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index 14e2e1f37..1c43508dd 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -8,6 +8,7 @@ export interface TransactionPointSymbol { dataSource: DataSource; dividend: Big; fee: Big; + feeInBaseCurrency: Big; firstBuyDate: string; includeInHoldings: boolean; investment: Big; From d42322cfa8b73ec5ef8cadd83620b33ae4ae46fc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 12:00:59 +0100 Subject: [PATCH 11/76] Release 2.231.0 (#6200) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de71fcf0d..311b3c36b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.231.0 - 2026-01-17 ### Changed diff --git a/package-lock.json b/package-lock.json index c1dd937b9..fb86f76be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.230.0", + "version": "2.231.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.230.0", + "version": "2.231.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 39c64bbbc..a45df0d61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.230.0", + "version": "2.231.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 47b8494efa2f5619f106c1c94ab27167fd029d62 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:32:18 +0100 Subject: [PATCH 12/76] Task/upgrade countries-list to version 3.2.2 (#6209) * Upgrade countries-list to version 3.2.2 * Update changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 311b3c36b..28d3b6ea0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `countries-list` from version `3.2.0` to `3.2.2` + ## 2.231.0 - 2026-01-17 ### Changed diff --git a/package-lock.json b/package-lock.json index fb86f76be..b8e9295ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,7 @@ "class-validator": "0.14.3", "color": "5.0.3", "countries-and-timezones": "3.8.0", - "countries-list": "3.2.0", + "countries-list": "3.2.2", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", @@ -16319,9 +16319,9 @@ } }, "node_modules/countries-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.0.tgz", - "integrity": "sha512-HYHAo2fwEsG3TmbsNdVmIQPHizRlqeYMTtLEAl0IANG/3jRYX7p3NR6VapDqKP0n60TmsRy1dyRjVN5JbywDbA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.2.tgz", + "integrity": "sha512-ABJ/RWQBrPWy+hRuZoW+0ooK8p65Eo3WmUZwHm6v4wmfSPznNAKzjy3+UUYrJK2v3182BVsgWxdB6ROidj39kw==", "license": "MIT" }, "node_modules/countup.js": { diff --git a/package.json b/package.json index a45df0d61..0b5a28deb 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "class-validator": "0.14.3", "color": "5.0.3", "countries-and-timezones": "3.8.0", - "countries-list": "3.2.0", + "countries-list": "3.2.2", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", From 4cfb785499538ca3bde4b4f04db75986aa947cab Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:42:58 +0100 Subject: [PATCH 13/76] Task/deprecate firstBuyDate in portfolio holding response (#6208) * Deprecate firstBuyDate * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/import/import.service.ts | 6 +++--- apps/api/src/app/portfolio/portfolio.service.ts | 1 + .../holding-detail-dialog.component.ts | 14 +++++++------- .../holding-detail-dialog.html | 4 ++-- .../portfolio-holding-response.interface.ts | 4 ++++ 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28d3b6ea0..8c66c9c07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Upgraded `countries-list` from version `3.2.0` to `3.2.2` ## 2.231.0 - 2026-01-17 diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 3f8bd2cde..7e8e333b9 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -82,7 +82,7 @@ export class ImportService { filterBySymbol: symbol }); - const { firstBuyDate, historicalData } = holding; + const { dateOfFirstActivity, historicalData } = holding; const [{ accounts }, { activities }, [assetProfile], dividends] = await Promise.all([ @@ -95,7 +95,7 @@ export class ImportService { filters, userCurrency, userId, - startDate: parseDate(firstBuyDate) + startDate: parseDate(dateOfFirstActivity) }), this.symbolProfileService.getSymbolProfiles([ { @@ -106,7 +106,7 @@ export class ImportService { await this.dataProviderService.getDividends({ dataSource, symbol, - from: parseDate(firstBuyDate), + from: parseDate(dateOfFirstActivity), granularity: 'day', to: new Date() }) diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 5fc2224eb..9a6f6af62 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -923,6 +923,7 @@ export class PortfolioService { activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], + dateOfFirstActivity: firstBuyDate, dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), dividendYieldPercent: dividendYieldPercent.toNumber(), dividendYieldPercentWithCurrencyEffect: diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 95c58d35a..427386796 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -116,11 +116,11 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { }; public dataProviderInfo: DataProviderInfo; public dataSource: MatTableDataSource; + public dateOfFirstActivity: string; public dividendInBaseCurrency: number; public dividendInBaseCurrencyPrecision = 2; public dividendYieldPercentWithCurrencyEffect: number; public feeInBaseCurrency: number; - public firstBuyDate: string; public hasPermissionToCreateOwnTag: boolean; public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; public historicalDataItems: LineChartItem[]; @@ -267,10 +267,10 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { activitiesCount, averagePrice, dataProviderInfo, + dateOfFirstActivity, dividendInBaseCurrency, dividendYieldPercentWithCurrencyEffect, feeInBaseCurrency, - firstBuyDate, historicalData, investmentInBaseCurrencyWithCurrencyEffect, marketPrice, @@ -298,6 +298,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.benchmarkDataItems = []; this.countries = {}; this.dataProviderInfo = dataProviderInfo; + this.dateOfFirstActivity = dateOfFirstActivity; this.dividendInBaseCurrency = dividendInBaseCurrency; if ( @@ -312,7 +313,6 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { dividendYieldPercentWithCurrencyEffect; this.feeInBaseCurrency = feeInBaseCurrency; - this.firstBuyDate = firstBuyDate; this.hasPermissionToReadMarketDataOfOwnAssetProfile = hasPermission( @@ -461,16 +461,16 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { } } - if (isToday(parseISO(this.firstBuyDate))) { + if (isToday(parseISO(this.dateOfFirstActivity))) { // Add average price this.historicalDataItems.push({ - date: this.firstBuyDate, + date: this.dateOfFirstActivity, value: this.averagePrice }); // Add benchmark 1 this.benchmarkDataItems.push({ - date: this.firstBuyDate, + date: this.dateOfFirstActivity, value: averagePrice }); @@ -501,7 +501,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if ( this.benchmarkDataItems[0]?.value === undefined && - isSameMonth(parseISO(this.firstBuyDate), new Date()) + isSameMonth(parseISO(this.dateOfFirstActivity), new Date()) ) { this.benchmarkDataItems[0].value = this.averagePrice; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index f52286160..f9329dbfb 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -215,7 +215,7 @@ [deviceType]="data.deviceType" [isDate]="true" [locale]="data.locale" - [value]="firstBuyDate" + [value]="dateOfFirstActivity" >First Activity @@ -400,7 +400,7 @@ Date: Sun, 18 Jan 2026 16:54:23 +0100 Subject: [PATCH 14/76] Feature/extend analysis page by values (#6210) * Extend analysis page by values * Update changelog --- CHANGELOG.md | 4 ++ .../analysis/analysis-page.component.ts | 11 ++++ .../portfolio/analysis/analysis-page.html | 64 +++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c66c9c07..c200f9d62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Extended the analysis page to include the total amount, change and performance with currency effects + ### Changed - Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts index ec872c770..5cd24777c 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -2,6 +2,7 @@ import { GfBenchmarkComparatorComponent } from '@ghostfolio/client/components/be import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { HistoricalDataItem, InvestmentItem, @@ -94,6 +95,7 @@ export class GfAnalysisPageComponent implements OnDestroy, OnInit { public performanceDataItems: HistoricalDataItem[]; public performanceDataItemsInPercentage: HistoricalDataItem[]; public portfolioEvolutionDataLabel = $localize`Investment`; + public precision = 2; public streaks: PortfolioInvestmentsResponse['streaks']; public top3: PortfolioPosition[]; public unitCurrentStreak: string; @@ -317,12 +319,21 @@ export class GfAnalysisPageComponent implements OnDestroy, OnInit { : valueInPercentage }); } + this.performanceDataItemsInPercentage.push({ date, value: netPerformanceInPercentageWithCurrencyEffect }); } + if ( + this.deviceType === 'mobile' && + this.performance.currentValueInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.precision = 0; + } + this.isLoadingInvestmentChart = false; this.updateBenchmarkDataItems(); diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html index 150caa7d8..b4170c2c5 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -74,6 +74,70 @@ } + +
+
+ + + Total amount + + +
+
+ + + Change with currency effect + + +
+
+ + + Performance with currency effect + + +
+
+
Date: Mon, 19 Jan 2026 08:03:39 +0100 Subject: [PATCH 15/76] Task/update locales (#6212) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.de.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.es.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.fr.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.it.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.ko.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.nl.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.pl.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.pt.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.tr.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.uk.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.xlf | 61 +++++++++++++++-------- apps/client/src/locales/messages.zh.xlf | 64 +++++++++++++++++-------- 14 files changed, 570 insertions(+), 260 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c200f9d62..05c1c2162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +- Improved the language localization for German (`de`) - Upgraded `countries-list` from version `3.2.0` to `3.2.2` ## 2.231.0 - 2026-01-17 diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index e48a2ad47..fc8a326c3 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -2123,7 +2123,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -2135,7 +2135,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2394,6 +2394,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Màx @@ -4500,7 +4508,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4520,11 +4528,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4544,7 +4552,7 @@ Mensualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4552,7 +4560,7 @@ Anualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4568,7 +4576,7 @@ Rendiment absolut dels actius apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -4576,7 +4584,7 @@ Rendiment de l’actiu apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -4584,7 +4592,7 @@ Rendiment absolut de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -4592,7 +4600,7 @@ Rendiment de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -4600,7 +4608,7 @@ A dalt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4608,7 +4616,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4616,7 +4624,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4624,7 +4632,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4632,7 +4640,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4640,7 +4648,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4648,7 +4656,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index d70c2ad1d..6c2bd7900 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -926,7 +926,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -938,7 +938,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1117,6 +1117,14 @@ 409 + + Performance with currency effect + Performance mit Währungseffekt + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Max @@ -1854,7 +1862,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1862,7 +1870,7 @@ Gewinner apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1870,7 +1878,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2526,7 +2534,7 @@ Monatlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2754,7 +2762,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3130,7 +3138,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3166,7 +3174,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3290,7 +3298,7 @@ Jährlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4026,7 +4034,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4034,7 +4042,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5876,11 +5884,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5908,7 +5916,7 @@ Absolute Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5916,7 +5924,7 @@ Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5924,7 +5932,7 @@ Absolute Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5932,7 +5940,7 @@ Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7390,12 +7398,20 @@ 146 + + Change with currency effect + Änderung mit Währungseffekt + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7475,7 +7491,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7546,6 +7562,14 @@ 67 + + Total amount + Gesamtbetrag + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenien diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 89e67975f..a1b6e45e4 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -911,7 +911,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -923,7 +923,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1102,6 +1102,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Máximo @@ -1839,7 +1847,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1847,7 +1855,7 @@ Lo mejor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1855,7 +1863,7 @@ Lo peor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2555,7 +2563,7 @@ Mensual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2739,7 +2747,7 @@ Evolución cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3143,7 +3151,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3155,7 +3163,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3275,7 +3283,7 @@ Anual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4003,7 +4011,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4011,7 +4019,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5853,11 +5861,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5885,7 +5893,7 @@ Rendimiento absoluto de los activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5893,7 +5901,7 @@ Rendimiento de activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5901,7 +5909,7 @@ Rendimiento absoluto de divisas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5909,7 +5917,7 @@ Rendimiento de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7367,12 +7375,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard El aviso de IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7452,7 +7468,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7523,6 +7539,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index dc25b2c05..05dc0f7e3 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -1194,7 +1194,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1206,7 +1206,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1349,6 +1349,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Max @@ -2414,7 +2422,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -2442,7 +2450,7 @@ Mensuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2450,7 +2458,7 @@ Haut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -2458,7 +2466,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2466,7 +2474,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -2474,7 +2482,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -2482,7 +2490,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3274,7 +3282,7 @@ Annuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4002,7 +4010,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4010,7 +4018,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Performance des Actifs en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Performance des Actifs apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Performance des devises en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Performance des devises apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Arménie diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index c021470ef..26545f435 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -911,7 +911,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -923,7 +923,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1102,6 +1102,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Massimo @@ -1839,7 +1847,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1847,7 +1855,7 @@ In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1855,7 +1863,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2555,7 +2563,7 @@ Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2739,7 +2747,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3143,7 +3151,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3155,7 +3163,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3275,7 +3283,7 @@ Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4003,7 +4011,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4011,7 +4019,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5853,11 +5861,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5885,7 +5893,7 @@ Rendimento assoluto dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5893,7 +5901,7 @@ Rendimento dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5901,7 +5909,7 @@ Rendimento assoluto della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5909,7 +5917,7 @@ Rendimento della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7367,12 +7375,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7452,7 +7468,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7523,6 +7539,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 133425cab..05f02c87b 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -1840,7 +1840,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1852,7 +1852,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2183,6 +2183,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max 맥스 @@ -4144,7 +4152,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4172,7 +4180,7 @@ 월간 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4180,7 +4188,7 @@ 매년 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4188,7 +4196,7 @@ 상위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4196,7 +4204,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4204,7 +4212,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4212,7 +4220,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4220,7 +4228,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4228,7 +4236,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4236,7 +4244,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5869,7 +5877,7 @@ 절대적인 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5885,7 +5893,7 @@ 절대자산성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5901,11 +5909,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5925,7 +5933,7 @@ 자산 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5933,7 +5941,7 @@ 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7391,12 +7399,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7476,7 +7492,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7547,6 +7563,14 @@ 97 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia 아르메니아 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 18e271b0d..773937956 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -910,7 +910,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -922,7 +922,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1101,6 +1101,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Max @@ -1838,7 +1846,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1846,7 +1854,7 @@ Winnaars apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1854,7 +1862,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2554,7 +2562,7 @@ Maandelijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2738,7 +2746,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3142,7 +3150,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3154,7 +3162,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3274,7 +3282,7 @@ Jaarlijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4002,7 +4010,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4010,7 +4018,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Absolute Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Absolute Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenië diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 8cb13184b..f4d14b81e 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -1807,7 +1807,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1819,7 +1819,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2150,6 +2150,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Maksimum @@ -4111,7 +4119,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4139,7 +4147,7 @@ Miesięcznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4147,7 +4155,7 @@ Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4155,7 +4163,7 @@ Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4163,7 +4171,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4171,7 +4179,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4179,7 +4187,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4187,7 +4195,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4195,7 +4203,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4203,7 +4211,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Łączny wynik aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Wyniki aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Łączny wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 562e5db2a..1e92933dc 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1078,7 +1078,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1090,7 +1090,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1345,6 +1345,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Máx @@ -2358,7 +2366,7 @@ Mensalmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2366,7 +2374,7 @@ Topo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -2374,7 +2382,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2382,7 +2390,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -2390,7 +2398,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -3206,7 +3214,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3218,7 +3226,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3274,7 +3282,7 @@ Anualmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4002,7 +4010,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4010,7 +4018,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Desempenho absoluto de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Desempenho de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Desempenho absoluto da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Desempenho da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index bd1389a49..cdbfaec8f 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -1663,7 +1663,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1675,7 +1675,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2018,6 +2018,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Maks. @@ -3595,7 +3603,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3623,7 +3631,7 @@ Aylık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -3631,7 +3639,7 @@ Yıllık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3639,7 +3647,7 @@ Üst apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -3647,7 +3655,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -3655,7 +3663,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3663,7 +3671,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -3671,7 +3679,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -3679,7 +3687,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -3687,7 +3695,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Mutlak Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Mutlak Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Ermenistan diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 7ad8133b3..a7d0d1ca3 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -2215,7 +2215,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -2227,7 +2227,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2606,6 +2606,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Максимум @@ -4816,7 +4824,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4836,11 +4844,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4860,7 +4868,7 @@ Щомісячно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4868,7 +4876,7 @@ Щорічно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4884,7 +4892,7 @@ Абсолютна прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -4892,7 +4900,7 @@ Прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -4900,7 +4908,7 @@ Абсолютна прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -4908,7 +4916,7 @@ Прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -4916,7 +4924,7 @@ Топ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4924,7 +4932,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4932,7 +4940,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4940,7 +4948,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4948,7 +4956,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4956,7 +4964,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4964,7 +4972,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -7374,12 +7382,20 @@ 174 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d91a8d438..f339f807e 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -1689,7 +1689,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1700,7 +1700,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2004,6 +2004,13 @@ 409 + + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max @@ -3786,7 +3793,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3811,63 +3818,63 @@ Monthly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 Yearly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 Top apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5341,7 +5348,7 @@ Absolute Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5355,7 +5362,7 @@ Absolute Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5370,11 +5377,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5392,14 +5399,14 @@ Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -6712,11 +6719,18 @@ 146 + + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -6786,7 +6800,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -6851,6 +6865,13 @@ 97 + + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index f8af582de..c941fa2f2 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -1816,7 +1816,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1828,7 +1828,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2159,6 +2159,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max 最大限度 @@ -4120,7 +4128,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4148,7 +4156,7 @@ 每月 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4156,7 +4164,7 @@ 每年 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4164,7 +4172,7 @@ 顶部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4172,7 +4180,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4180,7 +4188,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4188,7 +4196,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4196,7 +4204,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4204,7 +4212,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4212,7 +4220,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5845,7 +5853,7 @@ 绝对货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5861,7 +5869,7 @@ 绝对资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5877,11 +5885,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5901,7 +5909,7 @@ 资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5909,7 +5917,7 @@ 货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7367,12 +7375,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7452,7 +7468,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7523,6 +7539,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia 亚美尼亚 From 32f56cb3f65e62ed9e57407daddcc467b04babaa Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:46:56 +0100 Subject: [PATCH 16/76] Task/remove deprecated public Stripe key (part 3) (#6160) * Remove deprecated public Stripe key --- apps/client/src/environments/environment.prod.ts | 3 +-- apps/client/src/environments/environment.ts | 3 +-- libs/ui/src/lib/environment/environment.interface.ts | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/client/src/environments/environment.prod.ts b/apps/client/src/environments/environment.prod.ts index 4ee0d508b..f3ded619e 100644 --- a/apps/client/src/environments/environment.prod.ts +++ b/apps/client/src/environments/environment.prod.ts @@ -2,6 +2,5 @@ import type { GfEnvironment } from '@ghostfolio/ui/environment'; export const environment: GfEnvironment = { lastPublish: '{BUILD_TIMESTAMP}', - production: true, - stripePublicKey: '' + production: true }; diff --git a/apps/client/src/environments/environment.ts b/apps/client/src/environments/environment.ts index ccedf6738..1b9efe2be 100644 --- a/apps/client/src/environments/environment.ts +++ b/apps/client/src/environments/environment.ts @@ -6,8 +6,7 @@ import type { GfEnvironment } from '@ghostfolio/ui/environment'; export const environment: GfEnvironment = { lastPublish: null, - production: false, - stripePublicKey: '' + production: false }; /* diff --git a/libs/ui/src/lib/environment/environment.interface.ts b/libs/ui/src/lib/environment/environment.interface.ts index 9cb279515..bdd867324 100644 --- a/libs/ui/src/lib/environment/environment.interface.ts +++ b/libs/ui/src/lib/environment/environment.interface.ts @@ -1,5 +1,4 @@ export interface GfEnvironment { lastPublish: string | null; production: boolean; - stripePublicKey: string; } From fcae50968bb05c8d7a4c08cb7565297c614b2b6e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:56:22 +0100 Subject: [PATCH 17/76] Task/set analysis page values as experimental (#6217) * Set values as experimental * Update changelog --- CHANGELOG.md | 2 +- .../portfolio/analysis/analysis-page.html | 124 +++++++++--------- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05c1c2162..183bf0f6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Extended the analysis page to include the total amount, change and performance with currency effects +- Extended the analysis page to include the total amount, change and performance with currency effects (experimental) ### Changed diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html index b4170c2c5..517ad7101 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -75,68 +75,70 @@
} -
-
- - - Total amount - - -
-
- - - Change with currency effect - - -
-
- - - Performance with currency effect - - + @if (user?.settings?.isExperimentalFeatures) { +
+
+ + + Total amount + + +
+
+ + + Change with currency effect + + +
+
+ + + Performance with currency effect + + +
-
+ }
From 48fda7d41a672cd5544960360b245cf7c389670d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:57:55 +0100 Subject: [PATCH 18/76] Release 2.232.0 (#6218) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 183bf0f6e..5a5846c95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.232.0 - 2026-01-19 ### Added diff --git a/package-lock.json b/package-lock.json index b8e9295ed..7dbf3dd51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.231.0", + "version": "2.232.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.231.0", + "version": "2.232.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 0b5a28deb..8dcad6a4f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.231.0", + "version": "2.232.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 18f09e88d91417174489b9ffdd80a2803be99de8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 20 Jan 2026 18:01:40 +0100 Subject: [PATCH 19/76] Task/remove deprecated firstBuyDate from portfolio holding response (#6220) * Remove deprecated firstBuyDate * Update changelog --- CHANGELOG.md | 6 ++++++ apps/api/src/app/portfolio/portfolio.service.ts | 1 - .../responses/portfolio-holding-response.interface.ts | 4 ---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a5846c95..98e4a9380 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` + ## 2.232.0 - 2026-01-19 ### Added diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 9a6f6af62..6ffd9fe0b 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -914,7 +914,6 @@ export class PortfolioService { ); return { - firstBuyDate, marketPrice, marketPriceMax, marketPriceMin, diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 1d1ac1b11..76bc7dc02 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -16,10 +16,6 @@ export interface PortfolioHoldingResponse { dividendYieldPercent: number; dividendYieldPercentWithCurrencyEffect: number; feeInBaseCurrency: number; - - /** @deprecated use dateOfFirstActivity */ - firstBuyDate: string; - grossPerformance: number; grossPerformancePercent: number; grossPerformancePercentWithCurrencyEffect: number; From 71902e39d1e90f88000031e2fb1f90b924582fe4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:49:20 +0100 Subject: [PATCH 20/76] Task/deprecate transactionCount in portfolio calculator and service (#6228) * Deprecate transactionCount in favor of activitiesCount * Update changelog --- CHANGELOG.md | 1 + .../calculator/portfolio-calculator.ts | 3 +++ ...tfolio-calculator-baln-buy-and-buy.spec.ts | 1 + ...aln-buy-and-sell-in-two-activities.spec.ts | 1 + ...folio-calculator-baln-buy-and-sell.spec.ts | 1 + .../portfolio-calculator-baln-buy.spec.ts | 1 + .../roai/portfolio-calculator-btceur.spec.ts | 1 + ...ator-btcusd-buy-and-sell-partially.spec.ts | 1 + .../roai/portfolio-calculator-btcusd.spec.ts | 1 + .../roai/portfolio-calculator-cash.spec.ts | 1 + .../portfolio-calculator-googl-buy.spec.ts | 1 + ...-calculator-msft-buy-with-dividend.spec.ts | 1 + ...ulator-novn-buy-and-sell-partially.spec.ts | 1 + ...folio-calculator-novn-buy-and-sell.spec.ts | 1 + .../portfolio-calculator-valuable.spec.ts | 1 + .../transaction-point-symbol.interface.ts | 3 +++ .../src/app/portfolio/portfolio.service.ts | 22 ++++++++++++++----- .../portfolio-position.interface.ts | 4 ++++ .../responses/accounts-response.interface.ts | 3 +++ .../src/lib/models/timeline-position.ts | 3 +++ .../src/lib/types/account-with-value.type.ts | 4 ++++ libs/ui/src/lib/mocks/holdings.ts | 7 ++++++ 22 files changed, 57 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98e4a9380..1c06b0e64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Deprecated `transactionCount` in favor of `activitiesCount` in the portfolio calculator and service - Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` ## 2.232.0 - 2026-01-19 diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 8fee1957c..22d9e09ae 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -407,6 +407,7 @@ export abstract class PortfolioCalculator { includeInTotalAssetValue, timeWeightedInvestment, timeWeightedInvestmentWithCurrencyEffect, + activitiesCount: item.activitiesCount, averagePrice: item.averagePrice, currency: item.currency, dataSource: item.dataSource, @@ -993,6 +994,7 @@ export abstract class PortfolioCalculator { investment, skipErrors, symbol, + activitiesCount: oldAccumulatedSymbol.activitiesCount + 1, averagePrice: newQuantity.eq(0) ? new Big(0) : investment.div(newQuantity).abs(), @@ -1016,6 +1018,7 @@ export abstract class PortfolioCalculator { skipErrors, symbol, tags, + activitiesCount: 1, averagePrice: unitPrice, dividend: new Big(0), firstBuyDate: date, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index 6b56b39a2..b715d0437 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -139,6 +139,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('139.75'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 2aad0cb26..5e1593fbb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -155,6 +155,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 3, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 35e4309eb..65d2a93a6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -139,6 +139,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index ebce2ac1c..ed002317b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -129,6 +129,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('136.6'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 9ca8b2d36..af4f17611 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -190,6 +190,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('44558.42'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 3648eb84b..5dd99dbf4 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -153,6 +153,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('320.43'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 5179fdaa6..929ebc76d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -190,6 +190,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('44558.42'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index c9adebc44..ba22c565d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -230,6 +230,7 @@ describe('PortfolioCalculator', () => { * Value in base currency: 2000 USD * 0.91 = 1820 CHF */ expect(position).toMatchObject({ + activitiesCount: 2, averagePrice: new Big(1), currency: 'USD', dataSource: DataSource.YAHOO, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index fa38d0030..a14e28dff 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -135,6 +135,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('89.12'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index ab7480bbf..4b2698ccb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -131,6 +131,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('298.58'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 32a1b02f3..852c3c13a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -135,6 +135,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('75.80'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index f2903f3cd..8764da3ee 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -188,6 +188,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 3a00c022c..554f74046 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -116,6 +116,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('500000'), currency: 'USD', dataSource: 'MANUAL', diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index 1c43508dd..6e0bb4ac3 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -2,6 +2,7 @@ import { AssetSubClass, DataSource, Tag } from '@prisma/client'; import { Big } from 'big.js'; export interface TransactionPointSymbol { + activitiesCount: number; assetSubClass: AssetSubClass; averagePrice: Big; currency: string; @@ -16,5 +17,7 @@ export interface TransactionPointSymbol { skipErrors: boolean; symbol: string; tags?: Tag[]; + + /** @deprecated use activitiesCount instead */ transactionCount: number; } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 6ffd9fe0b..20016e67f 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -179,9 +179,9 @@ export class PortfolioService { return Promise.all( accounts.map(async (account) => { + let activitiesCount = 0; let dividendInBaseCurrency = 0; let interestInBaseCurrency = 0; - let transactionCount = 0; for (const { currency, @@ -214,7 +214,7 @@ export class PortfolioService { } if (!isDraft) { - transactionCount += 1; + activitiesCount += 1; } } @@ -223,9 +223,9 @@ export class PortfolioService { const result = { ...account, + activitiesCount, dividendInBaseCurrency, interestInBaseCurrency, - transactionCount, valueInBaseCurrency, allocationInPercentage: 0, balanceInBaseCurrency: this.exchangeRateDataService.toCurrency( @@ -233,6 +233,7 @@ export class PortfolioService { account.currency, userCurrency ), + transactionCount: activitiesCount, value: this.exchangeRateDataService.toCurrency( valueInBaseCurrency, userCurrency, @@ -262,6 +263,8 @@ export class PortfolioService { withExcludedAccounts }); + let activitiesCount = 0; + const searchQuery = filters.find(({ type }) => { return type === 'SEARCH_QUERY'; })?.id; @@ -284,6 +287,8 @@ export class PortfolioService { let transactionCount = 0; for (const account of accounts) { + activitiesCount += account.activitiesCount; + totalBalanceInBaseCurrency = totalBalanceInBaseCurrency.plus( account.balanceInBaseCurrency ); @@ -296,6 +301,7 @@ export class PortfolioService { totalValueInBaseCurrency = totalValueInBaseCurrency.plus( account.valueInBaseCurrency ); + transactionCount += account.transactionCount; } @@ -310,6 +316,7 @@ export class PortfolioService { return { accounts, + activitiesCount, transactionCount, totalBalanceInBaseCurrency: totalBalanceInBaseCurrency.toNumber(), totalDividendInBaseCurrency: totalDividendInBaseCurrency.toNumber(), @@ -567,6 +574,7 @@ export class PortfolioService { } for (const { + activitiesCount, currency, dividend, firstBuyDate, @@ -610,6 +618,7 @@ export class PortfolioService { } holdings[symbol] = { + activitiesCount, currency, markets, marketsAdvanced, @@ -789,6 +798,7 @@ export class PortfolioService { } const { + activitiesCount, averagePrice, currency, dividendInBaseCurrency, @@ -807,8 +817,7 @@ export class PortfolioService { quantity, tags, timeWeightedInvestment, - timeWeightedInvestmentWithCurrencyEffect, - transactionCount + timeWeightedInvestmentWithCurrencyEffect } = holding; const activitiesOfHolding = activities.filter(({ SymbolProfile }) => { @@ -914,12 +923,12 @@ export class PortfolioService { ); return { + activitiesCount, marketPrice, marketPriceMax, marketPriceMin, SymbolProfile, tags, - activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], dateOfFirstActivity: firstBuyDate, @@ -1657,6 +1666,7 @@ export class PortfolioService { }): PortfolioPosition { return { currency, + activitiesCount: 0, allocationInPercentage: 0, assetClass: AssetClass.LIQUIDITY, assetSubClass: AssetSubClass.CASH, diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts index e277ba468..67a2f3e77 100644 --- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts @@ -7,6 +7,7 @@ import { Holding } from './holding.interface'; import { Sector } from './sector.interface'; export interface PortfolioPosition { + activitiesCount: number; allocationInPercentage: number; assetClass?: AssetClass; assetClassLabel?: string; @@ -38,7 +39,10 @@ export interface PortfolioPosition { sectors: Sector[]; symbol: string; tags?: Tag[]; + + /** @deprecated use activitiesCount instead */ transactionCount: number; + type?: string; url?: string; valueInBaseCurrency?: number; diff --git a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts index 0a6af978f..1891b9cbb 100644 --- a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts @@ -2,9 +2,12 @@ import { AccountWithValue } from '@ghostfolio/common/types'; export interface AccountsResponse { accounts: AccountWithValue[]; + activitiesCount: number; totalBalanceInBaseCurrency: number; totalDividendInBaseCurrency: number; totalInterestInBaseCurrency: number; totalValueInBaseCurrency: number; + + /** @deprecated use activitiesCount instead */ transactionCount: number; } diff --git a/libs/common/src/lib/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index 8eae56cf7..4144f349d 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -9,6 +9,8 @@ import { Big } from 'big.js'; import { Transform, Type } from 'class-transformer'; export class TimelinePosition { + activitiesCount: number; + @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) averagePrice: Big; @@ -92,6 +94,7 @@ export class TimelinePosition { @Type(() => Big) timeWeightedInvestmentWithCurrencyEffect: Big; + /** @deprecated use activitiesCount instead */ transactionCount: number; @Transform(transformToBig, { toClassOnly: true }) diff --git a/libs/common/src/lib/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts index 08af86454..7f5fe79ba 100644 --- a/libs/common/src/lib/types/account-with-value.type.ts +++ b/libs/common/src/lib/types/account-with-value.type.ts @@ -1,12 +1,16 @@ import { Account as AccountModel, Platform } from '@prisma/client'; export type AccountWithValue = AccountModel & { + activitiesCount: number; allocationInPercentage: number; balanceInBaseCurrency: number; dividendInBaseCurrency: number; interestInBaseCurrency: number; platform?: Platform; + + /** @deprecated use activitiesCount instead */ transactionCount: number; + value: number; valueInBaseCurrency: number; }; diff --git a/libs/ui/src/lib/mocks/holdings.ts b/libs/ui/src/lib/mocks/holdings.ts index 6e8485c82..0f30b3e6f 100644 --- a/libs/ui/src/lib/mocks/holdings.ts +++ b/libs/ui/src/lib/mocks/holdings.ts @@ -2,6 +2,7 @@ import { PortfolioPosition } from '@ghostfolio/common/interfaces'; export const holdings: PortfolioPosition[] = [ { + activitiesCount: 1, allocationInPercentage: 0.042990776363386086, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -45,6 +46,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 12230 }, { + activitiesCount: 2, allocationInPercentage: 0.02377401948293552, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -88,6 +90,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 6763.224181360202 }, { + activitiesCount: 1, allocationInPercentage: 0.08038536990007467, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -131,6 +134,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 22868 }, { + activitiesCount: 1, allocationInPercentage: 0.19216416482928922, assetClass: 'LIQUIDITY' as any, assetClassLabel: 'Liquidity', @@ -162,6 +166,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 54666.7898248 }, { + activitiesCount: 1, allocationInPercentage: 0.04307127421937313, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -205,6 +210,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 12252.9 }, { + activitiesCount: 1, allocationInPercentage: 0.18762679306394897, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -248,6 +254,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 53376 }, { + activitiesCount: 5, allocationInPercentage: 0.053051250766657634, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', From 50d7671d4f24bfa30fe6048ff1c71dcf707cfacf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Jan 2026 08:06:25 +0100 Subject: [PATCH 21/76] Task/change LambdaTest to TestMu AI (#6232) * Change LambdaTest to TestMu AI --- README.md | 4 +-- .../about/overview/about-overview-page.html | 18 +++++----- .../images/sponsors/logo-lambdatest.png | Bin 3448 -> 0 bytes .../images/sponsors/logo-testmu-dark.svg | 33 ++++++++++++++++++ .../images/sponsors/logo-testmu-light.svg | 33 ++++++++++++++++++ 5 files changed, 78 insertions(+), 10 deletions(-) delete mode 100644 apps/client/src/assets/images/sponsors/logo-lambdatest.png create mode 100644 apps/client/src/assets/images/sponsors/logo-testmu-dark.svg create mode 100644 apps/client/src/assets/images/sponsors/logo-testmu-light.svg diff --git a/README.md b/README.md index 8b6fe2296..c96bc308e 100644 --- a/README.md +++ b/README.md @@ -320,8 +320,8 @@ If you like to support this project, become a [**Sponsor**](https://github.com/s

Browser testing via
- - LambdaTest Logo + + TestMu AI Logo

diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.html b/apps/client/src/app/pages/about/overview/about-overview-page.html index 185becba7..2fb3ef812 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.html +++ b/apps/client/src/app/pages/about/overview/about-overview-page.html @@ -207,18 +207,20 @@

Sponsors

- Browser testing via -
+
Browser testing via
LambdaTest Logo
diff --git a/apps/client/src/assets/images/sponsors/logo-lambdatest.png b/apps/client/src/assets/images/sponsors/logo-lambdatest.png deleted file mode 100644 index 9e05b1cde7a41f812946b83d3650a342a4bd3d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3448 zcmZ`*c{tSD8@H6XmKjrN5=L3FXHc>Xm5^;Pp@uG{+jnePlaWT0HB^Q|Hzo#!lF66C z%%JRJ8)eB?*-7|XZc4fn{pQ}^-}gM{Ip_19_kBO_`<&;z=Xq0zPBushISC;lA*7wH zm5Y#&2rR%ieiId}zNGFpAt7P1zojM7%0E0b@Iusn;vpfSt9cQ$dWUABOsn%Vmp;>5 zD6E1(isisN2}+oswv4r&+xBO!4`alGqE$6r!gi4~H}<)|@d$l!%Pll46m5mrF`8$p zS?hOoEXQp`d8~bQ(>O1@&hxcAaj*8eh{k+&2BD?+b108QTw^!A2J^WOZOk|{F1*M6P9Z=Nw)0}!b z!Rcy`>(|Z4Kgt5~HnQE{NdzR-+Ub#t)C>50Y|P6&6l)U)ZH4n@T)& zbKCaG*q{A(kKH|ZndD8>O&8JWw6fc=3v5~IV_ev25cZqJ02q1&tWH#|0JosnZD@h2t_{g)LURNz0tSKDimq!$aoSLvR%rpQ zX-5edSS?77fT0CdE5OZYP7|uOMOxs_5mO$A2}B=Qr*j=P?WN$79iYp)2XcbRtoY_u@uK{_Eqh1?PD* z8ZnfKUeODs72FtKK_B<_-hU(dudHezA&DV7D+{-)BTMx8KZ=YoCtD3grWHSUJbOyL zmTmtSjJl}*h2IDfND*;M+DhVa+DR)v3EOr|dCn^*C<`+9ui>4Kt5Nc@{{8T_&-k@V zf7{6v=^tnQ>Gf8ACo6tyXF|2}5zBiwV!j+Gyx3+tYH|Kvgj1ZS*w@=X;8fJ{1(X=A zJe`|<&78UC|orK&kDcc7Sh!$;KI ze(3xW-iiB~0xLdX?lOgtHwZn*$9tz9myv?s7)PpZUKIS)w- z0`}&9N&QN=-}i!Bfd5Pe&)por<{4Gmee`*iMS2< zOY`obpJty&vm3m1t*T7BTYv0e9awBAqwbd~_e)Rn$-13zH{@%Z@t(645wYyzvzbd7 z`uQE*?qY@6zupOZ^y&^IhV?r6Ot>iQ{FrpbwwiAAyt(ew-v<^I43)4MdaLr1;&@4n z{i|EU;@HY{1w5$V6?N|iGi_R}G8N+{%KUk&+zPd8$8>z+v(9?dT$@o1FnTP4w4%W- zRylJd9UP8UjD`Fa4nbZHzn@H;NdS53pMHJde8`e z9M3H8&TGz&yT{!+pnAyp$0{(#z1BZ){liJhrA!5POXX1A7i--_hk!sT;r3t|kj~VZ zG&6=uj0*P#jMCvWN;{E@Q8@Q9Ivru*c2MKkE?i(B{oZNTM)+sYo$uHMsPlW(*yaispWhwr zTs}3wL<4>$``Ns`1CQ&Z*7hv4&ZzQ>u03{_|Kw=@e!{!l)+R;*vT^!L9Ez=k_5JHg zv*^yp>~mqxNE$(#T!y?mb@U}=iLq4g>~vSdC)D(v{;83Zx3kmsP3D0QHwJ{kMmC&T z4Z~V?*^)oFx<^Jo=wvy7)$OeZza^e_Z4^u4jGtSYmd2szjGO zS5kPXBW6DpU6~lBo=uNTwuuS>X!N?PWJlSM<*|Be=^~>S1R#X=eA*q1}$;xxrk;J@xR}^}M@w!SN=*uVayrhNNR#p$=Bqvp=j4XPOR%JF3Nv;WdqxEEQDp`jLtrk_8UBa;;EO(!`g|F5`gs3O>7kc$*`+ zQ6`9tgY*Mw3q%TaQbV>BHqrO2N!09*%rfsc+piXgu~g@ah82fq)6ZXafNXSpFT}gG zgLC6$n7z^tlp`}gN|pmQoj`eYog)N8I&8YbEnHBQHJRp5Qf*0B2Q%Pub4ST;VllLr811hiI0Mpvf{5k?FkA8BRp93X}Prx;nKcWmpW)jIKdz6+$yM8?MeyZuBSB{xIXm9hCERxK-o?km4BGMSBd;Qnr*KOY5ieKJXGSw;mjC z6kMz9Nm-xK-|Ym3^zdbv4;wAA-2UPfC>N)4=s_oUB{VGOjC z&8Iz*!96p_y|c}E53*vwG_%L%1_&re$JBk00FUVIS)Hk?oojk_v*MbL3>yeq82b|z zd^dZ6V@@e0O|Fz>!?GvO6pv+yPWN+zWBwRL5h*cTpUhen$nrZ@yB2Q8hEL$|zjS%w z=6v5*z77Z9aLIG$8O!_G!*x9@UJiR>6u@y)j^p@mHH-aJ1+`{Aq)SNQrVMHVa{z7B zhSKSi6>Jcr4yn&rxv5ae@d0YoWlc6<(qJ>}6XgqzADA3h4MYWPhnB##fqHN0=Ldmw zZU*P%y7igS$3rG;uXX%&*%%e0I215v*nye4Ar3G@$D25%-61%t-CfV24&8xeoWxtg zdQ?Yqrw;$;L)7r!NkLb33Z6l3&1+5qoSgIX#5I6BW&{Dw%E<_~o?95Fg14vQ5nztP|#+mt5&h71HjGAPHN?um;JIG$oa*m<` z%&+p{s*)$P*%(mWrR&V^k01yo8qv8iExxX%1ol8BFn2Z!WVo`N%mxv zxOT*-L<7GTzLp{O6|*wEbPRHY5@9(=dz77F?jx`HUMn+F1K*hU&LMXPuRUPs?sja) zasZzs3?V^M9RUI61g6+6eU615!_kq#m*$&Rg9&H91Gh}?d6f=e3TR&1Z0qm;)={&} z{0Yid>>v!PJ4`pXCPsK!Wk;&u_uY!RfpS>?Ysi%{mOz1wbTuvgLMD;a(R)N|-STtW zgTFLbb@_(9wxrL0Pc(T|f?8ZZjQ~GHFq`VWgQVLy1#->emd9uA`=V=V@=6%^qP&ww zmdDTX_L(Kb6I<6yqft3YskU|6d*Z4NV`3`!Y2VctifTn9#d?bS2jk!mBnCwjrz|<= zHP)Le#!l8)_Ii2==);_DIQ6-?xSAo}n9R4^xy7-YwAGbNH_bC?c`!?XmRKPStqnhb zHOtxpC0`~jPQ)KlMoz!Bpj6;J5&Is-Rd)<);pdbR7bjGz)Xb}f9Vw4kjjtnCEq(<5 zeAj!P!mzJBDqSAhl#gvO1ucRUo8vRc;!W%bZdk#Dt_Y!a+py + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/client/src/assets/images/sponsors/logo-testmu-light.svg b/apps/client/src/assets/images/sponsors/logo-testmu-light.svg new file mode 100644 index 000000000..e925efd5e --- /dev/null +++ b/apps/client/src/assets/images/sponsors/logo-testmu-light.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c106f64b555e9fc24c58e5c6b2eace06226ae2f1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Jan 2026 08:51:21 +0100 Subject: [PATCH 22/76] Task/remove margin in README.md (#6233) * Remove margin --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c96bc308e..cb8cfdcba 100644 --- a/README.md +++ b/README.md @@ -321,7 +321,7 @@ If you like to support this project, become a [**Sponsor**](https://github.com/s

Browser testing via
- TestMu AI Logo + TestMu AI Logo

From c74bca5066f15506a370a71c2e1e8d6c1afdb5be Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Jan 2026 19:37:26 +0100 Subject: [PATCH 23/76] Task/clean up Sponsors in README.md (#6234) * Clean up --- README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index cb8cfdcba..03566b2dd 100644 --- a/README.md +++ b/README.md @@ -318,12 +318,9 @@ If you like to support this project, become a [**Sponsor**](https://github.com/s ## Sponsors
-

- Browser testing via
- - TestMu AI Logo - -

+ + TestMu AI Logo +
## Analytics From 022a5c535ccd0ee49d23e4194e76a46ef0f18491 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 13:42:55 +0100 Subject: [PATCH 24/76] Task/revert VS Code extension of Prettier (#6235) * Revert VS Code extension of Prettier --- .vscode/extensions.json | 4 ++-- .vscode/settings.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index fde9874a2..68abade5f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,8 +1,8 @@ { "recommendations": [ "angular.ng-template", + "esbenp.prettier-vscode", "firsttris.vscode-jest-runner", - "nrwl.angular-console", - "prettier.prettier-vscode" + "nrwl.angular-console" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 36091af85..9bf4d12b5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,4 @@ { - "editor.defaultFormatter": "prettier.prettier-vscode", + "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true } From 44e0c2677c6435a154133b512e39010dadd23fad Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 13:43:17 +0100 Subject: [PATCH 25/76] Task/upgrade prettier to version 3.8.0 (#6227) * Upgrade prettier to version 3.8.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c06b0e64..4421d1a21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Deprecated `transactionCount` in favor of `activitiesCount` in the portfolio calculator and service - Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +- Upgraded `prettier` from version `3.7.4` to `3.8.0` ## 2.232.0 - 2026-01-19 diff --git a/package-lock.json b/package-lock.json index 7dbf3dd51..23af0ed7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -141,7 +141,7 @@ "jest-environment-jsdom": "30.2.0", "jest-preset-angular": "16.0.0", "nx": "22.3.3", - "prettier": "3.7.4", + "prettier": "3.8.0", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.19.0", "react": "18.2.0", @@ -28255,9 +28255,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", + "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 8dcad6a4f..b4959270f 100644 --- a/package.json +++ b/package.json @@ -185,7 +185,7 @@ "jest-environment-jsdom": "30.2.0", "jest-preset-angular": "16.0.0", "nx": "22.3.3", - "prettier": "3.7.4", + "prettier": "3.8.0", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.19.0", "react": "18.2.0", From f84e69c07a86dc15fd1da1eec7d6d8bbedcfbf15 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 17:30:44 +0100 Subject: [PATCH 26/76] Task/clean up position interface (#6237) * Clean up interface --- libs/common/src/lib/interfaces/index.ts | 2 -- .../src/lib/interfaces/position.interface.ts | 27 ------------------- 2 files changed, 29 deletions(-) delete mode 100644 libs/common/src/lib/interfaces/position.interface.ts diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 7cf93691c..ad747d94e 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -34,7 +34,6 @@ import type { PortfolioPerformance } from './portfolio-performance.interface'; import type { PortfolioPosition } from './portfolio-position.interface'; import type { PortfolioReportRule } from './portfolio-report-rule.interface'; import type { PortfolioSummary } from './portfolio-summary.interface'; -import type { Position } from './position.interface'; import type { Product } from './product'; import type { AccessTokenResponse } from './responses/access-token-response.interface'; import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; @@ -172,7 +171,6 @@ export { PortfolioReportResponse, PortfolioReportRule, PortfolioSummary, - Position, Product, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON, diff --git a/libs/common/src/lib/interfaces/position.interface.ts b/libs/common/src/lib/interfaces/position.interface.ts deleted file mode 100644 index d1f74380b..000000000 --- a/libs/common/src/lib/interfaces/position.interface.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { MarketState } from '@ghostfolio/common/types'; - -import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; - -export interface Position { - assetClass: AssetClass; - assetSubClass: AssetSubClass; - averagePrice: number; - currency: string; - dataSource: DataSource; - firstBuyDate: string; - grossPerformance?: number; - grossPerformancePercentage?: number; - investment: number; - investmentInOriginalCurrency?: number; - marketPrice?: number; - marketState?: MarketState; - name?: string; - netPerformance?: number; - netPerformancePercentage?: number; - netPerformancePercentageWithCurrencyEffect?: number; - netPerformanceWithCurrencyEffect?: number; - quantity: number; - symbol: string; - transactionCount: number; - url?: string; -} From 13031aaad3728ffdcceb55c7953174fe515118ce Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 18:39:52 +0100 Subject: [PATCH 27/76] Task/deprecate firstBuyDate in portfolio calculator (#6239) * Deprecate firstBuyDate in favor of dateOfFirstActivity * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/portfolio/calculator/portfolio-calculator.ts | 3 +++ .../roai/portfolio-calculator-baln-buy-and-buy.spec.ts | 1 + ...lio-calculator-baln-buy-and-sell-in-two-activities.spec.ts | 1 + .../roai/portfolio-calculator-baln-buy-and-sell.spec.ts | 1 + .../calculator/roai/portfolio-calculator-baln-buy.spec.ts | 1 + .../calculator/roai/portfolio-calculator-btceur.spec.ts | 1 + ...portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts | 1 + .../calculator/roai/portfolio-calculator-btcusd.spec.ts | 1 + .../calculator/roai/portfolio-calculator-cash.spec.ts | 1 + .../calculator/roai/portfolio-calculator-googl-buy.spec.ts | 1 + .../roai/portfolio-calculator-msft-buy-with-dividend.spec.ts | 1 + .../portfolio-calculator-novn-buy-and-sell-partially.spec.ts | 1 + .../roai/portfolio-calculator-novn-buy-and-sell.spec.ts | 1 + .../calculator/roai/portfolio-calculator-valuable.spec.ts | 1 + .../interfaces/transaction-point-symbol.interface.ts | 4 ++++ libs/common/src/lib/models/timeline-position.ts | 2 ++ 17 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4421d1a21..2b504ddca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the portfolio calculator - Deprecated `transactionCount` in favor of `activitiesCount` in the portfolio calculator and service - Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Upgraded `prettier` from version `3.7.4` to `3.8.0` diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 22d9e09ae..b3b1d3410 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -411,6 +411,7 @@ export abstract class PortfolioCalculator { averagePrice: item.averagePrice, currency: item.currency, dataSource: item.dataSource, + dateOfFirstActivity: item.dateOfFirstActivity, dividend: totalDividend, dividendInBaseCurrency: totalDividendInBaseCurrency, fee: item.fee, @@ -998,6 +999,7 @@ export abstract class PortfolioCalculator { averagePrice: newQuantity.eq(0) ? new Big(0) : investment.div(newQuantity).abs(), + dateOfFirstActivity: oldAccumulatedSymbol.dateOfFirstActivity, dividend: new Big(0), fee: oldAccumulatedSymbol.fee.plus(fee), feeInBaseCurrency: @@ -1020,6 +1022,7 @@ export abstract class PortfolioCalculator { tags, activitiesCount: 1, averagePrice: unitPrice, + dateOfFirstActivity: date, dividend: new Big(0), firstBuyDate: date, includeInHoldings: INVESTMENT_ACTIVITY_TYPES.includes(type), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index b715d0437..5368640af 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -143,6 +143,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('139.75'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-11-22', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('3.2'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 5e1593fbb..aad4a91d3 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -159,6 +159,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-11-22', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('3.2'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 65d2a93a6..e75053d6b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -143,6 +143,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-11-22', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('3.2'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index ed002317b..71fc36fd4 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -133,6 +133,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('136.6'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-11-30', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('1.55'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index af4f17611..89eedb78f 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -194,6 +194,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('44558.42'), currency: 'USD', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-12-12', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('4.46'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 5dd99dbf4..4cce2d8cc 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -157,6 +157,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('320.43'), currency: 'USD', dataSource: 'YAHOO', + dateOfFirstActivity: '2015-01-01', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('0'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 929ebc76d..cb80c2c29 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -194,6 +194,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('44558.42'), currency: 'USD', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-12-12', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('4.46'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index ba22c565d..bbcaba294 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -234,6 +234,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big(1), currency: 'USD', dataSource: DataSource.YAHOO, + dateOfFirstActivity: '2023-12-31', dividend: new Big(0), dividendInBaseCurrency: new Big(0), fee: new Big(0), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index a14e28dff..1e9aa0c7c 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -139,6 +139,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('89.12'), currency: 'USD', dataSource: 'YAHOO', + dateOfFirstActivity: '2023-01-03', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('1'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 4b2698ccb..88895b8c6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -135,6 +135,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('298.58'), currency: 'USD', dataSource: 'YAHOO', + dateOfFirstActivity: '2021-09-16', dividend: new Big('0.62'), dividendInBaseCurrency: new Big('0.62'), fee: new Big('19'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 852c3c13a..2c8384ad0 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -139,6 +139,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('75.80'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2022-03-07', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('4.25'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index 8764da3ee..09b3b4545 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -192,6 +192,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2022-03-07', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('0'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 554f74046..5e73841ce 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -120,6 +120,7 @@ describe('PortfolioCalculator', () => { averagePrice: new Big('500000'), currency: 'USD', dataSource: 'MANUAL', + dateOfFirstActivity: '2022-01-01', dividend: new Big('0'), dividendInBaseCurrency: new Big('0'), fee: new Big('0'), diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index 6e0bb4ac3..ab2351f11 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -7,10 +7,14 @@ export interface TransactionPointSymbol { averagePrice: Big; currency: string; dataSource: DataSource; + dateOfFirstActivity: string; dividend: Big; fee: Big; feeInBaseCurrency: Big; + + /** @deprecated use dateOfFirstActivity instead */ firstBuyDate: string; + includeInHoldings: boolean; investment: Big; quantity: Big; diff --git a/libs/common/src/lib/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index 4144f349d..244d6595e 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -17,6 +17,7 @@ export class TimelinePosition { currency: string; dataSource: DataSource; + dateOfFirstActivity: string; @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) @@ -34,6 +35,7 @@ export class TimelinePosition { @Type(() => Big) feeInBaseCurrency: Big; + /** @deprecated use dateOfFirstActivity instead */ firstBuyDate: string; @Transform(transformToBig, { toClassOnly: true }) From f03b8f097ed4e090e9f397e559c5292789898912 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 19:35:07 +0100 Subject: [PATCH 28/76] Task/refresh cryptocurrencies list 20260123 (#6236) * Update cryptocurrencies.json * Update changelog --- CHANGELOG.md | 1 + .../cryptocurrencies/cryptocurrencies.json | 210 ++++++++++++++---- 2 files changed, 171 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b504ddca..b5154ae63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the portfolio calculator - Deprecated `transactionCount` in favor of `activitiesCount` in the portfolio calculator and service - Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +- Refreshed the cryptocurrencies list - Upgraded `prettier` from version `3.7.4` to `3.8.0` ## 2.232.0 - 2026-01-19 diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 5becbf2f9..6806bb8ff 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -56,6 +56,7 @@ "10SET": "Tenset", "1ART": "ArtWallet", "1CAT": "Bitcoin Cats", + "1COIN": "1 coin can change your life", "1CR": "1Credit", "1EARTH": "EarthFund", "1ECO": "1eco", @@ -153,6 +154,7 @@ "8PAY": "8Pay", "8X8": "8X8 Protocol", "99BTC": "99 Bitcoins", + "9BIT": "The9bit", "9DOGS": "NINE DOGS", "9GAG": "9GAG", "9MM": "Shigure UI", @@ -177,6 +179,7 @@ "AAC": "Double-A Chain", "AAG": "AAG Ventures", "AAI": "AutoAir AI", + "AAPLON": "Apple (Ondo Tokenized)", "AAPLX": "Apple xStock", "AAPX": "AMPnet", "AARBWBTC": "Aave Arbitrum WBTC", @@ -435,6 +438,7 @@ "AIAI": "All In AI", "AIAKITA": "AiAkita", "AIAT": "AI Analysis Token", + "AIAV": "AI AVatar", "AIB": "AdvancedInternetBlock", "AIBABYDOGE": "AIBabyDoge", "AIBB": "AiBB", @@ -508,6 +512,7 @@ "AIPAD": "AIPAD", "AIPE": "AI Prediction Ecosystem", "AIPEPE": "AI PEPE KING", + "AIPF": "AI Powered Finance", "AIPG": "AI Power Grid", "AIPIN": "AI PIN", "AIPO": "Aipocalypto", @@ -552,7 +557,7 @@ "AIVV1": "AIVille Governance Token", "AIWALLET": "AiWallet Token", "AIWS": "AIWS", - "AIX": "ALIENX", + "AIX": "Ai Xovia", "AIX9": "AthenaX9", "AIXBT": "aixbt by Virtuals", "AIXCB": "aixCB by Virtuals", @@ -625,6 +630,7 @@ "ALIEN": "AlienCoin", "ALIENPEP": "Alien Pepe", "ALIENS": "Aliens", + "ALIENX": "ALIENX", "ALIF": " ALIF COIN", "ALINK": "Aave LINK v1", "ALIS": "ALISmedia", @@ -1358,6 +1364,7 @@ "BABI": "Babylons", "BABL": "Babylon Finance", "BABY": "Babylon", + "BABY4": "Baby 4", "BABYANDY": "Baby Andy", "BABYASTER": "Baby Aster", "BABYB": "Baby Bali", @@ -1372,6 +1379,7 @@ "BABYBOME": "Book of Baby Memes", "BABYBOMEOW": "Baby of BOMEOW", "BABYBONK": "Baby Bonk", + "BABYBOOM": "BabyBoomToken", "BABYBOSS": "Baby Boss", "BABYBROC": "Baby Broccoli", "BABYBROCCOL": "Baby Broccoli", @@ -1618,6 +1626,7 @@ "BB": "BounceBit", "BB1": "Bitbond", "BBADGER": "Badger Sett Badger", + "BBAION": "BigBear.ai Holdings (Ondo Tokenized)", "BBANK": "BlockBank", "BBB": "BitBullBot", "BBBTC": "Big Back Bitcoin", @@ -1651,7 +1660,7 @@ "BBS": "BBSCoin", "BBSNEK": "BabySNEK", "BBSOL": "Bybit Staked SOL", - "BBT": "BabyBoomToken", + "BBT": "BurgerBlastToken", "BBTC": "Binance Wrapped BTC", "BBTF": "Block Buster Tech Inc", "BBUSD": "BounceBit USD", @@ -1748,8 +1757,9 @@ "BEAMMW": "Beam", "BEAN": "Bean", "BEANS": "SUNBEANS (BEANS)", - "BEAR": "Bear Inu", + "BEAR": "3X Short Bitcoin Token", "BEARIN": "Bear in Bathrobe", + "BEARINU": "Bear Inu", "BEAST": "MrBeast", "BEAT": "Beat Token", "BEATAI": "eBeat AI", @@ -1837,7 +1847,7 @@ "BES": "battle esports coin", "BESA": "Besa Gaming", "BESHARE": "Beshare Token", - "BEST": "Bitpanda Ecosystem Token", + "BEST": "Best Wallet Token", "BESTC": "BestChain", "BETA": "Beta Finance", "BETACOIN": "BetaCoin", @@ -2060,6 +2070,7 @@ "BITOK": "BitOKX", "BITONE": "BITONE", "BITORB": "BitOrbit", + "BITPANDA": "Bitpanda Ecosystem Token", "BITRA": "Bitratoken", "BITRADIO": "Bitradio", "BITREWARDS": "BitRewards", @@ -2542,6 +2553,7 @@ "BPD": "Beautiful Princess Disorder", "BPDAI": "Binance-Peg Dai (Binance Bridge)", "BPDOGE": "Binance-Peg DogeZilla (Binance Bridge)", + "BPEPE": "BABY PEPE", "BPEPEF": "Baby Pepe Floki", "BPET": "BPET", "BPINKY": "BPINKY", @@ -2780,6 +2792,7 @@ "BTCHD": "Bitcoin HD", "BTCINU": "Bitcoin Inu", "BTCIX": "BITCOLOJIX", + "BTCJ": "Bitcoin (JustCrypto)", "BTCK": "Bitcoin Turbo Koin", "BTCL": "BTC Lite", "BTCM": "BTCMoon", @@ -2798,7 +2811,7 @@ "BTCS": "Bitcoin Scrypt", "BTCSR": "BTC Strategic Reserve", "BTCST": "BTC Standard Hashrate Token", - "BTCT": "Bitcoin Token", + "BTCTOKEN": "Bitcoin Token", "BTCUS": "Bitcoinus", "BTCV": "Bitcoin Vault", "BTCVB": "BitcoinVB", @@ -2955,6 +2968,7 @@ "BURRRD": "BURRRD", "BURT": "BURT", "BUSD": "Binance USD", + "BUSD0": "Bond USD0", "BUSDC": "BUSD", "BUSY": "Busy DAO", "BUT": "Bucket Token", @@ -3058,7 +3072,7 @@ "CAG": "Change", "CAGA": "Crypto Asset Governance Alliance", "CAH": "Moon Tropica", - "CAI": "Chasm", + "CAI": "CharacterX", "CAID": "ClearAid", "CAILA": "Caila", "CAIR": "Crypto-AI-Robo.com", @@ -3415,12 +3429,14 @@ "CHARGED": "GoCharge Tech", "CHARIZARD": "Charizard Inu", "CHARL": "Charlie", + "CHARLI": "Charlie Trump Dog", "CHARLIE": "Charlie Kirk", "CHARM": "Charm Coin", "CHARS": "CHARS", "CHART": "BetOnChart", "CHARTA": "CHARTAI", "CHARTIQ": "ChartIQ", + "CHAS": "Chasm", "CHASH": "CleverHash", "CHAT": "Solchat", "CHATAI": "ChatAI Token", @@ -3527,6 +3543,7 @@ "CHR": "Chroma", "CHRETT": "Chinese BRETT", "CHRISPUMP": "Christmas Pump", + "CHRONOEFFE": "Chronoeffector", "CHRP": "Chirpley", "CHS": "Chainsquare", "CHSB": "SwissBorg", @@ -3576,6 +3593,7 @@ "CIX100": "Cryptoindex", "CJ": "CryptoJacks", "CJC": "CryptoJournal", + "CJL": "Cjournal", "CJR": "Conjure", "CJT": "ConnectJob Token", "CKB": "Nervos Network", @@ -3761,6 +3779,7 @@ "COINBANK": "CoinBank", "COINBT": "CoinBot", "COINBUCK": "Coinbuck", + "COINCOLLECT": "CoinCollect", "COINDEALTOKEN": "CoinDeal Token", "COINDEFI": "Coin", "COINDEPO": "CoinDepo Token", @@ -3770,6 +3789,7 @@ "COINLION": "CoinLion", "COINM": "CoinMarketPrime", "COINONAT": "Coinonat", + "COINRADR": "CoinRadr", "COINSCOPE": "Coinscope", "COINSL": "CoinsLoot", "COINVEST": "Coinvest", @@ -3788,7 +3808,7 @@ "COLLAT": "Collaterize", "COLLE": "Collective Care", "COLLEA": "Colle AI", - "COLLECT": "CoinCollect", + "COLLECT": "Collect on Fanable", "COLLG": "Collateral Pay Governance", "COLON": "Colon", "COLR": "colR Coin", @@ -4900,6 +4920,7 @@ "DMTR": "Dimitra", "DMX": "Dymmax", "DMZ": "DeMon Token", + "DN": "DeepNode", "DN8": "Pldgr", "DNA": "Metaverse", "DNAPEPE": "DNA PEPE", @@ -4909,6 +4930,7 @@ "DNFLX": "Netflix Tokenized Stock Defichain", "DNFT": "DareNFT", "DNN": "DNN Token", + "DNNON": "Denison Mines (Ondo Tokenized)", "DNO": "Denaro", "DNODE": "DecentraNode", "DNOTES": "Dnotes", @@ -4984,6 +5006,7 @@ "DOGEIN": "Doge In Glasses", "DOGEINU": "Doge Inu", "DOGEIUS": "DOGEIUS", + "DOGEJ": "Dogecoin (JustCrypto)", "DOGEKING": "DogeKing", "DOGELEGION": "DOGE LEGION", "DOGEM": "Doge Matrix", @@ -5630,6 +5653,7 @@ "ELONTRUMP": "ELON TRUMP", "ELP": "Ellerium", "ELS": "Ethlas", + "ELSA": "Elsa", "ELT": "Element Black", "ELTC2": "eLTC", "ELTCOIN": "ELTCOIN", @@ -5700,6 +5724,7 @@ "ENEDEX": "Enedex", "ENERGYLEDGER": "Energy Ledger", "ENERGYX": "Safe Energy", + "ENEXSPACE": "ENEX", "ENF": "enfineo", "ENG": "Enigma", "ENGT": "Engagement Token", @@ -5722,6 +5747,7 @@ "ENTER": "EnterCoin", "ENTR": "EnterDAO", "ENTRC": "ENTER COIN", + "ENTROPY": "Entropy", "ENTRP": "Hut34 Project", "ENTRY": "ENTRY", "ENTS": "Ents", @@ -5731,7 +5757,7 @@ "ENVIENTA": "Envienta", "ENVION": "Envion", "ENVOY": "Envoy A.I", - "ENX": "ENEX", + "ENX": "Enigma", "EOC": "EveryonesCoin", "EON": "Exscudo", "EONC": "Dimension", @@ -5783,6 +5809,7 @@ "ERA7": "Era Token", "ERASWAP": "Era Swap Token", "ERB": "ERBCoin", + "ERBB": "Exchange Request for Bitbon", "ERC": "EuropeCoin", "ERC20": "ERC20", "ERC20V1": "ERC20 v1", @@ -5821,7 +5848,7 @@ "ESGC": "ESG Chain", "ESH": "Switch", "ESHIB": "Euro Shiba Inu", - "ESIM": "EvoSimGame", + "ESIM": "DEPINSIM Token", "ESM": "EL SALVADOR MEME", "ESN": "Ethersocial", "ESNC": "Galaxy Arena Metaverse", @@ -5882,6 +5909,7 @@ "ETHFI": "Ether.fi", "ETHI": "Ethical Finance", "ETHIX": "EthicHub", + "ETHJ": "Ethereum (JustCrypto)", "ETHM": "Ethereum Meta", "ETHO": "The Etho Protocol", "ETHOS": "Ethos Project", @@ -5954,6 +5982,7 @@ "EURU": "Upper Euro", "EURX": "eToro Euro", "EUSD": "Egoras Dollar", + "EUSX": "eUSX", "EUT": "EarnUp Token", "EUTBL": "Spiko EU T-Bills Money Market Fund", "EV": "EVAI", @@ -5992,6 +6021,7 @@ "EVOC": "EVOCPLUS", "EVOL": "EVOL NETWORK", "EVOS": "EVOS", + "EVOSIM": "EvoSimGame", "EVOVERSES": "EvoVerses", "EVR": "Everus", "EVRICE": "Evrice", @@ -6106,6 +6136,7 @@ "FAN": "Fanadise", "FAN360": "Fan360", "FANC": "fanC", + "FANCYTHATTOKEN": "Fancy That", "FAND": "Fandomdao", "FANG": "FANG Token", "FANS": "Fantasy Cash", @@ -6328,6 +6359,7 @@ "FK": "FK Coin", "FKBIDEN": "Fkbiden", "FKGARY": "Fuck Gary Gensler", + "FKH": "Flying Ketamine Horse", "FKPEPE": "Fuck Pepe", "FKR": "Flicker", "FKRPRO": "FlickerPro", @@ -6453,7 +6485,7 @@ "FNB": "FNB protocol", "FNC": "Fancy Games", "FNCT": "Financie Token", - "FNCY": "Fancy That", + "FNCY": "FNCY", "FND": "Rare FND", "FNDZ": "FNDZ Token", "FNF": "FunFi", @@ -6483,6 +6515,7 @@ "FOFOTOKEN": "FOFO Token", "FOG": "FOGnet", "FOGE": "Fat Doge", + "FOGO": "Fogo", "FOGV1": "FOGnet v1", "FOIN": "Foin", "FOL": "Folder Protocol", @@ -6509,6 +6542,7 @@ "FORA": "UFORIKA", "FORCE": "TriForce Tokens", "FORCEC": "Force Coin", + "FORDON": "Ford Motor (Ondo Tokenized)", "FORE": "FORE Protocol", "FOREFRONT": "Forefront", "FOREST": "Forest", @@ -6868,6 +6902,7 @@ "GASP": "GASP", "GASPCOIN": "gAsp", "GASS": "Gasspas", + "GAST": "Gas Town", "GASTRO": "GastroCoin", "GAT": "Gather", "GATA": "Gata", @@ -7368,6 +7403,7 @@ "GQ": "Galactic Quadrant", "GR": "GROM", "GRAB": "GRABWAY", + "GRABON": "Grab Holdings (Ondo Tokenized)", "GRACY": "Gracy", "GRAI": "Gravita Protocol", "GRAIL": "Camelot Token", @@ -7376,6 +7412,7 @@ "GRAND": "Grand Theft Ape", "GRANDCOIN": "GrandCoin", "GRANDMA": "Grandma", + "GRANT": "GrantiX Token", "GRAPE": "GrapeCoin", "GRAPHGRAIAI": "GraphGrail AI", "GRASS": "Grass", @@ -7618,6 +7655,7 @@ "HALF": "0.5X Long Bitcoin Token", "HALFP": "Half Pizza", "HALFSHIT": "0.5X Long Shitcoin Index Token", + "HALIS": "Halis", "HALLO": "Halloween Coin", "HALLOWEEN": "HALLOWEEN", "HALO": "Halo Coin", @@ -7883,7 +7921,7 @@ "HLP": "Purpose Coin", "HLPR": "HELPER COIN", "HLPT": "HLP Token", - "HLS": "Halis", + "HLS": "Helios", "HLT": "HyperLoot", "HLTC": "Huobi LTC", "HLX": "Helex", @@ -8229,6 +8267,7 @@ "IDLE": "IDLE", "IDM": "IDM", "IDNA": "Idena", + "IDNG": "IDNGold", "IDO": "Idexo", "IDOL": "MEET48 Token", "IDOLINU": "IDOLINU", @@ -8392,12 +8431,14 @@ "INSPI": "InspireAI", "INSR": "Insurabler", "INSTAMINE": "Instamine Nuggets", + "INSTANTSPONSOR": "Instant Sponsor Token", "INSTAR": "Insights Network", "INSUR": "InsurAce", "INSURANCE": "insurance", "INSURC": "InsurChain Coin", "INSUREDFIN": "Insured Finance", "INT": "Internet Node token", + "INTCON": "Intel (Ondo Tokenized)", "INTCX": "Intel xStock", "INTD": "INTDESTCOIN", "INTE": "InteractWith", @@ -8578,6 +8619,7 @@ "J9BC": "J9CASINO", "JACK": "Jack Token", "JACKPOT": "Solana Jackpot", + "JACKSON": "Jackson", "JACS": "JACS", "JACY": "JACY", "JADE": "Jade Protocol", @@ -8704,6 +8746,7 @@ "JNX": "Janex", "JNY": "JNY", "JOB": "Jobchain", + "JOBCOIN": "buy instead of getting a job", "JOBIESS": "JobIess", "JOBS": "JobsCoin", "JOBSEEK": "JobSeek AI", @@ -8719,7 +8762,8 @@ "JOHNNY": "Johnny The Bull", "JOINCOIN": "JoinCoin", "JOINT": "Joint Ventures", - "JOJO": "JOJO", + "JOJO": "JOJOWORLD", + "JOJOSCLUB": "JOJO", "JOJOTOKEN": "JOJO", "JOK": "JokInTheBox", "JOKER": "JOKER", @@ -9613,10 +9657,11 @@ "LISTA": "Lista DAO", "LISTEN": "Listen", "LISUSD": "lisUSD", - "LIT": "Litentry", + "LIT": "Lighter", "LITE": "Lite USD", "LITEBTC": "LiteBitcoin", "LITENETT": "Litenett", + "LITENTRY": "Litentry", "LITH": "Lithium Finance", "LITHIUM": "Lithium", "LITHO": "Lithosphere", @@ -9748,7 +9793,7 @@ "LORY": "Yield Parrot", "LOS": "Lord Of SOL", "LOST": "Lost Worlds", - "LOT": "Lukki Operating Token", + "LOT": "League of Traders", "LOTES": "Loteo", "LOTEU": "Loteo", "LOTT": "Beauty bakery lott", @@ -9824,6 +9869,7 @@ "LTCC": "Listerclassic Coin", "LTCD": "LitecoinDark", "LTCH": "Litecoin Cash", + "LTCJ": "Litecoin (JustCrypto)", "LTCP": "LitecoinPro", "LTCR": "LiteCreed", "LTCU": "LiteCoin Ultra", @@ -9875,6 +9921,7 @@ "LUFFYV1": "Luffy v1", "LUIGI": "Luigi Inu", "LUIS": "Tongue Cat", + "LUKKI": "Lukki Operating Token", "LULU": "LULU", "LUM": "Luminous", "LUMA": "LUMA Token", @@ -10068,8 +10115,7 @@ "MANUSAI": "Manus AI Agent", "MANYU": "Manyu", "MANYUDOG": "MANYU", - "MAO": "MAO", - "MAOMEME": "Mao", + "MAO": "Mao", "MAOW": "MAOW", "MAP": "MAP Protocol", "MAPC": "MapCoin", @@ -10105,6 +10151,7 @@ "MARSMI": "MarsMi", "MARSO": "Marso.Tech", "MARSRISE": "MarsRise", + "MARSTOKEN": "Mars Token", "MARSUPILAMI": "MARSUPILAMI INU", "MARSW": "Marswap", "MART": "ArtMeta", @@ -10240,6 +10287,7 @@ "MCIV": "Mars Civ Project", "MCL": "McLaren F1", "MCLB": "Millennium Club Coin", + "MCM": "Mochimo", "MCN": "mCoin", "MCO": "Crypto.com", "MCO2": "Moss Carbon Credit", @@ -10310,6 +10358,7 @@ "MEF": "MEFLEX", "MEFA": "Metaverse Face", "MEFAI": "META FINANCIAL AI", + "MEFI": "Meo Finance", "MEGA": "MegaFlash", "MEGABOT": "Megabot", "MEGAD": "Mega Dice Casino", @@ -10953,6 +11002,7 @@ "MOTIONCOIN": "Motion", "MOTO": "Motocoin", "MOUND": "Mound Token", + "MOUNTA": "Mountain Protocol", "MOUTAI": "Moutai", "MOV": "MovieCoin", "MOVD": "MOVE Network", @@ -11137,6 +11187,7 @@ "MUNITY": "Metahorse Unity", "MUNK": "Dramatic Chipmunk", "MUNSUN": "MUNSUN", + "MUON": "Micron Technology (Ondo Tokenized)", "MURA": "Murasaki", "MURATIAI": "MuratiAI", "MUSCAT": "MusCat", @@ -11184,9 +11235,11 @@ "MWD": "MEW WOOF DAO", "MWETH": "Moonwell Flagship ETH (Morpho Vault)", "MWH": "Melania Wif Hat", + "MWT": "Mountain Wolf Token", "MWXT": "MWX Token", "MX": "MX Token", - "MXC": "Machine Xchange Coin", + "MXC": "MXC Token", + "MXCV1": "Machine Xchange Coin v1", "MXD": "Denarius", "MXGP": "MXGP Fan Token", "MXM": "Maximine", @@ -11455,6 +11508,7 @@ "NEWSTOKENS": "NewsTokens", "NEWT": "Newton Protocol", "NEWTON": "Newtonium", + "NEWYORKCOIN": "NewYorkCoin", "NEX": "Nash Exchange", "NEXA": "Nexa", "NEXAI": "NexAI", @@ -11482,6 +11536,7 @@ "NFCR": "NFCore", "NFD": "Feisty Doge NFT", "NFE": "Edu3Labs", + "NFLXON": "Netflix (Ondo Tokenized)", "NFLXX": "Netflix xStock", "NFM": "NFMart", "NFN": "Nafen", @@ -11519,6 +11574,7 @@ "NGL": "Entangle", "NGM": "e-Money", "NGMI": "NGMI Coin", + "NGNT": "Naira Token", "NGTG": "NUGGET TRAP", "NHCT": "Nano Healthcare Token", "NHI": "Non Human Intelligence", @@ -11616,6 +11672,7 @@ "NOBS": "No BS Crypto", "NOC": "Nono Coin", "NOCHILL": "AVAX HAS NO CHILL", + "NOCK": "Nockchain", "NODE": "NodeOps", "NODELYAI": "NodelyAI", "NODESYNAPSE": "NodeSynapse", @@ -11661,7 +11718,9 @@ "NOTDOG": "NOTDOG", "NOTE": "Republic Note", "NOTECANTO": "Note", - "NOTHING": "NOTHING", + "NOTHING": "Youll own nothing & be happy", + "NOTHINGCASH": "NOTHING", + "NOTIFAI": "NotifAi News", "NOTINU": "NOTCOIN INU", "NOTIONAL": "Notional Finance", "NOV": "Novara Calcio Fan Token", @@ -11677,6 +11736,7 @@ "NPER": "NPER", "NPICK": "NPICK BLOCK", "NPLC": "Plus Coin", + "NPLCV1": "PlusCoin v1", "NPM": "Neptune Mutual", "NPRO": "NPRO", "NPT": "Neopin", @@ -11769,6 +11829,7 @@ "NVA": "Neeva Defi", "NVB": "NovaBank", "NVC": "NovaCoin", + "NVDAON": "NVIDIA (Ondo Tokenized)", "NVDAX": "NVIDIA xStock", "NVDX": "Nodvix", "NVG": "NightVerse Game", @@ -11810,7 +11871,7 @@ "NYANDOGE": "NyanDOGE International", "NYANTE": "Nyantereum International", "NYBBLE": "Nybble", - "NYC": "NewYorkCoin", + "NYC": "NYC", "NYCREC": "NYCREC", "NYE": "NewYork Exchange", "NYEX": "Nyerium", @@ -11866,6 +11927,7 @@ "OCE": "OceanEX Token", "OCEAN": "Ocean Protocol", "OCEANT": "Poseidon Foundation", + "OCEANV1": "Ocean Protocol v1", "OCH": "Orchai", "OCICAT": "OciCat", "OCL": "Oceanlab", @@ -12013,7 +12075,7 @@ "OMNIXIO": "OMNIX", "OMNOM": "Doge Eat Doge", "OMNOMN": "Omega Network", - "OMT": "Mars Token", + "OMT": "Oracle Meta Technologies", "OMV1": "OM Token (v1)", "OMX": "Project Shivom", "OMZ": "Open Meta City", @@ -12023,6 +12085,7 @@ "ONCH": "OnchainPoints.xyz", "ONDO": "Ondo", "ONDOAI": "Ondo DeFAI", + "ONDSON": "Ondas Holdings (Ondo Tokenized)", "ONE": "Harmony", "ONEROOT": "OneRoot Network", "ONES": "OneSwap DAO", @@ -12080,6 +12143,7 @@ "OPENCUSTODY": "Open Custody Protocol", "OPENDAO": "OpenDAO", "OPENGO": "OPEN Governance Token", + "OPENON": "Opendoor Technologies (Ondo Tokenized)", "OPENP": "Open Platform", "OPENRI": "Open Rights Exchange", "OPENSOURCE": "Open Source Network", @@ -12244,7 +12308,7 @@ "OWB": "OWB", "OWC": "Oduwa", "OWD": "Owlstand", - "OWL": "OWL Token", + "OWLTOKEN": "OWL Token", "OWN": "OTHERWORLD", "OWNDATA": "OWNDATA", "OWNLY": "Ownly", @@ -12268,6 +12332,7 @@ "OZG": "Ozagold", "OZK": "OrdiZK", "OZMPC": "Ozempic", + "OZNI": "Ni Token", "OZO": "Ozone Chain", "OZONE": "Ozone metaverse", "OZONEC": "Ozonechain", @@ -12292,6 +12357,7 @@ "PACOCA": "Pacoca", "PACP": "PAC Protocol", "PACT": "impactMarket", + "PACTTOKEN": "PACT community token", "PACTV1": "impactMarket v1", "PAD": "NearPad", "PAF": "Pacific", @@ -12335,6 +12401,7 @@ "PANGEA": "PANGEA", "PANIC": "PanicSwap", "PANO": "PanoVerse", + "PANTHER": "Panther Protocol", "PANTOS": "Pantos", "PAO": "South Pao", "PAPA": "Papa Bear", @@ -12447,10 +12514,12 @@ "PCN": "PeepCoin", "PCNT": "Playcent", "PCO": "Pecunio", + "PCOCK": "PulseChain Peacock", "PCOIN": "Pioneer Coin", "PCR": "Paycer Protocol", "PCS": "Pabyosi Coin", "PCSP": "GenomicDao G-Stroke", + "PCT": "PET CASH TOKEN", "PCW": "Power Crypto World", "PCX": "ChainX", "PD": "PUDEL", @@ -12461,6 +12530,7 @@ "PDD": "PDDOLLAR", "PDEX": "Polkadex", "PDF": "Port of DeFi Network", + "PDI": "Phuture DeFi Index", "PDJT": "President Donald J. Trump", "PDOG": "Polkadog", "PDOGE": "PolkaDoge", @@ -12583,6 +12653,7 @@ "PEPEMO": "PepeMo", "PEPEMOON": "PEPEMOON", "PEPEMUSK": "pepemusk", + "PEPENODE": "PEPENODE", "PEPEOFSOL": "Pepe of Solana", "PEPEPI": "PEPEPi", "PEPER": "Baby Pepe", @@ -12618,6 +12689,7 @@ "PERC": "Perion", "PERCY": "Percy Verence", "PERI": "PERI Finance", + "PERKSCOIN": "PerksCoin ", "PERL": "PERL.eco", "PERMIAN": "Permian", "PERP": "Perpetual Protocol", @@ -12645,7 +12717,9 @@ "PEUSD": "peg-eUSD", "PEW": "pepe in a memes world", "PEX": "Pexcoin", + "PF": "Purple Frog", "PFEX": "Pfizer xStock", + "PFF": "PumpFunFloki", "PFI": "PrimeFinance", "PFID": "Pofid Dao", "PFL": "Professional Fighters League Fan Token", @@ -12835,7 +12909,7 @@ "PLAYCOIN": "PlayCoin", "PLAYFUN": "PLAYFUN", "PLAYKEY": "Playkey", - "PLAYSOL": "Play Solana", + "PLAYSOLANA": "Play Solana", "PLAYTOKEN": "Play Token", "PLB": "Paladeum", "PLBT": "Polybius", @@ -12884,6 +12958,7 @@ "PLU": "Pluton", "PLUG": "PL^Gnet", "PLUGCN": "Plug Chain", + "PLUGON": "Plug Power (Ondo Tokenized)", "PLUME": "Plume", "PLUP": "PoolUp", "PLURA": "PluraCoin", @@ -12978,7 +13053,7 @@ "POLLEN": "Beraborrow", "POLLUK": "Jasse Polluk", "POLLUX": "Pollux Coin", - "POLLY": "Polynetica", + "POLLY": "Polly Penguin", "POLNX": "eToro Polish Zloty", "POLO": "NftyPlay", "POLS": "Polkastarter", @@ -12987,6 +13062,7 @@ "POLY": "Polymath Network", "POLYCUB": "PolyCub", "POLYDOGE": "PolyDoge", + "POLYN": "Polynetica", "POLYPAD": "PolyPad", "POLYX": "Polymesh", "POM": "Proof Of Memes", @@ -13114,6 +13190,7 @@ "PREAI": "Predict Crypto", "PREC": "Precipitate.AI", "PRED": "Predictcoin", + "PREDIC": "PredicTools", "PREM": "Premium", "PREME": "PREME Token", "PREMIA": "Premia", @@ -13221,6 +13298,7 @@ "PSWAP": "Polkaswap", "PSY": "PsyOptions", "PSYOP": "PSYOP", + "PSYOPANIME": "PsyopAnime", "PT": "Phemex", "PTA": "PentaCoin", "PTAS": "La Peseta", @@ -13319,8 +13397,9 @@ "PUX": "pukkamex", "PVC": "PVC Meta", "PVFYBO": "JRVGCUPVSC", - "PVP": "PvP", + "PVP": "Pvpfun", "PVPCHAIN": "PVPChain", + "PVPGAME": "PvP", "PVT": "Punkvism Token", "PVU": "Plant vs Undead Token", "PWAR": "PolkaWar", @@ -13333,9 +13412,10 @@ "PWR": "MaxxChain", "PWRC": "PWR Coin", "PWT": "PANDAINU", - "PX": "PXcoin", + "PX": "Not Pixel", "PXB": "PixelBit", "PXC": "PhoenixCoin", + "PXCOIN": "PXcoin", "PXG": "PlayGame", "PXI": "Prime-X1", "PXL": "PIXEL", @@ -13519,7 +13599,7 @@ "RADAR": "DappRadar", "RADI": "RadicalCoin", "RADIO": "RadioShack", - "RADR": "CoinRadr", + "RADR": "RADR", "RADX": "Radx AI", "RAFF": "Ton Raffles", "RAFFLES": "Degen Raffles", @@ -13582,6 +13662,7 @@ "RAYS": "Rays Network", "RAZE": "Raze Network", "RAZOR": "Razor Network", + "RAZORCOIN": "RazorCoin", "RB": "REBorn", "RBBT": "RabbitCoin", "RBC": "Rubic", @@ -13928,6 +14009,7 @@ "RNDR": "Render Token", "RNDX": "Round X", "RNEAR": "Near (Rainbow Bridge)", + "RNGR": "Ranger", "RNS": "RenosCoin", "RNT": "REAL NIGGER TATE", "RNTB": "BitRent", @@ -13966,6 +14048,7 @@ "ROK": "Rockchain", "ROKM": "Rocket Ma", "ROKO": "Roko", + "ROLL": "Roll", "ROLLSROYCE": "RollsRoyce", "ROLS": "RollerSwap", "ROM": "ROMCOIN", @@ -14158,7 +14241,7 @@ "RYT": "Real Yield Token", "RYU": "The Blue Dragon", "RYZ": "Anryze", - "RZR": "RazorCoin", + "RZR": "Rezor", "RZTO": "RZTO Token", "RZUSD": "RZUSD", "RedFlokiCEO": "Red Floki CEO", @@ -14220,6 +14303,7 @@ "SAKAI": "Sakai Vault", "SAKATA": "Sakata Inu", "SAKE": "SakeToken", + "SAKURACOIN": "Sakuracoin", "SAL": "Salvium", "SALD": "Salad", "SALE": "DxSale Network", @@ -14423,6 +14507,7 @@ "SEAM": "Seamless Protocol", "SEAMLESS": "SeamlessSwap", "SEAN": "Starfish Finance", + "SEAS": "Seasons", "SEAT": "Seamans Token", "SEATLABNFT": "SeatlabNFT", "SEBA": "Seba", @@ -14498,6 +14583,7 @@ "SETH": "sETH", "SETH2": "sETH2", "SETHER": "Sether", + "SETHH": "Staked ETH Harbour", "SETS": "Sensitrust", "SEUR": "Synth sEUR", "SEW": "simpson in a memes world", @@ -14608,6 +14694,7 @@ "SHIBACASH": "ShibaCash", "SHIBADOG": "Shiba San", "SHIBAI": "AiShiba", + "SHIBAINU": "SHIBA INU", "SHIBAKEN": "Shibaken Finance", "SHIBAMOM": "Shiba Mom", "SHIBANCE": "Shibance Token", @@ -14678,6 +14765,7 @@ "SHOKI": "Shoki", "SHON": "ShonToken", "SHONG": "Shong Inu", + "SHOOK": "SHOOK", "SHOOT": "Mars Battle", "SHOOTER": "Top Down Survival Shooter", "SHOP": "Shoppi Coin", @@ -14727,6 +14815,7 @@ "SIFT": "Smart Investment Fund Token", "SIFU": "SIFU", "SIG": "Signal", + "SIGHT": "Empire of Sight", "SIGM": "Sigma", "SIGMA": "SIGMA", "SIGN": "Sign", @@ -14735,6 +14824,7 @@ "SIGNMETA": "Sign Token", "SIGT": "Signatum", "SIGU": "Singular", + "SIH": "Salient Investment Holding", "SIKA": "SikaSwap", "SIL": "SIL Finance Token V2", "SILENTIS": "Silentis", @@ -14772,6 +14862,7 @@ "SINE": "Sinelock", "SING": "SingularFarm", "SINGLE": "Single Finance", + "SINGULARRY": "SINGULARRY", "SINK": "Let that sink in", "SINS": "SafeInsure", "SINSO": "SINSO", @@ -14828,7 +14919,7 @@ "SKO": "Sugar Kingdom Odyssey", "SKOP": "Skulls of Pepe Token", "SKPEPE": "Sheikh Pepe", - "SKR": "Sakuracoin", + "SKR": "Seeker", "SKRB": "Sakura Bloom", "SKRIMP": "Skrimples", "SKRP": "Skraps", @@ -14885,6 +14976,7 @@ "SLOKI": "Super Floki", "SLOP": "Slop", "SLORK": "SLORK", + "SLOT": "Alphaslot", "SLOTH": "Sloth", "SLOTHA": "Slothana", "SLP": "Smooth Love Potion", @@ -14898,6 +14990,7 @@ "SLUGDENG": "SLUG DENG", "SLUMBO": "SLUMBO", "SLVLUSD": "Staked Level USD", + "SLVON": "iShares Silver Trust (Ondo Tokenized)", "SLVX": "eToro Silver", "SLX": "SLIMEX", "SMA": "Soma Network", @@ -14922,6 +15015,7 @@ "SMBR": "Sombra", "SMBSWAP": "SimbCoin Swap", "SMC": "SmartCoin", + "SMCION": "Super Micro Computer (Ondo Tokenized)", "SMCW": "Space Misfits", "SMD": "SMD Coin", "SMETA": "StarkMeta", @@ -15024,7 +15118,7 @@ "SNPT": "SNPIT TOKEN", "SNRG": "Synergy", "SNRK": "Snark Launch", - "SNS": "Synesis One", + "SNS": "Solana Name Service", "SNST": "Smooth Network Solutions Token", "SNSY": "Sensay", "SNT": "Status Network Token", @@ -15062,6 +15156,7 @@ "SOGNI": "Sogni AI", "SOGUR": "Sogur Currency", "SOH": "Stohn Coin", + "SOHMV1": "Staked Olympus v1", "SOHOT": "SOHOTRN", "SOIL": "Soil", "SOILCOIN": "SoilCoin", @@ -15290,6 +15385,7 @@ "SPO": "Spores Network", "SPOK": "Spock", "SPOL": "Starterpool", + "SPON": "Spheron Network", "SPONG": "Spongebob", "SPONGE": "Sponge", "SPONGEBOB": "Spongebob Squarepants", @@ -15298,6 +15394,7 @@ "SPOOL": "Spool DAO Token", "SPORE": "Spore", "SPORT": "SportsCoin", + "SPORTFUN": "Sport.fun", "SPORTS": "ZenSports", "SPORTSFIX": "SportsFix", "SPORTSP": "SportsPie", @@ -15326,6 +15423,7 @@ "SPX6969": "SPX 6969", "SPXC": "SpaceXCoin", "SPY": "Smarty Pay", + "SPYON": "SPDR S&P 500 ETF (Ondo Tokenized)", "SPYRO": "SPYRO", "SPYX": "SP500 xStock", "SQ3": "Squad3", @@ -15351,6 +15449,8 @@ "SQUIDGROWV1": "SquidGrow v1", "SQUIDV1": "Squid Game v1", "SQUIDW": "Squidward Coin", + "SQUIG": "Squiggle DAO Token", + "SQUIGDAO": "SquiggleDAO ERC20", "SQUIRT": "SQUIRTLE", "SQUOGE": "DogeSquatch", "SR30": "SatsRush", @@ -15424,13 +15524,14 @@ "STAN": "Stank Memes", "STANDARD": "Stakeborg DAO", "STAPT": "Ditto Staked Aptos", - "STAR": "StarHeroes", + "STAR": "Starpower Network Token", "STAR10": "Ronaldinho Coin", "STARAMBA": "Staramba", "STARBASE": "Starbase", "STARC": "StarChain", "STARDOGE": "StarDOGE", "STARGATEAI": "Stargate AI Agent", + "STARHEROES": "StarHeroes", "STARL": "StarLink", "STARLAUNCH": "StarLaunch", "STARLY": "Starly", @@ -15818,6 +15919,7 @@ "SYNCO": "Synco", "SYND": "Syndicate", "SYNDOG": "Synthesizer Dog", + "SYNESIS": "Synesis One", "SYNK": "Synk", "SYNLEV": "SynLev", "SYNO": "Synonym Finance", @@ -15918,6 +16020,7 @@ "TATSU": "Taτsu", "TAU": "Lamden Tau", "TAUC": "Taurus Coin", + "TAUD": "TrueAUD", "TAUM": "Orbitau Taureum", "TAUR": "Marnotaur", "TAVA": "ALTAVA", @@ -16117,6 +16220,7 @@ "THEPLAY": "PLAY", "THEREALCHAIN": "REAL", "THERESAMAY": "Theresa May Coin", + "THEROS": "THEROS", "THES": "The Standard Protocol (USDS)", "THESTANDARD": "Standard Token", "THETA": "Theta Network", @@ -16201,9 +16305,10 @@ "TIPS": "FedoraCoin", "TIPSX": "WisdomTree TIPS Digital Fund", "TIPSY": "TipsyCoin", - "TIT": "TittieCoin", + "TIT": "TITANIUM", "TITA": "Titan Hunters", "TITAN": "SATOSHI•RUNE•TITAN (Runes)", + "TITANCOIN": "Titan Coin", "TITANO": "Titano", "TITANSWAP": "TitanSwap", "TITANX": "TitanX", @@ -16212,6 +16317,7 @@ "TITI": "TiTi Protocol", "TITN": "Titan", "TITS": "We Love Tits", + "TITTIECOIN": "TittieCoin", "TITTY": "TamaKitty", "TIUSD": "TiUSD", "TIX": "Blocktix", @@ -16226,6 +16332,7 @@ "TKMK": "TOKAMAK", "TKMN": "Tokemon", "TKN": "Token Name Service", + "TKNT": "TKN Token", "TKO": "Tokocrypto", "TKP": "TOKPIE", "TKR": "CryptoInsight", @@ -16239,6 +16346,7 @@ "TLN": "Trustlines Network", "TLOS": "Telos", "TLP": "TulipCoin", + "TLTON": "iShares 20+ Year Treasury Bond ETF (Ondo Tokenized)", "TLW": "TILWIKI", "TMAGA": "THE MAGA MOVEMENT", "TMAI": "Token Metrics AI", @@ -16393,6 +16501,7 @@ "TPV": "TravGoPV", "TPY": "Thrupenny", "TQ": "TonQuestion", + "TQQQON": "ProShares UltraPro QQQ (Ondo Tokenized)", "TQQQX": "TQQQ xStock", "TQRT": "TokoQrt", "TR3": "Tr3zor", @@ -16595,6 +16704,7 @@ "TSHARE": "Tomb Shares", "TSHP": "12Ships", "TSL": "Energo", + "TSLAON": "Tesla (Ondo Tokenized)", "TSLAX": "Tesla xStock", "TSLT": "Tamkin", "TSN": "Tsunami Exchange Token", @@ -16616,7 +16726,7 @@ "TTF": "TurboTrix Finance", "TTK": "The Three Kingdoms", "TTM": "Tradetomato", - "TTN": "Titan Coin", + "TTN": "TTN", "TTNT": "TITA Project", "TTT": "TRUMPETTOKEN", "TTTU": "T-Project", @@ -16633,7 +16743,8 @@ "TUKI": "Tuki", "TUKIV1": "Tuki v1", "TULIP": "Tulip Protocol", - "TUNA": "TUNACOIN", + "TUNA": "DefiTuna", + "TUNACOIN": "TUNACOIN", "TUNE": "Bitune", "TUNETRADEX": "TuneTrade", "TUP": "Tenup", @@ -16710,7 +16821,7 @@ "TZKI": "Tsuzuki Inu", "TZPEPE": "Tezos Pepe", "TZU": "Sun Tzu", - "U": "Union", + "U": "United Stables", "U2U": "U2U Network", "U8D": "Universal Dollar", "UA1": "UA1", @@ -16737,6 +16848,7 @@ "UBXT": "UpBots", "UC": "YouLive Coin", "UCA": "UCA Coin", + "UCANFIX": "Ucan fix life in1day", "UCAP": "Unicap.finance", "UCASH": "U.CASH", "UCCOIN": "UC Coin", @@ -16858,6 +16970,7 @@ "UNIL": "UniLayer", "UNIM": "Unicorn Milk", "UNIO": "Unio Coin", + "UNION": "Union", "UNIPOWER": "UniPower", "UNIPT": "Universal Protocol Token", "UNIQ": "Uniqredit", @@ -16934,6 +17047,7 @@ "US": "Talus Token", "USA": "Based USA", "USACOIN": "American Coin", + "USAGIBNB": "U", "USAT": "USAT", "USBT": "Universal Blockchain", "USC": "Ultimate Secure Cash", @@ -16980,7 +17094,7 @@ "USDK": "USDK", "USDKG": "USDKG", "USDL": "Lift Dollar", - "USDM": "Mountain Protocol", + "USDM": "USDM", "USDMA": "USD mars", "USDN": "Neutral AI", "USDO": "USD Open Dollar", @@ -17021,6 +17135,7 @@ "USN": "USN", "USNBT": "NuBits", "USNOTA": "NOTA", + "USOR": "U.S Oil", "USP": "USP Token", "USPEPE": "American pepe", "USPLUS": "Fluent Finance", @@ -17038,7 +17153,8 @@ "USUALX": "USUALx", "USUD": "USUD", "USV": "Universal Store of Value", - "USX": "USX Quantum", + "USX": "USX", + "USXQ": "USX Quantum", "USYC": "Hashnote USYC", "UT": "Ulord", "UTBAI": "UTB.ai", @@ -17193,6 +17309,7 @@ "VEO": "Amoveo", "VER": "VersalNFT", "VERA": "Vera", + "VEREM": "Verified Emeralds", "VERI": "Veritaseum", "VERIC": "VeriCoin", "VERIFY": "Verify", @@ -17391,6 +17508,7 @@ "VRC": "Virtual Coin", "VRFY": "VERIFY", "VRGW": "Virtual Reality Game World", + "VRGX": "VROOMGO", "VRH": "Versailles Heroes", "VRL": "Virtual X", "VRM": "Verium", @@ -17456,6 +17574,7 @@ "VVS": "VVS Finance", "VVV": "Venice Token", "VX": "Visa xStock", + "VXC": "VINX COIN", "VXL": "Voxel X Network", "VXR": "Vox Royale", "VXRP": "Venus XRP", @@ -17594,6 +17713,7 @@ "WCFGV1": "Wrapped Centrifuge", "WCFX": "Wrapped Conflux", "WCG": "World Crypto Gold", + "WCHZ": "Chiliz (Portal Bridge)", "WCKB": "Wrapped Nervos Network", "WCOIN": "WCoin", "WCORE": "Wrapped Core", @@ -17685,6 +17805,7 @@ "WFIL": "Wrapped Filecoin", "WFLAMA": "WIFLAMA", "WFLOW": "Wrapped Flow", + "WFLR": "Wrapped Flare", "WFO": "WoofOracle", "WFRAGSOL": "Wrapped fragSOL", "WFT": "Windfall Token", @@ -17721,6 +17842,7 @@ "WHISKEY": "WHISKEY", "WHITE": "WhiteRock", "WHITEHEART": "Whiteheart", + "WHITEPEPE": "The White Pepe", "WHITEWHALE": "The White Whale", "WHL": "WhaleCoin", "WHO": "Truwho", @@ -17838,6 +17960,7 @@ "WMNT": "Wrapped Mantle", "WMOXY": "Moxy", "WMT": "World Mobile Token v1", + "WMTON": "Walmart (Ondo Tokenized)", "WMTX": "World Mobile Token", "WMW": "WoopMoney", "WMX": "Wombex Finance", @@ -18161,6 +18284,7 @@ "XENO": "Xeno", "XENOVERSE": "Xenoverse", "XEP": "Electra Protocol", + "XERA": "XERA", "XERS": "X Project", "XES": "Proxeus", "XET": "Xfinite Entertainment Token", @@ -18340,6 +18464,7 @@ "XRPCV1": "XRP Classic v1", "XRPEPE": "XRPEPE", "XRPH": "XRP Healthcare", + "XRPHEDGE": "1X Short XRP Token", "XRS": "Xrius", "XRT": "Robonomics Network", "XRUN": "XRun", @@ -18607,6 +18732,7 @@ "ZAIF": "Zaif Token", "ZAIFIN": "Zero Collateral Dai", "ZAM": "Zamio", + "ZAMA": "Zama", "ZAMZAM": "ZAMZAM", "ZANO": "Zano", "ZAO": "zkTAO", @@ -18652,8 +18778,7 @@ "ZEBU": "ZEBU", "ZEC": "ZCash", "ZECD": "ZCashDarkCoin", - "ZED": "ZED Token", - "ZEDCOIN": "ZedCoin", + "ZED": "ZedCoins", "ZEDD": "ZedDex", "ZEDTOKEN": "Zed Token", "ZEDX": "ZEDX Сoin", @@ -18679,6 +18804,7 @@ "ZENPROTOCOL": "Zen Protocol", "ZENQ": "Zenqira", "ZENT": "Zentry", + "ZENV1": "Horizen v1", "ZEON": "Zeon Network", "ZEP": "Zeppelin Dao", "ZEPH": "Zephyr Protocol", @@ -18696,12 +18822,14 @@ "ZET2": "Zeta2Coin", "ZETA": "ZetaChain", "ZETH": "Zethan", + "ZETO": "ZeTo", "ZETRIX": "Zetrix", "ZEUM": "Colizeum", "ZEUS": "Zeus Network", "ZEUSPEPES": "Zeus", "ZEX": "Zeta", "ZEXI": "ZEXICON", + "ZEXX": "ZEXXCOIN", "ZEXY": "ZEXY", "ZF": "zkSwap Finance ", "ZFI": "Zyfi", @@ -18748,6 +18876,7 @@ "ZKEVM": "zkEVMChain (BSC)", "ZKEX": "zkExchange", "ZKF": "ZKFair", + "ZKFG": "ZKFG", "ZKGPT": "ZKGPT", "ZKGROK": "ZKGROK", "ZKGUN": "zkGUN", @@ -18759,7 +18888,7 @@ "ZKLAB": "zkSync Labs", "ZKLK": "ZkLock", "ZKML": "zKML", - "ZKP": "Panther Protocol", + "ZKP": "zkPass", "ZKPAD": "zkLaunchpad", "ZKPEPE": "ZKPEPEs", "ZKS": "ZKSpace", @@ -18830,8 +18959,9 @@ "ZSD": "Zephyr Protocol Stable Dollar", "ZSE": "ZSEcoin", "ZSH": "Ziesha", + "ZSWAP": "ZygoSwap", "ZT": "ZBG Token", - "ZTC": "ZeTo", + "ZTC": "Zenchain", "ZTG": "Zeitgeist", "ZTK": "Zefi", "ZTX": "ZTX", From f364874e27672052fa32fddf547b3ffe3036365d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 19:35:31 +0100 Subject: [PATCH 29/76] Task/extend portfolio calculator tests with investments by year (#6240) * Extend tests with investmentsByYear --- .../portfolio-calculator-baln-buy-and-buy.spec.ts | 9 +++++++++ ...lator-baln-buy-and-sell-in-two-activities.spec.ts | 9 +++++++++ .../portfolio-calculator-baln-buy-and-sell.spec.ts | 9 +++++++++ .../roai/portfolio-calculator-baln-buy.spec.ts | 9 +++++++++ .../roai/portfolio-calculator-btceur.spec.ts | 10 ++++++++++ ...-calculator-btcusd-buy-and-sell-partially.spec.ts | 12 ++++++++++++ .../roai/portfolio-calculator-btcusd.spec.ts | 10 ++++++++++ .../roai/portfolio-calculator-googl-buy.spec.ts | 9 +++++++++ .../roai/portfolio-calculator-no-orders.spec.ts | 7 +++++++ ...io-calculator-novn-buy-and-sell-partially.spec.ts | 9 +++++++++ .../portfolio-calculator-novn-buy-and-sell.spec.ts | 9 +++++++++ 11 files changed, 102 insertions(+) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index 5368640af..a1021a57b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -133,6 +133,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('595.6'), errors: [], @@ -204,6 +209,10 @@ describe('PortfolioCalculator', () => { { date: '2021-11-01', investment: 559 }, { date: '2021-12-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2021-01-01', investment: 559 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index aad4a91d3..002730e32 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -149,6 +149,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('0'), errors: [], @@ -218,6 +223,10 @@ describe('PortfolioCalculator', () => { { date: '2021-11-01', investment: 0 }, { date: '2021-12-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2021-01-01', investment: 0 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index e75053d6b..e4ba70158 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -133,6 +133,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('0'), errors: [], @@ -202,6 +207,10 @@ describe('PortfolioCalculator', () => { { date: '2021-11-01', investment: 0 }, { date: '2021-12-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2021-01-01', investment: 0 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index 71fc36fd4..e6cae7865 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -123,6 +123,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('297.8'), errors: [], @@ -201,6 +206,10 @@ describe('PortfolioCalculator', () => { { date: '2021-11-01', investment: 273.2 }, { date: '2021-12-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2021-01-01', investment: 273.2 } + ]); }); it.only('with BALN.SW buy (with unit price lower than closing price)', async () => { diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 89eedb78f..6cc58a70f 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -132,6 +132,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2021-12-11', investmentValueWithCurrencyEffect: 0, @@ -247,6 +252,11 @@ describe('PortfolioCalculator', () => { { date: '2021-12-01', investment: 44558.42 }, { date: '2022-01-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2021-01-01', investment: 44558.42 }, + { date: '2022-01-01', investment: 0 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 4cce2d8cc..41f1d80a8 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -146,6 +146,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('13298.425356'), errors: [], @@ -255,6 +260,13 @@ describe('PortfolioCalculator', () => { { date: '2017-12-01', investment: -318.54266729999995 }, { date: '2018-01-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2015-01-01', investment: 637.0853345999999 }, + { date: '2016-01-01', investment: 0 }, + { date: '2017-01-01', investment: -318.54266729999995 }, + { date: '2018-01-01', investment: 0 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index cb80c2c29..b8cecb350 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -132,6 +132,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2021-12-11', investmentValueWithCurrencyEffect: 0, @@ -247,6 +252,11 @@ describe('PortfolioCalculator', () => { { date: '2021-12-01', investment: 44558.42 }, { date: '2022-01-01', investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2021-01-01', investment: 44558.42 }, + { date: '2022-01-01', investment: 0 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index 1e9aa0c7c..e438d9c6d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -129,6 +129,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('103.10483'), errors: [], @@ -220,6 +225,10 @@ describe('PortfolioCalculator', () => { investment: 0 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2023-01-01', investment: 82.329056 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts index fdd9e4718..6c47af7ca 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts @@ -93,6 +93,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big(0), hasErrors: false, @@ -108,6 +113,8 @@ describe('PortfolioCalculator', () => { expect(investments).toEqual([]); expect(investmentsByMonth).toEqual([]); + + expect(investmentsByYear).toEqual([]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 2c8384ad0..8c0b1af6a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -129,6 +129,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('87.8'), errors: [], @@ -200,6 +205,10 @@ describe('PortfolioCalculator', () => { { date: '2022-03-01', investment: 151.6 }, { date: '2022-04-01', investment: -75.8 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2022-01-01', investment: 75.8 } + ]); }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index 09b3b4545..c4850db66 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -129,6 +129,11 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2022-03-06', investmentValueWithCurrencyEffect: 0, @@ -251,6 +256,10 @@ describe('PortfolioCalculator', () => { { date: '2022-03-01', investment: 151.6 }, { date: '2022-04-01', investment: -151.6 } ]); + + expect(investmentsByYear).toEqual([ + { date: '2022-01-01', investment: 0 } + ]); }); }); }); From 3939bc55dd4138bfeae013b907173bcdc7188671 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 23 Jan 2026 19:41:08 +0100 Subject: [PATCH 30/76] Release 2.233.0 (#6241) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5154ae63..8fbad9767 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.233.0 - 2026-01-23 ### Changed diff --git a/package-lock.json b/package-lock.json index 23af0ed7c..f863292cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.232.0", + "version": "2.233.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.232.0", + "version": "2.233.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index b4959270f..940c674c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.232.0", + "version": "2.233.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 9fd9edd0eac08b3cba68d0fa49b219c7d7ebe1d8 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 25 Jan 2026 17:05:03 +0700 Subject: [PATCH 31/76] Feature/improve zh localization (#6245) * fix(i18n): move i18n attribute in pricing page * feat(i18n): update zh locale * feat(i18n): update zh locale * feat(docs): update changelog --- CHANGELOG.md | 6 ++ .../src/app/pages/pricing/pricing-page.html | 9 +-- apps/client/src/locales/messages.xlf | 21 +++---- apps/client/src/locales/messages.zh.xlf | 56 ++++++++----------- 4 files changed, 40 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fbad9767..00b4cb201 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the language localization for Chinese (`zh`) + ## 2.233.0 - 2026-01-23 ### Changed diff --git a/apps/client/src/app/pages/pricing/pricing-page.html b/apps/client/src/app/pages/pricing/pricing-page.html index 3cc0e460a..d755cd303 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.html +++ b/apps/client/src/app/pages/pricing/pricing-page.html @@ -195,12 +195,9 @@

  • - Everything in -   - Basic, - plus: + Everything in Basic, plus:
  • diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index f339f807e..226ab4697 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -271,13 +271,6 @@ 87 - - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? @@ -718,13 +711,6 @@ 96 - - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries @@ -3104,6 +3090,13 @@ 172 + + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + trading stocks, ETFs or cryptocurrencies on multiple platforms diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index c941fa2f2..f834f7715 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -291,14 +291,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? 您真的要撤销此访问权限吗? @@ -767,14 +759,6 @@ 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 没有国家的 ETF @@ -1229,7 +1213,7 @@ Asset profile has been saved - Asset profile has been saved + 资产概况已保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 578 @@ -1245,7 +1229,7 @@ By - By + 预计到 apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -1357,7 +1341,7 @@ No auto-renewal on membership. - No auto-renewal on membership. + 会员资格不自动续订。 apps/client/src/app/components/user-account-membership/user-account-membership.html 74 @@ -1401,7 +1385,7 @@ Could not validate form - Could not validate form + 无法验证表单 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 554 @@ -2161,7 +2145,7 @@ Performance with currency effect - Performance with currency effect + 含货币影响的表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 134 @@ -2389,7 +2373,7 @@ this is projected to increase to - this is projected to increase to + 预计将增至 apps/client/src/app/pages/portfolio/fire/fire-page.html 147 @@ -2901,7 +2885,7 @@ Could not parse scraper configuration - Could not parse scraper configuration + 无法解析抓取器配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 509 @@ -3359,6 +3343,14 @@ 172 + + Everything in Basic, plus + 包含 Basic 所有功能,以及 + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + trading stocks, ETFs or cryptocurrencies on multiple platforms 在多个平台上交易股票、ETF 或加密货币 @@ -4137,7 +4129,7 @@ annual interest rate - annual interest rate + 年利率 apps/client/src/app/pages/portfolio/fire/fire-page.html 185 @@ -4369,7 +4361,7 @@ Free - 自由的 + 免费 apps/client/src/app/pages/pricing/pricing-page.html 86 @@ -4441,7 +4433,7 @@ Could not save asset profile - Could not save asset profile + 无法保存资产概况 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 588 @@ -5450,7 +5442,7 @@ Sign in with OpenID Connect - Sign in with OpenID Connect + 使用 OpenID Connect 登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 55 @@ -5562,7 +5554,7 @@ Authentication - Authentication + 认证 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 35 @@ -6699,7 +6691,7 @@ , based on your total assets of - 基于您总资产的 + 基于您总资产的 apps/client/src/app/pages/portfolio/fire/fire-page.html 96 @@ -6959,7 +6951,7 @@ , assuming a - , assuming a + , 假设一个 apps/client/src/app/pages/portfolio/fire/fire-page.html 174 @@ -7377,7 +7369,7 @@ Change with currency effect - Change with currency effect + 含货币影响的涨跌 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 115 @@ -7541,7 +7533,7 @@ Total amount - Total amount + 总金额 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 94 From 5e553f07102cb34b2d2d8006c2eed3c2d3f4498a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 25 Jan 2026 11:16:04 +0100 Subject: [PATCH 32/76] Task/upgrade prettier to version 3.8.1 (#6242) * Upgrade prettier to version 3.8.1 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00b4cb201..70a7a6180 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the language localization for Chinese (`zh`) +- Upgraded `prettier` from version `3.8.0` to `3.8.1` ## 2.233.0 - 2026-01-23 diff --git a/package-lock.json b/package-lock.json index f863292cc..322de2da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -141,7 +141,7 @@ "jest-environment-jsdom": "30.2.0", "jest-preset-angular": "16.0.0", "nx": "22.3.3", - "prettier": "3.8.0", + "prettier": "3.8.1", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.19.0", "react": "18.2.0", @@ -28255,9 +28255,9 @@ } }, "node_modules/prettier": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", - "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 940c674c6..a664d58d2 100644 --- a/package.json +++ b/package.json @@ -185,7 +185,7 @@ "jest-environment-jsdom": "30.2.0", "jest-preset-angular": "16.0.0", "nx": "22.3.3", - "prettier": "3.8.0", + "prettier": "3.8.1", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.19.0", "react": "18.2.0", From 30be7589b6db2031387f8e4bb2a1113cefcac67a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 25 Jan 2026 11:43:13 +0100 Subject: [PATCH 33/76] Task/refactor getDividends() from async to sync (#6222) * Refactor from async to sync --- apps/api/src/app/portfolio/portfolio.controller.ts | 2 +- apps/api/src/app/portfolio/portfolio.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 03796dad6..a5a1d95ee 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -329,7 +329,7 @@ export class PortfolioController { types: ['DIVIDEND'] }); - let dividends = await this.portfolioService.getDividends({ + let dividends = this.portfolioService.getDividends({ activities, groupBy }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 20016e67f..7db743a43 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -325,13 +325,13 @@ export class PortfolioService { }; } - public async getDividends({ + public getDividends({ activities, groupBy }: { activities: Activity[]; groupBy?: GroupBy; - }): Promise { + }): InvestmentItem[] { let dividends = activities.map(({ currency, date, value }) => { return { date: format(date, DATE_FORMAT), From dd9989112d5672ca94a5fba2f085880a4b782c48 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 25 Jan 2026 12:58:00 +0100 Subject: [PATCH 34/76] Task/update locales (#6247) * Update locales * Update changelog * Update translations --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.de.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.es.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.fr.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.it.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.ko.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.nl.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.pl.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.pt.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.tr.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.uk.xlf | 108 +++++++++++------------- apps/client/src/locales/messages.xlf | 86 +++++++++---------- apps/client/src/locales/messages.zh.xlf | 86 +++++++++---------- 14 files changed, 637 insertions(+), 724 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70a7a6180..4e7bbb40b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the language localization for Chinese (`zh`) +- Improved the language localization for German (`de`) - Upgraded `prettier` from version `3.8.0` to `3.8.1` ## 2.233.0 - 2026-01-23 diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index fc8a326c3..a6bec7df3 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -295,7 +295,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -358,14 +358,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Realment vol revocar aquest accés? @@ -878,14 +870,6 @@ 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETFs sense País @@ -1659,7 +1643,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -1675,7 +1659,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -2047,7 +2031,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -2123,7 +2107,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -2135,7 +2119,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -2235,7 +2219,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -2255,7 +2239,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -2271,7 +2255,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2287,7 +2271,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2299,7 +2283,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2315,7 +2299,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2399,7 +2383,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2527,7 +2511,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -3448,7 +3432,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3920,7 +3904,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4480,7 +4464,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4544,7 +4528,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -4576,7 +4560,7 @@ Rendiment absolut dels actius apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -4584,7 +4568,7 @@ Rendiment de l’actiu apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -4592,7 +4576,7 @@ Rendiment absolut de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -4600,7 +4584,7 @@ Rendiment de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -4608,7 +4592,7 @@ A dalt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -4616,7 +4600,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4624,7 +4608,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -4632,7 +4616,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -4640,7 +4624,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4648,7 +4632,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4656,7 +4640,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -4832,7 +4816,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4848,7 +4832,7 @@ Suport per correu electrònic i xat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4856,7 +4840,7 @@ Pagament únic, sense renovació automàtica. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4876,7 +4860,7 @@ És gratuït. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -5305,7 +5289,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5593,7 +5577,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5944,6 +5928,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satèl·lit @@ -6857,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6969,7 +6961,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7379,7 +7371,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 6c2bd7900..44ee607c3 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -42,7 +42,7 @@ bitte apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -89,14 +89,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Möchtest du diese Zugangsberechtigung wirklich widerrufen? @@ -742,7 +734,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -874,7 +866,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -926,7 +918,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -938,7 +930,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1122,7 +1114,7 @@ Performance mit Währungseffekt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -1262,7 +1254,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -1862,7 +1854,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -1870,7 +1862,7 @@ Gewinner apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -1878,7 +1870,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2346,7 +2338,7 @@ kontaktiere uns apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2762,7 +2754,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -3138,7 +3130,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -3146,7 +3138,7 @@ Suchst du nach einem Studentenrabatt? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3369,6 +3361,14 @@ 28 + + Everything in Basic, plus + Alles von Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satellit @@ -3422,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3438,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3454,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3470,7 +3470,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3518,7 +3518,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3602,7 +3602,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3618,7 +3618,7 @@ Einmalige Zahlung, keine automatische Erneuerung. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3638,7 +3638,7 @@ Es ist kostenlos. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3670,7 +3670,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3714,7 +3714,7 @@ E-Mail und Chat Support apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3766,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3790,7 +3790,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4034,7 +4034,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4042,7 +4042,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4489,14 +4489,6 @@ 43 - - Everything in - Alles von - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETFs ohne Länder @@ -5396,7 +5388,7 @@ mit deiner Universitäts-E-Mail-Adresse apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5580,7 +5572,7 @@ Fordere ihn an apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5900,7 +5892,7 @@ hier apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5916,7 +5908,7 @@ Absolute Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5924,7 +5916,7 @@ Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5932,7 +5924,7 @@ Absolute Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5940,7 +5932,7 @@ Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6881,7 +6873,7 @@ Wenn du die Eröffnung eines Kontos planst bei apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6993,7 +6985,7 @@ um unseren Empfehlungslink zu verwenden und eine Ghostfolio Premium-Mitgliedschaft für ein Jahr zu erhalten apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7403,7 +7395,7 @@ Änderung mit Währungseffekt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7567,7 +7559,7 @@ Gesamtbetrag apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7748,7 +7740,7 @@ inklusive API-Zugriff für apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index a1b6e45e4..121e9e949 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -43,7 +43,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -90,14 +90,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? ¿Quieres revocar el acceso concedido? @@ -727,7 +719,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -859,7 +851,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -911,7 +903,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -923,7 +915,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1107,7 +1099,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -1247,7 +1239,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -1847,7 +1839,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -1855,7 +1847,7 @@ Lo mejor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -1863,7 +1855,7 @@ Lo peor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2331,7 +2323,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2747,7 +2739,7 @@ Evolución cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -3123,7 +3115,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3163,7 +3155,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -3354,6 +3346,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satélite @@ -3407,7 +3407,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3423,7 +3423,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3439,7 +3439,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3455,7 +3455,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3503,7 +3503,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3587,7 +3587,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3603,7 +3603,7 @@ Pago único, sin renovación automática. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3623,7 +3623,7 @@ Es gratis. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3655,7 +3655,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3699,7 +3699,7 @@ Soporte a Traves de Email y Chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3743,7 +3743,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3767,7 +3767,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4011,7 +4011,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4019,7 +4019,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4466,14 +4466,6 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETFs sin países @@ -5373,7 +5365,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5557,7 +5549,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5877,7 +5869,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5893,7 +5885,7 @@ Rendimiento absoluto de los activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5901,7 +5893,7 @@ Rendimiento de activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5909,7 +5901,7 @@ Rendimiento absoluto de divisas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5917,7 +5909,7 @@ Rendimiento de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6858,7 +6850,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6970,7 +6962,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7380,7 +7372,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7544,7 +7536,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7725,7 +7717,7 @@ con acceso a la API para apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8024,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8036,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 05dc0f7e3..0da1c3f6a 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -34,7 +34,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -81,14 +81,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Voulez-vous vraiment révoquer cet accès ? @@ -1142,7 +1134,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1194,7 +1186,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1206,7 +1198,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1354,7 +1346,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -1542,7 +1534,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2394,7 +2386,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -2458,7 +2450,7 @@ Haut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -2466,7 +2458,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2474,7 +2466,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -2482,7 +2474,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -2490,7 +2482,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -2594,7 +2586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -2822,7 +2814,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -3353,6 +3345,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satellite @@ -3406,7 +3406,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3422,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3438,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3454,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3502,7 +3502,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3586,7 +3586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3602,7 +3602,7 @@ Paiement unique, sans auto-renouvellement. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3622,7 +3622,7 @@ C’est gratuit. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3654,7 +3654,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3698,7 +3698,7 @@ Support par E-mail et Tchat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3742,7 +3742,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3766,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4010,7 +4010,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4018,7 +4018,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4465,14 +4465,6 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF sans Pays @@ -5372,7 +5364,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5556,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5876,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5892,7 +5884,7 @@ Performance des Actifs en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5900,7 +5892,7 @@ Performance des Actifs apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5908,7 +5900,7 @@ Performance des devises en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5916,7 +5908,7 @@ Performance des devises apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6857,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6969,7 +6961,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7379,7 +7371,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ avec accès API pour apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 26545f435..746e1fbd1 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -43,7 +43,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -90,14 +90,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Vuoi davvero revocare l’accesso concesso? @@ -727,7 +719,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -859,7 +851,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -911,7 +903,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -923,7 +915,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1107,7 +1099,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -1247,7 +1239,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -1847,7 +1839,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -1855,7 +1847,7 @@ In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -1863,7 +1855,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2331,7 +2323,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2747,7 +2739,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -3123,7 +3115,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3163,7 +3155,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -3354,6 +3346,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satellite @@ -3407,7 +3407,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3423,7 +3423,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3439,7 +3439,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3455,7 +3455,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3503,7 +3503,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3587,7 +3587,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3603,7 +3603,7 @@ Pagamento una tantum, senza rinnovo automatico. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3623,7 +3623,7 @@ È gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3655,7 +3655,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3699,7 +3699,7 @@ Supporto via email e chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3743,7 +3743,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3767,7 +3767,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4011,7 +4011,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4019,7 +4019,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4466,14 +4466,6 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF senza paesi @@ -5373,7 +5365,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5557,7 +5549,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5877,7 +5869,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5893,7 +5885,7 @@ Rendimento assoluto dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5901,7 +5893,7 @@ Rendimento dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5909,7 +5901,7 @@ Rendimento assoluto della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5917,7 +5909,7 @@ Rendimento della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6858,7 +6850,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6970,7 +6962,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7380,7 +7372,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7544,7 +7536,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7725,7 +7717,7 @@ con accesso API per apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8024,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8036,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 05f02c87b..67443706b 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -244,7 +244,7 @@ 부탁드립니다 apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -291,14 +291,6 @@ 87 - - plus - 추가로 - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? 이 부여된 접근 권한을 정말로 회수하시겠습니까? @@ -767,14 +759,6 @@ 96 - - Everything in - 다음 통화 기준으로 모두 표시 - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 국가 정보 없는 ETF @@ -1776,7 +1760,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1840,7 +1824,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1852,7 +1836,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1996,7 +1980,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -2016,7 +2000,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -2032,7 +2016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2048,7 +2032,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2060,7 +2044,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2076,7 +2060,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2132,7 +2116,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -2188,7 +2172,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2276,7 +2260,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -3116,7 +3100,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3572,7 +3556,7 @@ 대학 이메일 주소로 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4124,7 +4108,7 @@ 학생 할인을 찾고 계십니까? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4196,7 +4180,7 @@ 상위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -4204,7 +4188,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4212,7 +4196,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -4220,7 +4204,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -4228,7 +4212,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4236,7 +4220,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4244,7 +4228,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -4420,7 +4404,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4436,7 +4420,7 @@ 이메일 및 채팅 지원 apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4452,7 +4436,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4460,7 +4444,7 @@ 일회성 결제, 자동 갱신 없음. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4480,7 +4464,7 @@ 무료입니다. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4901,7 +4885,7 @@ 요청하세요 apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5069,7 +5053,7 @@ 저희에게 연락주세요 apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5396,6 +5380,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite 위성 @@ -5877,7 +5869,7 @@ 절대적인 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5893,7 +5885,7 @@ 절대자산성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5925,7 +5917,7 @@ 여기 apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5933,7 +5925,7 @@ 자산 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5941,7 +5933,7 @@ 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6898,7 +6890,7 @@ 에서 계좌를 개설할 계획이라면 apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6986,7 +6978,7 @@ 추천 링크를 사용하고 1년 동안 Ghostfolio 프리미엄 멤버십을 얻으려면 apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7404,7 +7396,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7568,7 +7560,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7749,7 +7741,7 @@ 다음에 대한 API 액세스 권한이 있는 apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8024,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8036,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 773937956..d7d0b71e8 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -42,7 +42,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -89,14 +89,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Wil je deze verleende toegang echt intrekken? @@ -726,7 +718,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -858,7 +850,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -910,7 +902,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -922,7 +914,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1106,7 +1098,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -1246,7 +1238,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -1846,7 +1838,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -1854,7 +1846,7 @@ Winnaars apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -1862,7 +1854,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2330,7 +2322,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2746,7 +2738,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -3122,7 +3114,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3162,7 +3154,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -3353,6 +3345,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satelliet @@ -3406,7 +3406,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3422,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3438,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3454,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3502,7 +3502,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3586,7 +3586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3602,7 +3602,7 @@ Eenmalige betaling, geen automatische verlenging. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3622,7 +3622,7 @@ Het is gratis. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3654,7 +3654,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3698,7 +3698,7 @@ Ondersteuning via e-mail en chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3742,7 +3742,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3766,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4010,7 +4010,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4018,7 +4018,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4465,14 +4465,6 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF’s zonder Landen @@ -5372,7 +5364,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5556,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5876,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5892,7 +5884,7 @@ Absolute Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5900,7 +5892,7 @@ Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5908,7 +5900,7 @@ Absolute Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5916,7 +5908,7 @@ Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6857,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6969,7 +6961,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7379,7 +7371,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ met API toegang tot apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index f4d14b81e..a94a76d2f 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -243,7 +243,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -290,14 +290,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Czy na pewno chcesz cofnąć przyznany dostęp? @@ -758,14 +750,6 @@ 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF-y bez Krajów @@ -1743,7 +1727,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1807,7 +1791,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1819,7 +1803,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1963,7 +1947,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1983,7 +1967,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -1999,7 +1983,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2015,7 +1999,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2027,7 +2011,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2043,7 +2027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2099,7 +2083,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -2155,7 +2139,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2243,7 +2227,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -3083,7 +3067,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3539,7 +3523,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4091,7 +4075,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4163,7 +4147,7 @@ Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -4171,7 +4155,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4179,7 +4163,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -4187,7 +4171,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -4195,7 +4179,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4203,7 +4187,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4211,7 +4195,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -4387,7 +4371,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4403,7 +4387,7 @@ Wsparcie przez E-mail i Czat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4419,7 +4403,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4427,7 +4411,7 @@ Płatność jednorazowa, bez automatycznego odnawiania. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4447,7 +4431,7 @@ Jest bezpłatny. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4856,7 +4840,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5000,7 +4984,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5327,6 +5311,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satelita @@ -5876,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5892,7 +5884,7 @@ Łączny wynik aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5900,7 +5892,7 @@ Wyniki aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5908,7 +5900,7 @@ Łączny wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5916,7 +5908,7 @@ Wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6857,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6969,7 +6961,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7379,7 +7371,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ z dostępem API dla apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 1e92933dc..2bcd7c401 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -34,7 +34,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -81,14 +81,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Pretende realmente revogar este acesso concedido? @@ -1026,7 +1018,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1078,7 +1070,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1090,7 +1082,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1350,7 +1342,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -1538,7 +1530,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2374,7 +2366,7 @@ Topo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -2382,7 +2374,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2390,7 +2382,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -2398,7 +2390,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -2530,7 +2522,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -2722,7 +2714,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -3186,7 +3178,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3226,7 +3218,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -3353,6 +3345,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satélite @@ -3406,7 +3406,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3422,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3438,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3454,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3502,7 +3502,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3586,7 +3586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3602,7 +3602,7 @@ Pagamento único, sem renovação automática. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3622,7 +3622,7 @@ É gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3654,7 +3654,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3698,7 +3698,7 @@ Suporte por Email e Chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3742,7 +3742,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3766,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4010,7 +4010,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4018,7 +4018,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4465,14 +4465,6 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETFs sem países @@ -5372,7 +5364,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5556,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5876,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5892,7 +5884,7 @@ Desempenho absoluto de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5900,7 +5892,7 @@ Desempenho de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5908,7 +5900,7 @@ Desempenho absoluto da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5916,7 +5908,7 @@ Desempenho da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6857,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6969,7 +6961,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7379,7 +7371,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index cdbfaec8f..421ef3855 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -215,7 +215,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -262,14 +262,6 @@ 87 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Bu erişim iznini geri almayı gerçekten istiyor musunuz? @@ -722,14 +714,6 @@ 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries Ülkesi Olmayan ETF’ler @@ -1611,7 +1595,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1663,7 +1647,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1675,7 +1659,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1831,7 +1815,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1851,7 +1835,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -1867,7 +1851,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -1883,7 +1867,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -1895,7 +1879,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -1911,7 +1895,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -1967,7 +1951,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -2023,7 +2007,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2659,7 +2643,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3575,7 +3559,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3647,7 +3631,7 @@ Üst apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -3655,7 +3639,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -3663,7 +3647,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -3671,7 +3655,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -3679,7 +3663,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -3687,7 +3671,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -3695,7 +3679,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -3871,7 +3855,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3887,7 +3871,7 @@ E-posta ve Sohbet Desteği apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3903,7 +3887,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3911,7 +3895,7 @@ Tek seferlik ödeme, otomatik yenileme yok. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3931,7 +3915,7 @@ Ücretsiz. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4428,7 +4412,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -4696,7 +4680,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5023,6 +5007,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Uydu @@ -5380,7 +5372,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5556,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5876,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5892,7 +5884,7 @@ Mutlak Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5900,7 +5892,7 @@ Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5908,7 +5900,7 @@ Mutlak Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5916,7 +5908,7 @@ Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6857,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6969,7 +6961,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7379,7 +7371,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ API erişimi için apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index a7d0d1ca3..2fc389030 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -295,7 +295,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -374,14 +374,6 @@ 99 - - plus - plus - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? Ви дійсно хочете відкликати цей наданий доступ? @@ -858,14 +850,6 @@ 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF без країн @@ -1551,7 +1535,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1771,7 +1755,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -1787,7 +1771,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -1831,7 +1815,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -2215,7 +2199,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -2227,7 +2211,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -2439,7 +2423,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -2459,7 +2443,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -2475,7 +2459,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2491,7 +2475,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2503,7 +2487,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2519,7 +2503,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2611,7 +2595,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2815,7 +2799,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -3728,7 +3712,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -4200,7 +4184,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4796,7 +4780,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4860,7 +4844,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -4892,7 +4876,7 @@ Абсолютна прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -4900,7 +4884,7 @@ Прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -4908,7 +4892,7 @@ Абсолютна прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -4916,7 +4900,7 @@ Прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -4924,7 +4908,7 @@ Топ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -4932,7 +4916,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4940,7 +4924,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -4948,7 +4932,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -4956,7 +4940,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4964,7 +4948,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4972,7 +4956,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -5188,7 +5172,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -5204,7 +5188,7 @@ Підтримка електронної пошти та чату apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -5212,7 +5196,7 @@ Разова оплата, без автоматичного поновлення. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -5232,7 +5216,7 @@ Це безкоштовно. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -5847,7 +5831,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -6035,7 +6019,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -6323,7 +6307,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -6790,6 +6774,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Супутник @@ -7387,7 +7379,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7543,7 +7535,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7724,7 +7716,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8023,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8035,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 226ab4697..a6907698d 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -228,7 +228,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -1617,7 +1617,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1675,7 +1675,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1686,7 +1686,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1815,7 +1815,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1834,7 +1834,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -1849,7 +1849,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -1864,7 +1864,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -1875,7 +1875,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -1890,7 +1890,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -1943,7 +1943,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -1994,7 +1994,7 @@ Performance with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2073,7 +2073,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2846,7 +2846,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3090,7 +3090,7 @@ 172 - + Everything in Basic, plus apps/client/src/app/pages/pricing/pricing-page.html @@ -3262,7 +3262,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -3759,7 +3759,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3825,49 +3825,49 @@ Top apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -4027,7 +4027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4041,7 +4041,7 @@ Email and Chat Support apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4056,14 +4056,14 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 One-time payment, no auto-renewal. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4081,7 +4081,7 @@ It’s free. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4463,7 +4463,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -4612,7 +4612,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5341,7 +5341,7 @@ Absolute Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5355,7 +5355,7 @@ Absolute Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5385,21 +5385,21 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6260,7 +6260,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6338,7 +6338,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -6716,7 +6716,7 @@ Change with currency effect apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -6862,7 +6862,7 @@ Total amount apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7022,7 +7022,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7268,7 +7268,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -7279,7 +7279,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index f834f7715..7ec9d85a0 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -244,7 +244,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -1736,7 +1736,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1800,7 +1800,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 257 + 259 @@ -1812,7 +1812,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 276 + 278 @@ -1956,7 +1956,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1976,7 +1976,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -1992,7 +1992,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2008,7 +2008,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2020,7 +2020,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2036,7 +2036,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2092,7 +2092,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -2148,7 +2148,7 @@ 含货币影响的表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 134 + 135 @@ -2236,7 +2236,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -3076,7 +3076,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3343,7 +3343,7 @@ 172 - + Everything in Basic, plus 包含 Basic 所有功能,以及 @@ -3540,7 +3540,7 @@ 使用您的学校电子邮件地址 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4092,7 +4092,7 @@ 寻找学生折扣? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4164,7 +4164,7 @@ 顶部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 303 + 305 @@ -4172,7 +4172,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4180,7 +4180,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 407 @@ -4188,7 +4188,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 432 + 434 @@ -4196,7 +4196,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 453 + 455 @@ -4204,7 +4204,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 462 + 464 @@ -4212,7 +4212,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 489 + 491 @@ -4388,7 +4388,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4404,7 +4404,7 @@ 电子邮件和聊天支持 apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4420,7 +4420,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4428,7 +4428,7 @@ 一次性付款,无自动续订。 apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4448,7 +4448,7 @@ 免费。 apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4869,7 +4869,7 @@ 请求它 apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5037,7 +5037,7 @@ 联系我们 apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5845,7 +5845,7 @@ 绝对货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 209 + 211 @@ -5861,7 +5861,7 @@ 绝对资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 166 + 168 @@ -5893,7 +5893,7 @@ 这里 apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5901,7 +5901,7 @@ 资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 188 + 190 @@ -5909,7 +5909,7 @@ 货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 234 + 236 @@ -6850,7 +6850,7 @@ 如果您计划开通账户在 apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6962,7 +6962,7 @@ 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7372,7 +7372,7 @@ 含货币影响的涨跌 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 115 + 116 @@ -7536,7 +7536,7 @@ 总金额 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 94 + 95 @@ -7717,7 +7717,7 @@ 包含 API 访问权限,适用于 apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -8016,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8028,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 From 53be1414605a1d218906dcee75392e6e6bc9dc19 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Mon, 26 Jan 2026 01:00:26 +0700 Subject: [PATCH 35/76] Feature/enable strict null checks in libs/common (#6250) * feat(ts): enable strict null checks in libs/common * feat(lint): enable prefer-nullish-coalescing * feat(lib): resolve errors * fix(lib): revert changes on DateRange type --- libs/common/eslint.config.cjs | 4 ++- libs/common/src/lib/chart-helper.ts | 26 ++++++++++++------- libs/common/src/lib/class-transformer.ts | 2 +- libs/common/src/lib/helper.ts | 8 +++--- .../public-portfolio-response.interface.ts | 2 +- .../interfaces/internal-route.interface.ts | 2 +- libs/common/src/lib/utils/form.util.ts | 4 +-- .../src/lib/validators/is-currency-code.ts | 2 +- libs/common/tsconfig.json | 3 ++- 9 files changed, 31 insertions(+), 22 deletions(-) diff --git a/libs/common/eslint.config.cjs b/libs/common/eslint.config.cjs index a78dde897..990c264b4 100644 --- a/libs/common/eslint.config.cjs +++ b/libs/common/eslint.config.cjs @@ -18,7 +18,9 @@ module.exports = [ { files: ['**/*.ts', '**/*.tsx'], // Override or add rules here - rules: {} + rules: { + '@typescript-eslint/prefer-nullish-coalescing': 'error' + } }, { files: ['**/*.js', '**/*.jsx'], diff --git a/libs/common/src/lib/chart-helper.ts b/libs/common/src/lib/chart-helper.ts index 697f39467..da6473645 100644 --- a/libs/common/src/lib/chart-helper.ts +++ b/libs/common/src/lib/chart-helper.ts @@ -1,4 +1,10 @@ -import { Chart, TooltipPosition } from 'chart.js'; +import type { ElementRef } from '@angular/core'; +import type { + Chart, + ChartTypeRegistry, + Plugin, + TooltipPosition +} from 'chart.js'; import { format } from 'date-fns'; import { @@ -34,12 +40,12 @@ export function getTooltipOptions({ locale = getLocale(), unit = '' }: { - colorScheme?: ColorScheme; + colorScheme: ColorScheme; currency?: string; groupBy?: GroupBy; locale?: string; unit?: string; -} = {}) { +}) { return { backgroundColor: getBackgroundColor(colorScheme), bodyColor: `rgb(${getTextColor(colorScheme)})`, @@ -47,7 +53,7 @@ export function getTooltipOptions({ borderColor: `rgba(${getTextColor(colorScheme)}, 0.1)`, callbacks: { label: (context) => { - let label = context.dataset.label || ''; + let label = context.dataset.label ?? ''; if (label) { label += ': '; } @@ -98,10 +104,10 @@ export function getTooltipPositionerMapTop( }; } -export function getVerticalHoverLinePlugin( - chartCanvas, - colorScheme?: ColorScheme -) { +export function getVerticalHoverLinePlugin( + chartCanvas: ElementRef, + colorScheme: ColorScheme +): Plugin { return { afterDatasetsDraw: (chart, _, options) => { const active = chart.getActiveElements(); @@ -110,8 +116,8 @@ export function getVerticalHoverLinePlugin( return; } - const color = options.color || `rgb(${getTextColor(colorScheme)})`; - const width = options.width || 1; + const color = options.color ?? `rgb(${getTextColor(colorScheme)})`; + const width = options.width ?? 1; const { chartArea: { bottom, top } diff --git a/libs/common/src/lib/class-transformer.ts b/libs/common/src/lib/class-transformer.ts index 328e2bf9e..60e0eab60 100644 --- a/libs/common/src/lib/class-transformer.ts +++ b/libs/common/src/lib/class-transformer.ts @@ -16,7 +16,7 @@ export function transformToMapOfBig({ return mapOfBig; } -export function transformToBig({ value }: { value: string }): Big { +export function transformToBig({ value }: { value: string }): Big | null { if (value === null) { return null; } diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index cb4c0e1b7..9ee7d6220 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -144,7 +144,7 @@ export function extractNumberFromString({ }: { locale?: string; value: string; -}): number { +}): number | undefined { try { // Remove non-numeric characters (excluding international formatting characters) const numericValue = value.replace(/[^\d.,'’\s]/g, ''); @@ -273,7 +273,7 @@ export function getNumberFormatDecimal(aLocale?: string) { return formatObject.find((object) => { return object.type === 'decimal'; - }).value; + })?.value; } export function getNumberFormatGroup(aLocale = getLocale()) { @@ -283,7 +283,7 @@ export function getNumberFormatGroup(aLocale = getLocale()) { return formatObject.find((object) => { return object.type === 'group'; - }).value; + })?.value; } export function getStartOfUtcDate(aDate: Date) { @@ -394,7 +394,7 @@ export function isRootCurrency(aCurrency: string) { }); } -export function parseDate(date: string): Date { +export function parseDate(date: string): Date | undefined { if (!date) { return undefined; } diff --git a/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts b/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts index cb06800be..4a087ad16 100644 --- a/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts @@ -39,7 +39,7 @@ export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 { })[]; markets: { [key in Market]: Pick< - PortfolioDetails['markets'][key], + NonNullable[key], 'id' | 'valueInPercentage' >; }; diff --git a/libs/common/src/lib/routes/interfaces/internal-route.interface.ts b/libs/common/src/lib/routes/interfaces/internal-route.interface.ts index 02f205979..f08cf8b5c 100644 --- a/libs/common/src/lib/routes/interfaces/internal-route.interface.ts +++ b/libs/common/src/lib/routes/interfaces/internal-route.interface.ts @@ -2,7 +2,7 @@ import { User } from '@ghostfolio/common/interfaces'; export interface InternalRoute { excludeFromAssistant?: boolean | ((aUser: User) => boolean); - path: string; + path?: string; routerLink: string[]; subRoutes?: Record; title: string; diff --git a/libs/common/src/lib/utils/form.util.ts b/libs/common/src/lib/utils/form.util.ts index 425aa4699..b510e6215 100644 --- a/libs/common/src/lib/utils/form.util.ts +++ b/libs/common/src/lib/utils/form.util.ts @@ -29,7 +29,7 @@ export async function validateObjectForForm({ if (formControl) { formControl.setErrors({ - validationError: Object.values(constraints)[0] + validationError: Object.values(constraints ?? {})[0] }); } @@ -37,7 +37,7 @@ export async function validateObjectForForm({ if (formControlInCustomCurrency) { formControlInCustomCurrency.setErrors({ - validationError: Object.values(constraints)[0] + validationError: Object.values(constraints ?? {})[0] }); } } diff --git a/libs/common/src/lib/validators/is-currency-code.ts b/libs/common/src/lib/validators/is-currency-code.ts index 76c6f4fe2..52d99816b 100644 --- a/libs/common/src/lib/validators/is-currency-code.ts +++ b/libs/common/src/lib/validators/is-currency-code.ts @@ -9,7 +9,7 @@ import { import { isISO4217CurrencyCode } from 'class-validator'; export function IsCurrencyCode(validationOptions?: ValidationOptions) { - return function (object: Object, propertyName: string) { + return function (object: object, propertyName: string) { registerDecorator({ propertyName, constraints: [], diff --git a/libs/common/tsconfig.json b/libs/common/tsconfig.json index a14e0fc44..2b4603b71 100644 --- a/libs/common/tsconfig.json +++ b/libs/common/tsconfig.json @@ -12,6 +12,7 @@ ], "compilerOptions": { "module": "preserve", - "lib": ["dom", "es2022"] + "lib": ["dom", "es2022"], + "strictNullChecks": true } } From a1986e6daa03c41b708df2ce29893dde67e9e732 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Mon, 26 Jan 2026 02:41:01 +0700 Subject: [PATCH 36/76] Task/upgrade to Nx 22.4 (#6249) * Upgrade Nx from version 22.3.3 to 22.4.1 * Update changelog --- CHANGELOG.md | 2 + package-lock.json | 4006 +++++++++++++++++++++++---------------------- package.json | 62 +- 3 files changed, 2118 insertions(+), 1952 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e7bbb40b..7805ad11d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) +- Upgraded `angular` from version `21.0.6` to `21.1.1` +- Upgraded `Nx` from version `22.3.3` to `22.4.1` - Upgraded `prettier` from version `3.8.0` to `3.8.1` ## 2.233.0 - 2026-01-23 diff --git a/package-lock.json b/package-lock.json index 322de2da7..7d6a8ee64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,17 +10,17 @@ "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { - "@angular/animations": "21.0.6", - "@angular/cdk": "21.0.5", - "@angular/common": "21.0.6", - "@angular/compiler": "21.0.6", - "@angular/core": "21.0.6", - "@angular/forms": "21.0.6", - "@angular/material": "21.0.5", - "@angular/platform-browser": "21.0.6", - "@angular/platform-browser-dynamic": "21.0.6", - "@angular/router": "21.0.6", - "@angular/service-worker": "21.0.6", + "@angular/animations": "21.1.1", + "@angular/cdk": "21.1.1", + "@angular/common": "21.1.1", + "@angular/compiler": "21.1.1", + "@angular/core": "21.1.1", + "@angular/forms": "21.1.1", + "@angular/material": "21.1.1", + "@angular/platform-browser": "21.1.1", + "@angular/platform-browser-dynamic": "21.1.1", + "@angular/router": "21.1.1", + "@angular/service-worker": "21.1.1", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.5", @@ -92,32 +92,32 @@ "zone.js": "0.16.0" }, "devDependencies": { - "@angular-devkit/build-angular": "21.0.4", - "@angular-devkit/core": "21.0.4", - "@angular-devkit/schematics": "21.0.4", + "@angular-devkit/build-angular": "21.1.1", + "@angular-devkit/core": "21.1.1", + "@angular-devkit/schematics": "21.1.1", "@angular-eslint/eslint-plugin": "21.1.0", "@angular-eslint/eslint-plugin-template": "21.1.0", "@angular-eslint/template-parser": "21.1.0", - "@angular/cli": "21.0.4", - "@angular/compiler-cli": "21.0.6", - "@angular/language-service": "21.0.6", - "@angular/localize": "21.0.6", - "@angular/pwa": "21.0.4", + "@angular/cli": "21.1.1", + "@angular/compiler-cli": "21.1.1", + "@angular/language-service": "21.1.1", + "@angular/localize": "21.1.1", + "@angular/pwa": "21.1.1", "@eslint/eslintrc": "3.3.1", "@eslint/js": "9.35.0", "@nestjs/schematics": "11.0.9", "@nestjs/testing": "11.1.8", - "@nx/angular": "22.3.3", - "@nx/eslint-plugin": "22.3.3", - "@nx/jest": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/nest": "22.3.3", - "@nx/node": "22.3.3", - "@nx/storybook": "22.3.3", - "@nx/web": "22.3.3", - "@nx/workspace": "22.3.3", - "@schematics/angular": "21.0.4", + "@nx/angular": "22.4.1", + "@nx/eslint-plugin": "22.4.1", + "@nx/jest": "22.4.1", + "@nx/js": "22.4.1", + "@nx/module-federation": "22.4.1", + "@nx/nest": "22.4.1", + "@nx/node": "22.4.1", + "@nx/storybook": "22.4.1", + "@nx/web": "22.4.1", + "@nx/workspace": "22.4.1", + "@schematics/angular": "21.1.1", "@storybook/addon-docs": "10.1.10", "@storybook/angular": "10.1.10", "@trivago/prettier-plugin-sort-imports": "5.2.2", @@ -140,7 +140,7 @@ "jest": "30.2.0", "jest-environment-jsdom": "30.2.0", "jest-preset-angular": "16.0.0", - "nx": "22.3.3", + "nx": "22.4.1", "prettier": "3.8.1", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.19.0", @@ -245,57 +245,57 @@ } }, "node_modules/@algolia/abtesting": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.6.1.tgz", - "integrity": "sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.12.2.tgz", + "integrity": "sha512-oWknd6wpfNrmRcH0vzed3UPX0i17o4kYLM5OMITyMVM2xLgaRbIafoxL0e8mcrNNb0iORCJA0evnNDKRYth5WQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.40.1.tgz", - "integrity": "sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.46.2.tgz", + "integrity": "sha512-oRSUHbylGIuxrlzdPA8FPJuwrLLRavOhAmFGgdAvMcX47XsyM+IOGa9tc7/K5SPvBqn4nhppOCEz7BrzOPWc4A==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.40.1.tgz", - "integrity": "sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.46.2.tgz", + "integrity": "sha512-EPBN2Oruw0maWOF4OgGPfioTvd+gmiNwx0HmD9IgmlS+l75DatcBkKOPNJN+0z3wBQWUO5oq602ATxIfmTQ8bA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.40.1.tgz", - "integrity": "sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.46.2.tgz", + "integrity": "sha512-Hj8gswSJNKZ0oyd0wWissqyasm+wTz1oIsv5ZmLarzOZAp3vFEda8bpDQ8PUhO+DfkbiLyVnAxsPe4cGzWtqkg==", "dev": true, "license": "MIT", "engines": { @@ -303,151 +303,151 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.40.1.tgz", - "integrity": "sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.46.2.tgz", + "integrity": "sha512-6dBZko2jt8FmQcHCbmNLB0kCV079Mx/DJcySTL3wirgDBUH7xhY1pOuUTLMiGkqM5D8moVZTvTdRKZUJRkrwBA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.40.1.tgz", - "integrity": "sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.46.2.tgz", + "integrity": "sha512-1waE2Uqh/PHNeDXGn/PM/WrmYOBiUGSVxAWqiJIj73jqPqvfzZgzdakHscIVaDl6Cp+j5dwjsZ5LCgaUr6DtmA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.40.1.tgz", - "integrity": "sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.46.2.tgz", + "integrity": "sha512-EgOzTZkyDcNL6DV0V/24+oBJ+hKo0wNgyrOX/mePBM9bc9huHxIY2352sXmoZ648JXXY2x//V1kropF/Spx83w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.40.1.tgz", - "integrity": "sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.2.tgz", + "integrity": "sha512-ZsOJqu4HOG5BlvIFnMU0YKjQ9ZI6r3C31dg2jk5kMWPSdhJpYL9xa5hEe7aieE+707dXeMI4ej3diy6mXdZpgA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.40.1.tgz", - "integrity": "sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==", + "version": "1.46.2", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.46.2.tgz", + "integrity": "sha512-1Uw2OslTWiOFDtt83y0bGiErJYy5MizadV0nHnOoHFWMoDqWW0kQoMFI65pXqRSkVvit5zjXSLik2xMiyQJDWQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.40.1.tgz", - "integrity": "sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==", + "version": "1.46.2", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.46.2.tgz", + "integrity": "sha512-xk9f+DPtNcddWN6E7n1hyNNsATBCHIqAvVGG2EAGHJc4AFYL18uM/kMTiOKXE/LKDPyy1JhIerrh9oYb7RBrgw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.40.1.tgz", - "integrity": "sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.46.2.tgz", + "integrity": "sha512-NApbTPj9LxGzNw4dYnZmj2BoXiAc8NmbbH6qBNzQgXklGklt/xldTvu+FACN6ltFsTzoNU6j2mWNlHQTKGC5+Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/client-common": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz", - "integrity": "sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.2.tgz", + "integrity": "sha512-ekotpCwpSp033DIIrsTpYlGUCF6momkgupRV/FA3m62SreTSZUKjgK6VTNyG7TtYfq9YFm/pnh65bATP/ZWJEg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1" + "@algolia/client-common": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz", - "integrity": "sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.46.2.tgz", + "integrity": "sha512-gKE+ZFi/6y7saTr34wS0SqYFDcjHW4Wminv8PDZEi0/mE99+hSrbKgJWxo2ztb5eqGirQTgIh1AMVacGGWM1iw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1" + "@algolia/client-common": "5.46.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz", - "integrity": "sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.46.2.tgz", + "integrity": "sha512-ciPihkletp7ttweJ8Zt+GukSVLp2ANJHU+9ttiSxsJZThXc4Y2yJ8HGVWesW5jN1zrsZsezN71KrMx/iZsOYpg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.40.1" + "@algolia/client-common": "5.46.2" }, "engines": { "node": ">= 14.0.0" @@ -467,14 +467,17 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2100.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2100.4.tgz", - "integrity": "sha512-tKtb0I8AU59m75JjHlL1XEsoPxVaEWhnHKeesDpk49RNm0sVqWnfXesse8IXqdVds0Hpjisc3In7j4xKbigfXg==", + "version": "0.2101.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2101.1.tgz", + "integrity": "sha512-8x7hKcFs3hnpDaIj9fyzinh4X74oQaMxMsZzBf4dBL7EwokjPIf2fadQsZd8a5M+Ja4tIgTnXH9ySyaRFWGNXA==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.0.4", + "@angular-devkit/core": "21.1.1", "rxjs": "7.8.2" }, + "bin": { + "architect": "bin/cli.js" + }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", @@ -491,35 +494,35 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.0.4.tgz", - "integrity": "sha512-w81o1AYUloBLTyaBjGP5V2N4l6/zLpifc6kdu9QATNEhzZOoFdUG+vUiX4GOKBIXNV1OltnwvOfWsE9auJcNQA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.1.1.tgz", + "integrity": "sha512-h882zE4NpfXQIzCKq6cXq4FBTd43rLCLX5RZL/sa38cFVNDp51HNn+rU9l4PeXQOKllq4CVmj9ePgVecyMpr2Q==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2100.4", - "@angular-devkit/build-webpack": "0.2100.4", - "@angular-devkit/core": "21.0.4", - "@angular/build": "21.0.4", - "@babel/core": "7.28.4", - "@babel/generator": "7.28.3", + "@angular-devkit/architect": "0.2101.1", + "@angular-devkit/build-webpack": "0.2101.1", + "@angular-devkit/core": "21.1.1", + "@angular/build": "21.1.1", + "@babel/core": "7.28.5", + "@babel/generator": "7.28.5", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", "@babel/plugin-transform-async-generator-functions": "7.28.0", "@babel/plugin-transform-async-to-generator": "7.27.1", - "@babel/plugin-transform-runtime": "7.28.3", - "@babel/preset-env": "7.28.3", + "@babel/plugin-transform-runtime": "7.28.5", + "@babel/preset-env": "7.28.5", "@babel/runtime": "7.28.4", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "21.0.4", + "@ngtools/webpack": "21.1.1", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.21", + "autoprefixer": "10.4.23", "babel-loader": "10.0.0", "browserslist": "^4.26.0", "copy-webpack-plugin": "13.0.1", "css-loader": "7.1.2", - "esbuild-wasm": "0.26.0", + "esbuild-wasm": "0.27.2", "http-proxy-middleware": "3.0.5", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", @@ -529,24 +532,24 @@ "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", "mini-css-extract-plugin": "2.9.4", - "open": "10.2.0", + "open": "11.0.0", "ora": "9.0.0", "picomatch": "4.0.3", - "piscina": "5.1.3", + "piscina": "5.1.4", "postcss": "8.5.6", "postcss-loader": "8.2.0", "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", - "sass": "1.93.2", - "sass-loader": "16.0.5", + "sass": "1.97.1", + "sass-loader": "16.0.6", "semver": "7.7.3", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.44.0", + "terser": "5.44.1", "tinyglobby": "0.2.15", "tree-kill": "1.2.2", "tslib": "2.8.1", - "webpack": "5.104.0", + "webpack": "5.104.1", "webpack-dev-middleware": "7.4.5", "webpack-dev-server": "5.2.2", "webpack-merge": "6.0.1", @@ -558,7 +561,7 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.26.0" + "esbuild": "0.27.2" }, "peerDependencies": { "@angular/compiler-cli": "^21.0.0", @@ -567,7 +570,7 @@ "@angular/platform-browser": "^21.0.0", "@angular/platform-server": "^21.0.0", "@angular/service-worker": "^21.0.0", - "@angular/ssr": "^21.0.4", + "@angular/ssr": "^21.1.1", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^30.2.0", @@ -623,6 +626,27 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -646,14 +670,31 @@ "tslib": "^2.1.0" } }, + "node_modules/@angular-devkit/build-angular/node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.2100.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2100.4.tgz", - "integrity": "sha512-tiWmC6AinrfDLarhGHrPuqQN6hLkGzrXBhhiC0ntzwK8sBlu9d44guxXAzR3Wl9sBnHuOPeoNZ0t6x/H6FzBUA==", + "version": "0.2101.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2101.1.tgz", + "integrity": "sha512-gX5/4RT/1ZO6kyo6bEi8uSxZ5oqdolsi87PchKRJfFir2m8u101qs3H07o4KFgG4YlnPUwyHET3ae5YVhS/0xg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2100.4", + "@angular-devkit/architect": "0.2101.1", "rxjs": "7.8.2" }, "engines": { @@ -677,9 +718,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.0.4.tgz", - "integrity": "sha512-Mbze8tMtBs7keSOx4UIR9utLQs1uSiGjfTaOkCu/dbBEiG6umopy1OlUCvHiHyeiYqh+wR0yiGtTS+Cexo5iLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.1.1.tgz", + "integrity": "sha512-rCwfBUemyRoAfrO4c85b49lkPiD5WljWE+IK7vjUNIFFf4TXOS4tg4zxqopUDVE4zEjXORa5oHCEc5HCerjn1g==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -695,7 +736,7 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^4.0.0" + "chokidar": "^5.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -734,14 +775,14 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.0.4.tgz", - "integrity": "sha512-am39kuaBB/v7RL++bsepvUhP2JKDmfMLQbyJvyHIG6UxnQztxQYZ2/CiPb91dz9NMiqAZqIJaN+kqvIc8h7AeQ==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.1.1.tgz", + "integrity": "sha512-3ptEOuALghEYEPVbhRa7g8a+YmvmHqHVNqF9XqCbG22nPGWkE58qfNNbXi3tF9iQxzKSGw5Iy5gYUvSvpsdcfw==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.0.4", + "@angular-devkit/core": "21.1.1", "jsonc-parser": "3.3.1", - "magic-string": "0.30.19", + "magic-string": "0.30.21", "ora": "9.0.0", "rxjs": "7.8.2" }, @@ -752,9 +793,9 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -861,9 +902,9 @@ } }, "node_modules/@angular/animations": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.0.6.tgz", - "integrity": "sha512-dSxhkh/ZlljdglZ0rriSy7GdC1Y3rGaagkx6oAzF5XqAoBbFmiVFEBZPxssSeQ+O0izmAw3GwsUnz3E/1JYsbA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.1.1.tgz", + "integrity": "sha512-OQRyNbFBCkuihdCegrpN/Np5YQ7uV9if48LAoXxT68tYhK3S/Qbyx2MzJpOMFEFNfpjXRg1BZr8hVcZVFnArpg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -872,42 +913,42 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.0.6" + "@angular/core": "21.1.1" } }, "node_modules/@angular/build": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.0.4.tgz", - "integrity": "sha512-tnh9llk9288noG6buV9HtsAfR/QCVIArTsx9pFJebAFOIDyObpHItfWTnmqYBQecSNEwH5l4XlkDInbjxM9MuA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.1.1.tgz", + "integrity": "sha512-OqlfH7tkahw/lFT6ACU6mqt3AGgTxxT27JTqpzZOeGo1ferR9dq1O6/CT4GiNyr/Z1AMfs7rBWlQH68y1QZb2g==", "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2100.4", - "@babel/core": "7.28.4", + "@angular-devkit/architect": "0.2101.1", + "@babel/core": "7.28.5", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@inquirer/confirm": "5.1.19", + "@inquirer/confirm": "5.1.21", "@vitejs/plugin-basic-ssl": "2.1.0", "beasties": "0.3.5", "browserslist": "^4.26.0", - "esbuild": "0.26.0", + "esbuild": "0.27.2", "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "listr2": "9.0.5", - "magic-string": "0.30.19", + "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", - "piscina": "5.1.3", - "rolldown": "1.0.0-beta.47", - "sass": "1.93.2", + "piscina": "5.1.4", + "rolldown": "1.0.0-beta.58", + "sass": "1.97.1", "semver": "7.7.3", "source-map-support": "0.5.21", "tinyglobby": "0.2.15", - "undici": "7.16.0", - "vite": "7.2.2", - "watchpack": "2.4.4" + "undici": "7.18.2", + "vite": "7.3.0", + "watchpack": "2.5.0" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", @@ -915,7 +956,7 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "lmdb": "3.4.3" + "lmdb": "3.4.4" }, "peerDependencies": { "@angular/compiler": "^21.0.0", @@ -925,7 +966,7 @@ "@angular/platform-browser": "^21.0.0", "@angular/platform-server": "^21.0.0", "@angular/service-worker": "^21.0.0", - "@angular/ssr": "^21.0.4", + "@angular/ssr": "^21.1.1", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^21.0.0", @@ -1028,9 +1069,9 @@ } }, "node_modules/@angular/build/node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -1081,9 +1122,9 @@ } }, "node_modules/@angular/build/node_modules/undici": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", - "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.18.2.tgz", + "integrity": "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -1107,9 +1148,9 @@ } }, "node_modules/@angular/cdk": { - "version": "21.0.5", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.0.5.tgz", - "integrity": "sha512-yO/IRYEZ5wJkpwg3GT3b6RST4pqNFTAhuyPdEdLcE81cs283K3aKOsCYh2xUR3bR4WxBh2kBPSJ31AFZyJXbSA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.1.1.tgz", + "integrity": "sha512-lzscv+A6FCQdyWIr0t0QHXEgkLzS9wJwgeOOOhtxbixxxuk7xVXdcK/jnswE1Maugh1m696jUkOhZpffks3psA==", "license": "MIT", "dependencies": { "parse5": "^8.0.0", @@ -1118,35 +1159,36 @@ "peerDependencies": { "@angular/common": "^21.0.0 || ^22.0.0", "@angular/core": "^21.0.0 || ^22.0.0", + "@angular/platform-browser": "^21.0.0 || ^22.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/cli": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.0.4.tgz", - "integrity": "sha512-L4uKhC3KorF04x9A7noff2m25Phkq54wdqzuWNnbGg3bNfOHdXMv97t2e02J1mk+XOeEcPfDJmOiXj4fcviCLA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.1.1.tgz", + "integrity": "sha512-eXhHuYvruWHBn7lX3GuAyLq29+ELwPADOW8ShzZkWRPNlIDiFDsS5pXrxkM9ez+8f86kfDHh88Twevn4UBUqQg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2100.4", - "@angular-devkit/core": "21.0.4", - "@angular-devkit/schematics": "21.0.4", - "@inquirer/prompts": "7.9.0", + "@angular-devkit/architect": "0.2101.1", + "@angular-devkit/core": "21.1.1", + "@angular-devkit/schematics": "21.1.1", + "@inquirer/prompts": "7.10.1", "@listr2/prompt-adapter-inquirer": "3.0.5", - "@modelcontextprotocol/sdk": "1.24.0", - "@schematics/angular": "21.0.4", + "@modelcontextprotocol/sdk": "1.25.2", + "@schematics/angular": "21.1.1", "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.40.1", - "ini": "5.0.0", + "algoliasearch": "5.46.2", + "ini": "6.0.0", "jsonc-parser": "3.3.1", "listr2": "9.0.5", - "npm-package-arg": "13.0.1", - "pacote": "21.0.3", + "npm-package-arg": "13.0.2", + "pacote": "21.0.4", "parse5-html-rewriting-stream": "8.0.0", "resolve": "1.22.11", "semver": "7.7.3", "yargs": "18.0.0", - "zod": "4.1.13" + "zod": "4.3.5" }, "bin": { "ng": "bin/ng.js" @@ -1232,22 +1274,6 @@ "node": ">=20.0.0" } }, - "node_modules/@angular/cli/node_modules/npm-package-arg": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", - "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@angular/cli/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -1301,9 +1327,9 @@ } }, "node_modules/@angular/cli/node_modules/zod": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", - "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "dev": true, "license": "MIT", "funding": { @@ -1311,9 +1337,9 @@ } }, "node_modules/@angular/common": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.0.6.tgz", - "integrity": "sha512-Yd8PF0dR37FAzqEcBHAyVCiSGMJOezSJe6rV/4BC6AVLfaZ7oZLl8CNVxKsod2UHd6rKxt1hzx05QdVcVvYNeA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.1.1.tgz", + "integrity": "sha512-Di2I6TooHdKun3SqRr45o4LbWJq/ZdwUt3fg0X3obPYaP/f6TrFQ4TMjcl03EfPufPtoQx6O+d32rcWVLhDxyw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1322,14 +1348,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.0.6", + "@angular/core": "21.1.1", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.0.6.tgz", - "integrity": "sha512-rBMzG7WnQMouFfDST+daNSAOVYdtw560645PhlxyVeIeHMlCm0j1jjBgVPGTBNpVgKRdT/sqbi6W6JYkY9mERA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.1.1.tgz", + "integrity": "sha512-Urd3bh0zv0MQ//S7RRTanIkOMAZH/A7vSMXUDJ3aflplNs7JNbVqBwDNj8NoX1V+os+fd8JRJOReCc1EpH4ZKQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1339,14 +1365,14 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.0.6.tgz", - "integrity": "sha512-UcIUx+fbn0VLlCBCIYxntAzWG3zPRUo0K7wvuK0MC6ZFCWawgewx9SdLLZTqcaWe1g5FRQlQeVQcFgHAO5R2Mw==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.1.1.tgz", + "integrity": "sha512-CCB8SZS0BzqLOdOaMpPpOW256msuatYCFDRTaT+awYIY1vQp/eLXzkMTD2uqyHraQy8cReeH/P6optRP9A077Q==", "license": "MIT", "dependencies": { - "@babel/core": "7.28.4", + "@babel/core": "7.28.5", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^4.0.0", + "chokidar": "^5.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", @@ -1361,7 +1387,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.0.6", + "@angular/compiler": "21.1.1", "typescript": ">=5.9 <6.0" }, "peerDependenciesMeta": { @@ -1371,9 +1397,9 @@ } }, "node_modules/@angular/core": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.6.tgz", - "integrity": "sha512-SvWbOkkrsqprYJSBmzQEWkWjfZB/jkRYyFp2ClMJBPqOLxP1a+i3Om2rolcNQjZPz87bs9FszwgRlXUy7sw5cQ==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.1.1.tgz", + "integrity": "sha512-KFRCEhsi02pY1EqJ5rnze4mzSaacqh14D8goDhtmARiUH0tefaHR+uKyu4bKSrWga2T/ExG0DJX52LhHRs2qSw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1382,7 +1408,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.0.6", + "@angular/compiler": "21.1.1", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0 || ~0.16.0" }, @@ -1396,9 +1422,9 @@ } }, "node_modules/@angular/forms": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.0.6.tgz", - "integrity": "sha512-aAkAAKuUrP8U7R4aH/HbmG/CXP90GlML77ECBI5b4qCSb+bvaTEYsaf85mCyTpr9jvGkia2LTe42hPcOuyzdsQ==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.1.1.tgz", + "integrity": "sha512-NBbJOynLOeMsPo03+3dfdxE0P7SB7SXRqoFJ7WP2sOgOIxODna/huo2blmRlnZAVPTn1iQEB9Q+UeyP5c4/1+w==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", @@ -1408,16 +1434,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.0.6", - "@angular/core": "21.0.6", - "@angular/platform-browser": "21.0.6", + "@angular/common": "21.1.1", + "@angular/core": "21.1.1", + "@angular/platform-browser": "21.1.1", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-21.0.6.tgz", - "integrity": "sha512-hxquRSxUW2FBeXHChCq5lOwo5jjJoOs7OdZmtBJtcNE93+6HUANRXLhcqG8kKkvwvGg7QUQf7+R9h3TCJYiz1A==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-21.1.1.tgz", + "integrity": "sha512-Nniqe8X5mTIm37u46HDXCEDuYIv+G5nJZuz1BwuSyDgqxCmdJ3asdgkxgkRQW8NUjXmj6/2vWJ3gn/by4VcKEA==", "dev": true, "license": "MIT", "engines": { @@ -1425,13 +1451,13 @@ } }, "node_modules/@angular/localize": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-21.0.6.tgz", - "integrity": "sha512-t4Jf4px49YAuF7G0eLxknB+KNE+tdqzhAo2w//9kjZGg/xHPp9H/RQUlNUB/RYJuabbBh4IpiRvpJZqp7rKt8A==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-21.1.1.tgz", + "integrity": "sha512-v3BUKLZxeLdUEz2ZrYj/hXm+H9bkvrzTTs+V1tKl3Vw6OjoKVX4XgepOPmyemJZp3ooTo2EfmqHecQOPhXT/dw==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/core": "7.28.4", + "@babel/core": "7.28.5", "@types/babel__core": "7.20.5", "tinyglobby": "^0.2.12", "yargs": "^18.0.0" @@ -1445,20 +1471,20 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.0.6", - "@angular/compiler-cli": "21.0.6" + "@angular/compiler": "21.1.1", + "@angular/compiler-cli": "21.1.1" } }, "node_modules/@angular/material": { - "version": "21.0.5", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-21.0.5.tgz", - "integrity": "sha512-LcDotwwTl2GFtFK1BqcKjj0eRAkOjTSj1C6ux0rOlpU2hJaECxue/ZqEyB/KMHngFAqMJpecxF4zGy/ISCp2xA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-21.1.1.tgz", + "integrity": "sha512-flRS8Mqf41n5lhrG/D0iPl2zyhhEZBaASFjCMSk5idUWMfwdYlKtCaJ3iRFClIixBUwGPrp8ivjBGKsRGfM/Zw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/cdk": "21.0.5", + "@angular/cdk": "21.1.1", "@angular/common": "^21.0.0 || ^22.0.0", "@angular/core": "^21.0.0 || ^22.0.0", "@angular/forms": "^21.0.0 || ^22.0.0", @@ -1467,9 +1493,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.0.6.tgz", - "integrity": "sha512-tPk8rlUEBPXIUPRYq6Xu7QhJgKtnVr0dOHHuhyi70biKTupr5VikpZC5X9dy2Q3H3zYbK6MHC6384YMuwfU2kg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.1.1.tgz", + "integrity": "sha512-d6liZjPz29GUZ6dhxytFL/W2nMsYwPpc/E/vZpr5yV+u+gI2VjbnLbl8SG+jjj0/Hyq7s4aGhEKsRrCJJMXgNw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1478,9 +1504,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "21.0.6", - "@angular/common": "21.0.6", - "@angular/core": "21.0.6" + "@angular/animations": "21.1.1", + "@angular/common": "21.1.1", + "@angular/core": "21.1.1" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1489,9 +1515,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-21.0.6.tgz", - "integrity": "sha512-7mvlvEx66C1cwbAbaeTnbfw1EeZwK5eRCT55pGW+Fsx+vg/8TVF/6NPEbYO65earwIp9Xqt9mGGtq+fPopsbSA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-21.1.1.tgz", + "integrity": "sha512-lawT3bdjXZVmVNXVoPS0UiB8Qxw5jEYXHx2m38JvHGv7/pl0Sgr+wa6f+/4pvTwu3VZb/8ohkVdFicPfrU21Jw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1500,21 +1526,21 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.0.6", - "@angular/compiler": "21.0.6", - "@angular/core": "21.0.6", - "@angular/platform-browser": "21.0.6" + "@angular/common": "21.1.1", + "@angular/compiler": "21.1.1", + "@angular/core": "21.1.1", + "@angular/platform-browser": "21.1.1" } }, "node_modules/@angular/pwa": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@angular/pwa/-/pwa-21.0.4.tgz", - "integrity": "sha512-pTiD7rj1h5dQk8ETi3Vbuj5FbS9lsQjqgz8zeb6QiRgSQSgIgYKWCmzEEgMacI3FmPtV8/GzAedTR1u+oedS1w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/pwa/-/pwa-21.1.1.tgz", + "integrity": "sha512-4wkGhQQirM99+EZ41KYkOOsaKry3dNE09qi7ZEcnwjkpNLoN8vY559dGanB1hxFN+JLwc862wF76QPUWPh0dnA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/schematics": "21.0.4", - "@schematics/angular": "21.0.4", + "@angular-devkit/schematics": "21.1.1", + "@schematics/angular": "21.1.1", "parse5-html-rewriting-stream": "8.0.0" }, "engines": { @@ -1523,7 +1549,7 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/cli": "^21.0.4" + "@angular/cli": "^21.1.1" }, "peerDependenciesMeta": { "@angular/cli": { @@ -1532,9 +1558,9 @@ } }, "node_modules/@angular/router": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.0.6.tgz", - "integrity": "sha512-HOfomKq7jRSgxt/uUvpdbB8RNaYuGB/FJQ3BfQCFfGw1O9L3B72b7Hilk6AcjCruul6cfv/kmT4EB6Vqi3dQtA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.1.1.tgz", + "integrity": "sha512-3ypbtH3KfzuVgebdEET9+bRwn1VzP//KI0tIqleCGi4rblP3WQ/HwIGa5Qhdcxmw/kbmABKLRXX2kRUvidKs/Q==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1543,16 +1569,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.0.6", - "@angular/core": "21.0.6", - "@angular/platform-browser": "21.0.6", + "@angular/common": "21.1.1", + "@angular/core": "21.1.1", + "@angular/platform-browser": "21.1.1", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/service-worker": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-21.0.6.tgz", - "integrity": "sha512-/T1aHc7ys3in7qTGO8MLIHvoXumMPxv7vU1C1sKbK14mw8ahwuqYo8m2Y+f6/ZcYwUZIbN3Ipd9sHEEB7VCz3A==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-21.1.1.tgz", + "integrity": "sha512-ByVSU0j3CDcZwigyuGFgVts1mI6Y9LW3SMaNUszc3PFQSyvPtmFfYMYKkZ9ek1DXDaM7jbiJu8Jm1y8j4tqidA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1564,7 +1590,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.0.6", + "@angular/core": "21.1.1", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1666,12 +1692,12 @@ "peer": true }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -1680,29 +1706,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -1734,13 +1760,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -1762,12 +1788,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -1930,9 +1956,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -2011,9 +2037,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2057,12 +2083,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -2072,14 +2098,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2543,13 +2569,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2631,14 +2657,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2731,13 +2757,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2830,13 +2856,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2896,16 +2922,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2997,17 +3023,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3050,13 +3076,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -3183,9 +3209,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", - "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", "dev": true, "license": "MIT", "dependencies": { @@ -3382,17 +3408,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", - "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.0", + "@babel/compat-data": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", @@ -3405,42 +3431,42 @@ "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-block-scoping": "^7.28.5", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regenerator": "^7.28.4", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -3522,45 +3548,61 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -3902,9 +3944,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.26.0.tgz", - "integrity": "sha512-hj0sKNCQOOo2fgyII3clmJXP28VhgDfU5iy3GNHlWO76KG6N7x4D9ezH5lJtQTG+1J6MFDAJXC1qsI+W+LvZoA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ "ppc64" ], @@ -3918,9 +3960,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.26.0.tgz", - "integrity": "sha512-C0hkDsYNHZkBtPxxDx177JN90/1MiCpvBNjz1f5yWJo1+5+c5zr8apjastpEG+wtPjo9FFtGG7owSsAxyKiHxA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -3934,9 +3976,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.26.0.tgz", - "integrity": "sha512-DDnoJ5eoa13L8zPh87PUlRd/IyFaIKOlRbxiwcSbeumcJ7UZKdtuMCHa1Q27LWQggug6W4m28i4/O2qiQQ5NZQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ "arm64" ], @@ -3950,9 +3992,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.26.0.tgz", - "integrity": "sha512-bKDkGXGZnj0T70cRpgmv549x38Vr2O3UWLbjT2qmIkdIWcmlg8yebcFWoT9Dku7b5OV3UqPEuNKRzlNhjwUJ9A==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", "cpu": [ "x64" ], @@ -3966,9 +4008,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.26.0.tgz", - "integrity": "sha512-6Z3naJgOuAIB0RLlJkYc81An3rTlQ/IeRdrU3dOea8h/PvZSgitZV+thNuIccw0MuK1GmIAnAmd5TrMZad8FTQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -3982,9 +4024,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.26.0.tgz", - "integrity": "sha512-OPnYj0zpYW0tHusMefyaMvNYQX5pNQuSsHFTHUBNp3vVXupwqpxofcjVsUx11CQhGVkGeXjC3WLjh91hgBG2xw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", "cpu": [ "x64" ], @@ -3998,9 +4040,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.26.0.tgz", - "integrity": "sha512-jix2fa6GQeZhO1sCKNaNMjfj5hbOvoL2F5t+w6gEPxALumkpOV/wq7oUBMHBn2hY2dOm+mEV/K+xfZy3mrsxNQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], @@ -4014,9 +4056,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.26.0.tgz", - "integrity": "sha512-tccJaH5xHJD/239LjbVvJwf6T4kSzbk6wPFerF0uwWlkw/u7HL+wnAzAH5GB2irGhYemDgiNTp8wJzhAHQ64oA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", "cpu": [ "x64" ], @@ -4030,9 +4072,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.26.0.tgz", - "integrity": "sha512-JY8NyU31SyRmRpuc5W8PQarAx4TvuYbyxbPIpHAZdr/0g4iBr8KwQBS4kiiamGl2f42BBecHusYCsyxi7Kn8UQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", "cpu": [ "arm" ], @@ -4046,9 +4088,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.26.0.tgz", - "integrity": "sha512-IMJYN7FSkLttYyTbsbme0Ra14cBO5z47kpamo16IwggzzATFY2lcZAwkbcNkWiAduKrTgFJP7fW5cBI7FzcuNQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -4062,9 +4104,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.26.0.tgz", - "integrity": "sha512-XITaGqGVLgk8WOHw8We9Z1L0lbLFip8LyQzKYFKO4zFo1PFaaSKsbNjvkb7O8kEXytmSGRkYpE8LLVpPJpsSlw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", "cpu": [ "ia32" ], @@ -4078,9 +4120,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.26.0.tgz", - "integrity": "sha512-MkggfbDIczStUJwq9wU7gQ7kO33d8j9lWuOCDifN9t47+PeI+9m2QVh51EI/zZQ1spZtFMC1nzBJ+qNGCjJnsg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], @@ -4094,9 +4136,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.26.0.tgz", - "integrity": "sha512-fUYup12HZWAeccNLhQ5HwNBPr4zXCPgUWzEq2Rfw7UwqwfQrFZ0SR/JljaURR8xIh9t+o1lNUFTECUTmaP7yKA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", "cpu": [ "mips64el" ], @@ -4110,9 +4152,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.26.0.tgz", - "integrity": "sha512-MzRKhM0Ip+//VYwC8tialCiwUQ4G65WfALtJEFyU0GKJzfTYoPBw5XNWf0SLbCUYQbxTKamlVwPmcw4DgZzFxg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", "cpu": [ "ppc64" ], @@ -4126,9 +4168,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.26.0.tgz", - "integrity": "sha512-QhCc32CwI1I4Jrg1enCv292sm3YJprW8WHHlyxJhae/dVs+KRWkbvz2Nynl5HmZDW/m9ZxrXayHzjzVNvQMGQA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", "cpu": [ "riscv64" ], @@ -4142,9 +4184,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.26.0.tgz", - "integrity": "sha512-1D6vi6lfI18aNT1aTf2HV+RIlm6fxtlAp8eOJ4mmnbYmZ4boz8zYDar86sIYNh0wmiLJEbW/EocaKAX6Yso2fw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", "cpu": [ "s390x" ], @@ -4158,9 +4200,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.26.0.tgz", - "integrity": "sha512-rnDcepj7LjrKFvZkx+WrBv6wECeYACcFjdNPvVPojCPJD8nHpb3pv3AuR9CXgdnjH1O23btICj0rsp0L9wAnHA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", "cpu": [ "x64" ], @@ -4174,9 +4216,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.26.0.tgz", - "integrity": "sha512-FSWmgGp0mDNjEXXFcsf12BmVrb+sZBBBlyh3LwB/B9ac3Kkc8x5D2WimYW9N7SUkolui8JzVnVlWh7ZmjCpnxw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", "cpu": [ "arm64" ], @@ -4190,9 +4232,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.26.0.tgz", - "integrity": "sha512-0QfciUDFryD39QoSPUDshj4uNEjQhp73+3pbSAaxjV2qGOEDsM67P7KbJq7LzHoVl46oqhIhJ1S+skKGR7lMXA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", "cpu": [ "x64" ], @@ -4206,9 +4248,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.26.0.tgz", - "integrity": "sha512-vmAK+nHhIZWImwJ3RNw9hX3fU4UGN/OqbSE0imqljNbUQC3GvVJ1jpwYoTfD6mmXmQaxdJY6Hn4jQbLGJKg5Yw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", "cpu": [ "arm64" ], @@ -4222,9 +4264,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.26.0.tgz", - "integrity": "sha512-GPXF7RMkJ7o9bTyUsnyNtrFMqgM3X+uM/LWw4CeHIjqc32fm0Ir6jKDnWHpj8xHFstgWDUYseSABK9KCkHGnpg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", "cpu": [ "x64" ], @@ -4238,9 +4280,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.26.0.tgz", - "integrity": "sha512-nUHZ5jEYqbBthbiBksbmHTlbb5eElyVfs/s1iHQ8rLBq1eWsd5maOnDpCocw1OM8kFK747d1Xms8dXJHtduxSw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", "cpu": [ "arm64" ], @@ -4254,9 +4296,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.26.0.tgz", - "integrity": "sha512-TMg3KCTCYYaVO+R6P5mSORhcNDDlemUVnUbb8QkboUtOhb5JWKAzd5uMIMECJQOxHZ/R+N8HHtDF5ylzLfMiLw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", "cpu": [ "x64" ], @@ -4270,9 +4312,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.26.0.tgz", - "integrity": "sha512-apqYgoAUd6ZCb9Phcs8zN32q6l0ZQzQBdVXOofa6WvHDlSOhwCWgSfVQabGViThS40Y1NA4SCvQickgZMFZRlA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", "cpu": [ "arm64" ], @@ -4286,9 +4328,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.26.0.tgz", - "integrity": "sha512-FGJAcImbJNZzLWu7U6WB0iKHl4RuY4TsXEwxJPl9UZLS47agIZuILZEX3Pagfw7I4J3ddflomt9f0apfaJSbaw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", "cpu": [ "ia32" ], @@ -4302,9 +4344,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.26.0.tgz", - "integrity": "sha512-WAckBKaVnmFqbEhbymrPK7M086DQMpL1XoRbpmN0iW8k5JSXjDRQBhcZNa0VweItknLq9eAeCL34jK7/CDcw7A==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", "cpu": [ "x64" ], @@ -4494,6 +4536,19 @@ "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==", "license": "MIT" }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -4614,13 +4669,13 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.19.tgz", - "integrity": "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==", + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.0", - "@inquirer/type": "^3.0.9" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -4823,22 +4878,22 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", - "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.3.0", - "@inquirer/confirm": "^5.1.19", - "@inquirer/editor": "^4.2.21", - "@inquirer/expand": "^4.0.21", - "@inquirer/input": "^4.2.5", - "@inquirer/number": "^3.0.21", - "@inquirer/password": "^4.0.21", - "@inquirer/rawlist": "^4.1.9", - "@inquirer/search": "^3.2.0", - "@inquirer/select": "^4.4.0" + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" }, "engines": { "node": ">=18" @@ -5843,6 +5898,299 @@ "tslib": "2" } }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", + "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", + "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", + "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", + "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", + "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", + "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.10" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", + "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.56.10", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", + "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.65.0.tgz", + "integrity": "sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/buffers": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.65.0.tgz", + "integrity": "sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.65.0.tgz", + "integrity": "sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.65.0.tgz", + "integrity": "sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.65.0", + "@jsonjoy.com/buffers": "17.65.0", + "@jsonjoy.com/codegen": "17.65.0", + "@jsonjoy.com/json-pointer": "17.65.0", + "@jsonjoy.com/util": "17.65.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.65.0.tgz", + "integrity": "sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.65.0.tgz", + "integrity": "sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.65.0", + "@jsonjoy.com/codegen": "17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@jsonjoy.com/json-pack": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.11.0.tgz", @@ -5954,9 +6302,9 @@ "license": "MIT" }, "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.3.tgz", - "integrity": "sha512-zR6Y45VNtW5s+A+4AyhrJk0VJKhXdkLhrySCpCu7PSdnakebsOzNxf58p5Xoq66vOSuueGAxlqDAF49HwdrSTQ==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.4.tgz", + "integrity": "sha512-XaKL705gDWd6XVls3ATDj13ZdML/LqSIxwgnYpG8xTzH2ifArx8fMMDdvqGE/Emd+W6R90W2fveZcJ0AyS8Y0w==", "cpu": [ "arm64" ], @@ -5967,9 +6315,9 @@ ] }, "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.3.tgz", - "integrity": "sha512-nfGm5pQksBGfaj9uMbjC0YyQreny/Pl7mIDtHtw6g7WQuCgeLullr9FNRsYyKplaEJBPrCVpEjpAznxTBIrXBw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.4.tgz", + "integrity": "sha512-GPHGEVcwJlkD01GmIr7B4kvbIcUDS2+kBadVEd7lU4can1RZaZQLDDBJRrrNfS2Kavvl0VLI/cMv7UASAXGrww==", "cpu": [ "x64" ], @@ -5980,9 +6328,9 @@ ] }, "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.3.tgz", - "integrity": "sha512-Kjqomp7i0rgSbYSUmv9JnXpS55zYT/YcW3Bdf9oqOTjcH0/8tFAP8MLhu/i9V2pMKIURDZk63Ww49DTK0T3c/Q==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.4.tgz", + "integrity": "sha512-cmev5/dZr5ACKri9f6GU6lZCXTjMhV72xujlbOhFCgFXrt4W0TxGsmY8kA1BITvH60JBKE50cSxsiulybAbrrw==", "cpu": [ "arm" ], @@ -5993,9 +6341,9 @@ ] }, "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.3.tgz", - "integrity": "sha512-uX9eaPqWb740wg5D3TCvU/js23lSRSKT7lJrrQ8IuEG/VLgpPlxO3lHDywU44yFYdGS7pElBn6ioKFKhvALZlw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.4.tgz", + "integrity": "sha512-mALqr7DE42HsiwVTKpQWxacjHoJk+e9p00RWIJqTACh/hpucxp/0lK/XMh5XzWnU/TDCZLukq1+vNqnNumTP/Q==", "cpu": [ "arm64" ], @@ -6006,9 +6354,9 @@ ] }, "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.3.tgz", - "integrity": "sha512-7/8l20D55CfwdMupkc3fNxNJdn4bHsti2X0cp6PwiXlLeSFvAfWs5kCCx+2Cyje4l4GtN//LtKWjTru/9hDJQg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.4.tgz", + "integrity": "sha512-QjLs8OcmCNcraAcLoZyFlo0atzBJniQLLwhtR+ymQqS5kLYpV5RqwriL87BW+ZiR9ZiGgZx3evrz5vnWPtJ1fQ==", "cpu": [ "x64" ], @@ -6019,9 +6367,9 @@ ] }, "node_modules/@lmdb/lmdb-win32-arm64": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.3.tgz", - "integrity": "sha512-yWVR0e5Gl35EGJBsAuqPOdjtUYuN8CcTLKrqpQFoM+KsMadViVCulhKNhkcjSGJB88Am5bRPjMro4MBB9FS23Q==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.4.tgz", + "integrity": "sha512-tr/pwHDlZ33forLGAr0tI04cRmP4SgF93yHbb+2zvZiDEyln5yMHhbKDySxY66aUOkhvBvTuHq9q/3YmTj6ZHQ==", "cpu": [ "arm64" ], @@ -6032,9 +6380,9 @@ ] }, "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.3.tgz", - "integrity": "sha512-1JdBkcO0Vrua4LUgr4jAe4FUyluwCeq/pDkBrlaVjX3/BBWP1TzVjCL+TibWNQtPAL1BITXPAhlK5Ru4FBd/hg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.4.tgz", + "integrity": "sha512-KRzfocJzB/mgoTCqnMawuLSKheHRVTqWfSmouIgYpFs6Hx4zvZSvsZKSCEb5gHmICy7qsx9l06jk3MFTtiFVAQ==", "cpu": [ "x64" ], @@ -6082,12 +6430,13 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.24.0.tgz", - "integrity": "sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==", + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", + "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", "dev": true, "license": "MIT", "dependencies": { + "@hono/node-server": "^1.19.7", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -6098,6 +6447,7 @@ "express": "^5.0.1", "express-rate-limit": "^7.5.0", "jose": "^6.1.1", + "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", @@ -6310,15 +6660,15 @@ } }, "node_modules/@module-federation/node": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.26.tgz", - "integrity": "sha512-C7aIABSxbZKOvVDMIivmV9Q/aOVh9xpUv+y+nwSWuQr9v2pgmMzVK3rxWoeusmkpaENia8h5AWNpYjcrMi+O9g==", + "version": "2.7.28", + "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.28.tgz", + "integrity": "sha512-AoYSak1bgUUs1COcbf330ONRqmNJ5pSSMLjeOVLyRjROCsoXwSnIiWVxSTi0MENHd3B6k+T0oFPQWi9nRKK3lQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/enhanced": "0.22.0", - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0", + "@module-federation/enhanced": "0.23.0", + "@module-federation/runtime": "0.23.0", + "@module-federation/sdk": "0.23.0", "btoa": "1.2.1", "encoding": "^0.1.13", "node-fetch": "2.7.0" @@ -6341,26 +6691,26 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.22.0.tgz", - "integrity": "sha512-OzMBBbUhOMbDVX/wkVDxaOshgyUdxv+kRQDtxl1/ipV5GXTjs1tpS4NHtDwiJi0qKeG0AvnvGCrPu7bjMOcAVw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.23.0.tgz", + "integrity": "sha512-miZmMCl7OS1CH2tQbqijWK85qThg4TBDkI25Vx4G2du4ehg47mPKfeuft6/KWV/eJ7ZS4C534Oq/6lom1ncTOQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.22.0", + "@module-federation/sdk": "0.23.0", "@types/semver": "7.5.8", "semver": "7.6.3" } }, "node_modules/@module-federation/node/node_modules/@module-federation/cli": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.22.0.tgz", - "integrity": "sha512-kdeDg6HuOqJYKtPeoupWQg6wLZT7B+AwMDwMjwhcKHxKEmKFPImbJLymBWEgmKTktZKh1ERtEOplwFt9u5iEBA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.23.0.tgz", + "integrity": "sha512-5OfdKUslS/kb6pycJPOtutMzIXSdmYcLoTSjhrWD7/68qFt2SGV7JD1l0RAhq3+fTuXryxctusTl4or2vCgBJw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/sdk": "0.22.0", + "@module-federation/dts-plugin": "0.23.0", + "@module-federation/sdk": "0.23.0", "chalk": "3.0.0", "commander": "11.1.0", "jiti": "2.4.2" @@ -6373,14 +6723,14 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/data-prefetch": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.22.0.tgz", - "integrity": "sha512-NESR/5Wcn9unPY18oQSSXlbXTnMbUFwqqvSZnpJt5vBb/8QlcJEiPnxERZqKhKrIS6GTD8KneHPRCOQsP6Xcqw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.23.0.tgz", + "integrity": "sha512-oTzdHo8xe0t1pA6KvTeEZAMcnvMRgE2rUwUrgFuGUqbQoTdndEt/A1X9eayJ5s/8ARDT5hoam4LcZYXpXPYbjg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0", + "@module-federation/runtime": "0.23.0", + "@module-federation/sdk": "0.23.0", "fs-extra": "9.1.0" }, "peerDependencies": { @@ -6389,16 +6739,16 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/dts-plugin": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.22.0.tgz", - "integrity": "sha512-lj5YtUZz0moaT1XziM0OyizE0mIhMa8W65RUiX/+UZ4iNK/KMs4e/CGpfhEt2Lj9+j6KYSzI2+676d+73j/kag==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.23.0.tgz", + "integrity": "sha512-DIA2ht2SkGgdRWSVnxBGBS4XqeSiWIFPwyULZVZ0TTYr/47betlSVSRU6CTPokalrlryzMhEiqcvYJPCkOVP5w==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/sdk": "0.22.0", - "@module-federation/third-party-dts-extractor": "0.22.0", + "@module-federation/error-codes": "0.23.0", + "@module-federation/managers": "0.23.0", + "@module-federation/sdk": "0.23.0", + "@module-federation/third-party-dts-extractor": "0.23.0", "adm-zip": "^0.5.10", "ansi-colors": "^4.1.3", "axios": "^1.12.0", @@ -6423,23 +6773,23 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/enhanced": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.22.0.tgz", - "integrity": "sha512-OysyO6xbhpP+CeOEDp2v6HyFcVT5wWAdQrfga3jhlFUAdIR7nZZ2albysnF2CGn/xyU050Ss74ttgy7GiKi5fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.22.0", - "@module-federation/cli": "0.22.0", - "@module-federation/data-prefetch": "0.22.0", - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/error-codes": "0.22.0", - "@module-federation/inject-external-runtime-core-plugin": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/manifest": "0.22.0", - "@module-federation/rspack": "0.22.0", - "@module-federation/runtime-tools": "0.22.0", - "@module-federation/sdk": "0.22.0", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.23.0.tgz", + "integrity": "sha512-GPfipQc0/rgwYp48hkru0cqvjtRKPVC/ZlUFptrbr2LTLM5mxW3ig1rggUAH2QSQoNvDuhY/kqG8u71MZROi3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/bridge-react-webpack-plugin": "0.23.0", + "@module-federation/cli": "0.23.0", + "@module-federation/data-prefetch": "0.23.0", + "@module-federation/dts-plugin": "0.23.0", + "@module-federation/error-codes": "0.23.0", + "@module-federation/inject-external-runtime-core-plugin": "0.23.0", + "@module-federation/managers": "0.23.0", + "@module-federation/manifest": "0.23.0", + "@module-federation/rspack": "0.23.0", + "@module-federation/runtime-tools": "0.23.0", + "@module-federation/sdk": "0.23.0", "btoa": "^1.2.1", "schema-utils": "^4.3.0", "upath": "2.0.1" @@ -6465,62 +6815,62 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/error-codes": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", - "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.23.0.tgz", + "integrity": "sha512-CzcKOPKh/qB1wPkVBC0iEK/Cg4jRAS1DnZsTx7b3JUCIXDcIaRq/XkTdo+EQ0cAsF5Os9lQ0f50O9DC/uFC8eA==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/node/node_modules/@module-federation/inject-external-runtime-core-plugin": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.22.0.tgz", - "integrity": "sha512-zeN6XiLV9l0tAsZzQxHLEQM28sWiijmIBp9CiIDc4iqk2f/kgCSqiBWTiNcS4sZODzupPkktaWsC5+5eWk0ENQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.23.0.tgz", + "integrity": "sha512-xxQrqtjbAUHY826ZtpvqgzANXhEibbloaiAOLZXhfIJd9wbYzK9m9zcHmIKOc5PQ5p1bBI5OJ+9XxXQmSBAtuw==", "dev": true, "license": "MIT", "peerDependencies": { - "@module-federation/runtime-tools": "0.22.0" + "@module-federation/runtime-tools": "0.23.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/managers": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.22.0.tgz", - "integrity": "sha512-Ptv8gEUihPBeoQEpsKq3GZUEB4y/hqG83mKw5NrKpXMIfcoF6SZjcknXz5LuN7NF3xMi1XHYU74z/nKzr+izew==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.23.0.tgz", + "integrity": "sha512-Stqu04QUiYBhWLW+0+EoZ4e5pFrrTxcEI4StJ7jOPtn2Ll6ImvGWk2KVNfbTjz0TRhIx5rl2wc+YPnYJ9tdVag==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.22.0", + "@module-federation/sdk": "0.23.0", "find-pkg": "2.0.0", "fs-extra": "9.1.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/manifest": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.22.0.tgz", - "integrity": "sha512-Exv+frMkRGKDs3KKXeBBKcHvL7nNTk5Yt2ftEvxCUIRPC16Ebvy6RcQvFFvbvmOhuM/If6j6E/aZu5Z9oau6xw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.23.0.tgz", + "integrity": "sha512-tzeq67oeTXM+ukzaC2qcaft5Gvu8T/hYiFGE/jopOOTVH8glTebKDg+xOABcN+EeP6UDmf6vDVq7dYmXTC6e/w==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/sdk": "0.22.0", + "@module-federation/dts-plugin": "0.23.0", + "@module-federation/managers": "0.23.0", + "@module-federation/sdk": "0.23.0", "chalk": "3.0.0", "find-pkg": "2.0.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/rspack": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.22.0.tgz", - "integrity": "sha512-PvDlFxzCbufArZvt6wSLsJNm20hdDsz/4X04YAxAZfp/dTECZghZsebLcR7nHOzOwR2gCX8vv+gB3r+5MheobA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.23.0.tgz", + "integrity": "sha512-Le1ep9NTgEGpbYhFsko/HkHS3To/jpEQ0Wvkugxix7pxA8ynhJCpflD2y+iN8CCfGq+Y49dACAmqLvifPc5OfA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.22.0", - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/inject-external-runtime-core-plugin": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/manifest": "0.22.0", - "@module-federation/runtime-tools": "0.22.0", - "@module-federation/sdk": "0.22.0", + "@module-federation/bridge-react-webpack-plugin": "0.23.0", + "@module-federation/dts-plugin": "0.23.0", + "@module-federation/inject-external-runtime-core-plugin": "0.23.0", + "@module-federation/managers": "0.23.0", + "@module-federation/manifest": "0.23.0", + "@module-federation/runtime-tools": "0.23.0", + "@module-federation/sdk": "0.23.0", "btoa": "1.2.1" }, "peerDependencies": { @@ -6538,50 +6888,50 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/runtime": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", - "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.23.0.tgz", + "integrity": "sha512-ZHJcfM1O8RqYVrlIbhyeQ3S6gJW3mqHso3/QY7cKs1za+UvOgB8aTsDwq7Fv+aJZWSmtGzWa4zbSuxthyucw3g==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/runtime-core": "0.22.0", - "@module-federation/sdk": "0.22.0" + "@module-federation/error-codes": "0.23.0", + "@module-federation/runtime-core": "0.23.0", + "@module-federation/sdk": "0.23.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/runtime-core": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", - "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.23.0.tgz", + "integrity": "sha512-+Orumtyg6Q2v19Gz15P3kDmRf4Q6KEpv8DggKWHdM8AX4xyVT8dMRJxdIxaVddbIYTd7aL7o2U3LLK6EjUe4UA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/sdk": "0.22.0" + "@module-federation/error-codes": "0.23.0", + "@module-federation/sdk": "0.23.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/runtime-tools": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", - "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.23.0.tgz", + "integrity": "sha512-TzUaU/X+mVHHilz8WApivSLjMZaBhydQrrMtrWCK4yUNfIjC/SmnGrdhmZE3qFxXezk4iit60KKS+xxZ+2udPg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/webpack-bundler-runtime": "0.22.0" + "@module-federation/runtime": "0.23.0", + "@module-federation/webpack-bundler-runtime": "0.23.0" } }, "node_modules/@module-federation/node/node_modules/@module-federation/sdk": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", - "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.23.0.tgz", + "integrity": "sha512-1+DICHIF1z6yggtsZypmcn1gL35iitiSDXcsaqWynK4v5aw9MBRUS4zP3kG7eQDFTMmIo+rGbPN37AUsOq/RRQ==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/node/node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.22.0.tgz", - "integrity": "sha512-3y2DZdeEjArNKDqA1Ds32Q6A5RATcsmywCXyQaWcfaScprpmzfEWiDkeD/nzoA/0+4ePY8OEinJ4hLtoMNLbLQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.23.0.tgz", + "integrity": "sha512-/oiLf6QQblhQKuHf89Wd475nUva+PWz5G01wxldy4lXaSTvz5XayCCBDek2SX8Gs4XnqATCm6IriAQ+ORzsgmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6591,14 +6941,14 @@ } }, "node_modules/@module-federation/node/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", - "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.23.0.tgz", + "integrity": "sha512-HnYVRiCg5nKpJ5LnUxT4iNzvay7fd/ZdubO/AWp4AqW7Y/cVaRFNNhg8cytuIZAha3R73BLYqia/a518K5dSwg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0" + "@module-federation/runtime": "0.23.0", + "@module-federation/sdk": "0.23.0" } }, "node_modules/@module-federation/node/node_modules/jiti": { @@ -6833,9 +7183,9 @@ ] }, "node_modules/@napi-rs/nice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.4.tgz", - "integrity": "sha512-Sqih1YARrmMoHlXGgI9JrrgkzxcaaEso0AH+Y7j8NHonUs+xe4iDsgC3IBIDNdzEewbNpccNN6hip+b5vmyRLw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", "license": "MIT", "optional": true, "engines": { @@ -6846,28 +7196,29 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.4", - "@napi-rs/nice-android-arm64": "1.0.4", - "@napi-rs/nice-darwin-arm64": "1.0.4", - "@napi-rs/nice-darwin-x64": "1.0.4", - "@napi-rs/nice-freebsd-x64": "1.0.4", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.4", - "@napi-rs/nice-linux-arm64-gnu": "1.0.4", - "@napi-rs/nice-linux-arm64-musl": "1.0.4", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.4", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.4", - "@napi-rs/nice-linux-s390x-gnu": "1.0.4", - "@napi-rs/nice-linux-x64-gnu": "1.0.4", - "@napi-rs/nice-linux-x64-musl": "1.0.4", - "@napi-rs/nice-win32-arm64-msvc": "1.0.4", - "@napi-rs/nice-win32-ia32-msvc": "1.0.4", - "@napi-rs/nice-win32-x64-msvc": "1.0.4" + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" } }, "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.4.tgz", - "integrity": "sha512-OZFMYUkih4g6HCKTjqJHhMUlgvPiDuSLZPbPBWHLjKmFTv74COzRlq/gwHtmEVaR39mJQ6ZyttDl2HNMUbLVoA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", "cpu": [ "arm" ], @@ -6881,9 +7232,9 @@ } }, "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.4.tgz", - "integrity": "sha512-k8u7cjeA64vQWXZcRrPbmwjH8K09CBnNaPnI9L1D5N6iMPL3XYQzLcN6WwQonfcqCDv5OCY3IqX89goPTV4KMw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", "cpu": [ "arm64" ], @@ -6897,9 +7248,9 @@ } }, "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-GsLdQvUcuVzoyzmtjsThnpaVEizAqH5yPHgnsBmq3JdVoVZHELFo7PuJEdfOH1DOHi2mPwB9sCJEstAYf3XCJA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", "cpu": [ "arm64" ], @@ -6913,9 +7264,9 @@ } }, "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.4.tgz", - "integrity": "sha512-1y3gyT3e5zUY5SxRl3QDtJiWVsbkmhtUHIYwdWWIQ3Ia+byd/IHIEpqAxOGW1nhhnIKfTCuxBadHQb+yZASVoA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", "cpu": [ "x64" ], @@ -6929,9 +7280,9 @@ } }, "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.4.tgz", - "integrity": "sha512-06oXzESPRdXUuzS8n2hGwhM2HACnDfl3bfUaSqLGImM8TA33pzDXgGL0e3If8CcFWT98aHows5Lk7xnqYNGFeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", "cpu": [ "x64" ], @@ -6945,9 +7296,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.4.tgz", - "integrity": "sha512-CgklZ6g8WL4+EgVVkxkEvvsi2DSLf9QIloxWO0fvQyQBp6VguUSX3eHLeRpqwW8cRm2Hv/Q1+PduNk7VK37VZw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", "cpu": [ "arm" ], @@ -6961,9 +7312,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.4.tgz", - "integrity": "sha512-wdAJ7lgjhAlsANUCv0zi6msRwq+D4KDgU+GCCHssSxWmAERZa2KZXO0H2xdmoJ/0i03i6YfK/sWaZgUAyuW2oQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", "cpu": [ "arm64" ], @@ -6977,9 +7328,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.4.tgz", - "integrity": "sha512-4b1KYG+sriufhFrpUS9uNOEYYJqSfcbnwGx6uGX7JjrH8tELG90cOpCawz5THNIwlS3DhLgnCOcn0+4p6z26QA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", "cpu": [ "arm64" ], @@ -6993,9 +7344,9 @@ } }, "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.4.tgz", - "integrity": "sha512-iaf3vMRgr23oe1PUaKpxaH3DS0IMN0+N9iEiWVwYPm/U15vZFYdqVegGfN2PzrZLUl5lc8ZxbmEKDfuqslhAMA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", "cpu": [ "ppc64" ], @@ -7009,9 +7360,9 @@ } }, "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.4.tgz", - "integrity": "sha512-UXoREY6Yw6rHrGuTwQgBxpfjK34t6mTjibE9/cXbefL9AuUCJ9gEgwNKZiONuR5QGswChqo9cnthjdKkYyAdDg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", "cpu": [ "riscv64" ], @@ -7025,9 +7376,9 @@ } }, "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.4.tgz", - "integrity": "sha512-eFbgYCRPmsqbYPAlLYU5hYTNbogmIDUvknilehHsFhCH1+0/kN87lP+XaLT0Yeq4V/rpwChSd9vlz4muzFArtw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", "cpu": [ "s390x" ], @@ -7041,9 +7392,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.4.tgz", - "integrity": "sha512-4T3E6uTCwWT6IPnwuPcWVz3oHxvEp/qbrCxZhsgzwTUBEwu78EGNXGdHfKJQt3soth89MLqZJw+Zzvnhrsg1mQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", "cpu": [ "x64" ], @@ -7057,9 +7408,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.4.tgz", - "integrity": "sha512-NtbBkAeyBPLvCBkWtwkKXkNSn677eaT0cX3tygq+2qVv71TmHgX4gkX6o9BXjlPzdgPGwrUudavCYPT9tzkEqQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", "cpu": [ "x64" ], @@ -7072,10 +7423,26 @@ "node": ">= 10" } }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.4.tgz", - "integrity": "sha512-vubOe3i+YtSJGEk/++73y+TIxbuVHi+W8ZzrRm2eETCjCRwNlgbfToQZ85dSA+4iBB/NJRGNp+O4hfdbbttZWA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", "cpu": [ "arm64" ], @@ -7089,9 +7456,9 @@ } }, "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.4.tgz", - "integrity": "sha512-BMOVrUDZeg1RNRKVlh4eyLv5djAAVLiSddfpuuQ47EFjBcklg0NUeKMFKNrKQR4UnSn4HAiACLD7YK7koskwmg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", "cpu": [ "ia32" ], @@ -7105,9 +7472,9 @@ } }, "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.4.tgz", - "integrity": "sha512-kCNk6HcRZquhw/whwh4rHsdPyOSCQCgnVDVik+Y9cuSVTDy3frpiCJTScJqPPS872h4JgZKkr/+CwcwttNEo9Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", "cpu": [ "x64" ], @@ -7121,27 +7488,18 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz", - "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, - "node_modules/@napi-rs/wasm-runtime/node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@nestjs/bull": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/@nestjs/bull/-/bull-11.0.4.tgz", @@ -7448,6 +7806,24 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@nestjs/schematics/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nestjs/schematics/node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -7482,6 +7858,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@nestjs/schematics/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nestjs/serve-static": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-5.0.4.tgz", @@ -7538,9 +7930,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.0.4.tgz", - "integrity": "sha512-0+XWJqZaRB5GGtJEaWgHV0iYzgB5pDhVjMEb/1Z6+CZazF8Aq2HuU8BErWYzPIwaiTLxR+lc3Z35RsAaeSmGFQ==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.1.1.tgz", + "integrity": "sha512-8ySRsb1xgr+7XQmZ2LJ+AhFe1IZKW93wfL6OMpZtcWU4FzxWa/NhlfSNBQI5kuyPEVDDAxJ4RI5IoQyvcOmNLg==", "dev": true, "license": "MIT", "engines": { @@ -7652,29 +8044,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/git/node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", - "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", - "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -7695,16 +8064,6 @@ "node": "20 || >=22" } }, - "node_modules/@npmcli/git/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/git/node_modules/which": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", @@ -7722,20 +8081,20 @@ } }, "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", "dev": true, "license": "ISC", "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/node-gyp": { @@ -7828,27 +8187,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/promise-spawn": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", - "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", "dev": true, "license": "ISC", "dependencies": { - "which": "^5.0.0" + "which": "^6.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { @@ -7862,9 +8211,9 @@ } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "dev": true, "license": "ISC", "dependencies": { @@ -7874,7 +8223,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/redact": { @@ -7905,19 +8254,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", - "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -7928,16 +8264,6 @@ "node": ">=16" } }, - "node_modules/@npmcli/run-script/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@npmcli/run-script/node_modules/which": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", @@ -7971,21 +8297,21 @@ } }, "node_modules/@nx/angular": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-22.3.3.tgz", - "integrity": "sha512-XE1grDPwpHySUSDMjgzgyjk/k6WjwooBXl19uilUR4solAPzlrz46qdyjzAPpEhvNAk0YsXflewgPebyuX5P2w==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-22.4.1.tgz", + "integrity": "sha512-YNRpq/7sMoNrqAul0ucundYAFjmAQBEa9jE6eMD1ZmxpOchT0S5jkiMbZBY5FRVzFLejajoXOKHKzPVvvcj1Hg==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/rspack": "22.3.3", - "@nx/web": "22.3.3", - "@nx/webpack": "22.3.3", - "@nx/workspace": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.4.1", + "@nx/eslint": "22.4.1", + "@nx/js": "22.4.1", + "@nx/module-federation": "22.4.1", + "@nx/rspack": "22.4.1", + "@nx/web": "22.4.1", + "@nx/webpack": "22.4.1", + "@nx/workspace": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", "@typescript-eslint/type-utils": "^8.0.0", "enquirer": "~2.3.6", "magic-string": "~0.30.2", @@ -8032,16 +8358,16 @@ } }, "node_modules/@nx/cypress": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-22.3.3.tgz", - "integrity": "sha512-HWy05q0GSnbxljq1fBVfXPGw8quG9zvu4UaLErNqPHh46oWmUoWuR2TkDkpWEZn9JvYxx+m4QhsGpXzHXioeXg==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-22.4.1.tgz", + "integrity": "sha512-XVM0HpX2s1ZUOGVlfaxokv6v4tiRIQ+ybhfIvxwa3YQJlgsYjtM4XN+iUlcbTgmY/O4YAZIqaeoI8T95lo03JA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.4.1", + "@nx/eslint": "22.4.1", + "@nx/js": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", "detect-port": "^1.5.1", "semver": "^7.6.3", "tree-kill": "1.2.2", @@ -8057,16 +8383,16 @@ } }, "node_modules/@nx/devkit": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-22.3.3.tgz", - "integrity": "sha512-/hxcdhE+QDalsWEbJurHtZh9aY27taHeImbCVJnogwv85H3RbAE+0YuKXGInutfLszAs7phwzli71yq+d2P45Q==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-22.4.1.tgz", + "integrity": "sha512-A3smUCwB7UOwJps7lkghBtUAmOkdhPrWFM88jFvZ/pUl2RYBi5yLYSRi6qdHPFvUu/1+Ew4I0P0yDhJJiAyL3w==", "dev": true, "license": "MIT", "dependencies": { "@zkochan/js-yaml": "0.0.7", "ejs": "^3.1.7", "enquirer": "~2.3.6", - "minimatch": "9.0.3", + "minimatch": "10.1.1", "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" @@ -8075,53 +8401,43 @@ "nx": ">= 21 <= 23 || ^22.0.0-0" } }, - "node_modules/@nx/devkit/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@nx/docker": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/docker/-/docker-22.3.3.tgz", - "integrity": "sha512-Z1Phb+IZP5ofRadrzJQdMOdMKOaJ6nKXifgGPN0uxd9gNQ7V7XiHxK3+RW7nANuotYW5sf5DnLxDbhbSDD3Syw==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/docker/-/docker-22.4.1.tgz", + "integrity": "sha512-g55qMSxOi7IFiUJsoWqR9XEZSJIjD34LM4EG+1YDIAp7swgCFiImcLGyhmwHEGecyAJ9tvyGRK84T9B7R/Ucjg==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", + "@nx/devkit": "22.4.1", "enquirer": "~2.3.6", "tslib": "^2.3.0" } }, "node_modules/@nx/eslint": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-22.3.3.tgz", - "integrity": "sha512-iG/LvrYf2CFAm2A0kfmRU4VeCTAN5PjUw8xc6oD1zfQ/KTmE/gFG2P1aJBo2mTIyzk9k8ZI0dqIhPLdl/AAtxg==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-22.4.1.tgz", + "integrity": "sha512-x69bfzG3P3DHrRyysRcaMBumAdgnZIr5BFaKp9X/dM3YWqSwKUbuRX4LWjxwMa5f8gNlxPE8RyCadrmcwE8KpA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", "semver": "^7.6.3", "tslib": "^2.3.0", "typescript": "~5.9.2" @@ -8137,15 +8453,15 @@ } }, "node_modules/@nx/eslint-plugin": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-22.3.3.tgz", - "integrity": "sha512-UGAqvYUlKGupBUsO9ppEzYkai1VrrFrUkzHPOVUu5JM4zYGN30ruoO+j3K5OXu5jQLGCmOVfAQD3jzqT2balmw==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-22.4.1.tgz", + "integrity": "sha512-TfWipVXgAIPNw8IDT0fsJ5cUc1q7nqoU+cK9rH1B8jnai6c+b6ZRNQGc/4pdj7qIH439NRX06r+PBgaG4DbLYw==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", "@typescript-eslint/type-utils": "^8.0.0", "@typescript-eslint/utils": "^8.0.0", "chalk": "^4.1.0", @@ -8196,22 +8512,22 @@ } }, "node_modules/@nx/jest": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-22.3.3.tgz", - "integrity": "sha512-BC+5E6oAM6h9x67UCtpsapfLRTwqVLtoG39f5tVZNVZ4a1spdMh0tPHRPtu2hSlsHHtaYsmTvjz5L+N7UguAtA==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-22.4.1.tgz", + "integrity": "sha512-JOiNfrWHJgPKHWf6UwcwfWxXXtRsOXn3STSehEUUYyCvbeNALqOGLdD+MOGPnfV3coboQ4QfKMaYY/bbUBPmug==", "dev": true, "license": "MIT", "dependencies": { "@jest/reporters": "^30.0.2", "@jest/test-result": "^30.0.2", - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", "identity-obj-proxy": "3.0.0", "jest-config": "^30.0.2", "jest-resolve": "^30.0.2", "jest-util": "^30.0.2", - "minimatch": "9.0.3", + "minimatch": "10.1.1", "picocolors": "^1.1.0", "resolve.exports": "2.0.3", "semver": "^7.6.3", @@ -8219,36 +8535,26 @@ "yargs-parser": "21.1.1" } }, - "node_modules/@nx/jest/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@nx/jest/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@nx/js": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-22.3.3.tgz", - "integrity": "sha512-L3MOb8cLc2TIg2R3hGC9FLlcuVqlqST/fztmOihw9wS3lo52E4v2gP/BpYGfRh/u9r6Ekm6LF03Or+VwYzPuzA==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-22.4.1.tgz", + "integrity": "sha512-gkmEjkM/t/76pHQksbb2uhnuE0zZHlYJ22DnROk0XEKePzYn5Rfy9yBJ49N/rmxOLfemEFeoAzLlqqClmRuHyw==", "dev": true, "license": "MIT", "dependencies": { @@ -8259,8 +8565,8 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nx/devkit": "22.3.3", - "@nx/workspace": "22.3.3", + "@nx/devkit": "22.4.1", + "@nx/workspace": "22.4.1", "@zkochan/js-yaml": "0.0.7", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^3.1.0", @@ -8334,19 +8640,19 @@ } }, "node_modules/@nx/module-federation": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-22.3.3.tgz", - "integrity": "sha512-bo0qsW0hDhuyS/WnHQ1nndHcd7VeuMS3bxCwPJkPm8+qsVhWT88GO9WoYnlvdpx/LfTT/N6k1AOVOKAygRuUNQ==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-22.4.1.tgz", + "integrity": "sha512-yAtRrSsUDsS64OQWiuU3yesfMpSx8MFceiT+A8zQjMFpnTXmKyLEXxC34w4TvHv8aE6jDBBDd9z/5FZSSFELOQ==", "dev": true, "license": "MIT", "dependencies": { "@module-federation/enhanced": "^0.21.2", "@module-federation/node": "^2.7.21", "@module-federation/sdk": "^0.21.2", - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@nx/web": "22.3.3", - "@rspack/core": "^1.5.2", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", + "@nx/web": "22.4.1", + "@rspack/core": "1.6.8", "express": "^4.21.2", "http-proxy-middleware": "^3.0.5", "picocolors": "^1.1.0", @@ -8656,41 +8962,41 @@ } }, "node_modules/@nx/nest": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-22.3.3.tgz", - "integrity": "sha512-/+y4MYK5TAeltblkodvKvAvTFwxvX2evpfZMbANfZw8257x5ZC2Pjnw1JPNYvfzEclF1NyDGWFM250kd2DdXBA==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-22.4.1.tgz", + "integrity": "sha512-WHxVeoTxTU2TJrwu7R4ngJ6Mh7737wnSz7BAiXNHKNiFv5ZYUgxg9rUWCAoSf4IcMeR/CThXK7L4I8By5UvVRg==", "dev": true, "license": "MIT", "dependencies": { "@nestjs/schematics": "^11.0.0", - "@nx/devkit": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/js": "22.3.3", - "@nx/node": "22.3.3", + "@nx/devkit": "22.4.1", + "@nx/eslint": "22.4.1", + "@nx/js": "22.4.1", + "@nx/node": "22.4.1", "tslib": "^2.3.0" } }, "node_modules/@nx/node": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/node/-/node-22.3.3.tgz", - "integrity": "sha512-/ICmyoB5oIrJ3CnsB0QqUXSNepL20AFYvmQNP5EoqVb53eAjm4A1fgpNE6JJ4monzsxMexwoO8ZbYdTYUZWjjw==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/node/-/node-22.4.1.tgz", + "integrity": "sha512-GyUIQ3lPRc0C9ZuE0VNRhrZS/lNBFA6nN7Kym2ENzPqqRwfyJlXN+weiYC+wGZD2miZh8smwWt0avEyJXEJFbQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/docker": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/jest": "22.3.3", - "@nx/js": "22.3.3", + "@nx/devkit": "22.4.1", + "@nx/docker": "22.4.1", + "@nx/eslint": "22.4.1", + "@nx/jest": "22.4.1", + "@nx/js": "22.4.1", "kill-port": "^1.6.1", "tcp-port-used": "^1.0.2", "tslib": "^2.3.0" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.3.3.tgz", - "integrity": "sha512-zBAGFGLal09CxhQkdMpOVwcwa9Y01aFm88jTTn35s/DdIWsfngmPzz0t4mG7u2D05q7TJfGQ31pIf5GkNUjo6g==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.4.1.tgz", + "integrity": "sha512-hC9XTkYpRXJMpDcUzt/yYBQpyA4IrdUg3m5eVJMPZ8uth1l+KAiv31YQL5I044XO4b3yYVuKW+4vlmS8OCppYQ==", "cpu": [ "arm64" ], @@ -8702,9 +9008,9 @@ ] }, "node_modules/@nx/nx-darwin-x64": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-22.3.3.tgz", - "integrity": "sha512-6ZQ6rMqH8NY4Jz+Gc89D5bIH2NxZb5S/vaA4yJ9RrqAfl4QWchNFD5na+aRivSd+UdsYLPKKl6qohet5SE6vOg==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-22.4.1.tgz", + "integrity": "sha512-yaQFbLowg42qIUc0wTYZ7K5V3G+CIsbcphoQARG01gfjtfGCNs71yJ9Q8XvKH7IVzq0shlSohVzMPBg9+1Dp4Q==", "cpu": [ "x64" ], @@ -8716,9 +9022,9 @@ ] }, "node_modules/@nx/nx-freebsd-x64": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.3.3.tgz", - "integrity": "sha512-J/PP5pIOQtR7ZzrFwP6d6h0yfY7r9EravG2m940GsgzGbtZGYIDqnh5Wdt+4uBWPH8VpdNOwFqH0afELtJA3MA==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.4.1.tgz", + "integrity": "sha512-n6Y10jSdPPclMyKi4SSkbri3pHHnWVOQuTgWIAlLUAHAp/t5pAU6ky3BPjxwfqjUehFbvvLYeNEKDFP8vFJXOw==", "cpu": [ "x64" ], @@ -8730,9 +9036,9 @@ ] }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.3.3.tgz", - "integrity": "sha512-/zn0altzM15S7qAgXMaB41vHkEn18HyTVUvRrjmmwaVqk9WfmDmqOQlGWoJ6XCbpvKQ8bh14RyhR9LGw1JJkNA==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.4.1.tgz", + "integrity": "sha512-1wx5aEM3DWXPhYUprp8EBwmS5KGemB940iylFRtHBOVW/pD4nU9QfWAApAC/wkn+Ag7UQpgIG1xNI8TUhrpEpA==", "cpu": [ "arm" ], @@ -8744,9 +9050,9 @@ ] }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.3.3.tgz", - "integrity": "sha512-NmPeCexWIZHW9RM3lDdFENN9C3WtlQ5L4RSNFESIjreS921rgePhulsszYdGnHdcnKPYlBBJnX/NxVsfioBbnQ==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.4.1.tgz", + "integrity": "sha512-Q8ZYk/fm/y/Tve5Snw8HnasmCqyKkaz0A6OU00muR5PhcZF104PniW2JDwXOa+14AwJd0tcRug3OSd17DYHZnQ==", "cpu": [ "arm64" ], @@ -8758,9 +9064,9 @@ ] }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.3.3.tgz", - "integrity": "sha512-K02U88Q0dpvCfmSXXvY7KbYQSa1m+mkYeqDBRHp11yHk1GoIqaHp8oEWda7FV4gsriNExPSS5tX1/QGVoLZrCw==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.4.1.tgz", + "integrity": "sha512-73QLboxmFxQz3cur8SUrYNdf01SrfECKs8IYfD6kmJuxI+5Mjvd25NxAakqHQPuZt2MW6wD7V6T9H2lhIiRUZQ==", "cpu": [ "arm64" ], @@ -8772,9 +9078,9 @@ ] }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.3.3.tgz", - "integrity": "sha512-04TEbvgwRaB9ifr39YwJmWh3RuXb4Ry4m84SOJyjNXAfPrepcWgfIQn1VL2ul1Ybq+P023dLO9ME8uqFh6j1YQ==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.4.1.tgz", + "integrity": "sha512-jUT+Eh44WwwgVFsAMw8ZhSHOENCB9dUfFfMA1dabzCRzPRHGn1cGNROEBwOzcr69yuwrkCk8MBXKcPTEBpgZiQ==", "cpu": [ "x64" ], @@ -8786,9 +9092,9 @@ ] }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.3.3.tgz", - "integrity": "sha512-uxBXx5q+S5OGatbYDxnamsKXRKlYn+Eq1nrCAHaf8rIfRoHlDiRV2PqtWuF+O2pxR5FWKpvr+/sZtt9rAf7KMw==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.4.1.tgz", + "integrity": "sha512-gIchvqNK//74oYuqUs96W+I+ZnOHJzGy/RH5sAnW2JexPGxJNEoWIlyHJ/CedJ/h7WGWZFJpu7TXhqlKWeVFLw==", "cpu": [ "x64" ], @@ -8800,9 +9106,9 @@ ] }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.3.3.tgz", - "integrity": "sha512-aOwlfD6ZA1K6hjZtbhBSp7s1yi3sHbMpLCa4stXzfhCCpKUv46HU/EdiWdE1N8AsyNFemPZFq81k1VTowcACdg==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.4.1.tgz", + "integrity": "sha512-209BtB0PFqrTT8sCehjI7zWznersXjTLEwa/hy4WKKlRbaiepWebYNJWoSfBz0ZOYBGuLX15M4R7t57fM9gySA==", "cpu": [ "arm64" ], @@ -8814,9 +9120,9 @@ ] }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.3.3.tgz", - "integrity": "sha512-EDR8BtqeDvVNQ+kPwnfeSfmerYetitU3tDkxOMIybjKJDh69U2JwTB8n9ARwNaZQbNk7sCGNRUSZFTbAAUKvuQ==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.4.1.tgz", + "integrity": "sha512-QRgvgkTBLipoRJGofg5MlzMsWhnjpjQfssuyCSBmm1tjCdatBIDac5l6Z4xaUicPmjLzE3hPfnvX/t+ivRYKpA==", "cpu": [ "x64" ], @@ -8828,18 +9134,18 @@ ] }, "node_modules/@nx/rspack": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-22.3.3.tgz", - "integrity": "sha512-5GDYYeUctJTzWX3DYSvVQvbK+GMB9PX9m4FmjNRCaxVGWZAe1LM7oQz61vj501m+CbkXxh1+hsVTPXzYOtTolQ==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-22.4.1.tgz", + "integrity": "sha512-BFzACKnr5/a8bJxEe63QiVt2DDRFfXdBFAl3GThelQESU3t/fKFfcIXdIdUhRj+rPF8c23ywWftkmSLD/jhuCA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/web": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "@rspack/core": "^1.5.2", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", + "@nx/module-federation": "22.4.1", + "@nx/web": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", + "@rspack/core": "1.6.8", "@rspack/dev-server": "^1.1.4", "@rspack/plugin-react-refresh": "^1.0.0", "autoprefixer": "^10.4.9", @@ -9259,17 +9565,17 @@ } }, "node_modules/@nx/storybook": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-22.3.3.tgz", - "integrity": "sha512-l4f6nOjcJm2w/rH82aBaKtJyBYOD5gXkvizQQShKro0Pykjs6eTp3rpUkttwm/iT/f2torSU54ys10YFRU5Ysg==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-22.4.1.tgz", + "integrity": "sha512-ICJm+T6RTXhdYVLjAthoJ9VJiCmNN4wF7TNeKaa622UWN2UpXOszgkcCNr633UvOqPOmmm/E7M520hjMsmLwQA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/cypress": "22.3.3", - "@nx/devkit": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/cypress": "22.4.1", + "@nx/devkit": "22.4.1", + "@nx/eslint": "22.4.1", + "@nx/js": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", "semver": "^7.6.3", "tslib": "^2.3.0" }, @@ -9278,14 +9584,14 @@ } }, "node_modules/@nx/web": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/web/-/web-22.3.3.tgz", - "integrity": "sha512-0iuAxXCljxCAfQ5N4SffMuf0CuUFGJoO5nzOTqnZ60pRy+JIWZ+DXfh7bfHxTEcE3JQ6nT/hbZVLPMVNleoy7Q==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/web/-/web-22.4.1.tgz", + "integrity": "sha512-zLoMM/5tvoHvJU0E6Kz4bpx4pk0rPCJ8biLtPtj3svKPId4r9CVd2RFehObXjllnFWsGN4TdLrbbRp0SkRhyZA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", "detect-port": "^1.5.1", "http-server": "^14.1.0", "picocolors": "^1.1.0", @@ -9293,16 +9599,16 @@ } }, "node_modules/@nx/webpack": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-22.3.3.tgz", - "integrity": "sha512-Ga8KuMoTl7fVvOEMPk+l/+C//IHwbLeCyhBx4+9xsB6o+TqvB/P7M5S70VRB+BIpf9JRgO7KU6ZfabAUkDMqTA==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-22.4.1.tgz", + "integrity": "sha512-D2vP8jUYEN96ORF61QfyeWDBmWGptHpLFoGlFZH3IRpn8Ko/HXnpMDpruZFsz1txR5RIpNMRhY2gWVnPpkyF3A==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.23.2", - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.4.1", + "@nx/js": "22.4.1", + "@phenomnomnominal/tsquery": "~6.1.4", "ajv": "^8.12.0", "autoprefixer": "^10.4.9", "babel-loader": "^9.1.2", @@ -9510,17 +9816,17 @@ } }, "node_modules/@nx/workspace": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-22.3.3.tgz", - "integrity": "sha512-A7Qd1Yi/hp/VPvig6tV+JmlYVSA4WhckNkP1giYZoESpGLxRlpwINpd5ii3oafOlglUdEZ8AiS3X+RUg9QmCAQ==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-22.4.1.tgz", + "integrity": "sha512-aaOLAsO8/0akXXUXQr0tZBwd/PDaqdfdxKHKB8LHD53XtkugAp/ceRpmWh1ZiSNT5JSYYCKmchBkqTKBhY9QbQ==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", + "@nx/devkit": "22.4.1", "@zkochan/js-yaml": "0.0.7", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "22.3.3", + "nx": "22.4.1", "picomatch": "4.0.2", "semver": "^7.6.3", "tslib": "^2.3.0", @@ -9571,9 +9877,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.96.0.tgz", - "integrity": "sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==", + "version": "0.106.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.106.0.tgz", + "integrity": "sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -9954,13 +10260,14 @@ } }, "node_modules/@phenomnomnominal/tsquery": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", - "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-6.1.4.tgz", + "integrity": "sha512-3tHlGy/fxjJCHqIV8nelAzbRTNkCUY+k7lqBGKNuQz99H2OKGRt6oU+U2SZs6LYrbOe8mxMFl6kq6gzHapFRkw==", "dev": true, "license": "MIT", "dependencies": { - "esquery": "^1.4.0" + "@types/esquery": "^1.5.0", + "esquery": "^1.5.0" }, "peerDependencies": { "typescript": "^3 || ^4 || ^5" @@ -10097,9 +10404,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.47.tgz", - "integrity": "sha512-vPP9/MZzESh9QtmvQYojXP/midjgkkc1E4AdnPPAzQXo668ncHJcVLKjJKzoBdsQmaIvNjrMdsCwES8vTQHRQw==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.58.tgz", + "integrity": "sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug==", "cpu": [ "arm64" ], @@ -10113,9 +10420,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.47.tgz", - "integrity": "sha512-Lc3nrkxeaDVCVl8qR3qoxh6ltDZfkQ98j5vwIr5ALPkgjZtDK4BGCrrBoLpGVMg+csWcaqUbwbKwH5yvVa0oOw==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.58.tgz", + "integrity": "sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q==", "cpu": [ "arm64" ], @@ -10129,9 +10436,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.47.tgz", - "integrity": "sha512-eBYxQDwP0O33plqNVqOtUHqRiSYVneAknviM5XMawke3mwMuVlAsohtOqEjbCEl/Loi/FWdVeks5WkqAkzkYWQ==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.58.tgz", + "integrity": "sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw==", "cpu": [ "x64" ], @@ -10145,9 +10452,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.47.tgz", - "integrity": "sha512-Ns+kgp2+1Iq/44bY/Z30DETUSiHY7ZuqaOgD5bHVW++8vme9rdiWsN4yG4rRPXkdgzjvQ9TDHmZZKfY4/G11AA==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.58.tgz", + "integrity": "sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg==", "cpu": [ "x64" ], @@ -10161,9 +10468,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.47.tgz", - "integrity": "sha512-4PecgWCJhTA2EFOlptYJiNyVP2MrVP4cWdndpOu3WmXqWqZUmSubhb4YUAIxAxnXATlGjC1WjxNPhV7ZllNgdA==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.58.tgz", + "integrity": "sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag==", "cpu": [ "arm" ], @@ -10177,9 +10484,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.47.tgz", - "integrity": "sha512-CyIunZ6D9U9Xg94roQI1INt/bLkOpPsZjZZkiaAZ0r6uccQdICmC99M9RUPlMLw/qg4yEWLlQhG73W/mG437NA==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.58.tgz", + "integrity": "sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw==", "cpu": [ "arm64" ], @@ -10193,9 +10500,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.47.tgz", - "integrity": "sha512-doozc/Goe7qRCSnzfJbFINTHsMktqmZQmweull6hsZZ9sjNWQ6BWQnbvOlfZJe4xE5NxM1NhPnY5Giqnl3ZrYQ==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.58.tgz", + "integrity": "sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ==", "cpu": [ "arm64" ], @@ -10209,9 +10516,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.47.tgz", - "integrity": "sha512-fodvSMf6Aqwa0wEUSTPewmmZOD44rc5Tpr5p9NkwQ6W1SSpUKzD3SwpJIgANDOhwiYhDuiIaYPGB7Ujkx1q0UQ==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.58.tgz", + "integrity": "sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ==", "cpu": [ "x64" ], @@ -10225,9 +10532,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.47.tgz", - "integrity": "sha512-Rxm5hYc0mGjwLh5sjlGmMygxAaV2gnsx7CNm2lsb47oyt5UQyPDZf3GP/ct8BEcwuikdqzsrrlIp8+kCSvMFNQ==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.58.tgz", + "integrity": "sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A==", "cpu": [ "x64" ], @@ -10241,9 +10548,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.47.tgz", - "integrity": "sha512-YakuVe+Gc87jjxazBL34hbr8RJpRuFBhun7NEqoChVDlH5FLhLXjAPHqZd990TVGVNkemourf817Z8u2fONS8w==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.58.tgz", + "integrity": "sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww==", "cpu": [ "arm64" ], @@ -10257,43 +10564,43 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.47.tgz", - "integrity": "sha512-ak2GvTFQz3UAOw8cuQq8pWE+TNygQB6O47rMhvevvTzETh7VkHRFtRUwJynX5hwzFvQMP6G0az5JrBGuwaMwYQ==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.58.tgz", + "integrity": "sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw==", "cpu": [ "wasm32" ], "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.7" + "@napi-rs/wasm-runtime": "^1.1.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.47.tgz", - "integrity": "sha512-o5BpmBnXU+Cj+9+ndMcdKjhZlPb79dVPBZnWwMnI4RlNSSq5yOvFZqvfPYbyacvnW03Na4n5XXQAPhu3RydZ0w==", - "cpu": [ - "arm64" - ], + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" } }, - "node_modules/@rolldown/binding-win32-ia32-msvc": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.47.tgz", - "integrity": "sha512-FVOmfyYehNE92IfC9Kgs913UerDog2M1m+FADJypKz0gmRg3UyTt4o1cZMCAl7MiR89JpM9jegNO1nXuP1w1vw==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.58.tgz", + "integrity": "sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg==", "cpu": [ - "ia32" + "arm64" ], "license": "MIT", "optional": true, @@ -10305,9 +10612,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.47.tgz", - "integrity": "sha512-by/70F13IUE101Bat0oeH8miwWX5mhMFPk1yjCdxoTNHTyTdLgb0THNaebRM6AP7Kz+O3O2qx87sruYuF5UxHg==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.58.tgz", + "integrity": "sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q==", "cpu": [ "x64" ], @@ -10321,9 +10628,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", - "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.58.tgz", + "integrity": "sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==", "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -10613,28 +10920,28 @@ ] }, "node_modules/@rspack/binding": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.3.tgz", - "integrity": "sha512-bWAKligHxelx3XxOgFmK6k1vR+ANxjBXLXTmgOiZxsJNScHJap3HYViXWJHKj5jvdXEvg9sC8TE7WNctCfa8iQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.8.tgz", + "integrity": "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.5.3", - "@rspack/binding-darwin-x64": "1.5.3", - "@rspack/binding-linux-arm64-gnu": "1.5.3", - "@rspack/binding-linux-arm64-musl": "1.5.3", - "@rspack/binding-linux-x64-gnu": "1.5.3", - "@rspack/binding-linux-x64-musl": "1.5.3", - "@rspack/binding-wasm32-wasi": "1.5.3", - "@rspack/binding-win32-arm64-msvc": "1.5.3", - "@rspack/binding-win32-ia32-msvc": "1.5.3", - "@rspack/binding-win32-x64-msvc": "1.5.3" + "@rspack/binding-darwin-arm64": "1.6.8", + "@rspack/binding-darwin-x64": "1.6.8", + "@rspack/binding-linux-arm64-gnu": "1.6.8", + "@rspack/binding-linux-arm64-musl": "1.6.8", + "@rspack/binding-linux-x64-gnu": "1.6.8", + "@rspack/binding-linux-x64-musl": "1.6.8", + "@rspack/binding-wasm32-wasi": "1.6.8", + "@rspack/binding-win32-arm64-msvc": "1.6.8", + "@rspack/binding-win32-ia32-msvc": "1.6.8", + "@rspack/binding-win32-x64-msvc": "1.6.8" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.3.tgz", - "integrity": "sha512-8R1uqr5E2CzRZjsA1QLXkD4xwcsiHmLJTIzCNj9QJ4+lCw6XgtPqpHZuk3zNROLayijEKwotGXJFHJIbgv1clA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.8.tgz", + "integrity": "sha512-e8CTQtzaeGnf+BIzR7wRMUwKfIg0jd/sxMRc1Vd0bCMHBhSN9EsGoMuJJaKeRrSmy2nwMCNWHIG+TvT1CEKg+A==", "cpu": [ "arm64" ], @@ -10646,9 +10953,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.3.tgz", - "integrity": "sha512-R4sb+scZbaBasyS+TQ6dRvv+f/2ZaZ0nXgY7t/ehcuGRvUz3S7FTJF/Mr/Ocxj5oVfb06thDAm+zaAVg+hsM9A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.8.tgz", + "integrity": "sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==", "cpu": [ "x64" ], @@ -10660,9 +10967,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.3.tgz", - "integrity": "sha512-NeDJJRNTLx8wOQT+si90th7cdt04I2F697Mp5w0a3Jf3XHAmsraBMn0phdLGWJoUWrrfVGthjgZDl5lcc1UHEA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.8.tgz", + "integrity": "sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==", "cpu": [ "arm64" ], @@ -10674,9 +10981,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.3.tgz", - "integrity": "sha512-M9utPq9s7zJkKapUlyfwwYT/rjZ+XM56NHQMUH9MVYgMJIl+66QURgWUXCAbuogxf1XWayUGQaZsgypoOrTG9A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.8.tgz", + "integrity": "sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==", "cpu": [ "arm64" ], @@ -10688,9 +10995,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.3.tgz", - "integrity": "sha512-AsKqU4pIg0yYg1VvSEU0NspIwCexqXD2AYE0wujAAwBo0hOfbt5dl1JCK7idiZdIQvoFg86HbfGwdHIVcFLI0w==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.8.tgz", + "integrity": "sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==", "cpu": [ "x64" ], @@ -10702,9 +11009,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.3.tgz", - "integrity": "sha512-0aHuvDef92pFZaHhk8Mp8RP9TfTzhQ+Pjqrc2ixRS/FeJA+jVB2CSaYlAPP4QrgXdmW7tewSxEw8hYhF9CNv/A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.8.tgz", + "integrity": "sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==", "cpu": [ "x64" ], @@ -10716,9 +11023,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.3.tgz", - "integrity": "sha512-Y7KN/ZRuWcFdjCzuZE0JsPwTqJAz1aipJsEOI3whBUj9Va2RwbR9r3vbW6OscS0Wm3rTJAfqH0xwx9x3GksnAw==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.8.tgz", + "integrity": "sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==", "cpu": [ "wasm32" ], @@ -10726,13 +11033,13 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.1" + "@napi-rs/wasm-runtime": "1.0.7" } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.3.tgz", - "integrity": "sha512-I9SqobDwFwcIUNzr+VwvR2lUGqfarOpFDp7mZmA6+qO/V0yJxS0aqBIwNoZB/UFPbUh71OdmFavBzcTYE9vPSg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.8.tgz", + "integrity": "sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==", "cpu": [ "arm64" ], @@ -10744,9 +11051,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.3.tgz", - "integrity": "sha512-pPSzSycfK03lLNxzwEkrRUfqETB7y0KEEbO0HcGX63EC9Ne4SILJfkkH55G0PO4aT/dfAosAlkf6V64ATgrHGA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.8.tgz", + "integrity": "sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==", "cpu": [ "ia32" ], @@ -10758,9 +11065,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.3.tgz", - "integrity": "sha512-He/GrFVrCZ4gBrHSxGd7mnwk9A9BDkAeZZEBnfK4n/HfXxU32WX5jiAGacFoJQYFLDOWTAcmxFad37TSs61zXw==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.8.tgz", + "integrity": "sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==", "cpu": [ "x64" ], @@ -10772,15 +11079,15 @@ ] }, "node_modules/@rspack/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.3.tgz", - "integrity": "sha512-EMNXysJyqsfd2aVys5C7GDZKaLEcoN5qgs7ZFhWOWJGKgBqjdKTljyRTd4RRZV4fV6iAko/WrxnAxmzZNk8mjA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.8.tgz", + "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime-tools": "0.18.0", - "@rspack/binding": "1.5.3", - "@rspack/lite-tapable": "1.0.1" + "@module-federation/runtime-tools": "0.21.6", + "@rspack/binding": "1.6.8", + "@rspack/lite-tapable": "1.1.0" }, "engines": { "node": ">=18.12.0" @@ -10794,83 +11101,99 @@ } } }, - "node_modules/@rspack/core/node_modules/@module-federation/error-codes": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.18.0.tgz", - "integrity": "sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.18.0.tgz", - "integrity": "sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.18.0", - "@module-federation/runtime-core": "0.18.0", - "@module-federation/sdk": "0.18.0" - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime-core": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.18.0.tgz", - "integrity": "sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==", + "node_modules/@rspack/dev-server": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.2.1.tgz", + "integrity": "sha512-e/ARvskYn2Qdd02qLvc0i6H9BnOmzP0xGHS2XCr7GZ3t2k5uC5ZlLkeN1iEebU0FkAW+6ot89NahFo3nupKuww==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.18.0", - "@module-federation/sdk": "0.18.0" + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "peerDependencies": { + "@rspack/core": "*" } }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime-tools": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.18.0.tgz", - "integrity": "sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==", + "node_modules/@rspack/dev-server/node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.18.0", - "@module-federation/webpack-bundler-runtime": "0.18.0" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@rspack/core/node_modules/@module-federation/sdk": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.18.0.tgz", - "integrity": "sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rspack/core/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.18.0.tgz", - "integrity": "sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==", + "node_modules/@rspack/dev-server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.18.0", - "@module-federation/sdk": "0.18.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@rspack/dev-server": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.4.tgz", - "integrity": "sha512-kGHYX2jYf3ZiHwVl0aUEPBOBEIG1aWleCDCAi+Jg32KUu3qr/zDUpCEd0wPuHfLEgk0X0xAEYCS6JMO7nBStNQ==", + "node_modules/@rspack/dev-server/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^3.6.0", - "http-proxy-middleware": "^2.0.9", - "p-retry": "^6.2.0", - "webpack-dev-server": "5.2.2", - "ws": "^8.18.0" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 18.12.0" - }, - "peerDependencies": { - "@rspack/core": "*" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/@rspack/dev-server/node_modules/chokidar": { @@ -10898,6 +11221,112 @@ "fsevents": "~2.3.2" } }, + "node_modules/@rspack/dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@rspack/dev-server/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@rspack/dev-server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@rspack/dev-server/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -10911,6 +11340,27 @@ "node": ">= 6" } }, + "node_modules/@rspack/dev-server/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/@rspack/dev-server/node_modules/http-proxy-middleware": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", @@ -10936,6 +11386,73 @@ } } }, + "node_modules/@rspack/dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rspack/dev-server/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rspack/dev-server/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/dev-server/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@rspack/dev-server/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -10949,6 +11466,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@rspack/dev-server/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/@rspack/dev-server/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -10962,20 +11495,79 @@ "node": ">=8.10.0" } }, - "node_modules/@rspack/lite-tapable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz", - "integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==", + "node_modules/@rspack/dev-server/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.8.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/dev-server/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, + "node_modules/@rspack/lite-tapable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "dev": true, + "license": "MIT" + }, "node_modules/@rspack/plugin-react-refresh": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.5.3.tgz", - "integrity": "sha512-VOnQMf3YOHkTqJ0+BJbrYga4tQAWNwoAnkgwRauXB4HOyCc5wLfBs9DcOFla/2usnRT3Sq6CMVhXmdPobwAoTA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.0.tgz", + "integrity": "sha512-OO53gkrte/Ty4iRXxxM6lkwPGxsSsupFKdrPFnjwFIYrPvFLjeolAl5cTx+FzO5hYygJiGnw7iEKTmD+ptxqDA==", "dev": true, "license": "MIT", "dependencies": { @@ -11000,13 +11592,13 @@ "license": "MIT" }, "node_modules/@schematics/angular": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.0.4.tgz", - "integrity": "sha512-/jJOf3iLvTaVa25xwiYLsfmidVAzC6rPy3Nl85iRo5bVod8be+KhHTn8aGq/8o7pzzB6Cin1oLs+riPR1nLVhg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.1.1.tgz", + "integrity": "sha512-WijqITteakpFOplx7IGHIdBOdTU04Ul4qweilY1CRK3KdzQRuAf31KiKUFrJiGW076cyokmAQmBoZcngh9rCNw==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.0.4", - "@angular-devkit/schematics": "21.0.4", + "@angular-devkit/core": "21.1.1", + "@angular-devkit/schematics": "21.1.1", "jsonc-parser": "3.3.1" }, "engines": { @@ -11066,16 +11658,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@sigstore/sign/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/@sigstore/tuf": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", @@ -11336,6 +11918,22 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@storybook/builder-webpack5/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@storybook/builder-webpack5/node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -11432,6 +12030,20 @@ "dev": true, "license": "MIT" }, + "node_modules/@storybook/builder-webpack5/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", @@ -11823,10 +12435,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", - "dev": true, + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "license": "MIT", "optional": true, "dependencies": { @@ -12264,6 +12875,16 @@ "@types/estree": "*" } }, + "node_modules/@types/esquery": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/esquery/-/esquery-1.5.4.tgz", + "integrity": "sha512-yYO4Q8H+KJHKW1rEeSzHxcZi90durqYgWVfnh5K6ZADVBjBv2e1NEveYX5yT2bffgN7RqzH3k9930m+i2yBoMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -12271,16 +12892,16 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { @@ -13863,26 +14484,26 @@ } }, "node_modules/algoliasearch": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.40.1.tgz", - "integrity": "sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.2.tgz", + "integrity": "sha512-qqAXW9QvKf2tTyhpDA4qXv1IfBwD2eduSW6tUEBFIfCeE9gn9HQ9I5+MaKoenRuHrzk5sQoNh1/iof8mY7uD6Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/abtesting": "1.6.1", - "@algolia/client-abtesting": "5.40.1", - "@algolia/client-analytics": "5.40.1", - "@algolia/client-common": "5.40.1", - "@algolia/client-insights": "5.40.1", - "@algolia/client-personalization": "5.40.1", - "@algolia/client-query-suggestions": "5.40.1", - "@algolia/client-search": "5.40.1", - "@algolia/ingestion": "1.40.1", - "@algolia/monitoring": "1.40.1", - "@algolia/recommend": "5.40.1", - "@algolia/requester-browser-xhr": "5.40.1", - "@algolia/requester-fetch": "5.40.1", - "@algolia/requester-node-http": "5.40.1" + "@algolia/abtesting": "1.12.2", + "@algolia/client-abtesting": "5.46.2", + "@algolia/client-analytics": "5.46.2", + "@algolia/client-common": "5.46.2", + "@algolia/client-insights": "5.46.2", + "@algolia/client-personalization": "5.46.2", + "@algolia/client-query-suggestions": "5.46.2", + "@algolia/client-search": "5.46.2", + "@algolia/ingestion": "1.46.2", + "@algolia/monitoring": "1.46.2", + "@algolia/recommend": "5.46.2", + "@algolia/requester-browser-xhr": "5.46.2", + "@algolia/requester-fetch": "5.46.2", + "@algolia/requester-node-http": "5.46.2" }, "engines": { "node": ">= 14.0.0" @@ -14250,9 +14871,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", "dev": true, "funding": [ { @@ -14270,10 +14891,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -15093,6 +15713,22 @@ } } }, + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/c12/node_modules/dotenv": { "version": "16.6.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", @@ -15106,6 +15742,20 @@ "url": "https://dotenvx.com" } }, + "node_modules/c12/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/cacache": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", @@ -15190,19 +15840,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/ssri": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", - "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/cache-manager": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-7.2.0.tgz", @@ -15569,15 +16206,15 @@ "optional": true }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -16387,9 +17024,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", - "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz", + "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==", "dev": true, "license": "ISC", "engines": { @@ -17578,9 +18215,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "dev": true, "license": "MIT", "dependencies": { @@ -18419,9 +19056,9 @@ } }, "node_modules/esbuild": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.26.0.tgz", - "integrity": "sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -18431,32 +19068,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.26.0", - "@esbuild/android-arm": "0.26.0", - "@esbuild/android-arm64": "0.26.0", - "@esbuild/android-x64": "0.26.0", - "@esbuild/darwin-arm64": "0.26.0", - "@esbuild/darwin-x64": "0.26.0", - "@esbuild/freebsd-arm64": "0.26.0", - "@esbuild/freebsd-x64": "0.26.0", - "@esbuild/linux-arm": "0.26.0", - "@esbuild/linux-arm64": "0.26.0", - "@esbuild/linux-ia32": "0.26.0", - "@esbuild/linux-loong64": "0.26.0", - "@esbuild/linux-mips64el": "0.26.0", - "@esbuild/linux-ppc64": "0.26.0", - "@esbuild/linux-riscv64": "0.26.0", - "@esbuild/linux-s390x": "0.26.0", - "@esbuild/linux-x64": "0.26.0", - "@esbuild/netbsd-arm64": "0.26.0", - "@esbuild/netbsd-x64": "0.26.0", - "@esbuild/openbsd-arm64": "0.26.0", - "@esbuild/openbsd-x64": "0.26.0", - "@esbuild/openharmony-arm64": "0.26.0", - "@esbuild/sunos-x64": "0.26.0", - "@esbuild/win32-arm64": "0.26.0", - "@esbuild/win32-ia32": "0.26.0", - "@esbuild/win32-x64": "0.26.0" + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, "node_modules/esbuild-register": { @@ -18475,9 +19112,9 @@ } }, "node_modules/esbuild-wasm": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.26.0.tgz", - "integrity": "sha512-9rZuermDo9ZbWvKBv/vDRaRciCpR4L3rEbZLDs5kDq3TrCHRQZaQipQeV9wK/btpLBzNUBujTrd1uorDxbL/GA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.27.2.tgz", + "integrity": "sha512-eUTnl8eh+v8UZIZh4MrMOKDAc8Lm7+NqP3pyuTORGFY1s/o9WoiJgKnwXy+te2J3hX7iRbFSHEyig7GsPeeJyw==", "dev": true, "license": "MIT", "bin": { @@ -19908,9 +20545,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -19934,16 +20571,16 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -20791,6 +21428,17 @@ "node": ">=0.10.0" } }, + "node_modules/hono": { + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.5.tgz", + "integrity": "sha512-WemPi9/WfyMwZs+ZUXdiwcCh9Y+m7L+8vki9MzDw3jJ+W9Lc+12HGsd368Qc1vZi1xwW8BWMMsnK5efYKPdt4g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/hosted-git-info": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", @@ -20884,6 +21532,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", "dependencies": { @@ -21351,11 +22000,11 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -21461,13 +22110,13 @@ "license": "ISC" }, "node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/internal-slot": { @@ -21815,6 +22464,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -23678,6 +24340,13 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -24315,9 +24984,9 @@ } }, "node_modules/lmdb": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.3.tgz", - "integrity": "sha512-GWV1kVi6uhrXWqe+3NXWO73OYe8fto6q8JMo0HOpk1vf8nEyFWgo4CSNJpIFzsOxOrysVUlcO48qRbQfmKd1gA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.4.tgz", + "integrity": "sha512-+Y2DqovevLkb6DrSQ6SXTYLEd6kvlRbhsxzgJrk7BUfOVA/mt21ak6pFDZDKxiAczHMWxrb02kXBTSTIA0O94A==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -24332,13 +25001,13 @@ "download-lmdb-prebuilds": "bin/download-prebuilds.js" }, "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.4.3", - "@lmdb/lmdb-darwin-x64": "3.4.3", - "@lmdb/lmdb-linux-arm": "3.4.3", - "@lmdb/lmdb-linux-arm64": "3.4.3", - "@lmdb/lmdb-linux-x64": "3.4.3", - "@lmdb/lmdb-win32-arm64": "3.4.3", - "@lmdb/lmdb-win32-x64": "3.4.3" + "@lmdb/lmdb-darwin-arm64": "3.4.4", + "@lmdb/lmdb-darwin-x64": "3.4.4", + "@lmdb/lmdb-linux-arm": "3.4.4", + "@lmdb/lmdb-linux-arm64": "3.4.4", + "@lmdb/lmdb-linux-x64": "3.4.4", + "@lmdb/lmdb-win32-arm64": "3.4.4", + "@lmdb/lmdb-win32-x64": "3.4.4" } }, "node_modules/load-esm": { @@ -24839,29 +25508,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/make-fetch-happen/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", - "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -25732,16 +26378,6 @@ "node": ">=16" } }, - "node_modules/node-gyp/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/node-gyp/node_modules/which": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", @@ -25819,16 +26455,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", @@ -25839,16 +26465,16 @@ } }, "node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "dev": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-install-checks": { @@ -25865,13 +26491,13 @@ } }, "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-package-arg": { @@ -25890,34 +26516,15 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-package-arg/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.1.tgz", - "integrity": "sha512-BM0Upcemlce8/9+HE+/VpWqn3u3mYh6Om/FEC8yPMnEHwf710fW5Q6fhjT1SQyRlZD1G9CJbgfH+rWgAcIvjlQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/npm-packlist": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.1.tgz", - "integrity": "sha512-vaC03b2PqJA6QqmwHi1jNU8fAPXEnnyv4j/W4PVfgm24C4/zZGSVut3z0YUeN0WIFCo1oGOL02+6LbvFK7JL4Q==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", "dev": true, "license": "ISC", "dependencies": { - "ignore-walk": "^8.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -25939,16 +26546,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", - "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/npm-registry-fetch": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", @@ -25969,16 +26566,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-registry-fetch/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -26012,9 +26599,9 @@ "license": "MIT" }, "node_modules/nx": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-22.3.3.tgz", - "integrity": "sha512-pOxtKWUfvf0oD8Geqs8D89Q2xpstRTaSY+F6Ut/Wd0GnEjUjO32SS1ymAM6WggGPHDZN4qpNrd5cfIxQmAbRLg==", + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-22.4.1.tgz", + "integrity": "sha512-SSzG5sAKsvQL4Heva65/Y1ABs3HqrzIJhneba9+5qBVkhw7T2mcMjZB421UDR9akTnDB3uunDnf3NKMKpTcB0A==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -26038,7 +26625,7 @@ "jest-diff": "^30.0.2", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", + "minimatch": "10.1.1", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", @@ -26060,16 +26647,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "22.3.3", - "@nx/nx-darwin-x64": "22.3.3", - "@nx/nx-freebsd-x64": "22.3.3", - "@nx/nx-linux-arm-gnueabihf": "22.3.3", - "@nx/nx-linux-arm64-gnu": "22.3.3", - "@nx/nx-linux-arm64-musl": "22.3.3", - "@nx/nx-linux-x64-gnu": "22.3.3", - "@nx/nx-linux-x64-musl": "22.3.3", - "@nx/nx-win32-arm64-msvc": "22.3.3", - "@nx/nx-win32-x64-msvc": "22.3.3" + "@nx/nx-darwin-arm64": "22.4.1", + "@nx/nx-darwin-x64": "22.4.1", + "@nx/nx-freebsd-x64": "22.4.1", + "@nx/nx-linux-arm-gnueabihf": "22.4.1", + "@nx/nx-linux-arm64-gnu": "22.4.1", + "@nx/nx-linux-arm64-musl": "22.4.1", + "@nx/nx-linux-x64-gnu": "22.4.1", + "@nx/nx-linux-x64-musl": "22.4.1", + "@nx/nx-win32-arm64-msvc": "22.4.1", + "@nx/nx-win32-x64-msvc": "22.4.1" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -26106,16 +26693,6 @@ "tslib": "^2.4.0" } }, - "node_modules/nx/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -26229,16 +26806,16 @@ "license": "MIT" }, "node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -26739,9 +27316,9 @@ } }, "node_modules/ordered-binary": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", - "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", "license": "MIT", "optional": true }, @@ -26890,16 +27467,16 @@ "optional": true }, "node_modules/pacote": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", - "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", + "version": "21.0.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.4.tgz", + "integrity": "sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", @@ -26908,10 +27485,10 @@ "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "sigstore": "^4.0.0", - "ssri": "^12.0.0", + "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { @@ -27411,9 +27988,9 @@ } }, "node_modules/piscina": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", - "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.4.tgz", + "integrity": "sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==", "license": "MIT", "engines": { "node": ">=20.x" @@ -27423,9 +28000,9 @@ } }, "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "dev": true, "license": "MIT", "engines": { @@ -28244,6 +28821,19 @@ "dev": true, "license": "MIT" }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -28359,13 +28949,13 @@ } }, "node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/process-nextick-args": { @@ -28692,12 +29282,12 @@ } }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "license": "MIT", "engines": { - "node": ">= 14.18.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", @@ -29284,13 +29874,13 @@ "optional": true }, "node_modules/rolldown": { - "version": "1.0.0-beta.47", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.47.tgz", - "integrity": "sha512-Mid74GckX1OeFAOYz9KuXeWYhq3xkXbMziYIC+ULVdUzPTG9y70OBSBQDQn9hQP8u/AfhuYw1R0BSg15nBI4Dg==", + "version": "1.0.0-beta.58", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.58.tgz", + "integrity": "sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ==", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.96.0", - "@rolldown/pluginutils": "1.0.0-beta.47" + "@oxc-project/types": "=0.106.0", + "@rolldown/pluginutils": "1.0.0-beta.58" }, "bin": { "rolldown": "bin/cli.mjs" @@ -29299,20 +29889,19 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-beta.47", - "@rolldown/binding-darwin-arm64": "1.0.0-beta.47", - "@rolldown/binding-darwin-x64": "1.0.0-beta.47", - "@rolldown/binding-freebsd-x64": "1.0.0-beta.47", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.47", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.47", - "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.47", - "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.47", - "@rolldown/binding-linux-x64-musl": "1.0.0-beta.47", - "@rolldown/binding-openharmony-arm64": "1.0.0-beta.47", - "@rolldown/binding-wasm32-wasi": "1.0.0-beta.47", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.47", - "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.47", - "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.47" + "@rolldown/binding-android-arm64": "1.0.0-beta.58", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.58", + "@rolldown/binding-darwin-x64": "1.0.0-beta.58", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.58", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.58", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.58", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.58", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.58", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.58", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.58", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.58", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.58", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.58" } }, "node_modules/rollup": { @@ -29637,9 +30226,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.93.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", - "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "version": "1.97.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.1.tgz", + "integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==", "license": "MIT", "dependencies": { "chokidar": "^4.0.0", @@ -29970,9 +30559,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", - "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "version": "16.0.6", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.6.tgz", + "integrity": "sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==", "dev": true, "license": "MIT", "dependencies": { @@ -30010,6 +30599,34 @@ } } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", @@ -30971,16 +31588,16 @@ "license": "BSD-3-Clause" }, "node_modules/ssri": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", - "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/stack-utils": { @@ -31802,9 +32419,9 @@ } }, "node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", + "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -31889,9 +32506,9 @@ "license": "MIT" }, "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "devOptional": true, "license": "BSD-2-Clause", "dependencies": { @@ -32257,9 +32874,9 @@ } }, "node_modules/tree-dump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", - "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -32318,9 +32935,9 @@ } }, "node_modules/ts-checker-rspack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.2.3.tgz", - "integrity": "sha512-Fq2+/sSILEJKWrqoj/H+ytnBbYrudPfRLxaULA/MuL+/3jswXuiR4MOfL30R9XzVUD2km0pSx6bj8yk95IEOaA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.2.6.tgz", + "integrity": "sha512-aAJIfoNr2cPu8G6mqp/oPoNlUT/LgNoqt2n3SsbxWG0TwQogbjsYsr2f/fdsufUDoGDu8Jolmpf3L4PmIH/cEg==", "dev": true, "license": "MIT", "dependencies": { @@ -32333,7 +32950,7 @@ "picocolors": "^1.1.1" }, "peerDependencies": { - "@rspack/core": "^1.0.0", + "@rspack/core": "^1.0.0 || ^2.0.0-0", "typescript": ">=3.8.0" }, "peerDependenciesMeta": { @@ -32342,13 +32959,6 @@ } } }, - "node_modules/ts-checker-rspack-plugin/node_modules/@rspack/lite-tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", - "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", - "dev": true, - "license": "MIT" - }, "node_modules/ts-checker-rspack-plugin/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -32398,12 +33008,20 @@ } }, "node_modules/ts-checker-rspack-plugin/node_modules/memfs": { - "version": "4.51.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz", - "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==", + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", + "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-to-fsa": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -32414,6 +33032,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/ts-checker-rspack-plugin/node_modules/minimatch": { @@ -33318,13 +33939,13 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/validator": { @@ -33353,12 +33974,12 @@ } }, "node_modules/vite": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", - "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -33426,463 +34047,6 @@ } } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -33974,9 +34138,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz", + "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -34025,9 +34189,9 @@ } }, "node_modules/webpack": { - "version": "5.104.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz", - "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index a664d58d2..eed936456 100644 --- a/package.json +++ b/package.json @@ -54,17 +54,17 @@ "workspace-generator": "nx workspace-generator" }, "dependencies": { - "@angular/animations": "21.0.6", - "@angular/cdk": "21.0.5", - "@angular/common": "21.0.6", - "@angular/compiler": "21.0.6", - "@angular/core": "21.0.6", - "@angular/forms": "21.0.6", - "@angular/material": "21.0.5", - "@angular/platform-browser": "21.0.6", - "@angular/platform-browser-dynamic": "21.0.6", - "@angular/router": "21.0.6", - "@angular/service-worker": "21.0.6", + "@angular/animations": "21.1.1", + "@angular/cdk": "21.1.1", + "@angular/common": "21.1.1", + "@angular/compiler": "21.1.1", + "@angular/core": "21.1.1", + "@angular/forms": "21.1.1", + "@angular/material": "21.1.1", + "@angular/platform-browser": "21.1.1", + "@angular/platform-browser-dynamic": "21.1.1", + "@angular/router": "21.1.1", + "@angular/service-worker": "21.1.1", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.5", @@ -136,32 +136,32 @@ "zone.js": "0.16.0" }, "devDependencies": { - "@angular-devkit/build-angular": "21.0.4", - "@angular-devkit/core": "21.0.4", - "@angular-devkit/schematics": "21.0.4", + "@angular-devkit/build-angular": "21.1.1", + "@angular-devkit/core": "21.1.1", + "@angular-devkit/schematics": "21.1.1", "@angular-eslint/eslint-plugin": "21.1.0", "@angular-eslint/eslint-plugin-template": "21.1.0", "@angular-eslint/template-parser": "21.1.0", - "@angular/cli": "21.0.4", - "@angular/compiler-cli": "21.0.6", - "@angular/language-service": "21.0.6", - "@angular/localize": "21.0.6", - "@angular/pwa": "21.0.4", + "@angular/cli": "21.1.1", + "@angular/compiler-cli": "21.1.1", + "@angular/language-service": "21.1.1", + "@angular/localize": "21.1.1", + "@angular/pwa": "21.1.1", "@eslint/eslintrc": "3.3.1", "@eslint/js": "9.35.0", "@nestjs/schematics": "11.0.9", "@nestjs/testing": "11.1.8", - "@nx/angular": "22.3.3", - "@nx/eslint-plugin": "22.3.3", - "@nx/jest": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/nest": "22.3.3", - "@nx/node": "22.3.3", - "@nx/storybook": "22.3.3", - "@nx/web": "22.3.3", - "@nx/workspace": "22.3.3", - "@schematics/angular": "21.0.4", + "@nx/angular": "22.4.1", + "@nx/eslint-plugin": "22.4.1", + "@nx/jest": "22.4.1", + "@nx/js": "22.4.1", + "@nx/module-federation": "22.4.1", + "@nx/nest": "22.4.1", + "@nx/node": "22.4.1", + "@nx/storybook": "22.4.1", + "@nx/web": "22.4.1", + "@nx/workspace": "22.4.1", + "@schematics/angular": "21.1.1", "@storybook/addon-docs": "10.1.10", "@storybook/angular": "10.1.10", "@trivago/prettier-plugin-sort-imports": "5.2.2", @@ -184,7 +184,7 @@ "jest": "30.2.0", "jest-environment-jsdom": "30.2.0", "jest-preset-angular": "16.0.0", - "nx": "22.3.3", + "nx": "22.4.1", "prettier": "3.8.1", "prettier-plugin-organize-attributes": "1.0.0", "prisma": "6.19.0", From 155d533ee94261fcb718c417abeff1579ef4a0b8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 26 Jan 2026 21:38:05 +0100 Subject: [PATCH 37/76] Bugfix/add missing guard to symbol autocomplete component (#6255) * Add missing guard --- .../lib/symbol-autocomplete/symbol-autocomplete.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts index 11d6f09dc..c74e8a077 100644 --- a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts +++ b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts @@ -121,7 +121,7 @@ export class GfSymbolAutocompleteComponent this.control.valueChanges .pipe( filter((query) => { - if (query.length === 0) { + if (query?.length === 0) { this.showDefaultOptions(); return false; From 9eb5943666a35122ee05b4f5f299222e28c6cacf Mon Sep 17 00:00:00 2001 From: Karel De Smet Date: Tue, 27 Jan 2026 17:32:12 +0100 Subject: [PATCH 38/76] Task/improve usability when adding currency in market data section of admin control panel (#6225) * Improve usability when adding currency * Update changelog --- CHANGELOG.md | 1 + .../admin-market-data.component.ts | 39 ++++++++----------- .../create-asset-profile-dialog.component.ts | 8 +++- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7805ad11d..b0abeea63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the usability of the create asset profile dialog in the market data section of the admin control panel - Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) - Upgraded `angular` from version `21.0.6` to `21.1.1` diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index bc3b0d374..8f956b782 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -63,7 +63,7 @@ import { import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject } from 'rxjs'; -import { distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators'; +import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { AdminMarketDataService } from './admin-market-data.service'; import { GfAssetProfileDialogComponent } from './asset-profile-dialog/asset-profile-dialog.component'; @@ -482,32 +482,27 @@ export class GfAdminMarketDataComponent dialogRef .afterClosed() .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe(({ dataSource, symbol } = {}) => { - if (dataSource && symbol) { + .subscribe((result) => { + if (!result) { + this.router.navigate(['.'], { relativeTo: this.route }); + + return; + } + + const { addAssetProfile, dataSource, symbol } = result; + + if (addAssetProfile && dataSource && symbol) { this.adminService .addAssetProfile({ dataSource, symbol }) - .pipe( - switchMap(() => { - this.isLoading = true; - this.changeDetectorRef.markForCheck(); - - return this.adminService.fetchAdminMarketData({ - filters: this.activeFilters, - take: this.pageSize - }); - }), - takeUntil(this.unsubscribeSubject) - ) - .subscribe(({ marketData }) => { - this.dataSource = new MatTableDataSource(marketData); - this.dataSource.sort = this.sort; - this.isLoading = false; - - this.changeDetectorRef.markForCheck(); + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + this.loadData(); }); + } else { + this.loadData(); } - this.router.navigate(['.'], { relativeTo: this.route }); + this.onOpenAssetProfileDialog({ dataSource, symbol }); }); }); } diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts index 6c180b034..fbf8afa03 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts @@ -101,6 +101,7 @@ export class GfCreateAssetProfileDialogComponent implements OnDestroy, OnInit { public onSubmit() { if (this.mode === 'auto') { this.dialogRef.close({ + addAssetProfile: true, dataSource: this.createAssetProfileForm.get('searchSymbol').value.dataSource, symbol: this.createAssetProfileForm.get('searchSymbol').value.symbol @@ -127,10 +128,15 @@ export class GfCreateAssetProfileDialogComponent implements OnDestroy, OnInit { takeUntil(this.unsubscribeSubject) ) .subscribe(() => { - this.dialogRef.close(); + this.dialogRef.close({ + addAssetProfile: false, + dataSource: this.dataSourceForExchangeRates, + symbol: `${DEFAULT_CURRENCY}${currency}` + }); }); } else if (this.mode === 'manual') { this.dialogRef.close({ + addAssetProfile: true, dataSource: 'MANUAL', symbol: `${this.ghostfolioPrefix}${this.createAssetProfileForm.get('addSymbol').value}` }); From 5de2b02a04bb8ca02d49712802ff8e50fb674cb1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 28 Jan 2026 21:00:51 +0100 Subject: [PATCH 39/76] Task/refactor common helper (#6251) * Refactoring --- libs/common/src/lib/helper.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 9ee7d6220..4db1fcf2d 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -223,8 +223,8 @@ export function getDateFormatString(aLocale?: string) { ); return formatObject - .map((object) => { - switch (object.type) { + .map(({ type, value }) => { + switch (type) { case 'day': return 'dd'; case 'month': @@ -232,7 +232,7 @@ export function getDateFormatString(aLocale?: string) { case 'year': return 'yyyy'; default: - return object.value; + return value; } }) .join(''); @@ -271,8 +271,8 @@ export function getLowercase(object: object, path: string) { export function getNumberFormatDecimal(aLocale?: string) { const formatObject = new Intl.NumberFormat(aLocale).formatToParts(9999.99); - return formatObject.find((object) => { - return object.type === 'decimal'; + return formatObject.find(({ type }) => { + return type === 'decimal'; })?.value; } @@ -281,8 +281,8 @@ export function getNumberFormatGroup(aLocale = getLocale()) { useGrouping: true }).formatToParts(9999.99); - return formatObject.find((object) => { - return object.type === 'group'; + return formatObject.find(({ type }) => { + return type === 'group'; })?.value; } From b8814855672f330a5be9634ec595ec01d597a115 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:31:30 +0100 Subject: [PATCH 40/76] Task/upgrade lodash to version 4.17.23 (#6259) * Upgrade lodash to version 4.17.23 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 22 ++++++++++++++-------- package.json | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0abeea63..0abfb3e76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) - Upgraded `angular` from version `21.0.6` to `21.1.1` +- Upgraded `lodash` from version `4.17.21` to `4.17.23` - Upgraded `Nx` from version `22.3.3` to `22.4.1` - Upgraded `prettier` from version `3.8.0` to `3.8.1` diff --git a/package-lock.json b/package-lock.json index 7d6a8ee64..ebe4197a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,7 @@ "http-status-codes": "2.3.0", "ionicons": "8.0.13", "jsonpath": "1.1.1", - "lodash": "4.17.21", + "lodash": "4.17.23", "marked": "17.0.1", "ms": "3.0.0-canary.1", "ng-extract-i18n-merge": "3.2.1", @@ -125,7 +125,7 @@ "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", - "@types/lodash": "4.17.21", + "@types/lodash": "4.17.23", "@types/node": "22.15.17", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", @@ -7614,6 +7614,12 @@ "url": "https://dotenvx.com" } }, + "node_modules/@nestjs/config/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/@nestjs/core": { "version": "11.1.8", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.8.tgz", @@ -13076,9 +13082,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", "dev": true, "license": "MIT" }, @@ -25070,9 +25076,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, "node_modules/lodash-es": { diff --git a/package.json b/package.json index eed936456..55087b776 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "http-status-codes": "2.3.0", "ionicons": "8.0.13", "jsonpath": "1.1.1", - "lodash": "4.17.21", + "lodash": "4.17.23", "marked": "17.0.1", "ms": "3.0.0-canary.1", "ng-extract-i18n-merge": "3.2.1", @@ -169,7 +169,7 @@ "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", - "@types/lodash": "4.17.21", + "@types/lodash": "4.17.23", "@types/node": "22.15.17", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", From ad2abbc55ba5ba009c4b17a3d55f552c8f61ab3e Mon Sep 17 00:00:00 2001 From: Lyndros <38167685+Lyndros@users.noreply.github.com> Date: Fri, 30 Jan 2026 13:36:57 +0100 Subject: [PATCH 41/76] Task/improve Spanish translation (#6261) * Improve Spanish translation * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.es.xlf | 180 ++++++++++++------------ 2 files changed, 91 insertions(+), 90 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0abfb3e76..cfb65404c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the usability of the create asset profile dialog in the market data section of the admin control panel - Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) +- Improved the language localization for Spanish (`es`) - Upgraded `angular` from version `21.0.6` to `21.1.1` - Upgraded `lodash` from version `4.17.21` to `4.17.23` - Upgraded `Nx` from version `22.3.3` to `22.4.1` diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 121e9e949..7564e4d80 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -40,7 +40,7 @@ please - please + por favor apps/client/src/app/pages/pricing/pricing-page.html 333 @@ -84,7 +84,7 @@ with - with + con apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 87 @@ -368,7 +368,7 @@ and is driven by the efforts of its contributors - and is driven by the efforts of its contributors + y es impulsado por los esfuerzos de sus contribuidores apps/client/src/app/pages/about/overview/about-overview-page.html 49 @@ -652,7 +652,7 @@ No auto-renewal on membership. - No auto-renewal on membership. + No se renueva automáticamente la membresía. apps/client/src/app/components/user-account-membership/user-account-membership.html 74 @@ -1096,7 +1096,7 @@ Performance with currency effect - Performance with currency effect + Rendimiento con el efecto del tipo de cambio de divisa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 135 @@ -1912,7 +1912,7 @@ Current week - Current week + Semana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 191 @@ -2076,7 +2076,7 @@ or start a discussion at - or start a discussion at + o iniciar una discusión en apps/client/src/app/pages/about/overview/about-overview-page.html 94 @@ -2148,7 +2148,7 @@ Sustainable retirement income - Sustainable retirement income + Ingreso sostenible de retiro apps/client/src/app/pages/portfolio/fire/fire-page.html 41 @@ -2320,7 +2320,7 @@ contact us - contact us + contactarnos apps/client/src/app/pages/pricing/pricing-page.html 336 @@ -2420,7 +2420,7 @@ Latest activities - Latest activities + Últimas actividades apps/client/src/app/pages/public/public-page.html 211 @@ -2536,7 +2536,7 @@ annual interest rate - annual interest rate + tasa de interés anual apps/client/src/app/pages/portfolio/fire/fire-page.html 185 @@ -2656,7 +2656,7 @@ Could not validate form - Could not validate form + No se pudo validar el formulario apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 554 @@ -2892,7 +2892,7 @@ Authentication - Authentication + Autenticación apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 35 @@ -3044,7 +3044,7 @@ If you retire today, you would be able to withdraw - If you retire today, you would be able to withdraw + Si te retirases hoy, podrías sacar apps/client/src/app/pages/portfolio/fire/fire-page.html 68 @@ -3112,7 +3112,7 @@ Looking for a student discount? - Looking for a student discount? + ¿Buscando un descuento para estudiantes? apps/client/src/app/pages/pricing/pricing-page.html 342 @@ -3348,7 +3348,7 @@ Everything in Basic, plus - Everything in Basic, plus + Todo en Básico, más apps/client/src/app/pages/pricing/pricing-page.html 199 @@ -3608,7 +3608,7 @@ Could not save asset profile - Could not save asset profile + No se pudo guardar el perfil del activo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 588 @@ -3812,7 +3812,7 @@ By - By + Por apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -3828,7 +3828,7 @@ Current year - Current year + Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 199 @@ -3864,7 +3864,7 @@ Asset profile has been saved - Asset profile has been saved + El perfil del activo ha sido guardado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 578 @@ -4056,7 +4056,7 @@ View Details - View Details + Ver detalles apps/client/src/app/components/admin-users/admin-users.html 225 @@ -4192,7 +4192,7 @@ per week - per week + por semana apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 130 @@ -4216,7 +4216,7 @@ and we share aggregated key metrics of the platform’s performance - and we share aggregated key metrics of the platform’s performance + y compartimos agregados métricas clave del rendimiento de la plataforma apps/client/src/app/pages/about/overview/about-overview-page.html 32 @@ -4260,7 +4260,7 @@ Website of Thomas Kaul - Website of Thomas Kaul + Sitio web de Thomas Kaul apps/client/src/app/pages/about/overview/about-overview-page.html 44 @@ -4440,7 +4440,7 @@ Sign in with OpenID Connect - Sign in with OpenID Connect + Iniciar sesión con OpenID Connect apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 55 @@ -4532,7 +4532,7 @@ The source code is fully available as open source software (OSS) under the AGPL-3.0 license - The source code is fully available as open source software (OSS) under the AGPL-3.0 license + El código fuente está disponible completamente en software de código abierto (OSS) bajo la licencia AGPL-3.0 apps/client/src/app/pages/about/overview/about-overview-page.html 16 @@ -4604,7 +4604,7 @@ this is projected to increase to - this is projected to increase to + esto se proyecta a aumentar a apps/client/src/app/pages/portfolio/fire/fire-page.html 147 @@ -4656,7 +4656,7 @@ Job ID - Job ID + ID de trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html 34 @@ -4740,7 +4740,7 @@ for - for + para apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 128 @@ -4764,7 +4764,7 @@ Could not parse scraper configuration - Could not parse scraper configuration + No se pudo analizar la configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 509 @@ -4808,7 +4808,7 @@ Edit access - Edit access + Editar acceso apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 11 @@ -4880,7 +4880,7 @@ Get access to 80’000+ tickers from over 50 exchanges - Get access to 80’000+ tickers from over 50 exchanges + Obtén acceso a más de 80,000 tickers de más de 50 exchanges apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 84 @@ -5064,7 +5064,7 @@ less than - less than + menos que apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 129 @@ -5354,7 +5354,7 @@ Ghostfolio Status - Ghostfolio Status + Estado de Ghostfolio apps/client/src/app/pages/about/overview/about-overview-page.html 62 @@ -5362,7 +5362,7 @@ with your university e-mail address - with your university e-mail address + con tu dirección de correo electrónico de la universidad apps/client/src/app/pages/pricing/pricing-page.html 348 @@ -5382,7 +5382,7 @@ and a safe withdrawal rate (SWR) of - and a safe withdrawal rate (SWR) of + y una tasa de retiro segura (SWR) de apps/client/src/app/pages/portfolio/fire/fire-page.html 108 @@ -5546,7 +5546,7 @@ Request it - Request it + Solicitar apps/client/src/app/pages/pricing/pricing-page.html 344 @@ -5602,7 +5602,7 @@ , - , + , apps/client/src/app/pages/portfolio/fire/fire-page.html 145 @@ -5618,7 +5618,7 @@ per month - per month + por mes apps/client/src/app/pages/portfolio/fire/fire-page.html 94 @@ -5866,7 +5866,7 @@ here - here + aquí apps/client/src/app/pages/pricing/pricing-page.html 347 @@ -5874,7 +5874,7 @@ Close Holding - Close Holding + Cerrar posición apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 442 @@ -6175,7 +6175,7 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} - {VAR_PLURAL, plural, =1 {activity} other {activities}} + {VAR_PLURAL, plural, =1 {actividad} other {actividades}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 14 @@ -6255,7 +6255,7 @@ Include in - Include in + Incluir en apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 374 @@ -6539,7 +6539,7 @@ View Holding - View Holding + Ver fondos libs/ui/src/lib/activities-table/activities-table.component.html 450 @@ -6683,7 +6683,7 @@ Oops! Could not update access. - Oops! Could not update access. + Oops! No se pudo actualizar el acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts 178 @@ -6691,7 +6691,7 @@ , based on your total assets of - , based on your total assets of + , basado en tus activos totales de apps/client/src/app/pages/portfolio/fire/fire-page.html 96 @@ -6763,7 +6763,7 @@ Close - Cerca + Cerrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 594 @@ -6807,7 +6807,7 @@ Role - Role + Rol apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 14 @@ -6839,7 +6839,7 @@ Change with currency effect Change - Change with currency effect Change + Cambiar con efecto de cambio dedivisa Cambiar apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 63 @@ -6847,7 +6847,7 @@ If you plan to open an account at - If you plan to open an account at + Si planeas abrir una cuenta en apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -6855,7 +6855,7 @@ Performance with currency effect Performance - Performance with currency effect Performance + Rendimiento con cambio de divisa Rendimiento apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 83 @@ -6879,7 +6879,7 @@ send an e-mail to - send an e-mail to + enviar un correo electrónico a apps/client/src/app/pages/about/overview/about-overview-page.html 87 @@ -6951,7 +6951,7 @@ , assuming a - , assuming a + , asumiendo un apps/client/src/app/pages/portfolio/fire/fire-page.html 174 @@ -6959,7 +6959,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year - to use our referral link and get a Ghostfolio Premium membership for one year + para usar nuestro enlace de referido y obtener una membresía Ghostfolio Premium por un año apps/client/src/app/pages/pricing/pricing-page.html 340 @@ -7039,7 +7039,7 @@ Ghostfolio is a lightweight wealth management application for individuals to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. - Ghostfolio is a lightweight wealth management application for individuals to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. + Ghostfolio es una aplicación de gestión de patrimonio para aquellos individuos que desean realizar un seguimiento de acciones, ETFs o criptomonedas y tomar decisiones de inversión sólidas y basadas en datos. apps/client/src/app/pages/about/overview/about-overview-page.html 10 @@ -7353,7 +7353,7 @@ Check the system status at - Check the system status at + Verificar el estado del sistema en apps/client/src/app/pages/about/overview/about-overview-page.html 57 @@ -7369,7 +7369,7 @@ Change with currency effect - Change with currency effect + Cambiar con el efecto del tipo de cambio de divisa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 116 @@ -7509,7 +7509,7 @@ The project has been initiated by - The project has been initiated by + El proyecto ha sido iniciado por apps/client/src/app/pages/about/overview/about-overview-page.html 40 @@ -7533,7 +7533,7 @@ Total amount - Total amount + Cantidad total apps/client/src/app/pages/portfolio/analysis/analysis-page.html 95 @@ -7625,7 +7625,7 @@ Find account, holding or page... - Find account, holding or page... + Buscar cuenta, posición o página... libs/ui/src/lib/assistant/assistant.component.ts 151 @@ -8049,7 +8049,7 @@ Current month - Current month + Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 195 @@ -8234,7 +8234,7 @@ If you encounter a bug, would like to suggest an improvement or a new feature, please join the Ghostfolio Slack community, post to @ghostfolio_ - If you encounter a bug, would like to suggest an improvement or a new feature, please join the Ghostfolio Slack community, post to @ghostfolio_ + Si encuentras un error, deseas sugerir una mejora o una nueva característica, por favor únete a la comunidad Ghostfolio Slack, publica en @ghostfolio_ apps/client/src/app/pages/about/overview/about-overview-page.html 69 @@ -8266,7 +8266,7 @@ - + apps/client/src/app/components/admin-users/admin-users.html 39 @@ -8334,7 +8334,7 @@ Economic Market Cluster Risks - Economic Market Cluster Risks + Riesgos del clúster de mercados económicos apps/client/src/app/pages/i18n/i18n-page.html 106 @@ -8342,7 +8342,7 @@ Emergency Fund - Emergency Fund + Fondo de emergencia apps/client/src/app/pages/i18n/i18n-page.html 144 @@ -8350,7 +8350,7 @@ Fees - Fees + Comisiones apps/client/src/app/pages/i18n/i18n-page.html 161 @@ -8358,7 +8358,7 @@ Liquidity - Liquidity + Liquidez apps/client/src/app/pages/i18n/i18n-page.html 70 @@ -8366,7 +8366,7 @@ Buying Power - Buying Power + Poder de compra apps/client/src/app/pages/i18n/i18n-page.html 71 @@ -8374,7 +8374,7 @@ Your buying power is below ${thresholdMin} ${baseCurrency} - Your buying power is below ${thresholdMin} ${baseCurrency} + Tu poder de compra es inferior a ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 73 @@ -8382,7 +8382,7 @@ Your buying power is 0 ${baseCurrency} - Your buying power is 0 ${baseCurrency} + Tu poder de compra es 0 ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 77 @@ -8390,7 +8390,7 @@ Your buying power exceeds ${thresholdMin} ${baseCurrency} - Your buying power exceeds ${thresholdMin} ${baseCurrency} + Tu poder de compra excede ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 80 @@ -8422,7 +8422,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% - The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% + La contribución a los mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 112 @@ -8430,7 +8430,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% - The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% + La contribución a los mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) es inferior al ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 117 @@ -8438,7 +8438,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución a los mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 122 @@ -8454,7 +8454,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% - The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% + La contribución a los mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 130 @@ -8462,7 +8462,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% - The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% + La contribución a los mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) es inferior al ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 135 @@ -8470,7 +8470,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución a los mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 140 @@ -8494,7 +8494,7 @@ Asia-Pacific - Asia-Pacific + Asia-Pacífico apps/client/src/app/pages/i18n/i18n-page.html 165 @@ -8502,7 +8502,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + La contribución al mercado de Asia-Pacífico de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 167 @@ -8510,7 +8510,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + La contribución al mercado de Asia-Pacífico de tu inversión actual (${valueRatio}%) es inferior al ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 171 @@ -8518,7 +8518,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución al mercado de Asia-Pacífico de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 175 @@ -8526,7 +8526,7 @@ Emerging Markets - Emerging Markets + Mercados emergentes apps/client/src/app/pages/i18n/i18n-page.html 180 @@ -8534,7 +8534,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + La contribución a los mercados emergentes de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 183 @@ -8542,7 +8542,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + La contribución a los mercados emergentes de tu inversión actual (${valueRatio}%) es inferior al ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 187 @@ -8550,7 +8550,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución a los mercados emergentes de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 191 @@ -8558,7 +8558,7 @@ Europe - Europe + Europa apps/client/src/app/pages/i18n/i18n-page.html 195 @@ -8566,7 +8566,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + La contribución al mercado europeo de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 197 @@ -8574,7 +8574,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + La contribución al mercado europeo de tu inversión actual (${valueRatio}%) es inferior al ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 201 @@ -8582,7 +8582,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución al mercado europeo de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 205 @@ -8694,7 +8694,7 @@ Registration Date - Registration Date + Fecha de registro apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 26 From 9a153076cabfc6a27895a605f26e73ce663aa188 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 30 Jan 2026 19:58:43 +0100 Subject: [PATCH 42/76] Release 2.234.0 (#6262) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfb65404c..f65bbd458 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.234.0 - 2026-01-30 ### Changed diff --git a/package-lock.json b/package-lock.json index ebe4197a4..b8d343edd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.233.0", + "version": "2.234.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.233.0", + "version": "2.234.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 55087b776..44df5228a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.233.0", + "version": "2.234.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 418e8bc843f1aa9e1584d122371f62e527de8708 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 31 Jan 2026 08:32:33 +0100 Subject: [PATCH 43/76] Task/remove deprecated first buy date in portfolio calculator (#6244) * Remove deprecated firstBuyDate * Update changelog --- CHANGELOG.md | 6 +++++ .../calculator/portfolio-calculator.ts | 3 --- ...tfolio-calculator-baln-buy-and-buy.spec.ts | 1 - ...aln-buy-and-sell-in-two-activities.spec.ts | 1 - ...folio-calculator-baln-buy-and-sell.spec.ts | 1 - .../portfolio-calculator-baln-buy.spec.ts | 1 - .../roai/portfolio-calculator-btceur.spec.ts | 1 - ...ator-btcusd-buy-and-sell-partially.spec.ts | 1 - .../roai/portfolio-calculator-btcusd.spec.ts | 1 - .../roai/portfolio-calculator-cash.spec.ts | 1 - .../portfolio-calculator-googl-buy.spec.ts | 1 - ...-calculator-msft-buy-with-dividend.spec.ts | 1 - ...ulator-novn-buy-and-sell-partially.spec.ts | 1 - ...folio-calculator-novn-buy-and-sell.spec.ts | 1 - .../portfolio-calculator-valuable.spec.ts | 1 - .../transaction-point-symbol.interface.ts | 4 ---- .../src/app/portfolio/portfolio.service.ts | 22 ++++++++++++------- .../src/lib/models/timeline-position.ts | 3 --- 18 files changed, 20 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f65bbd458..d1092b049 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Removed the deprecated `firstBuyDate` in the portfolio calculator + ## 2.234.0 - 2026-01-30 ### Changed diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index b3b1d3410..9612ad1c4 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -416,7 +416,6 @@ export abstract class PortfolioCalculator { dividendInBaseCurrency: totalDividendInBaseCurrency, fee: item.fee, feeInBaseCurrency: item.feeInBaseCurrency, - firstBuyDate: item.firstBuyDate, grossPerformance: !hasErrors ? (grossPerformance ?? null) : null, grossPerformancePercentage: !hasErrors ? (grossPerformancePercentage ?? null) @@ -1004,7 +1003,6 @@ export abstract class PortfolioCalculator { fee: oldAccumulatedSymbol.fee.plus(fee), feeInBaseCurrency: oldAccumulatedSymbol.feeInBaseCurrency.plus(feeInBaseCurrency), - firstBuyDate: oldAccumulatedSymbol.firstBuyDate, includeInHoldings: oldAccumulatedSymbol.includeInHoldings, quantity: newQuantity, tags: oldAccumulatedSymbol.tags.concat(tags), @@ -1024,7 +1022,6 @@ export abstract class PortfolioCalculator { averagePrice: unitPrice, dateOfFirstActivity: date, dividend: new Big(0), - firstBuyDate: date, includeInHoldings: INVESTMENT_ACTIVITY_TYPES.includes(type), investment: unitPrice.mul(quantity).mul(factor), quantity: quantity.mul(factor), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index a1021a57b..7858d7546 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -153,7 +153,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('3.2'), feeInBaseCurrency: new Big('3.2'), - firstBuyDate: '2021-11-22', grossPerformance: new Big('36.6'), grossPerformancePercentage: new Big('0.07706261539956593567'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 002730e32..8b40c7b70 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -169,7 +169,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('3.2'), feeInBaseCurrency: new Big('3.2'), - firstBuyDate: '2021-11-22', grossPerformance: new Big('-12.6'), grossPerformancePercentage: new Big('-0.04408677396780965649'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index e4ba70158..fc372f68f 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -153,7 +153,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('3.2'), feeInBaseCurrency: new Big('3.2'), - firstBuyDate: '2021-11-22', grossPerformance: new Big('-12.6'), grossPerformancePercentage: new Big('-0.0440867739678096571'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index e6cae7865..926fae6dc 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -143,7 +143,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('1.55'), feeInBaseCurrency: new Big('1.55'), - firstBuyDate: '2021-11-30', grossPerformance: new Big('24.6'), grossPerformancePercentage: new Big('0.09004392386530014641'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 6cc58a70f..b216438b8 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -204,7 +204,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('4.46'), feeInBaseCurrency: new Big('4.46'), - firstBuyDate: '2021-12-12', grossPerformance: new Big('-1458.72'), grossPerformancePercentage: new Big('-0.03273724696701543726'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 41f1d80a8..14cd4f217 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -167,7 +167,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('0'), feeInBaseCurrency: new Big('0'), - firstBuyDate: '2015-01-01', grossPerformance: new Big('27172.74').mul(0.97373), grossPerformancePercentage: new Big('0.4241983590271396608571'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index b8cecb350..066f33ea3 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -204,7 +204,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('4.46'), feeInBaseCurrency: new Big('4.46'), - firstBuyDate: '2021-12-12', grossPerformance: new Big('-1458.72'), grossPerformancePercentage: new Big('-0.03273724696701543726'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index bbcaba294..bd8afddd7 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -239,7 +239,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big(0), fee: new Big(0), feeInBaseCurrency: new Big(0), - firstBuyDate: '2023-12-31', grossPerformance: new Big(0), grossPerformancePercentage: new Big(0), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index e438d9c6d..28b44e159 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -149,7 +149,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('1'), feeInBaseCurrency: new Big('0.9238'), - firstBuyDate: '2023-01-03', grossPerformance: new Big('27.33').mul(0.8854), grossPerformancePercentage: new Big('0.3066651705565529623'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 88895b8c6..87ef9ed8b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -139,7 +139,6 @@ describe('PortfolioCalculator', () => { dividend: new Big('0.62'), dividendInBaseCurrency: new Big('0.62'), fee: new Big('19'), - firstBuyDate: '2021-09-16', grossPerformance: new Big('33.25'), grossPerformancePercentage: new Big('0.11136043941322258691'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 8c0b1af6a..7a8dc010a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -149,7 +149,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('4.25'), feeInBaseCurrency: new Big('4.25'), - firstBuyDate: '2022-03-07', grossPerformance: new Big('21.93'), grossPerformancePercentage: new Big('0.15113417083448194384'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index c4850db66..02a4e80d8 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -202,7 +202,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('0'), feeInBaseCurrency: new Big('0'), - firstBuyDate: '2022-03-07', grossPerformance: new Big('19.86'), grossPerformancePercentage: new Big('0.13100263852242744063'), grossPerformancePercentageWithCurrencyEffect: new Big( diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 5e73841ce..610a52c06 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -125,7 +125,6 @@ describe('PortfolioCalculator', () => { dividendInBaseCurrency: new Big('0'), fee: new Big('0'), feeInBaseCurrency: new Big('0'), - firstBuyDate: '2022-01-01', grossPerformance: new Big('0'), grossPerformancePercentage: new Big('0'), grossPerformancePercentageWithCurrencyEffect: new Big('0'), diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index ab2351f11..7e7d741ea 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -11,10 +11,6 @@ export interface TransactionPointSymbol { dividend: Big; fee: Big; feeInBaseCurrency: Big; - - /** @deprecated use dateOfFirstActivity instead */ - firstBuyDate: string; - includeInHoldings: boolean; investment: Big; quantity: Big; diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 7db743a43..05df6a8fc 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -576,8 +576,8 @@ export class PortfolioService { for (const { activitiesCount, currency, + dateOfFirstActivity, dividend, - firstBuyDate, grossPerformance, grossPerformanceWithCurrencyEffect, grossPerformancePercentage, @@ -633,7 +633,7 @@ export class PortfolioService { assetSubClass: assetProfile.assetSubClass, countries: assetProfile.countries, dataSource: assetProfile.dataSource, - dateOfFirstActivity: parseDate(firstBuyDate), + dateOfFirstActivity: parseDate(dateOfFirstActivity), dividend: dividend?.toNumber() ?? 0, grossPerformance: grossPerformance?.toNumber() ?? 0, grossPerformancePercent: grossPerformancePercentage?.toNumber() ?? 0, @@ -801,9 +801,9 @@ export class PortfolioService { activitiesCount, averagePrice, currency, + dateOfFirstActivity, dividendInBaseCurrency, feeInBaseCurrency, - firstBuyDate, grossPerformance, grossPerformancePercentage, grossPerformancePercentageWithCurrencyEffect, @@ -828,7 +828,10 @@ export class PortfolioService { }); const dividendYieldPercent = getAnnualizedPerformancePercent({ - daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)), + daysInMarket: differenceInDays( + new Date(), + parseDate(dateOfFirstActivity) + ), netPerformancePercentage: timeWeightedInvestment.eq(0) ? new Big(0) : dividendInBaseCurrency.div(timeWeightedInvestment) @@ -836,7 +839,10 @@ export class PortfolioService { const dividendYieldPercentWithCurrencyEffect = getAnnualizedPerformancePercent({ - daysInMarket: differenceInDays(new Date(), parseDate(firstBuyDate)), + daysInMarket: differenceInDays( + new Date(), + parseDate(dateOfFirstActivity) + ), netPerformancePercentage: timeWeightedInvestmentWithCurrencyEffect.eq(0) ? new Big(0) : dividendInBaseCurrency.div(timeWeightedInvestmentWithCurrencyEffect) @@ -845,7 +851,7 @@ export class PortfolioService { const historicalData = await this.dataProviderService.getHistorical( [{ dataSource, symbol }], 'day', - parseISO(firstBuyDate), + parseISO(dateOfFirstActivity), new Date() ); @@ -910,7 +916,7 @@ export class PortfolioService { // Add historical entry for buy date, if no historical data available historicalDataArray.push({ averagePrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency, - date: firstBuyDate, + date: dateOfFirstActivity, marketPrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency, quantity: activitiesOfHolding[0].quantity }); @@ -924,6 +930,7 @@ export class PortfolioService { return { activitiesCount, + dateOfFirstActivity, marketPrice, marketPriceMax, marketPriceMin, @@ -931,7 +938,6 @@ export class PortfolioService { tags, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], - dateOfFirstActivity: firstBuyDate, dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), dividendYieldPercent: dividendYieldPercent.toNumber(), dividendYieldPercentWithCurrencyEffect: diff --git a/libs/common/src/lib/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index 244d6595e..9cfb2df04 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -35,9 +35,6 @@ export class TimelinePosition { @Type(() => Big) feeInBaseCurrency: Big; - /** @deprecated use dateOfFirstActivity instead */ - firstBuyDate: string; - @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) grossPerformance: Big; From 7dbacdbf0fa835f0093bd70907dbdc75b7132522 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 31 Jan 2026 14:43:04 +0700 Subject: [PATCH 44/76] Feature/extract top holdings from Yahoo Finance for ETF and mutual funds (#6254) * Extract top holdings from Yahoo Finance for ETF and mutual funds * Update changelog --- CHANGELOG.md | 4 ++++ .../yahoo-finance/yahoo-finance.service.ts | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1092b049..a3fb00a66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added the ability to fetch top holdings for ETF and mutual fund assets from _Yahoo Finance_ + ### Changed - Removed the deprecated `firstBuyDate` in the portfolio calculator diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 65bcd6c06..97c875360 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -135,10 +135,10 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { shortName, symbol }: { - longName: Price['longName']; - quoteType: Price['quoteType']; - shortName: Price['shortName']; - symbol: Price['symbol']; + longName?: Price['longName']; + quoteType?: Price['quoteType']; + shortName?: Price['shortName']; + symbol?: Price['symbol']; }) { let name = longName; @@ -217,6 +217,15 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { }); } } + + response.holdings = assetProfile.topHoldings.holdings.map( + ({ holdingName, holdingPercent }) => { + return { + name: this.formatName({ longName: holdingName }), + weight: holdingPercent + }; + } + ); } else if ( assetSubClass === 'STOCK' && assetProfile.summaryProfile?.country From eae2c20dfefb48c11e3affc15e8119f7b4534c98 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 31 Jan 2026 11:48:51 +0100 Subject: [PATCH 45/76] Task/deprecate transactionCount in GET api/v1/admin endpoint (#6265) * Deprecate transactionCount in favor of activitiesCount * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 7 ++++--- .../components/admin-overview/admin-overview.component.ts | 6 +++--- .../src/app/components/admin-overview/admin-overview.html | 6 +++--- libs/common/src/lib/interfaces/admin-data.interface.ts | 4 ++++ 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3fb00a66..39634dfc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Deprecated `transactionCount` in favor of `activitiesCount` in the endpoint `GET api/v1/admin` - Removed the deprecated `firstBuyDate` in the portfolio calculator ## 2.234.0 - 2026-01-30 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 705085a48..cd18eb239 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -138,11 +138,11 @@ export class AdminService { public async get(): Promise { const dataSources = Object.values(DataSource); - const [enabledDataSources, settings, transactionCount, userCount] = + const [activitiesCount, enabledDataSources, settings, userCount] = await Promise.all([ + this.prismaService.order.count(), this.dataProviderService.getDataSources(), this.propertyService.get(), - this.prismaService.order.count(), this.countUsersWithAnalytics() ]); @@ -182,10 +182,11 @@ export class AdminService { ).filter(Boolean); return { + activitiesCount, dataProviders, settings, - transactionCount, userCount, + transactionCount: activitiesCount, version: environment.version }; } diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index 6284f05fd..c0ccb0f64 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -73,6 +73,7 @@ import { takeUntil } from 'rxjs/operators'; templateUrl: './admin-overview.html' }) export class GfAdminOverviewComponent implements OnDestroy, OnInit { + public activitiesCount: number; public couponDuration: StringValue = '14 days'; public coupons: Coupon[]; public hasPermissionForSubscription: boolean; @@ -83,7 +84,6 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { public isDataGatheringEnabled: boolean; public permissions = permissions; public systemMessage: SystemMessage; - public transactionCount: number; public userCount: number; public user: User; public version: string; @@ -289,12 +289,12 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { this.adminService .fetchAdminData() .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe(({ settings, transactionCount, userCount, version }) => { + .subscribe(({ activitiesCount, settings, userCount, version }) => { + this.activitiesCount = activitiesCount; this.coupons = (settings[PROPERTY_COUPONS] as Coupon[]) ?? []; this.isDataGatheringEnabled = settings[PROPERTY_IS_DATA_GATHERING_ENABLED] === false ? false : true; this.systemMessage = settings[PROPERTY_SYSTEM_MESSAGE] as SystemMessage; - this.transactionCount = transactionCount; this.userCount = userCount; this.version = version; diff --git a/apps/client/src/app/components/admin-overview/admin-overview.html b/apps/client/src/app/components/admin-overview/admin-overview.html index c47387f37..f0a6ea1d5 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.html +++ b/apps/client/src/app/components/admin-overview/admin-overview.html @@ -20,11 +20,11 @@
    - @if (transactionCount && userCount) { + @if (activitiesCount && userCount) {
    - {{ transactionCount / userCount | number: '1.2-2' }} + {{ activitiesCount / userCount | number: '1.2-2' }} per User
    } diff --git a/libs/common/src/lib/interfaces/admin-data.interface.ts b/libs/common/src/lib/interfaces/admin-data.interface.ts index 23821a86b..63588300c 100644 --- a/libs/common/src/lib/interfaces/admin-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-data.interface.ts @@ -1,12 +1,16 @@ import { DataProviderInfo } from './data-provider-info.interface'; export interface AdminData { + activitiesCount: number; dataProviders: (DataProviderInfo & { assetProfileCount: number; useForExchangeRates: boolean; })[]; settings: { [key: string]: boolean | object | string | string[] }; + + /** @deprecated use activitiesCount instead */ transactionCount: number; + userCount: number; version: string; } From 2520d0d9619672b0125de4c49cf1b1ba4400bfd1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 2 Feb 2026 20:44:04 +0100 Subject: [PATCH 46/76] Task/upgrade yahoo-finance2 to version 3.13.0 (#6263) * Upgrade yahoo-finance2 to version 3.13.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39634dfc4..371a8e6f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Deprecated `transactionCount` in favor of `activitiesCount` in the endpoint `GET api/v1/admin` - Removed the deprecated `firstBuyDate` in the portfolio calculator +- Upgraded `yahoo-finance2` from version `3.11.2` to `3.13.0` ## 2.234.0 - 2026-01-30 diff --git a/package-lock.json b/package-lock.json index b8d343edd..38789fd53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,7 @@ "svgmap": "2.14.0", "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", - "yahoo-finance2": "3.11.2", + "yahoo-finance2": "3.13.0", "zone.js": "0.16.0" }, "devDependencies": { @@ -35361,9 +35361,9 @@ } }, "node_modules/yahoo-finance2": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.11.2.tgz", - "integrity": "sha512-SIvMXjrOktBRD8m+qXAGCK+vR1vwBKuMgCnvmbxv29+t6LTDu0vAUxNYfbigsMRTmBzS4F9TQwbYF90g3Om4HA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.13.0.tgz", + "integrity": "sha512-czBj2q/MD68YEsB7aXNnGhJvWxYZn01O5r/i7VYiQV2m2sWwhca6tKgjwf/LT7zHHEVxhKNiGLB46glLnmq9Ag==", "license": "MIT", "dependencies": { "@deno/shim-deno": "~0.18.0", diff --git a/package.json b/package.json index 44df5228a..9dc3a9914 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "svgmap": "2.14.0", "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", - "yahoo-finance2": "3.11.2", + "yahoo-finance2": "3.13.0", "zone.js": "0.16.0" }, "devDependencies": { From 9c4638c185d434ef765f2257f2b2c482dc8dd56a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 3 Feb 2026 19:30:37 +0100 Subject: [PATCH 47/76] Feature/add impersonation mode in get account balances endpoint (#6272) * Add impersonation mode * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/account/account.controller.ts | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 371a8e6f4..f3bdf396b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added the ability to fetch top holdings for ETF and mutual fund assets from _Yahoo Finance_ +- Added support for the impersonation mode in the endpoint `GET api/v1/account/:id/balances` ### Changed diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index 542b199fd..052720176 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -132,12 +132,16 @@ export class AccountController { @UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseInterceptors(RedactValuesInResponseInterceptor) public async getAccountBalancesById( + @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Param('id') id: string ): Promise { + const impersonationUserId = + await this.impersonationService.validateImpersonationId(impersonationId); + return this.accountBalanceService.getAccountBalances({ filters: [{ id, type: 'ACCOUNT' }], userCurrency: this.request.user.settings.settings.baseCurrency, - userId: this.request.user.id + userId: impersonationUserId || this.request.user.id }); } From 5b6d6a419fa308a83b218e9c7cf6ec7526bcb8d9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 3 Feb 2026 19:37:51 +0100 Subject: [PATCH 48/76] Task/refactor transactions in accounts table component (#6266) * Refactor showTransactions and transactionCount * Update changelog --- CHANGELOG.md | 2 ++ .../holding-detail-dialog.html | 2 +- .../app/pages/accounts/accounts-page.component.ts | 10 +++++----- .../src/app/pages/accounts/accounts-page.html | 2 +- .../accounts-table/accounts-table.component.html | 4 ++-- .../accounts-table.component.stories.ts | 14 +++++++------- .../lib/accounts-table/accounts-table.component.ts | 8 ++++---- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3bdf396b..df8851c66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Refactored `showTransactions` in favor of `showActivitiesCount` in the accounts table component +- Refactored `transactionCount` in favor of `activitiesCount` in the accounts table component - Deprecated `transactionCount` in favor of `activitiesCount` in the endpoint `GET api/v1/admin` - Removed the deprecated `firstBuyDate` in the portfolio calculator - Upgraded `yahoo-finance2` from version `3.11.2` to `3.13.0` diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index f9329dbfb..27df91a17 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -380,10 +380,10 @@ [deviceType]="data.deviceType" [hasPermissionToOpenDetails]="false" [locale]="user?.settings?.locale" + [showActivitiesCount]="false" [showAllocationInPercentage]="user?.settings?.isExperimentalFeatures" [showBalance]="false" [showFooter]="false" - [showTransactions]="false" [showValue]="false" [showValueInBaseCurrency]="false" /> diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 6c8146f77..f7e6541b5 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -38,6 +38,7 @@ import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-ba }) export class GfAccountsPageComponent implements OnDestroy, OnInit { public accounts: AccountModel[]; + public activitiesCount = 0; public deviceType: string; public hasImpersonationId: boolean; public hasPermissionToCreateAccount: boolean; @@ -45,7 +46,6 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { public routeQueryParams: Subscription; public totalBalanceInBaseCurrency = 0; public totalValueInBaseCurrency = 0; - public transactionCount = 0; public user: User; private unsubscribeSubject = new Subject(); @@ -128,14 +128,14 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { .subscribe( ({ accounts, + activitiesCount, totalBalanceInBaseCurrency, - totalValueInBaseCurrency, - transactionCount + totalValueInBaseCurrency }) => { this.accounts = accounts; + this.activitiesCount = activitiesCount; this.totalBalanceInBaseCurrency = totalBalanceInBaseCurrency; this.totalValueInBaseCurrency = totalValueInBaseCurrency; - this.transactionCount = transactionCount; if (this.accounts?.length <= 0) { this.router.navigate([], { queryParams: { createDialog: true } }); @@ -358,8 +358,8 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { private reset() { this.accounts = undefined; + this.activitiesCount = 0; this.totalBalanceInBaseCurrency = 0; this.totalValueInBaseCurrency = 0; - this.transactionCount = 0; } } diff --git a/apps/client/src/app/pages/accounts/accounts-page.html b/apps/client/src/app/pages/accounts/accounts-page.html index 6f29a4f7c..0c6b7b8f3 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.html +++ b/apps/client/src/app/pages/accounts/accounts-page.html @@ -4,6 +4,7 @@

    Accounts

    - + - {{ transactionCount }} + {{ activitiesCount }} diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts index 53c59a95f..96da4419d 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts @@ -115,10 +115,10 @@ export const Loading: Story = { hasPermissionToOpenDetails: false, locale: 'en-US', showActions: false, + showActivitiesCount: true, showAllocationInPercentage: false, showBalance: true, showFooter: true, - showTransactions: true, showValue: true, showValueInBaseCurrency: true } @@ -127,39 +127,39 @@ export const Loading: Story = { export const Default: Story = { args: { accounts, + activitiesCount: 12, baseCurrency: 'USD', deviceType: 'desktop', hasPermissionToOpenDetails: false, locale: 'en-US', showActions: false, + showActivitiesCount: true, showAllocationInPercentage: false, showBalance: true, showFooter: true, - showTransactions: true, showValue: true, showValueInBaseCurrency: true, totalBalanceInBaseCurrency: 12428.2, - totalValueInBaseCurrency: 107971.70321466809, - transactionCount: 12 + totalValueInBaseCurrency: 107971.70321466809 } }; export const WithoutFooter: Story = { args: { accounts, + activitiesCount: 12, baseCurrency: 'USD', deviceType: 'desktop', hasPermissionToOpenDetails: false, locale: 'en-US', showActions: false, + showActivitiesCount: true, showAllocationInPercentage: false, showBalance: true, showFooter: false, - showTransactions: true, showValue: true, showValueInBaseCurrency: true, totalBalanceInBaseCurrency: 12428.2, - totalValueInBaseCurrency: 107971.70321466809, - transactionCount: 12 + totalValueInBaseCurrency: 107971.70321466809 } }; diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts index fe91e1eda..21300fdcc 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts @@ -55,20 +55,20 @@ import { Subject, Subscription } from 'rxjs'; }) export class GfAccountsTableComponent implements OnChanges, OnDestroy { @Input() accounts: Account[]; + @Input() activitiesCount: number; @Input() baseCurrency: string; @Input() deviceType: string; @Input() hasPermissionToOpenDetails = true; @Input() locale = getLocale(); @Input() showActions: boolean; + @Input() showActivitiesCount = true; @Input() showAllocationInPercentage: boolean; @Input() showBalance = true; @Input() showFooter = true; - @Input() showTransactions = true; @Input() showValue = true; @Input() showValueInBaseCurrency = true; @Input() totalBalanceInBaseCurrency: number; @Input() totalValueInBaseCurrency: number; - @Input() transactionCount: number; @Output() accountDeleted = new EventEmitter(); @Output() accountToUpdate = new EventEmitter(); @@ -101,8 +101,8 @@ export class GfAccountsTableComponent implements OnChanges, OnDestroy { public ngOnChanges() { this.displayedColumns = ['status', 'account', 'platform']; - if (this.showTransactions) { - this.displayedColumns.push('transactions'); + if (this.showActivitiesCount) { + this.displayedColumns.push('activitiesCount'); } if (this.showBalance) { From 0034ed0adf9f31b1b830827852ba31a431483374 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 3 Feb 2026 19:55:18 +0100 Subject: [PATCH 49/76] Feature/introduce fast-redact in value redaction interceptor (#6269) * Introduce fast-redact * Update changelog --------- Co-authored-by: Valentin Zickner --- CHANGELOG.md | 1 + .../src/app/portfolio/portfolio.controller.ts | 2 + apps/api/src/helper/object.helper.spec.ts | 91 ++++++------------- apps/api/src/helper/object.helper.ts | 69 ++++---------- .../redact-values-in-response.interceptor.ts | 42 ++------- ...orm-data-source-in-response.interceptor.ts | 19 ++-- libs/common/src/lib/config.ts | 52 +++++++++++ package-lock.json | 18 ++++ package.json | 2 + 9 files changed, 142 insertions(+), 154 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df8851c66..0a565308b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Optimized the value redaction interceptor for the impersonation mode by introducing `fast-redact` - Refactored `showTransactions` in favor of `showActivitiesCount` in the accounts table component - Refactored `transactionCount` in favor of `activitiesCount` in the accounts table component - Deprecated `transactionCount` in favor of `activitiesCount` in the endpoint `GET api/v1/admin` diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index a5a1d95ee..b8aefe0ac 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -195,11 +195,13 @@ export class PortfolioController { 'excludedAccountsAndActivities', 'fees', 'filteredValueInBaseCurrency', + 'fireWealth', 'grossPerformance', 'grossPerformanceWithCurrencyEffect', 'interestInBaseCurrency', 'items', 'liabilities', + 'liabilitiesInBaseCurrency', 'netPerformance', 'netPerformanceWithCurrencyEffect', 'totalBuy', diff --git a/apps/api/src/helper/object.helper.spec.ts b/apps/api/src/helper/object.helper.spec.ts index e1ec81b8f..5ddff164b 100644 --- a/apps/api/src/helper/object.helper.spec.ts +++ b/apps/api/src/helper/object.helper.spec.ts @@ -1,4 +1,6 @@ -import { query, redactAttributes } from './object.helper'; +import { DEFAULT_REDACTED_PATHS } from '@ghostfolio/common/config'; + +import { query, redactPaths } from './object.helper'; describe('query', () => { it('should get market price from stock API response', () => { @@ -22,46 +24,38 @@ describe('query', () => { describe('redactAttributes', () => { it('should redact provided attributes', () => { - expect(redactAttributes({ object: {}, options: [] })).toStrictEqual({}); + expect(redactPaths({ object: {}, paths: [] })).toStrictEqual({}); - expect( - redactAttributes({ object: { value: 1000 }, options: [] }) - ).toStrictEqual({ value: 1000 }); + expect(redactPaths({ object: { value: 1000 }, paths: [] })).toStrictEqual({ + value: 1000 + }); expect( - redactAttributes({ + redactPaths({ object: { value: 1000 }, - options: [{ attribute: 'value', valueMap: { '*': null } }] + paths: ['value'] }) ).toStrictEqual({ value: null }); expect( - redactAttributes({ + redactPaths({ object: { value: 'abc' }, - options: [{ attribute: 'value', valueMap: { abc: 'xyz' } }] + paths: ['value'], + valueMap: { abc: 'xyz' } }) ).toStrictEqual({ value: 'xyz' }); expect( - redactAttributes({ + redactPaths({ object: { data: [{ value: 'a' }, { value: 'b' }] }, - options: [{ attribute: 'value', valueMap: { a: 1, b: 2 } }] + paths: ['data[*].value'], + valueMap: { a: 1, b: 2 } }) ).toStrictEqual({ data: [{ value: 1 }, { value: 2 }] }); - expect( - redactAttributes({ - object: { value1: 'a', value2: 'b' }, - options: [ - { attribute: 'value1', valueMap: { a: 'x' } }, - { attribute: 'value2', valueMap: { '*': 'y' } } - ] - }) - ).toStrictEqual({ value1: 'x', value2: 'y' }); - console.time('redactAttributes execution time'); expect( - redactAttributes({ + redactPaths({ object: { accounts: { '2e937c05-657c-4de9-8fb3-0813a2245f26': { @@ -1564,34 +1558,7 @@ describe('redactAttributes', () => { currentNetWorth: null } }, - options: [ - 'balance', - 'balanceInBaseCurrency', - 'comment', - 'convertedBalance', - 'dividendInBaseCurrency', - 'fee', - 'feeInBaseCurrency', - 'grossPerformance', - 'grossPerformanceWithCurrencyEffect', - 'investment', - 'netPerformance', - 'netPerformanceWithCurrencyEffect', - 'quantity', - 'symbolMapping', - 'totalBalanceInBaseCurrency', - 'totalValueInBaseCurrency', - 'unitPrice', - 'value', - 'valueInBaseCurrency' - ].map((attribute) => { - return { - attribute, - valueMap: { - '*': null - } - }; - }) + paths: DEFAULT_REDACTED_PATHS }) ).toStrictEqual({ accounts: { @@ -1681,7 +1648,7 @@ describe('redactAttributes', () => { ], dataSource: 'EOD_HISTORICAL_DATA', dateOfFirstActivity: '2021-11-30T23:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.3183066634822068, grossPerformancePercentWithCurrencyEffect: 0.3183066634822068, @@ -1728,7 +1695,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2021-04-22T22:00:00.000Z', - dividend: 192, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.3719230057375532, grossPerformancePercentWithCurrencyEffect: 0.2650716044872953, @@ -1780,7 +1747,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2018-09-30T22:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.8594552890963852, grossPerformancePercentWithCurrencyEffect: 0.8594552890963852, @@ -1831,7 +1798,7 @@ describe('redactAttributes', () => { countries: [], dataSource: 'COINGECKO', dateOfFirstActivity: '2017-08-15T22:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 17.4925166352, grossPerformancePercentWithCurrencyEffect: 17.4925166352, @@ -1882,7 +1849,7 @@ describe('redactAttributes', () => { countries: [], dataSource: 'MANUAL', dateOfFirstActivity: '2021-01-31T23:00:00.000Z', - dividend: 11.45, + dividend: null, grossPerformance: null, grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: -0.06153834320225245, @@ -1986,7 +1953,7 @@ describe('redactAttributes', () => { ], dataSource: 'MANUAL', dateOfFirstActivity: '2021-03-31T22:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.27579517683678895, grossPerformancePercentWithCurrencyEffect: 0.458553421589667, @@ -2038,7 +2005,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2023-01-02T23:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.7865431171216295, grossPerformancePercentWithCurrencyEffect: 0.7865431171216295, @@ -2090,7 +2057,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2017-01-02T23:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 17.184314638161936, grossPerformancePercentWithCurrencyEffect: 17.184314638161936, @@ -2172,7 +2139,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2019-02-28T23:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.8832083851170418, grossPerformancePercentWithCurrencyEffect: 0.8832083851170418, @@ -2567,7 +2534,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2018-02-28T23:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.3683200415015591, grossPerformancePercentWithCurrencyEffect: 0.5806366182968891, @@ -2846,7 +2813,7 @@ describe('redactAttributes', () => { ], dataSource: 'YAHOO', dateOfFirstActivity: '2021-08-18T22:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0.3474381850624522, grossPerformancePercentWithCurrencyEffect: 0.28744846894552306, @@ -2964,7 +2931,7 @@ describe('redactAttributes', () => { assetClass: 'LIQUIDITY', assetSubClass: 'CASH', countries: [], - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: 0, diff --git a/apps/api/src/helper/object.helper.ts b/apps/api/src/helper/object.helper.ts index 6bb6579d2..350d5fe04 100644 --- a/apps/api/src/helper/object.helper.ts +++ b/apps/api/src/helper/object.helper.ts @@ -1,6 +1,6 @@ -import { Big } from 'big.js'; +import fastRedact from 'fast-redact'; import jsonpath from 'jsonpath'; -import { cloneDeep, isArray, isObject } from 'lodash'; +import { cloneDeep, isObject } from 'lodash'; export function hasNotDefinedValuesInObject(aObject: Object): boolean { for (const key in aObject) { @@ -42,60 +42,29 @@ export function query({ return jsonpath.query(object, pathExpression); } -export function redactAttributes({ - isFirstRun = true, +export function redactPaths({ object, - options + paths, + valueMap }: { - isFirstRun?: boolean; object: any; - options: { attribute: string; valueMap: { [key: string]: any } }[]; + paths: fastRedact.RedactOptions['paths']; + valueMap?: { [key: string]: any }; }): any { - if (!object || !options?.length) { - return object; - } - - // Create deep clone - const redactedObject = isFirstRun - ? JSON.parse(JSON.stringify(object)) - : object; - - for (const option of options) { - if (redactedObject.hasOwnProperty(option.attribute)) { - if (option.valueMap['*'] || option.valueMap['*'] === null) { - redactedObject[option.attribute] = option.valueMap['*']; - } else if (option.valueMap[redactedObject[option.attribute]]) { - redactedObject[option.attribute] = - option.valueMap[redactedObject[option.attribute]]; - } - } else { - // If the attribute is not present on the current object, - // check if it exists on any nested objects - for (const property in redactedObject) { - if (isArray(redactedObject[property])) { - redactedObject[property] = redactedObject[property].map( - (currentObject) => { - return redactAttributes({ - options, - isFirstRun: false, - object: currentObject - }); - } - ); - } else if ( - isObject(redactedObject[property]) && - !(redactedObject[property] instanceof Big) - ) { - // Recursively call the function on the nested object - redactedObject[property] = redactAttributes({ - options, - isFirstRun: false, - object: redactedObject[property] - }); + const redact = fastRedact({ + paths, + censor: (value) => { + if (valueMap) { + if (valueMap[value]) { + return valueMap[value]; + } else { + return value; } + } else { + return null; } } - } + }); - return redactedObject; + return JSON.parse(redact(object)); } diff --git a/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts b/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts index 5ecf7c48d..60b994cac 100644 --- a/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts +++ b/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts @@ -1,5 +1,8 @@ -import { redactAttributes } from '@ghostfolio/api/helper/object.helper'; -import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; +import { redactPaths } from '@ghostfolio/api/helper/object.helper'; +import { + DEFAULT_REDACTED_PATHS, + HEADER_KEY_IMPERSONATION +} from '@ghostfolio/common/config'; import { hasReadRestrictedAccessPermission, isRestrictedView @@ -39,40 +42,9 @@ export class RedactValuesInResponseInterceptor implements NestInterceptor< }) || isRestrictedView(user) ) { - data = redactAttributes({ + data = redactPaths({ object: data, - options: [ - 'balance', - 'balanceInBaseCurrency', - 'comment', - 'convertedBalance', - 'dividendInBaseCurrency', - 'fee', - 'feeInBaseCurrency', - 'grossPerformance', - 'grossPerformanceWithCurrencyEffect', - 'interestInBaseCurrency', - 'investment', - 'netPerformance', - 'netPerformanceWithCurrencyEffect', - 'quantity', - 'symbolMapping', - 'totalBalanceInBaseCurrency', - 'totalDividendInBaseCurrency', - 'totalInterestInBaseCurrency', - 'totalValueInBaseCurrency', - 'unitPrice', - 'unitPriceInAssetProfileCurrency', - 'value', - 'valueInBaseCurrency' - ].map((attribute) => { - return { - attribute, - valueMap: { - '*': null - } - }; - }) + paths: DEFAULT_REDACTED_PATHS }); } diff --git a/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts b/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts index 9af256671..eaa6dd08c 100644 --- a/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts +++ b/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts @@ -1,4 +1,4 @@ -import { redactAttributes } from '@ghostfolio/api/helper/object.helper'; +import { redactPaths } from '@ghostfolio/api/helper/object.helper'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { encodeDataSource } from '@ghostfolio/common/helper'; @@ -58,13 +58,18 @@ export class TransformDataSourceInResponseInterceptor< } } - data = redactAttributes({ + data = redactPaths({ + valueMap, object: data, - options: [ - { - valueMap, - attribute: 'dataSource' - } + paths: [ + 'activities[*].SymbolProfile.dataSource', + 'benchmarks[*].dataSource', + 'fearAndGreedIndex.CRYPTOCURRENCIES.dataSource', + 'fearAndGreedIndex.STOCKS.dataSource', + 'holdings[*].dataSource', + 'items[*].dataSource', + 'SymbolProfile.dataSource', + 'watchlist[*].dataSource' ] }); } diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index a10a828e1..b558ccc42 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -78,6 +78,58 @@ export const DEFAULT_PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY = 1; export const DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_CONCURRENCY = 1; export const DEFAULT_PROCESSOR_PORTFOLIO_SNAPSHOT_COMPUTATION_TIMEOUT = 30000; +export const DEFAULT_REDACTED_PATHS = [ + 'accounts[*].balance', + 'accounts[*].valueInBaseCurrency', + 'activities[*].account.balance', + 'activities[*].account.comment', + 'activities[*].comment', + 'activities[*].fee', + 'activities[*].feeInAssetProfileCurrency', + 'activities[*].feeInBaseCurrency', + 'activities[*].quantity', + 'activities[*].SymbolProfile.symbolMapping', + 'activities[*].SymbolProfile.watchedByCount', + 'activities[*].value', + 'activities[*].valueInBaseCurrency', + 'balance', + 'balanceInBaseCurrency', + 'balances[*].account.balance', + 'balances[*].account.comment', + 'balances[*].value', + 'balances[*].valueInBaseCurrency', + 'comment', + 'dividendInBaseCurrency', + 'feeInBaseCurrency', + 'grossPerformance', + 'grossPerformanceWithCurrencyEffect', + 'historicalData[*].quantity', + 'holdings[*].dividend', + 'holdings[*].grossPerformance', + 'holdings[*].grossPerformanceWithCurrencyEffect', + 'holdings[*].holdings[*].valueInBaseCurrency', + 'holdings[*].investment', + 'holdings[*].netPerformance', + 'holdings[*].netPerformanceWithCurrencyEffect', + 'holdings[*].quantity', + 'holdings[*].valueInBaseCurrency', + 'interestInBaseCurrency', + 'investmentInBaseCurrencyWithCurrencyEffect', + 'netPerformance', + 'netPerformanceWithCurrencyEffect', + 'platforms[*].balance', + 'platforms[*].valueInBaseCurrency', + 'quantity', + 'SymbolProfile.symbolMapping', + 'SymbolProfile.watchedByCount', + 'totalBalanceInBaseCurrency', + 'totalDividendInBaseCurrency', + 'totalInterestInBaseCurrency', + 'totalValueInBaseCurrency', + 'value', + 'valueInBaseCurrency' +]; + // USX is handled separately export const DERIVED_CURRENCIES = [ { diff --git a/package-lock.json b/package-lock.json index 38789fd53..d5e3c39fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,6 +62,7 @@ "dotenv": "17.2.3", "dotenv-expand": "12.0.3", "envalid": "8.1.1", + "fast-redact": "3.5.0", "fuse.js": "7.1.0", "google-spreadsheet": "3.2.0", "helmet": "7.0.0", @@ -122,6 +123,7 @@ "@storybook/angular": "10.1.10", "@trivago/prettier-plugin-sort-imports": "5.2.2", "@types/big.js": "6.2.2", + "@types/fast-redact": "3.0.4", "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", @@ -12936,6 +12938,13 @@ "@types/send": "*" } }, + "node_modules/@types/fast-redact": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/fast-redact/-/fast-redact-3.0.4.tgz", + "integrity": "sha512-tgGJaXucrCH4Yx2l/AI6e/JQksZhKGIQsVwBMTh+nxUhQDv5tXScTs5DHTw+qSKDXnHL2dTAh1e2rd5pcFQyNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/geojson": { "version": "7946.0.16", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", @@ -19940,6 +19949,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "license": "MIT" }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", diff --git a/package.json b/package.json index 9dc3a9914..5452f3e95 100644 --- a/package.json +++ b/package.json @@ -106,6 +106,7 @@ "dotenv": "17.2.3", "dotenv-expand": "12.0.3", "envalid": "8.1.1", + "fast-redact": "3.5.0", "fuse.js": "7.1.0", "google-spreadsheet": "3.2.0", "helmet": "7.0.0", @@ -166,6 +167,7 @@ "@storybook/angular": "10.1.10", "@trivago/prettier-plugin-sort-imports": "5.2.2", "@types/big.js": "6.2.2", + "@types/fast-redact": "3.0.4", "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", From e27f258ac69e9d3134933b6701a24139503cb9fe Mon Sep 17 00:00:00 2001 From: Karel De Smet Date: Tue, 3 Feb 2026 20:23:35 +0100 Subject: [PATCH 50/76] Task/extend user detail dialog by actions menu (#6256) * Extend user detail dialog * Update changelog --- CHANGELOG.md | 1 + .../admin-users/admin-users.component.ts | 58 +++++++++++-------- .../interfaces/interfaces.ts | 1 + .../user-detail-dialog.component.ts | 25 ++++++-- .../user-detail-dialog.html | 40 +++++++++---- 5 files changed, 84 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a565308b..30cc42eda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the ability to fetch top holdings for ETF and mutual fund assets from _Yahoo Finance_ - Added support for the impersonation mode in the endpoint `GET api/v1/account/:id/balances` +- Added an action menu to the user detail dialog in the users section of the admin control panel ### Changed diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 2ae3b1a57..d479f2037 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -57,7 +57,7 @@ import { import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { switchMap, takeUntil, tap } from 'rxjs/operators'; @Component({ imports: [ @@ -139,8 +139,25 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { ]; } - this.route.paramMap - .pipe(takeUntil(this.unsubscribeSubject)) + this.userService.stateChanged + .pipe( + takeUntil(this.unsubscribeSubject), + tap((state) => { + if (state?.user) { + this.user = state.user; + + this.defaultDateFormat = getDateFormatString( + this.user.settings.locale + ); + + this.hasPermissionToImpersonateAllUsers = hasPermission( + this.user.permissions, + permissions.impersonateAllUsers + ); + } + }), + switchMap(() => this.route.paramMap) + ) .subscribe((params) => { const userId = params.get('userId'); @@ -149,23 +166,6 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { } }); - this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe((state) => { - if (state?.user) { - this.user = state.user; - - this.defaultDateFormat = getDateFormatString( - this.user.settings.locale - ); - - this.hasPermissionToImpersonateAllUsers = hasPermission( - this.user.permissions, - permissions.impersonateAllUsers - ); - } - }); - addIcons({ contractOutline, ellipsisHorizontal, @@ -208,10 +208,13 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { .deleteUser(aId) .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(() => { - this.fetchUsers(); + this.router.navigate(['..'], { relativeTo: this.route }); }); }, confirmType: ConfirmationDialogType.Warn, + discardFn: () => { + this.router.navigate(['..'], { relativeTo: this.route }); + }, title: $localize`Do you really want to delete this user?` }); } @@ -293,6 +296,7 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { >(GfUserDetailDialogComponent, { autoFocus: false, data: { + currentUserId: this.user?.id, deviceType: this.deviceType, hasPermissionForSubscription: this.hasPermissionForSubscription, locale: this.user?.settings?.locale, @@ -305,10 +309,14 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { dialogRef .afterClosed() .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe(() => { - this.router.navigate( - internalRoutes.adminControl.subRoutes.users.routerLink - ); + .subscribe((data) => { + if (data?.action === 'delete' && data?.userId) { + this.onDeleteUser(data.userId); + } else { + this.router.navigate( + internalRoutes.adminControl.subRoutes.users.routerLink + ); + } }); } } diff --git a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts index b922e7a54..ed46e8a02 100644 --- a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts @@ -1,4 +1,5 @@ export interface UserDetailDialogParams { + currentUserId: string; deviceType: string; hasPermissionForSubscription: boolean; locale: string; diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts index cdf977058..6f7f4ead6 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts @@ -1,6 +1,4 @@ import { AdminUserResponse } from '@ghostfolio/common/interfaces'; -import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; -import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header'; import { AdminService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -16,6 +14,10 @@ import { import { MatButtonModule } from '@angular/material/button'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MatDialogModule } from '@angular/material/dialog'; +import { MatMenuModule } from '@angular/material/menu'; +import { IonIcon } from '@ionic/angular/standalone'; +import { addIcons } from 'ionicons'; +import { ellipsisVertical } from 'ionicons/icons'; import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; @@ -25,11 +27,11 @@ import { UserDetailDialogParams } from './interfaces/interfaces'; changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'd-flex flex-column h-100' }, imports: [ - GfDialogFooterComponent, - GfDialogHeaderComponent, GfValueComponent, + IonIcon, MatButtonModule, - MatDialogModule + MatDialogModule, + MatMenuModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-user-detail-dialog', @@ -46,7 +48,11 @@ export class GfUserDetailDialogComponent implements OnDestroy, OnInit { private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: UserDetailDialogParams, public dialogRef: MatDialogRef - ) {} + ) { + addIcons({ + ellipsisVertical + }); + } public ngOnInit() { this.adminService @@ -66,6 +72,13 @@ export class GfUserDetailDialogComponent implements OnDestroy, OnInit { }); } + public deleteUser() { + this.dialogRef.close({ + action: 'delete', + userId: this.data.userId + }); + } + public onClose() { this.dialogRef.close(); } diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html index 60f6a2585..570dcf4d6 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1,9 +1,28 @@ - - +
    + + + + +
    @@ -103,7 +122,8 @@
    - +
    + +
    From c6d1260e07f64ba894cbd73b2d06bf95a6904b0c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:25:42 +0100 Subject: [PATCH 51/76] Release 2.235.0 (#6275) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30cc42eda..0883d78b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.235.0 - 2026-02-03 ### Added diff --git a/package-lock.json b/package-lock.json index d5e3c39fa..7c472abc9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.234.0", + "version": "2.235.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.234.0", + "version": "2.235.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 5452f3e95..e379b0f32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.234.0", + "version": "2.235.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 0365b9b614c89d0d3dacc6a6282f82d3a610a1e1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:27:38 +0100 Subject: [PATCH 52/76] Task/upgrade stripe to version 20.3.0 (#6273) * Upgrade stripe to version 20.3.0 * Update changelog --- CHANGELOG.md | 6 ++++++ apps/api/src/app/subscription/subscription.service.ts | 2 +- package-lock.json | 11 ++++------- package.json | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0883d78b6..f64e6dc12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `stripe` from version `20.1.0` to `20.3.0` + ## 2.235.0 - 2026-02-03 ### Added diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index b38b07bb4..2c0226937 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -35,7 +35,7 @@ export class SubscriptionService { this.stripe = new Stripe( this.configurationService.get('STRIPE_SECRET_KEY'), { - apiVersion: '2025-12-15.clover' + apiVersion: '2026-01-28.clover' } ); } diff --git a/package-lock.json b/package-lock.json index 7c472abc9..25cee635d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,7 +85,7 @@ "passport-openidconnect": "0.1.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", - "stripe": "20.1.0", + "stripe": "20.3.0", "svgmap": "2.14.0", "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", @@ -32105,13 +32105,10 @@ } }, "node_modules/stripe": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.1.0.tgz", - "integrity": "sha512-o1VNRuMkY76ZCq92U3EH3/XHm/WHp7AerpzDs4Zyo8uE5mFL4QUcv/2SudWsSnhBSp4moO2+ZoGCZ7mT8crPmQ==", + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.3.0.tgz", + "integrity": "sha512-DYzcmV1MfYhycr1GwjCjeQVYk9Gu8dpxyTlu7qeDCsuguug7oUTxPsUQuZeSf/OPzK7pofqobvOKVqAwlpgf/Q==", "license": "MIT", - "dependencies": { - "qs": "^6.11.0" - }, "engines": { "node": ">=16" }, diff --git a/package.json b/package.json index e379b0f32..9d7a37979 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "passport-openidconnect": "0.1.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", - "stripe": "20.1.0", + "stripe": "20.3.0", "svgmap": "2.14.0", "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", From af034e87c991bf9bfa9701e128a6a3718975481b Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Thu, 5 Feb 2026 23:25:20 +0700 Subject: [PATCH 53/76] Task/improve chart type safety (#6277) * Improve chart type safety --- .../benchmark-comparator.component.ts | 20 ++++--- .../investment-chart.component.ts | 50 ++++++++-------- libs/common/src/lib/chart-helper.ts | 55 +++++++++++------- libs/ui/src/lib/chart/chart.registry.ts | 29 ++++++++++ libs/ui/src/lib/chart/index.ts | 1 + .../fire-calculator.component.ts | 18 +++--- .../lib/line-chart/line-chart.component.ts | 58 ++++++++++--------- .../portfolio-proportion-chart.component.ts | 56 +++++++++++------- .../treemap-chart/interfaces/interfaces.ts | 16 +++++ .../treemap-chart/treemap-chart.component.ts | 49 +++++++++------- 10 files changed, 221 insertions(+), 131 deletions(-) create mode 100644 libs/ui/src/lib/chart/chart.registry.ts create mode 100644 libs/ui/src/lib/chart/index.ts diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts index 7f03ea57f..2ecefc311 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1,6 +1,5 @@ import { getTooltipOptions, - getTooltipPositionerMapTop, getVerticalHoverLinePlugin } from '@ghostfolio/common/chart-helper'; import { primaryColorRgb, secondaryColorRgb } from '@ghostfolio/common/config'; @@ -15,12 +14,14 @@ import { LineChartItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { ColorScheme } from '@ghostfolio/common/types'; +import { registerChartConfiguration } from '@ghostfolio/ui/chart'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, + type ElementRef, EventEmitter, Input, OnChanges, @@ -42,7 +43,7 @@ import { PointElement, TimeScale, Tooltip, - TooltipPosition + type TooltipOptions } from 'chart.js'; import 'chartjs-adapter-date-fns'; import annotationPlugin from 'chartjs-plugin-annotation'; @@ -78,7 +79,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { @Output() benchmarkChanged = new EventEmitter(); - @ViewChild('chartCanvas') chartCanvas; + @ViewChild('chartCanvas') chartCanvas: ElementRef; public chart: Chart<'line'>; public hasPermissionToAccessAdminControl: boolean; @@ -96,8 +97,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { Tooltip ); - Tooltip.positioners['top'] = (_elements, position: TooltipPosition) => - getTooltipPositionerMapTop(this.chart, position); + registerChartConfiguration(); addIcons({ arrowForwardOutline }); } @@ -157,8 +157,10 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { if (this.chartCanvas) { if (this.chart) { this.chart.data = data; + this.chart.options.plugins ??= {}; this.chart.options.plugins.tooltip = - this.getTooltipPluginConfiguration() as unknown; + this.getTooltipPluginConfiguration(); + this.chart.update(); } else { this.chart = new Chart(this.chartCanvas.nativeElement, { @@ -196,7 +198,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { verticalHoverLine: { color: `rgba(${getTextColor(this.colorScheme)}, 0.1)` } - } as unknown, + }, responsive: true, scales: { x: { @@ -253,7 +255,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { } } - private getTooltipPluginConfiguration() { + private getTooltipPluginConfiguration(): Partial> { return { ...getTooltipOptions({ colorScheme: this.colorScheme, @@ -261,7 +263,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { unit: '%' }), mode: 'index', - position: 'top' as unknown, + position: 'top', xAlign: 'center', yAlign: 'bottom' }; diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index 5492ddd4c..53d4f5693 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -1,6 +1,5 @@ import { getTooltipOptions, - getTooltipPositionerMapTop, getVerticalHoverLinePlugin, transformTickToAbbreviation } from '@ghostfolio/common/chart-helper'; @@ -15,11 +14,13 @@ import { import { LineChartItem } from '@ghostfolio/common/interfaces'; import { InvestmentItem } from '@ghostfolio/common/interfaces/investment-item.interface'; import { ColorScheme, GroupBy } from '@ghostfolio/common/types'; +import { registerChartConfiguration } from '@ghostfolio/ui/chart'; import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, + type ElementRef, Input, OnChanges, OnDestroy, @@ -34,12 +35,15 @@ import { LineController, LineElement, PointElement, + type ScriptableLineSegmentContext, TimeScale, Tooltip, - TooltipPosition + type TooltipOptions } from 'chart.js'; import 'chartjs-adapter-date-fns'; -import annotationPlugin from 'chartjs-plugin-annotation'; +import annotationPlugin, { + type AnnotationOptions +} from 'chartjs-plugin-annotation'; import { isAfter } from 'date-fns'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @@ -62,7 +66,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { @Input() locale = getLocale(); @Input() savingsRate = 0; - @ViewChild('chartCanvas') chartCanvas; + @ViewChild('chartCanvas') chartCanvas: ElementRef; public chart: Chart<'bar' | 'line'>; private investments: InvestmentItem[]; @@ -81,8 +85,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { Tooltip ); - Tooltip.positioners['top'] = (_elements, position: TooltipPosition) => - getTooltipPositionerMapTop(this.chart, position); + registerChartConfiguration(); } public ngOnChanges() { @@ -121,12 +124,12 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { }), label: this.benchmarkDataLabel, segment: { - borderColor: (context: unknown) => + borderColor: (context) => this.isInFuture( context, `rgba(${secondaryColorRgb.r}, ${secondaryColorRgb.g}, ${secondaryColorRgb.b}, 0.67)` ), - borderDash: (context: unknown) => this.isInFuture(context, [2, 2]) + borderDash: (context) => this.isInFuture(context, [2, 2]) }, stepped: true }, @@ -143,12 +146,12 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { label: $localize`Total Amount`, pointRadius: 0, segment: { - borderColor: (context: unknown) => + borderColor: (context) => this.isInFuture( context, `rgba(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b}, 0.67)` ), - borderDash: (context: unknown) => this.isInFuture(context, [2, 2]) + borderDash: (context) => this.isInFuture(context, [2, 2]) } } ] @@ -157,17 +160,14 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { if (this.chartCanvas) { if (this.chart) { this.chart.data = chartData; + this.chart.options.plugins ??= {}; this.chart.options.plugins.tooltip = - this.getTooltipPluginConfiguration() as unknown; + this.getTooltipPluginConfiguration(); - if ( - this.savingsRate && - // @ts-ignore - this.chart.options.plugins.annotation.annotations.savingsRate - ) { - // @ts-ignore - this.chart.options.plugins.annotation.annotations.savingsRate.value = - this.savingsRate; + const annotations = this.chart.options.plugins.annotation + .annotations as Record>; + if (this.savingsRate && annotations.savingsRate) { + annotations.savingsRate.value = this.savingsRate; } this.chart.update(); @@ -201,7 +201,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { color: 'white', content: $localize`Savings Rate`, display: true, - font: { size: '10px', weight: 'normal' }, + font: { size: 10, weight: 'normal' }, padding: { x: 4, y: 2 @@ -229,7 +229,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { verticalHoverLine: { color: `rgba(${getTextColor(this.colorScheme)}, 0.1)` } - } as unknown, + }, responsive: true, scales: { x: { @@ -286,7 +286,9 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { } } - private getTooltipPluginConfiguration() { + private getTooltipPluginConfiguration(): Partial< + TooltipOptions<'bar' | 'line'> + > { return { ...getTooltipOptions({ colorScheme: this.colorScheme, @@ -296,13 +298,13 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { unit: this.isInPercent ? '%' : undefined }), mode: 'index', - position: 'top' as unknown, + position: 'top', xAlign: 'center', yAlign: 'bottom' }; } - private isInFuture(aContext: any, aValue: T) { + private isInFuture(aContext: ScriptableLineSegmentContext, aValue: T) { return isAfter(new Date(aContext?.p1?.parsed?.x), new Date()) ? aValue : undefined; diff --git a/libs/common/src/lib/chart-helper.ts b/libs/common/src/lib/chart-helper.ts index da6473645..1f385e901 100644 --- a/libs/common/src/lib/chart-helper.ts +++ b/libs/common/src/lib/chart-helper.ts @@ -1,8 +1,11 @@ import type { ElementRef } from '@angular/core'; import type { Chart, - ChartTypeRegistry, + ChartType, + ControllerDatasetOptions, Plugin, + Point, + TooltipOptions, TooltipPosition } from 'chart.js'; import { format } from 'date-fns'; @@ -21,7 +24,7 @@ export function formatGroupedDate({ date, groupBy }: { - date: Date; + date: number; groupBy: GroupBy; }) { if (groupBy === 'month') { @@ -33,7 +36,7 @@ export function formatGroupedDate({ return format(date, DATE_FORMAT); } -export function getTooltipOptions({ +export function getTooltipOptions({ colorScheme, currency = '', groupBy, @@ -45,35 +48,43 @@ export function getTooltipOptions({ groupBy?: GroupBy; locale?: string; unit?: string; -}) { +}): Partial> { return { backgroundColor: getBackgroundColor(colorScheme), bodyColor: `rgb(${getTextColor(colorScheme)})`, borderWidth: 1, borderColor: `rgba(${getTextColor(colorScheme)}, 0.1)`, + // @ts-expect-error: no need to set all attributes in callbacks callbacks: { label: (context) => { - let label = context.dataset.label ?? ''; + let label = (context.dataset as ControllerDatasetOptions).label ?? ''; + if (label) { label += ': '; } - if (context.parsed.y !== null) { + + const yPoint = (context.parsed as Point).y; + + if (yPoint !== null) { if (currency) { - label += `${context.parsed.y.toLocaleString(locale, { + label += `${yPoint.toLocaleString(locale, { maximumFractionDigits: 2, minimumFractionDigits: 2 })} ${currency}`; } else if (unit) { - label += `${context.parsed.y.toFixed(2)} ${unit}`; + label += `${yPoint.toFixed(2)} ${unit}`; } else { - label += context.parsed.y.toFixed(2); + label += yPoint.toFixed(2); } } + return label; }, title: (contexts) => { - if (groupBy) { - return formatGroupedDate({ groupBy, date: contexts[0].parsed.x }); + const xPoint = (contexts[0].parsed as Point).x; + + if (groupBy && xPoint !== null) { + return formatGroupedDate({ groupBy, date: xPoint }); } return contexts[0].label; @@ -98,16 +109,17 @@ export function getTooltipPositionerMapTop( if (!position || !chart?.chartArea) { return false; } + return { x: position.x, y: chart.chartArea.top }; } -export function getVerticalHoverLinePlugin( - chartCanvas: ElementRef, +export function getVerticalHoverLinePlugin( + chartCanvas: ElementRef, colorScheme: ColorScheme -): Plugin { +): Plugin { return { afterDatasetsDraw: (chart, _, options) => { const active = chart.getActiveElements(); @@ -125,13 +137,16 @@ export function getVerticalHoverLinePlugin( const xValue = active[0].element.x; const context = chartCanvas.nativeElement.getContext('2d'); - context.lineWidth = width; - context.strokeStyle = color; - context.beginPath(); - context.moveTo(xValue, top); - context.lineTo(xValue, bottom); - context.stroke(); + if (context) { + context.lineWidth = width; + context.strokeStyle = color; + + context.beginPath(); + context.moveTo(xValue, top); + context.lineTo(xValue, bottom); + context.stroke(); + } }, id: 'verticalHoverLine' }; diff --git a/libs/ui/src/lib/chart/chart.registry.ts b/libs/ui/src/lib/chart/chart.registry.ts new file mode 100644 index 000000000..465d6e716 --- /dev/null +++ b/libs/ui/src/lib/chart/chart.registry.ts @@ -0,0 +1,29 @@ +import { getTooltipPositionerMapTop } from '@ghostfolio/common/chart-helper'; + +import { Tooltip, TooltipPositionerFunction, ChartType } from 'chart.js'; + +interface VerticalHoverLinePluginOptions { + color?: string; + width?: number; +} + +declare module 'chart.js' { + interface PluginOptionsByType { + verticalHoverLine: TType extends 'line' | 'bar' + ? VerticalHoverLinePluginOptions + : never; + } + interface TooltipPositionerMap { + top: TooltipPositionerFunction; + } +} + +export function registerChartConfiguration() { + if (Tooltip.positioners['top']) { + return; + } + + Tooltip.positioners.top = function (_elements, eventPosition) { + return getTooltipPositionerMapTop(this.chart, eventPosition); + }; +} diff --git a/libs/ui/src/lib/chart/index.ts b/libs/ui/src/lib/chart/index.ts new file mode 100644 index 000000000..2a3d3b358 --- /dev/null +++ b/libs/ui/src/lib/chart/index.ts @@ -0,0 +1 @@ +export * from './chart.registry'; diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index 6b0bc8dcb..7461f6729 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -38,6 +38,8 @@ import { BarElement, CategoryScale, Chart, + type ChartData, + type ChartDataset, LinearScale, Tooltip } from 'chart.js'; @@ -270,7 +272,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { this.chart.update(); } else { - this.chart = new Chart(this.chartCanvas.nativeElement, { + this.chart = new Chart<'bar'>(this.chartCanvas.nativeElement, { data: chartData, options: { plugins: { @@ -280,7 +282,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { callbacks: { footer: (items) => { const totalAmount = items.reduce( - (a, b) => a + b.parsed.y, + (a, b) => a + (b.parsed.y ?? 0), 0 ); @@ -302,8 +304,6 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { if (context.parsed.y !== null) { label += new Intl.NumberFormat(this.locale, { currency: this.currency, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore: Only supported from ES2020 or later currencyDisplay: 'code', style: 'currency' }).format(context.parsed.y); @@ -345,9 +345,9 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { this.isLoading = false; } - private getChartData() { + private getChartData(): ChartData<'bar'> { const currentYear = new Date().getFullYear(); - const labels = []; + const labels: number[] = []; // Principal investment amount const P: number = this.getP(); @@ -371,13 +371,13 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { labels.push(year); } - const datasetDeposit = { + const datasetDeposit: ChartDataset<'bar'> = { backgroundColor: `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})`, data: [], label: $localize`Deposit` }; - const datasetInterest = { + const datasetInterest: ChartDataset<'bar'> = { backgroundColor: Color( `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})` ) @@ -387,7 +387,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { label: $localize`Interest` }; - const datasetSavings = { + const datasetSavings: ChartDataset<'bar'> = { backgroundColor: Color( `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})` ) diff --git a/libs/ui/src/lib/line-chart/line-chart.component.ts b/libs/ui/src/lib/line-chart/line-chart.component.ts index 0afef5959..dd972bc5a 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -1,6 +1,5 @@ import { getTooltipOptions, - getTooltipPositionerMapTop, getVerticalHoverLinePlugin } from '@ghostfolio/common/chart-helper'; import { primaryColorRgb, secondaryColorRgb } from '@ghostfolio/common/config'; @@ -19,12 +18,14 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + type ElementRef, Input, OnChanges, OnDestroy, ViewChild } from '@angular/core'; import { + type AnimationsSpec, Chart, Filler, LinearScale, @@ -33,11 +34,13 @@ import { PointElement, TimeScale, Tooltip, - TooltipPosition + type TooltipOptions } from 'chart.js'; import 'chartjs-adapter-date-fns'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; +import { registerChartConfiguration } from '../chart'; + @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, NgxSkeletonLoaderModule], @@ -67,7 +70,7 @@ export class GfLineChartComponent @Input() yMin: number; @Input() yMinLabel: string; - @ViewChild('chartCanvas') chartCanvas; + @ViewChild('chartCanvas') chartCanvas: ElementRef; public chart: Chart<'line'>; public isLoading = true; @@ -85,8 +88,7 @@ export class GfLineChartComponent Tooltip ); - Tooltip.positioners['top'] = (_elements, position: TooltipPosition) => - getTooltipPositionerMapTop(this.chart, position); + registerChartConfiguration(); } public ngAfterViewInit() { @@ -117,9 +119,9 @@ export class GfLineChartComponent private initialize() { this.isLoading = true; - const benchmarkPrices = []; + const benchmarkPrices: number[] = []; const labels: string[] = []; - const marketPrices = []; + const marketPrices: number[] = []; this.historicalDataItems?.forEach((historicalDataItem, index) => { benchmarkPrices.push(this.benchmarkDataItems?.[index]?.value); @@ -129,11 +131,14 @@ export class GfLineChartComponent const gradient = this.chartCanvas?.nativeElement ?.getContext('2d') - .createLinearGradient( + ?.createLinearGradient( 0, 0, 0, - (this.chartCanvas.nativeElement.parentNode.offsetHeight * 4) / 5 + ((this.chartCanvas.nativeElement.parentNode as HTMLElement) + .offsetHeight * + 4) / + 5 ); if (gradient && this.showGradient) { @@ -169,27 +174,26 @@ export class GfLineChartComponent }; if (this.chartCanvas) { + const animations = { + x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }), + y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' }) + }; + if (this.chart) { this.chart.data = data; + this.chart.options.plugins ??= {}; this.chart.options.plugins.tooltip = - this.getTooltipPluginConfiguration() as unknown; - this.chart.options.animation = - this.isAnimated && - ({ - x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }), - y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' }) - } as unknown); + this.getTooltipPluginConfiguration(); + this.chart.options.animations = this.isAnimated + ? animations + : undefined; + this.chart.update(); } else { this.chart = new Chart(this.chartCanvas.nativeElement, { data, options: { - animation: - this.isAnimated && - ({ - x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }), - y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' }) - } as unknown), + animations: this.isAnimated ? animations : undefined, aspectRatio: 16 / 9, elements: { point: { @@ -208,7 +212,7 @@ export class GfLineChartComponent verticalHoverLine: { color: `rgba(${getTextColor(this.colorScheme)}, 0.1)` } - } as unknown, + }, scales: { x: { border: { @@ -298,7 +302,7 @@ export class GfLineChartComponent }: { axis: 'x' | 'y'; labels: string[]; - }) { + }): Partial[string]> { const delayBetweenPoints = this.ANIMATION_DURATION / labels.length; return { @@ -308,7 +312,7 @@ export class GfLineChartComponent } context[`${axis}Started`] = true; - return context.index * delayBetweenPoints; + return context.dataIndex * delayBetweenPoints; }, duration: delayBetweenPoints, easing: 'linear', @@ -317,7 +321,7 @@ export class GfLineChartComponent }; } - private getTooltipPluginConfiguration() { + private getTooltipPluginConfiguration(): Partial> { return { ...getTooltipOptions({ colorScheme: this.colorScheme, @@ -326,7 +330,7 @@ export class GfLineChartComponent unit: this.unit }), mode: 'index', - position: 'top' as unknown, + position: 'top', xAlign: 'center', yAlign: 'bottom' }; diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index fb11897eb..7d0203e9c 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -22,11 +22,16 @@ import { } from '@angular/core'; import { DataSource } from '@prisma/client'; import { Big } from 'big.js'; -import { ChartConfiguration, Tooltip } from 'chart.js'; -import { LinearScale } from 'chart.js'; -import { ArcElement } from 'chart.js'; -import { DoughnutController } from 'chart.js'; -import { Chart } from 'chart.js'; +import { + ArcElement, + Chart, + type ChartData, + type ChartDataset, + DoughnutController, + LinearScale, + Tooltip, + type TooltipOptions +} from 'chart.js'; import ChartDataLabels from 'chartjs-plugin-datalabels'; import { isUUID } from 'class-validator'; import Color from 'color'; @@ -286,7 +291,7 @@ export class GfPortfolioProportionChartComponent }); }); - const datasets: ChartConfiguration<'doughnut'>['data']['datasets'] = [ + const datasets: ChartDataset<'doughnut'>[] = [ { backgroundColor: chartDataSorted.map(([, item]) => { return item.color; @@ -324,7 +329,7 @@ export class GfPortfolioProportionChartComponent datasets[1].data[1] = Number.MAX_SAFE_INTEGER; } - const data: ChartConfiguration<'doughnut'>['data'] = { + const data: ChartData<'doughnut'> = { datasets, labels }; @@ -332,9 +337,10 @@ export class GfPortfolioProportionChartComponent if (this.chartCanvas) { if (this.chart) { this.chart.data = data; - this.chart.options.plugins.tooltip = this.getTooltipPluginConfiguration( - data - ) as unknown; + this.chart.options.plugins ??= {}; + this.chart.options.plugins.tooltip = + this.getTooltipPluginConfiguration(data); + this.chart.update(); } else { this.chart = new Chart<'doughnut'>(this.chartCanvas.nativeElement, { @@ -345,21 +351,22 @@ export class GfPortfolioProportionChartComponent layout: { padding: this.showLabels === true ? 100 : 0 }, - onClick: (event, activeElements) => { + onClick: (_, activeElements, chart) => { try { const dataIndex = activeElements[0].index; - const symbol: string = event.chart.data.labels[dataIndex]; + const symbol = chart.data.labels?.[dataIndex] as string; - const dataSource = this.data[symbol]?.dataSource; + const dataSource = this.data[symbol].dataSource; - this.proportionChartClicked.emit({ dataSource, symbol }); + if (dataSource) { + this.proportionChartClicked.emit({ dataSource, symbol }); + } } catch {} }, onHover: (event, chartElement) => { if (this.cursor) { - event.native.target.style.cursor = chartElement[0] - ? this.cursor - : 'default'; + (event.native?.target as HTMLElement).style.cursor = + chartElement[0] ? this.cursor : 'default'; } }, plugins: { @@ -392,7 +399,7 @@ export class GfPortfolioProportionChartComponent legend: { display: false }, tooltip: this.getTooltipPluginConfiguration(data) } - } as unknown, + }, plugins: [ChartDataLabels], type: 'doughnut' }); @@ -419,19 +426,24 @@ export class GfPortfolioProportionChartComponent ]; } - private getTooltipPluginConfiguration(data: ChartConfiguration['data']) { + private getTooltipPluginConfiguration( + data: ChartData<'doughnut'> + ): Partial> { return { ...getTooltipOptions({ colorScheme: this.colorScheme, currency: this.baseCurrency, locale: this.locale }), + // @ts-expect-error: no need to set all attributes in callbacks callbacks: { label: (context) => { const labelIndex = (data.datasets[context.datasetIndex - 1]?.data?.length ?? 0) + context.dataIndex; - let symbol = context.chart.data.labels?.[labelIndex] ?? ''; + + let symbol = + (context.chart.data.labels?.[labelIndex] as string) ?? ''; if (symbol === this.OTHER_KEY) { symbol = $localize`Other`; @@ -439,9 +451,10 @@ export class GfPortfolioProportionChartComponent symbol = $localize`No data available`; } - const name = translate(this.data[symbol as string]?.name); + const name = translate(this.data[symbol]?.name); let sum = 0; + for (const item of context.dataset.data) { sum += item; } @@ -454,6 +467,7 @@ export class GfPortfolioProportionChartComponent return [`${name ?? symbol}`, `${percentage.toFixed(2)}%`]; } else { const value = context.raw as number; + return [ `${name ?? symbol}`, `${value.toLocaleString(this.locale, { diff --git a/libs/ui/src/lib/treemap-chart/interfaces/interfaces.ts b/libs/ui/src/lib/treemap-chart/interfaces/interfaces.ts index bb673ed64..e8d182adb 100644 --- a/libs/ui/src/lib/treemap-chart/interfaces/interfaces.ts +++ b/libs/ui/src/lib/treemap-chart/interfaces/interfaces.ts @@ -1,5 +1,21 @@ +import { PortfolioPosition } from '@ghostfolio/common/interfaces'; + +import { ScriptableContext, TooltipItem } from 'chart.js'; +import { TreemapDataPoint } from 'chartjs-chart-treemap'; + export interface GetColorParams { annualizedNetPerformancePercent: number; negativeNetPerformancePercentsRange: { max: number; min: number }; positiveNetPerformancePercentsRange: { max: number; min: number }; } + +interface GfTreemapDataPoint extends TreemapDataPoint { + _data: PortfolioPosition; +} + +export interface GfTreemapScriptableContext extends ScriptableContext<'treemap'> { + raw: GfTreemapDataPoint; +} +export interface GfTreemapTooltipItem extends TooltipItem<'treemap'> { + raw: GfTreemapDataPoint; +} diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index 6ae958b83..ce85c300e 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -25,7 +25,7 @@ import { } from '@angular/core'; import { DataSource } from '@prisma/client'; import { Big } from 'big.js'; -import { ChartConfiguration } from 'chart.js'; +import type { TooltipOptions, ChartData } from 'chart.js'; import { LinearScale } from 'chart.js'; import { Chart, Tooltip } from 'chart.js'; import { TreemapController, TreemapElement } from 'chartjs-chart-treemap'; @@ -35,7 +35,11 @@ import { orderBy } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; -import { GetColorParams } from './interfaces/interfaces'; +import type { + GetColorParams, + GfTreemapScriptableContext, + GfTreemapTooltipItem +} from './interfaces/interfaces'; const { gray, green, red } = OpenColor; @@ -198,10 +202,10 @@ export class GfTreemapChartComponent min: Math.min(...negativeNetPerformancePercents) }; - const data: ChartConfiguration<'treemap'>['data'] = { + const data: ChartData<'treemap'> = { datasets: [ { - backgroundColor: (context) => { + backgroundColor: (context: GfTreemapScriptableContext) => { let annualizedNetPerformancePercent = getAnnualizedPerformancePercent({ daysInMarket: differenceInDays( @@ -232,7 +236,7 @@ export class GfTreemapChartComponent key: 'allocationInPercentage', labels: { align: 'left', - color: (context) => { + color: (context: GfTreemapScriptableContext) => { let annualizedNetPerformancePercent = getAnnualizedPerformancePercent({ daysInMarket: differenceInDays( @@ -261,7 +265,7 @@ export class GfTreemapChartComponent }, display: true, font: [{ size: 16 }, { lineHeight: 1.5, size: 14 }], - formatter: ({ raw }) => { + formatter: ({ raw }: GfTreemapScriptableContext) => { // Round to 4 decimal places let netPerformancePercentWithCurrencyEffect = Math.round( @@ -286,32 +290,35 @@ export class GfTreemapChartComponent position: 'top' }, spacing: 1, + // @ts-expect-error: should be PortfolioPosition[] tree: this.holdings } ] - } as any; + }; if (this.chartCanvas) { if (this.chart) { this.chart.data = data; + this.chart.options.plugins ??= {}; this.chart.options.plugins.tooltip = - this.getTooltipPluginConfiguration() as unknown; + this.getTooltipPluginConfiguration(); + this.chart.update(); } else { - this.chart = new Chart(this.chartCanvas.nativeElement, { + this.chart = new Chart<'treemap'>(this.chartCanvas.nativeElement, { data, options: { animation: false, - onClick: (event, activeElements) => { + onClick: (_, activeElements, chart: Chart<'treemap'>) => { try { const dataIndex = activeElements[0].index; const datasetIndex = activeElements[0].datasetIndex; const dataset = orderBy( - event.chart.data.datasets[datasetIndex].tree, + chart.data.datasets[datasetIndex].tree, ['allocationInPercentage'], ['desc'] - ); + ) as PortfolioPosition[]; const dataSource: DataSource = dataset[dataIndex].dataSource; const symbol: string = dataset[dataIndex].symbol; @@ -321,15 +328,14 @@ export class GfTreemapChartComponent }, onHover: (event, chartElement) => { if (this.cursor) { - event.native.target.style.cursor = chartElement[0] - ? this.cursor - : 'default'; + (event.native?.target as HTMLElement).style.cursor = + chartElement[0] ? this.cursor : 'default'; } }, plugins: { tooltip: this.getTooltipPluginConfiguration() } - } as unknown, + }, type: 'treemap' }); } @@ -338,16 +344,17 @@ export class GfTreemapChartComponent this.isLoading = false; } - private getTooltipPluginConfiguration() { + private getTooltipPluginConfiguration(): Partial> { return { ...getTooltipOptions({ colorScheme: this.colorScheme, currency: this.baseCurrency, locale: this.locale }), + // @ts-expect-error: no need to set all attributes in callbacks callbacks: { - label: ({ raw }) => { - const allocationInPercentage = `${((raw._data.allocationInPercentage as number) * 100).toFixed(2)}%`; + label: ({ raw }: GfTreemapTooltipItem) => { + const allocationInPercentage = `${(raw._data.allocationInPercentage * 100).toFixed(2)}%`; const name = raw._data.name; const sign = raw._data.netPerformancePercentWithCurrencyEffect > 0 ? '+' : ''; @@ -356,11 +363,11 @@ export class GfTreemapChartComponent const netPerformanceInPercentageWithSign = `${sign}${(raw._data.netPerformancePercentWithCurrencyEffect * 100).toFixed(2)}%`; if (raw._data.valueInBaseCurrency !== null) { - const value = raw._data.valueInBaseCurrency as number; + const value = raw._data.valueInBaseCurrency; return [ `${name ?? symbol} (${allocationInPercentage})`, - `${value.toLocaleString(this.locale, { + `${value?.toLocaleString(this.locale, { maximumFractionDigits: 2, minimumFractionDigits: 2 })} ${this.baseCurrency}`, From eb6177d2e56aebaed2b35e2811f5d944c22667c4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 5 Feb 2026 19:40:41 +0100 Subject: [PATCH 54/76] Bugfix/fix exception when fetching top holdings in Yahoo Finance service (#6279) * Add missing guard * Update changelog --- CHANGELOG.md | 4 +++ .../yahoo-finance/yahoo-finance.service.ts | 34 +++++++++---------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f64e6dc12..e4d88d75f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `stripe` from version `20.1.0` to `20.3.0` +### Fixed + +- Fixed an exception when fetching the top holdings for ETF and mutual fund assets from _Yahoo Finance_ + ## 2.235.0 - 2026-02-03 ### Added diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 97c875360..c83e35503 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -206,26 +206,26 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { ); if (['ETF', 'MUTUALFUND'].includes(assetSubClass)) { - response.sectors = []; - - for (const sectorWeighting of assetProfile.topHoldings - ?.sectorWeightings ?? []) { - for (const [sector, weight] of Object.entries(sectorWeighting)) { - response.sectors.push({ + response.holdings = + assetProfile.topHoldings?.holdings?.map( + ({ holdingName, holdingPercent }) => { + return { + name: this.formatName({ longName: holdingName }), + weight: holdingPercent + }; + } + ) ?? []; + + response.sectors = ( + assetProfile.topHoldings?.sectorWeightings ?? [] + ).flatMap((sectorWeighting) => { + return Object.entries(sectorWeighting).map(([sector, weight]) => { + return { name: this.parseSector(sector), weight: weight as number - }); - } - } - - response.holdings = assetProfile.topHoldings.holdings.map( - ({ holdingName, holdingPercent }) => { - return { - name: this.formatName({ longName: holdingName }), - weight: holdingPercent }; - } - ); + }); + }); } else if ( assetSubClass === 'STOCK' && assetProfile.summaryProfile?.country From 4ff372f0205366e1afdb36c8c8ade4dbb491878b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:24:04 +0100 Subject: [PATCH 55/76] Task/remove deprecated transaction count in get admin endpoint (#6281) * Remove deprecated transaction count * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 1 - libs/common/src/lib/interfaces/admin-data.interface.ts | 4 ---- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4d88d75f..5e1c8b91a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Removed the deprecated `transactionCount` in the endpoint `GET api/v1/admin` - Upgraded `stripe` from version `20.1.0` to `20.3.0` ### Fixed diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index cd18eb239..2cc8bbfb8 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -186,7 +186,6 @@ export class AdminService { dataProviders, settings, userCount, - transactionCount: activitiesCount, version: environment.version }; } diff --git a/libs/common/src/lib/interfaces/admin-data.interface.ts b/libs/common/src/lib/interfaces/admin-data.interface.ts index 63588300c..dd25b516d 100644 --- a/libs/common/src/lib/interfaces/admin-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-data.interface.ts @@ -7,10 +7,6 @@ export interface AdminData { useForExchangeRates: boolean; })[]; settings: { [key: string]: boolean | object | string | string[] }; - - /** @deprecated use activitiesCount instead */ - transactionCount: number; - userCount: number; version: string; } From bf9f8d49e9301c676cb2195f8950812ad4b77e82 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:28:23 +0100 Subject: [PATCH 56/76] Release 2.236.0 (#6282) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e1c8b91a..53c9b42d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.236.0 - 2026-02-05 ### Changed diff --git a/package-lock.json b/package-lock.json index 25cee635d..b90f9050f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.235.0", + "version": "2.236.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.235.0", + "version": "2.236.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 9d7a37979..0aa520beb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.235.0", + "version": "2.236.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 5adacda88fd4010ef217409ab635eb6c2aed0625 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 6 Feb 2026 12:22:39 +0100 Subject: [PATCH 57/76] Task/remove deprecated session id from create stripe checkout session response (#6280) * Remove deprecated sessionId --- apps/api/src/app/subscription/subscription.service.ts | 1 - .../create-stripe-checkout-session-response.interface.ts | 3 --- 2 files changed, 4 deletions(-) diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 2c0226937..689ee3e6a 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -100,7 +100,6 @@ export class SubscriptionService { ); return { - sessionId: session.id, sessionUrl: session.url }; } diff --git a/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts b/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts index 1222ac6e9..8ac1a8279 100644 --- a/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts @@ -1,6 +1,3 @@ export interface CreateStripeCheckoutSessionResponse { - /** @deprecated */ - sessionId: string; - sessionUrl: string; } From 348ee5de8d6e62f3271327090d9765633b4bae13 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 7 Feb 2026 14:04:10 +0100 Subject: [PATCH 58/76] Task/add missing transform data source interceptors in market data controller (#6287) * Add missing transform data source interceptors --- .../app/endpoints/market-data/market-data.controller.ts | 7 ++++++- .../src/app/endpoints/market-data/market-data.module.ts | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/api/src/app/endpoints/market-data/market-data.controller.ts b/apps/api/src/app/endpoints/market-data/market-data.controller.ts index 987d34918..0dae82d2c 100644 --- a/apps/api/src/app/endpoints/market-data/market-data.controller.ts +++ b/apps/api/src/app/endpoints/market-data/market-data.controller.ts @@ -2,6 +2,8 @@ import { AdminService } from '@ghostfolio/api/app/admin/admin.service'; import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; +import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; +import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { @@ -28,7 +30,8 @@ import { Param, Post, Query, - UseGuards + UseGuards, + UseInterceptors } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; @@ -86,6 +89,8 @@ export class MarketDataController { @Get(':dataSource/:symbol') @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInRequestInterceptor) + @UseInterceptors(TransformDataSourceInResponseInterceptor) public async getMarketDataBySymbol( @Param('dataSource') dataSource: DataSource, @Param('symbol') symbol: string diff --git a/apps/api/src/app/endpoints/market-data/market-data.module.ts b/apps/api/src/app/endpoints/market-data/market-data.module.ts index a8b355de3..d5d64673d 100644 --- a/apps/api/src/app/endpoints/market-data/market-data.module.ts +++ b/apps/api/src/app/endpoints/market-data/market-data.module.ts @@ -1,5 +1,7 @@ import { AdminModule } from '@ghostfolio/api/app/admin/admin.module'; import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; +import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; +import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; import { MarketDataModule as MarketDataServiceModule } from '@ghostfolio/api/services/market-data/market-data.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; @@ -13,7 +15,9 @@ import { MarketDataController } from './market-data.controller'; AdminModule, MarketDataServiceModule, SymbolModule, - SymbolProfileModule + SymbolProfileModule, + TransformDataSourceInRequestModule, + TransformDataSourceInResponseModule ] }) export class MarketDataModule {} From 63e75942a8e227dff18fe7667bc0cea30fab58e4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 7 Feb 2026 14:51:09 +0100 Subject: [PATCH 59/76] Task/remove deprecated transaction count in portfolio calculator and service (#6288) * Remove deprecated transactionCount in portfolio calculator and service * Update changelog --- CHANGELOG.md | 6 +++ apps/api/src/app/account/account.service.ts | 6 +-- .../calculator/portfolio-calculator.ts | 7 +-- ...tfolio-calculator-baln-buy-and-buy.spec.ts | 1 - ...aln-buy-and-sell-in-two-activities.spec.ts | 1 - ...folio-calculator-baln-buy-and-sell.spec.ts | 1 - .../portfolio-calculator-baln-buy.spec.ts | 1 - .../roai/portfolio-calculator-btceur.spec.ts | 1 - ...ator-btcusd-buy-and-sell-partially.spec.ts | 1 - .../roai/portfolio-calculator-btcusd.spec.ts | 1 - .../roai/portfolio-calculator-cash.spec.ts | 1 - .../portfolio-calculator-googl-buy.spec.ts | 1 - ...-calculator-msft-buy-with-dividend.spec.ts | 3 +- ...ulator-novn-buy-and-sell-partially.spec.ts | 1 - ...folio-calculator-novn-buy-and-sell.spec.ts | 1 - .../portfolio-calculator-valuable.spec.ts | 1 - .../transaction-point-symbol.interface.ts | 3 -- .../src/app/portfolio/portfolio.service.ts | 8 ---- apps/api/src/helper/object.helper.spec.ts | 48 +++++++++---------- .../account-detail-dialog.component.ts | 6 +-- .../account-detail-dialog.html | 2 +- .../portfolio-position.interface.ts | 4 -- .../responses/accounts-response.interface.ts | 3 -- .../src/lib/models/timeline-position.ts | 3 -- .../src/lib/types/account-with-value.type.ts | 4 -- .../accounts-table.component.html | 6 +-- .../accounts-table.component.stories.ts | 6 +-- libs/ui/src/lib/mocks/holdings.ts | 7 --- 28 files changed, 46 insertions(+), 88 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53c9b42d8..094266869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Removed the `transactionCount` in the portfolio calculator and service + ## 2.236.0 - 2026-02-05 ### Changed diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts index 398a89bb9..e1b01a6ed 100644 --- a/apps/api/src/app/account/account.service.ts +++ b/apps/api/src/app/account/account.service.ts @@ -150,15 +150,15 @@ export class AccountService { }); return accounts.map((account) => { - let transactionCount = 0; + let activitiesCount = 0; for (const { isDraft } of account.activities) { if (!isDraft) { - transactionCount += 1; + activitiesCount += 1; } } - const result = { ...account, transactionCount }; + const result = { ...account, activitiesCount }; delete result.activities; diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 9612ad1c4..2e58a4ef5 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -445,7 +445,6 @@ export abstract class PortfolioCalculator { quantity: item.quantity, symbol: item.symbol, tags: item.tags, - transactionCount: item.transactionCount, valueInBaseCurrency: new Big(marketPriceInBaseCurrency).mul( item.quantity ) @@ -1005,8 +1004,7 @@ export abstract class PortfolioCalculator { oldAccumulatedSymbol.feeInBaseCurrency.plus(feeInBaseCurrency), includeInHoldings: oldAccumulatedSymbol.includeInHoldings, quantity: newQuantity, - tags: oldAccumulatedSymbol.tags.concat(tags), - transactionCount: oldAccumulatedSymbol.transactionCount + 1 + tags: oldAccumulatedSymbol.tags.concat(tags) }; } else { currentTransactionPointItem = { @@ -1024,8 +1022,7 @@ export abstract class PortfolioCalculator { dividend: new Big(0), includeInHoldings: INVESTMENT_ACTIVITY_TYPES.includes(type), investment: unitPrice.mul(quantity).mul(factor), - quantity: quantity.mul(factor), - transactionCount: 1 + quantity: quantity.mul(factor) }; } diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index 7858d7546..52c8489dd 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -178,7 +178,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '474.93846153846153846154' ), - transactionCount: 2, valueInBaseCurrency: new Big('595.6') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 8b40c7b70..3998b081d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -192,7 +192,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '285.80000000000000396627' ), - transactionCount: 3, valueInBaseCurrency: new Big('0') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index fc372f68f..acd0d0b2e 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -176,7 +176,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('285.8'), timeWeightedInvestmentWithCurrencyEffect: new Big('285.8'), - transactionCount: 2, valueInBaseCurrency: new Big('0') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index 926fae6dc..652e72db0 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -172,7 +172,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('273.2'), timeWeightedInvestmentWithCurrencyEffect: new Big('273.2'), - transactionCount: 1, valueInBaseCurrency: new Big('297.8') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index b216438b8..055356325 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -227,7 +227,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('44558.42'), timeWeightedInvestmentWithCurrencyEffect: new Big('44558.42'), - transactionCount: 1, valueInBaseCurrency: new Big('43099.7') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 14cd4f217..a70cc2986 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -194,7 +194,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '636.79389574611155533947' ), - transactionCount: 2, valueInBaseCurrency: new Big('13298.425356') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 066f33ea3..64882061f 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -227,7 +227,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('44558.42'), timeWeightedInvestmentWithCurrencyEffect: new Big('44558.42'), - transactionCount: 1, valueInBaseCurrency: new Big('43099.7') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index bd8afddd7..a53ebcf05 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -276,7 +276,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '852.45231607629427792916' ), - transactionCount: 2, valueInBaseCurrency: new Big(1820) }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index 28b44e159..9b48a1324 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -172,7 +172,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('89.12').mul(0.8854), timeWeightedInvestmentWithCurrencyEffect: new Big('82.329056'), - transactionCount: 1, valueInBaseCurrency: new Big('103.10483') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 87ef9ed8b..b19adb642 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -162,8 +162,7 @@ describe('PortfolioCalculator', () => { }, quantity: new Big('1'), symbol: 'MSFT', - tags: [], - transactionCount: 2 + tags: [] } ], totalFeesWithCurrencyEffect: new Big('19'), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 7a8dc010a..fecf17011 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -174,7 +174,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '145.10285714285714285714' ), - transactionCount: 2, valueInBaseCurrency: new Big('87.8') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index 02a4e80d8..adbb5c3ff 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -225,7 +225,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('151.6'), timeWeightedInvestmentWithCurrencyEffect: new Big('151.6'), - transactionCount: 2, valueInBaseCurrency: new Big('0') } ], diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 610a52c06..6fc94622f 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -146,7 +146,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('500000'), timeWeightedInvestmentWithCurrencyEffect: new Big('500000'), - transactionCount: 1, valueInBaseCurrency: new Big('500000') } ], diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index 7e7d741ea..7f3f54ff5 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -17,7 +17,4 @@ export interface TransactionPointSymbol { skipErrors: boolean; symbol: string; tags?: Tag[]; - - /** @deprecated use activitiesCount instead */ - transactionCount: number; } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 05df6a8fc..7be375473 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -233,7 +233,6 @@ export class PortfolioService { account.currency, userCurrency ), - transactionCount: activitiesCount, value: this.exchangeRateDataService.toCurrency( valueInBaseCurrency, userCurrency, @@ -284,7 +283,6 @@ export class PortfolioService { let totalDividendInBaseCurrency = new Big(0); let totalInterestInBaseCurrency = new Big(0); let totalValueInBaseCurrency = new Big(0); - let transactionCount = 0; for (const account of accounts) { activitiesCount += account.activitiesCount; @@ -301,8 +299,6 @@ export class PortfolioService { totalValueInBaseCurrency = totalValueInBaseCurrency.plus( account.valueInBaseCurrency ); - - transactionCount += account.transactionCount; } for (const account of accounts) { @@ -317,7 +313,6 @@ export class PortfolioService { return { accounts, activitiesCount, - transactionCount, totalBalanceInBaseCurrency: totalBalanceInBaseCurrency.toNumber(), totalDividendInBaseCurrency: totalDividendInBaseCurrency.toNumber(), totalInterestInBaseCurrency: totalInterestInBaseCurrency.toNumber(), @@ -591,7 +586,6 @@ export class PortfolioService { quantity, symbol, tags, - transactionCount, valueInBaseCurrency } of positions) { if (isFilteredByClosedHoldings === true) { @@ -625,7 +619,6 @@ export class PortfolioService { marketPrice, symbol, tags, - transactionCount, allocationInPercentage: filteredValueInBaseCurrency.eq(0) ? 0 : valueInBaseCurrency.div(filteredValueInBaseCurrency).toNumber(), @@ -1696,7 +1689,6 @@ export class PortfolioService { sectors: [], symbol: currency, tags: [], - transactionCount: 0, valueInBaseCurrency: balance }; } diff --git a/apps/api/src/helper/object.helper.spec.ts b/apps/api/src/helper/object.helper.spec.ts index 5ddff164b..ed821390f 100644 --- a/apps/api/src/helper/object.helper.spec.ts +++ b/apps/api/src/helper/object.helper.spec.ts @@ -111,6 +111,7 @@ describe('redactAttributes', () => { hasError: false, holdings: { 'AAPL.US': { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -130,7 +131,6 @@ describe('redactAttributes', () => { marketPrice: 220.79, symbol: 'AAPL.US', tags: [], - transactionCount: 1, allocationInPercentage: 0.044900865255793135, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -163,6 +163,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.0694356974830054 }, 'ALV.DE': { + activitiesCount: 2, currency: 'EUR', markets: { UNKNOWN: 0, @@ -182,7 +183,6 @@ describe('redactAttributes', () => { marketPrice: 296.5, symbol: 'ALV.DE', tags: [], - transactionCount: 2, allocationInPercentage: 0.026912563036519527, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -210,6 +210,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.04161818652826481 }, AMZN: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -229,7 +230,6 @@ describe('redactAttributes', () => { marketPrice: 187.99, symbol: 'AMZN', tags: [], - transactionCount: 1, allocationInPercentage: 0.07646101417126275, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -262,6 +262,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.11824101426541227 }, bitcoin: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 36985.0332704, @@ -287,7 +288,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 1, allocationInPercentage: 0.15042891393226654, assetClass: 'LIQUIDITY', assetSubClass: 'CRYPTOCURRENCY', @@ -313,6 +313,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.232626620912395 }, BONDORA_GO_AND_GROW: { + activitiesCount: 5, currency: 'EUR', markets: { UNKNOWN: 2231.644722160232, @@ -338,7 +339,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 5, allocationInPercentage: 0.009076749759365777, assetClass: 'FIXED_INCOME', assetSubClass: 'BOND', @@ -364,6 +364,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.014036487867880205 }, FRANKLY95P: { + activitiesCount: 6, currency: 'CHF', markets: { UNKNOWN: 0, @@ -389,7 +390,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 6, allocationInPercentage: 0.09095764645669335, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -488,6 +488,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.14065892911313693 }, MSFT: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -507,7 +508,6 @@ describe('redactAttributes', () => { marketPrice: 428.02, symbol: 'MSFT', tags: [], - transactionCount: 1, allocationInPercentage: 0.05222646409742627, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -540,6 +540,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08076416659271518 }, TSLA: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -559,7 +560,6 @@ describe('redactAttributes', () => { marketPrice: 260.46, symbol: 'TSLA', tags: [], - transactionCount: 1, allocationInPercentage: 0.1589050142378352, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -592,6 +592,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.2457342510950259 }, VTI: { + activitiesCount: 5, currency: 'USD', markets: { UNKNOWN: 0, @@ -611,7 +612,6 @@ describe('redactAttributes', () => { marketPrice: 282.05, symbol: 'VTI', tags: [], - transactionCount: 5, allocationInPercentage: 0.057358979326040366, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -764,6 +764,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08870120238725339 }, 'VWRL.SW': { + activitiesCount: 5, currency: 'CHF', markets: { UNKNOWN: 0, @@ -783,7 +784,6 @@ describe('redactAttributes', () => { marketPrice: 117.62, symbol: 'VWRL.SW', tags: [], - transactionCount: 5, allocationInPercentage: 0.09386983901959013, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -1172,6 +1172,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.145162408515095 }, 'XDWD.DE': { + activitiesCount: 1, currency: 'EUR', markets: { UNKNOWN: 0, @@ -1191,7 +1192,6 @@ describe('redactAttributes', () => { marketPrice: 105.72, symbol: 'XDWD.DE', tags: [], - transactionCount: 1, allocationInPercentage: 0.03598477442100562, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -1450,6 +1450,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.055647656152211074 }, USD: { + activitiesCount: 0, currency: 'USD', allocationInPercentage: 0.20291717628620132, assetClass: 'LIQUIDITY', @@ -1472,7 +1473,6 @@ describe('redactAttributes', () => { sectors: [], symbol: 'USD', tags: [], - transactionCount: 0, valueInBaseCurrency: 49890, valueInPercentage: 0.3137956381563603 } @@ -1615,6 +1615,7 @@ describe('redactAttributes', () => { hasError: false, holdings: { 'AAPL.US': { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -1634,7 +1635,6 @@ describe('redactAttributes', () => { marketPrice: 220.79, symbol: 'AAPL.US', tags: [], - transactionCount: 1, allocationInPercentage: 0.044900865255793135, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -1667,6 +1667,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.0694356974830054 }, 'ALV.DE': { + activitiesCount: 2, currency: 'EUR', markets: { UNKNOWN: 0, @@ -1686,7 +1687,6 @@ describe('redactAttributes', () => { marketPrice: 296.5, symbol: 'ALV.DE', tags: [], - transactionCount: 2, allocationInPercentage: 0.026912563036519527, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -1714,6 +1714,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.04161818652826481 }, AMZN: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -1733,7 +1734,6 @@ describe('redactAttributes', () => { marketPrice: 187.99, symbol: 'AMZN', tags: [], - transactionCount: 1, allocationInPercentage: 0.07646101417126275, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -1766,6 +1766,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.11824101426541227 }, bitcoin: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 36985.0332704, @@ -1791,7 +1792,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 1, allocationInPercentage: 0.15042891393226654, assetClass: 'LIQUIDITY', assetSubClass: 'CRYPTOCURRENCY', @@ -1817,6 +1817,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.232626620912395 }, BONDORA_GO_AND_GROW: { + activitiesCount: 5, currency: 'EUR', markets: { UNKNOWN: 2231.644722160232, @@ -1842,7 +1843,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 5, allocationInPercentage: 0.009076749759365777, assetClass: 'FIXED_INCOME', assetSubClass: 'BOND', @@ -1868,6 +1868,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.014036487867880205 }, FRANKLY95P: { + activitiesCount: 6, currency: 'CHF', markets: { UNKNOWN: 0, @@ -1893,7 +1894,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 6, allocationInPercentage: 0.09095764645669335, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -1972,6 +1972,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.14065892911313693 }, MSFT: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -1991,7 +1992,6 @@ describe('redactAttributes', () => { marketPrice: 428.02, symbol: 'MSFT', tags: [], - transactionCount: 1, allocationInPercentage: 0.05222646409742627, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -2024,6 +2024,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08076416659271518 }, TSLA: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -2043,7 +2044,6 @@ describe('redactAttributes', () => { marketPrice: 260.46, symbol: 'TSLA', tags: [], - transactionCount: 1, allocationInPercentage: 0.1589050142378352, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -2076,6 +2076,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.2457342510950259 }, VTI: { + activitiesCount: 5, currency: 'USD', markets: { UNKNOWN: 0, @@ -2095,7 +2096,6 @@ describe('redactAttributes', () => { marketPrice: 282.05, symbol: 'VTI', tags: [], - transactionCount: 5, allocationInPercentage: 0.057358979326040366, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -2248,6 +2248,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08870120238725339 }, 'VWRL.SW': { + activitiesCount: 5, currency: 'CHF', markets: { UNKNOWN: 0, @@ -2267,7 +2268,6 @@ describe('redactAttributes', () => { marketPrice: 117.62, symbol: 'VWRL.SW', tags: [], - transactionCount: 5, allocationInPercentage: 0.09386983901959013, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -2648,6 +2648,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.145162408515095 }, 'XDWD.DE': { + activitiesCount: 1, currency: 'EUR', markets: { UNKNOWN: 0, @@ -2667,7 +2668,6 @@ describe('redactAttributes', () => { marketPrice: 105.72, symbol: 'XDWD.DE', tags: [], - transactionCount: 1, allocationInPercentage: 0.03598477442100562, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -2926,6 +2926,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.055647656152211074 }, USD: { + activitiesCount: 0, currency: 'USD', allocationInPercentage: 0.20291717628620132, assetClass: 'LIQUIDITY', @@ -2948,7 +2949,6 @@ describe('redactAttributes', () => { sectors: [], symbol: 'USD', tags: [], - transactionCount: 0, valueInBaseCurrency: null, valueInPercentage: 0.3137956381563603 } diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index b40043cc8..380fb69cb 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -80,6 +80,7 @@ import { AccountDetailDialogParams } from './interfaces/interfaces'; export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { public accountBalances: AccountBalancesResponse['balances']; public activities: OrderWithAccount[]; + public activitiesCount: number; public balance: number; public balancePrecision = 2; public currency: string; @@ -100,7 +101,6 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { public sortColumn = 'date'; public sortDirection: SortDirection = 'desc'; public totalItems: number; - public transactionCount: number; public user: User; public valueInBaseCurrency: number; @@ -215,16 +215,17 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { .pipe(takeUntil(this.unsubscribeSubject)) .subscribe( ({ + activitiesCount, balance, currency, dividendInBaseCurrency, interestInBaseCurrency, name, platform, - transactionCount, value, valueInBaseCurrency }) => { + this.activitiesCount = activitiesCount; this.balance = balance; if ( @@ -270,7 +271,6 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { this.name = name; this.platformName = platform?.name ?? '-'; - this.transactionCount = transactionCount; this.valueInBaseCurrency = valueInBaseCurrency; this.changeDetectorRef.markForCheck(); diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index 07ea17038..15dd8f13a 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -82,7 +82,7 @@ >
    - Activities
    diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts index 67a2f3e77..620cc00e9 100644 --- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts @@ -39,10 +39,6 @@ export interface PortfolioPosition { sectors: Sector[]; symbol: string; tags?: Tag[]; - - /** @deprecated use activitiesCount instead */ - transactionCount: number; - type?: string; url?: string; valueInBaseCurrency?: number; diff --git a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts index 1891b9cbb..90f1303e0 100644 --- a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts @@ -7,7 +7,4 @@ export interface AccountsResponse { totalDividendInBaseCurrency: number; totalInterestInBaseCurrency: number; totalValueInBaseCurrency: number; - - /** @deprecated use activitiesCount instead */ - transactionCount: number; } diff --git a/libs/common/src/lib/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index 9cfb2df04..13f9001d5 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -93,9 +93,6 @@ export class TimelinePosition { @Type(() => Big) timeWeightedInvestmentWithCurrencyEffect: Big; - /** @deprecated use activitiesCount instead */ - transactionCount: number; - @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) valueInBaseCurrency: Big; diff --git a/libs/common/src/lib/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts index 7f5fe79ba..23cb14749 100644 --- a/libs/common/src/lib/types/account-with-value.type.ts +++ b/libs/common/src/lib/types/account-with-value.type.ts @@ -7,10 +7,6 @@ export type AccountWithValue = AccountModel & { dividendInBaseCurrency: number; interestInBaseCurrency: number; platform?: Platform; - - /** @deprecated use activitiesCount instead */ - transactionCount: number; - value: number; valueInBaseCurrency: number; }; diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index c9124820c..68ae78474 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -120,13 +120,13 @@ *matHeaderCellDef class="justify-content-end px-1" mat-header-cell - mat-sort-header="transactionCount" + mat-sort-header="activitiesCount" > # Activities - {{ element.transactionCount }} + {{ element.activitiesCount }} {{ activitiesCount }} @@ -323,7 +323,7 @@
    @@ -201,7 +201,7 @@
@@ -225,7 +225,7 @@
@@ -249,7 +249,7 @@
@@ -272,7 +272,7 @@
@@ -304,7 +304,7 @@ @@ -388,7 +388,7 @@ @if (hasPermissionToCreateActivity) {