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 } diff --git a/CHANGELOG.md b/CHANGELOG.md index a07743c34..90430f5c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,123 @@ 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.238.0 - 2026-02-12 + +### Changed + +- Upgraded `ngx-skeleton-loader` from version `11.3.0` to `12.0.0` +- Upgraded `twitter-api-v2` from version `1.27.0` to `1.29.0` + +### Fixed + +- Fixed a performance calculation issue by resetting tracking variables when a holding is fully closed +- Fixed an issue in the annualized performance calculation +- Fixed an issue with the exchange rate calculation by expanding the date range to cover the full day (start to end of day) + +## 2.237.0 - 2026-02-08 + +### Changed + +- Removed the deprecated `transactionCount` in the portfolio calculator and service +- Refreshed the cryptocurrencies list +- Upgraded `Nx` from version `22.4.1` to `22.4.5` + +### Fixed + +- Fixed the accounts of the assistant for the impersonation mode +- Fixed the tags of the assistant for the impersonation mode + +## 2.236.0 - 2026-02-05 + +### Changed + +- Removed the deprecated `transactionCount` in the endpoint `GET api/v1/admin` +- 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 + +- 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 + +- 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` +- 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 + +### 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`) +- 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` +- Upgraded `prettier` from version `3.8.0` to `3.8.1` + +## 2.233.0 - 2026-01-23 + +### 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` +- Refreshed the cryptocurrencies list +- Upgraded `prettier` from version `3.7.4` to `3.8.0` + +## 2.232.0 - 2026-01-19 + +### Added + +- Extended the analysis page to include the total amount, change and performance with currency effects (experimental) + +### 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 + +### Changed + +- 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 +- 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 ### Added - 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) + +### 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/README.md b/README.md index 35276b232..3be15e49f 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 | @@ -317,12 +318,9 @@ If you like to support this project, become a [**Sponsor**](https://github.com/s ## Sponsors
-

- Browser testing via
- - LambdaTest Logo - -

+ + TestMu AI Logo +
## Analytics 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 }); } 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/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 705085a48..2cc8bbfb8 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,9 +182,9 @@ export class AdminService { ).filter(Boolean); return { + activitiesCount, dataProviders, settings, - transactionCount, userCount, version: environment.version }; 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 {} 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/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/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/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 8f6cb0efc..553cb8c90 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -53,6 +53,7 @@ import { isBefore, isWithinInterval, min, + startOfDay, startOfYear, subDays } from 'date-fns'; @@ -120,6 +121,7 @@ export abstract class PortfolioCalculator { ({ date, feeInAssetProfileCurrency, + feeInBaseCurrency, quantity, SymbolProfile, tags = [], @@ -142,6 +144,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) }; @@ -160,8 +163,8 @@ export abstract class PortfolioCalculator { subDays(dateOfFirstActivity, 1) ); - this.endDate = endDate; - this.startDate = startDate; + this.endDate = endOfDay(endDate); + this.startDate = startOfDay(startDate); this.computeTransactionPoints(); @@ -234,7 +237,7 @@ export abstract class PortfolioCalculator { const exchangeRatesByCurrency = await this.exchangeRateDataService.getExchangeRatesByCurrency({ currencies: Array.from(new Set(Object.values(currencies))), - endDate: endOfDay(this.endDate), + endDate: this.endDate, startDate: this.startDate, targetCurrency: this.currency }); @@ -336,12 +339,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,17 +405,18 @@ export abstract class PortfolioCalculator { } positions.push({ - feeInBaseCurrency, includeInTotalAssetValue, timeWeightedInvestment, timeWeightedInvestmentWithCurrencyEffect, + activitiesCount: item.activitiesCount, averagePrice: item.averagePrice, currency: item.currency, dataSource: item.dataSource, + dateOfFirstActivity: item.dateOfFirstActivity, dividend: totalDividend, dividendInBaseCurrency: totalDividendInBaseCurrency, fee: item.fee, - firstBuyDate: item.firstBuyDate, + feeInBaseCurrency: item.feeInBaseCurrency, grossPerformance: !hasErrors ? (grossPerformance ?? null) : null, grossPerformancePercentage: !hasErrors ? (grossPerformancePercentage ?? null) @@ -433,9 +431,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) @@ -449,7 +446,6 @@ export abstract class PortfolioCalculator { quantity: item.quantity, symbol: item.symbol, tags: item.tags, - transactionCount: item.transactionCount, valueInBaseCurrency: new Big(marketPriceInBaseCurrency).mul( item.quantity ) @@ -938,6 +934,7 @@ export abstract class PortfolioCalculator { for (const { date, fee, + feeInBaseCurrency, quantity, SymbolProfile, tags, @@ -997,16 +994,18 @@ export abstract class PortfolioCalculator { investment, skipErrors, symbol, + activitiesCount: oldAccumulatedSymbol.activitiesCount + 1, averagePrice: newQuantity.eq(0) ? new Big(0) : investment.div(newQuantity).abs(), + dateOfFirstActivity: oldAccumulatedSymbol.dateOfFirstActivity, dividend: new Big(0), fee: oldAccumulatedSymbol.fee.plus(fee), - firstBuyDate: oldAccumulatedSymbol.firstBuyDate, + feeInBaseCurrency: + 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 = { @@ -1014,16 +1013,17 @@ export abstract class PortfolioCalculator { currency, dataSource, fee, + feeInBaseCurrency, skipErrors, symbol, tags, + activitiesCount: 1, 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), - 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 f0e2f6488..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 @@ -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, @@ -131,20 +133,26 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('595.6'), errors: [], hasErrors: false, positions: [ { + activitiesCount: 2, 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'), feeInBaseCurrency: new Big('3.2'), - firstBuyDate: '2021-11-22', grossPerformance: new Big('36.6'), grossPerformancePercentage: new Big('0.07706261539956593567'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -170,7 +178,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '474.93846153846153846154' ), - transactionCount: 2, valueInBaseCurrency: new Big('595.6') } ], @@ -200,6 +207,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 10b1fabd3..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 @@ -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, @@ -146,20 +149,26 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('0'), errors: [], hasErrors: false, positions: [ { + activitiesCount: 3, 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'), feeInBaseCurrency: new Big('3.2'), - firstBuyDate: '2021-11-22', grossPerformance: new Big('-12.6'), grossPerformancePercentage: new Big('-0.04408677396780965649'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -183,7 +192,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '285.80000000000000396627' ), - transactionCount: 3, valueInBaseCurrency: new Big('0') } ], @@ -213,6 +221,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 32cd9f7d4..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 @@ -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, @@ -131,20 +133,26 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('0'), errors: [], hasErrors: false, positions: [ { + activitiesCount: 2, 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'), feeInBaseCurrency: new Big('3.2'), - firstBuyDate: '2021-11-22', grossPerformance: new Big('-12.6'), grossPerformancePercentage: new Big('-0.0440867739678096571'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -168,7 +176,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('285.8'), timeWeightedInvestmentWithCurrencyEffect: new Big('285.8'), - transactionCount: 2, valueInBaseCurrency: new Big('0') } ], @@ -198,6 +205,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 bfa4d06f3..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 @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -122,20 +123,26 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('297.8'), errors: [], hasErrors: false, positions: [ { + activitiesCount: 1, 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'), feeInBaseCurrency: new Big('1.55'), - firstBuyDate: '2021-11-30', grossPerformance: new Big('24.6'), grossPerformancePercentage: new Big('0.09004392386530014641'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -165,7 +172,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('273.2'), timeWeightedInvestmentWithCurrencyEffect: new Big('273.2'), - transactionCount: 1, valueInBaseCurrency: new Big('297.8') } ], @@ -198,6 +204,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 () => { @@ -208,6 +218,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -247,6 +258,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..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 @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 4.46, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', @@ -131,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, @@ -189,14 +195,15 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, 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'), feeInBaseCurrency: new Big('4.46'), - firstBuyDate: '2021-12-12', grossPerformance: new Big('-1458.72'), grossPerformancePercentage: new Big('-0.03273724696701543726'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -220,7 +227,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('44558.42'), timeWeightedInvestmentWithCurrencyEffect: new Big('44558.42'), - transactionCount: 1, valueInBaseCurrency: new Big('43099.7') } ], @@ -244,6 +250,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 0c111fab2..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 @@ -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, @@ -144,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: [], @@ -151,14 +158,15 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, 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'), feeInBaseCurrency: new Big('0'), - firstBuyDate: '2015-01-01', grossPerformance: new Big('27172.74').mul(0.97373), grossPerformancePercentage: new Big('0.4241983590271396608571'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -186,7 +194,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '636.79389574611155533947' ), - transactionCount: 2, valueInBaseCurrency: new Big('13298.425356') } ], @@ -251,6 +258,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-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..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 @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 4.46, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', @@ -131,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, @@ -189,14 +195,15 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, 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'), feeInBaseCurrency: new Big('4.46'), - firstBuyDate: '2021-12-12', grossPerformance: new Big('-1458.72'), grossPerformancePercentage: new Big('-0.03273724696701543726'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -220,7 +227,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('44558.42'), timeWeightedInvestmentWithCurrencyEffect: new Big('44558.42'), - transactionCount: 1, valueInBaseCurrency: new Big('43099.7') } ], @@ -244,6 +250,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-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index f5a4ca634..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 @@ -230,14 +230,15 @@ 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, + dateOfFirstActivity: '2023-12-31', dividend: new Big(0), 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( @@ -247,7 +248,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), @@ -275,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-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..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 @@ -99,6 +99,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2023-01-03'), feeInAssetProfileCurrency: 1, + feeInBaseCurrency: 0.9238, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -128,20 +129,26 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('103.10483'), errors: [], hasErrors: false, positions: [ { + activitiesCount: 1, 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'), 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( @@ -165,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') } ], @@ -217,6 +223,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-jnug-buy-and-sell-and-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts new file mode 100644 index 000000000..d5b22e864 --- /dev/null +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts @@ -0,0 +1,190 @@ +import { + activityDummyData, + loadExportFile, + symbolProfileDummyData, + userDummyData +} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; +import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; +import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; +import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock'; +import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; +import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; +import { parseDate } from '@ghostfolio/common/helper'; +import { Activity, ExportResponse } from '@ghostfolio/common/interfaces'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; + +import { Big } from 'big.js'; +import { join } from 'node:path'; + +jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { + return { + CurrentRateService: jest.fn().mockImplementation(() => { + return CurrentRateServiceMock; + }) + }; +}); + +jest.mock( + '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', + () => { + return { + PortfolioSnapshotService: jest.fn().mockImplementation(() => { + return PortfolioSnapshotServiceMock; + }) + }; + } +); + +jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { + return { + RedisCacheService: jest.fn().mockImplementation(() => { + return RedisCacheServiceMock; + }) + }; +}); + +describe('PortfolioCalculator', () => { + let exportResponse: ExportResponse; + + let configurationService: ConfigurationService; + let currentRateService: CurrentRateService; + let exchangeRateDataService: ExchangeRateDataService; + let portfolioCalculatorFactory: PortfolioCalculatorFactory; + let portfolioSnapshotService: PortfolioSnapshotService; + let redisCacheService: RedisCacheService; + + beforeAll(() => { + exportResponse = loadExportFile( + join( + __dirname, + '../../../../../../../test/import/ok/jnug-buy-and-sell-and-buy-and-sell.json' + ) + ); + }); + + beforeEach(() => { + configurationService = new ConfigurationService(); + + currentRateService = new CurrentRateService(null, null, null, null); + + exchangeRateDataService = new ExchangeRateDataService( + null, + null, + null, + null + ); + + portfolioSnapshotService = new PortfolioSnapshotService(null); + + redisCacheService = new RedisCacheService(null, null); + + portfolioCalculatorFactory = new PortfolioCalculatorFactory( + configurationService, + currentRateService, + exchangeRateDataService, + portfolioSnapshotService, + redisCacheService + ); + }); + + describe('get current positions', () => { + it.only('with JNUG buy and sell', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2025-12-28').getTime()); + + const activities: Activity[] = exportResponse.activities.map( + (activity) => ({ + ...activityDummyData, + ...activity, + date: parseDate(activity.date), + feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, + SymbolProfile: { + ...symbolProfileDummyData, + currency: activity.currency, + dataSource: activity.dataSource, + name: 'Direxion Daily Junior Gold Miners Index Bull 2X Shares', + symbol: activity.symbol + }, + unitPriceInAssetProfileCurrency: activity.unitPrice + }) + ); + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: exportResponse.user.settings.currency, + userId: userDummyData.id + }); + + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + + const investments = portfolioCalculator.getInvestments(); + + const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'month' + }); + + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + + expect(portfolioSnapshot).toMatchObject({ + currentValueInBaseCurrency: new Big('0'), + errors: [], + hasErrors: false, + positions: [ + { + activitiesCount: 4, + averagePrice: new Big('0'), + currency: 'USD', + dataSource: 'YAHOO', + dateOfFirstActivity: '2025-12-11', + dividend: new Big('0'), + dividendInBaseCurrency: new Big('0'), + fee: new Big('4'), + feeInBaseCurrency: new Big('4'), + grossPerformance: new Big('43.95'), // (1890.00 - 1885.05) + (2080.10 - 2041.10) + grossPerformanceWithCurrencyEffect: new Big('43.95'), // (1890.00 - 1885.05) + (2080.10 - 2041.10) + investment: new Big('0'), + investmentWithCurrencyEffect: new Big('0'), + netPerformance: new Big('39.95'), // (1890.00 - 1885.05) + (2080.10 - 2041.10) - 4 + netPerformanceWithCurrencyEffectMap: { + max: new Big('39.95') // (1890.00 - 1885.05) + (2080.10 - 2041.10) - 4 + }, + marketPrice: 237.8000030517578, + marketPriceInBaseCurrency: 237.8000030517578, + quantity: new Big('0'), + symbol: 'JNUG', + tags: [], + valueInBaseCurrency: new Big('0') + } + ], + totalFeesWithCurrencyEffect: new Big('4'), + totalInterestWithCurrencyEffect: new Big('0'), + totalInvestment: new Big('0'), + totalInvestmentWithCurrencyEffect: new Big('0'), + totalLiabilitiesWithCurrencyEffect: new Big('0') + }); + + expect(investments).toEqual([ + { date: '2025-12-11', investment: new Big('1885.05') }, + { date: '2025-12-18', investment: new Big('2041.1') }, + { date: '2025-12-28', investment: new Big('0') } + ]); + + expect(investmentsByMonth).toEqual([ + { date: '2025-12-01', investment: 0 } + ]); + + expect(investmentsByYear).toEqual([ + { date: '2025-01-01', investment: 0 } + ]); + }); + }); +}); 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..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 @@ -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, @@ -129,13 +131,14 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, 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'), - firstBuyDate: '2021-09-16', grossPerformance: new Big('33.25'), grossPerformancePercentage: new Big('0.11136043941322258691'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -159,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-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 650944421..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 @@ -101,6 +101,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, @@ -128,20 +129,26 @@ describe('PortfolioCalculator', () => { groupBy: 'month' }); + const investmentsByYear = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'year' + }); + expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('87.8'), errors: [], hasErrors: false, positions: [ { + activitiesCount: 2, 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'), feeInBaseCurrency: new Big('4.25'), - firstBuyDate: '2022-03-07', grossPerformance: new Big('21.93'), grossPerformancePercentage: new Big('0.15113417083448194384'), grossPerformancePercentageWithCurrencyEffect: new Big( @@ -167,7 +174,6 @@ describe('PortfolioCalculator', () => { timeWeightedInvestmentWithCurrencyEffect: new Big( '145.10285714285714285714' ), - transactionCount: 2, valueInBaseCurrency: new Big('87.8') } ], @@ -197,6 +203,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 2e408dc3c..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 @@ -101,6 +101,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, @@ -128,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, @@ -187,14 +193,15 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', + dateOfFirstActivity: '2022-03-07', dividend: new Big('0'), 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( @@ -218,7 +225,6 @@ describe('PortfolioCalculator', () => { tags: [], timeWeightedInvestment: new Big('151.6'), timeWeightedInvestmentWithCurrencyEffect: new Big('151.6'), - transactionCount: 2, valueInBaseCurrency: new Big('0') } ], @@ -248,6 +254,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 } + ]); }); }); }); 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..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 @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2022-01-01'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -115,21 +116,22 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('500000'), currency: 'USD', dataSource: 'MANUAL', + dateOfFirstActivity: '2022-01-01', dividend: new Big('0'), 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'), 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'), @@ -144,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/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 2ceed015d..be69048df 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 { @@ -619,6 +626,13 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { totalQuantityFromBuyTransactions ); + if (totalUnits.eq(0)) { + // Reset tracking variables when position is fully closed + totalInvestmentFromBuyTransactions = new Big(0); + totalInvestmentFromBuyTransactionsWithCurrencyEffect = new Big(0); + totalQuantityFromBuyTransactions = new Big(0); + } + if (PortfolioCalculator.ENABLE_LOGGING) { console.log( 'grossPerformanceFromSells', @@ -837,15 +851,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; diff --git a/apps/api/src/app/portfolio/current-rate.service.mock.ts b/apps/api/src/app/portfolio/current-rate.service.mock.ts index 4b4b8f00e..8e027f971 100644 --- a/apps/api/src/app/portfolio/current-rate.service.mock.ts +++ b/apps/api/src/app/portfolio/current-rate.service.mock.ts @@ -64,6 +64,17 @@ function mockGetValue(symbol: string, date: Date) { return { marketPrice: 0 }; + case 'JNUG': + if (isSameDay(parseDate('2025-12-10'), date)) { + return { marketPrice: 204.5599975585938 }; + } else if (isSameDay(parseDate('2025-12-17'), date)) { + return { marketPrice: 203.9700012207031 }; + } else if (isSameDay(parseDate('2025-12-28'), date)) { + return { marketPrice: 237.8000030517578 }; + } + + return { marketPrice: 0 }; + case 'MSFT': if (isSameDay(parseDate('2021-09-16'), date)) { return { marketPrice: 89.12 }; 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..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 @@ -2,18 +2,19 @@ import { AssetSubClass, DataSource, Tag } from '@prisma/client'; import { Big } from 'big.js'; export interface TransactionPointSymbol { + activitiesCount: number; assetSubClass: AssetSubClass; averagePrice: Big; currency: string; dataSource: DataSource; + dateOfFirstActivity: string; dividend: Big; fee: Big; - firstBuyDate: string; + feeInBaseCurrency: Big; includeInHoldings: boolean; investment: Big; quantity: Big; skipErrors: boolean; symbol: string; tags?: Tag[]; - transactionCount: number; } diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 03796dad6..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', @@ -329,7 +331,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 4bc10bd49..7be375473 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( @@ -262,6 +262,8 @@ export class PortfolioService { withExcludedAccounts }); + let activitiesCount = 0; + const searchQuery = filters.find(({ type }) => { return type === 'SEARCH_QUERY'; })?.id; @@ -281,9 +283,10 @@ 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; + totalBalanceInBaseCurrency = totalBalanceInBaseCurrency.plus( account.balanceInBaseCurrency ); @@ -296,7 +299,6 @@ export class PortfolioService { totalValueInBaseCurrency = totalValueInBaseCurrency.plus( account.valueInBaseCurrency ); - transactionCount += account.transactionCount; } for (const account of accounts) { @@ -310,7 +312,7 @@ export class PortfolioService { return { accounts, - transactionCount, + activitiesCount, totalBalanceInBaseCurrency: totalBalanceInBaseCurrency.toNumber(), totalDividendInBaseCurrency: totalDividendInBaseCurrency.toNumber(), totalInterestInBaseCurrency: totalInterestInBaseCurrency.toNumber(), @@ -318,13 +320,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), @@ -567,9 +569,10 @@ export class PortfolioService { } for (const { + activitiesCount, currency, + dateOfFirstActivity, dividend, - firstBuyDate, grossPerformance, grossPerformanceWithCurrencyEffect, grossPerformancePercentage, @@ -583,7 +586,6 @@ export class PortfolioService { quantity, symbol, tags, - transactionCount, valueInBaseCurrency } of positions) { if (isFilteredByClosedHoldings === true) { @@ -610,13 +612,13 @@ export class PortfolioService { } holdings[symbol] = { + activitiesCount, currency, markets, marketsAdvanced, marketPrice, symbol, tags, - transactionCount, allocationInPercentage: filteredValueInBaseCurrency.eq(0) ? 0 : valueInBaseCurrency.div(filteredValueInBaseCurrency).toNumber(), @@ -624,7 +626,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, @@ -789,11 +791,12 @@ export class PortfolioService { } const { + activitiesCount, averagePrice, currency, + dateOfFirstActivity, dividendInBaseCurrency, - fee, - firstBuyDate, + feeInBaseCurrency, grossPerformance, grossPerformancePercentage, grossPerformancePercentageWithCurrencyEffect, @@ -807,8 +810,7 @@ export class PortfolioService { quantity, tags, timeWeightedInvestment, - timeWeightedInvestmentWithCurrencyEffect, - transactionCount + timeWeightedInvestmentWithCurrencyEffect } = holding; const activitiesOfHolding = activities.filter(({ SymbolProfile }) => { @@ -819,7 +821,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) @@ -827,7 +832,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) @@ -836,7 +844,7 @@ export class PortfolioService { const historicalData = await this.dataProviderService.getHistorical( [{ dataSource, symbol }], 'day', - parseISO(firstBuyDate), + parseISO(dateOfFirstActivity), new Date() ); @@ -901,7 +909,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 }); @@ -914,25 +922,20 @@ export class PortfolioService { ); return { - firstBuyDate, + activitiesCount, + dateOfFirstActivity, marketPrice, marketPriceMax, marketPriceMin, SymbolProfile, tags, - activities: activitiesOfHolding, - activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), 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: @@ -1662,6 +1665,7 @@ export class PortfolioService { }): PortfolioPosition { return { currency, + activitiesCount: 0, allocationInPercentage: 0, assetClass: AssetClass.LIQUIDITY, assetSubClass: AssetSubClass.CASH, @@ -1685,7 +1689,6 @@ export class PortfolioService { sectors: [], symbol: currency, tags: [], - transactionCount: 0, valueInBaseCurrency: balance }; } diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index b38b07bb4..689ee3e6a 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' } ); } @@ -100,7 +100,6 @@ export class SubscriptionService { ); return { - sessionId: session.id, sessionUrl: session.url }; } diff --git a/apps/api/src/app/user/user.controller.ts b/apps/api/src/app/user/user.controller.ts index 397ae016b..6346ce43a 100644 --- a/apps/api/src/app/user/user.controller.ts +++ b/apps/api/src/app/user/user.controller.ts @@ -1,8 +1,11 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; +import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.interceptor'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; +import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; import { DeleteOwnUserDto, UpdateOwnAccessTokenDto, @@ -28,7 +31,8 @@ import { Param, Post, Put, - UseGuards + UseGuards, + UseInterceptors } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { JwtService } from '@nestjs/jwt'; @@ -43,6 +47,7 @@ import { UserService } from './user.service'; export class UserController { public constructor( private readonly configurationService: ConfigurationService, + private readonly impersonationService: ImpersonationService, private readonly jwtService: JwtService, private readonly prismaService: PrismaService, private readonly propertyService: PropertyService, @@ -107,13 +112,19 @@ export class UserController { @Get() @UseGuards(AuthGuard('jwt'), HasPermissionGuard) + @UseInterceptors(RedactValuesInResponseInterceptor) public async getUser( - @Headers('accept-language') acceptLanguage: string + @Headers('accept-language') acceptLanguage: string, + @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string ): Promise { - return this.userService.getUser( - this.request.user, - acceptLanguage?.split(',')?.[0] - ); + const impersonationUserId = + await this.impersonationService.validateImpersonationId(impersonationId); + + return this.userService.getUser({ + impersonationUserId, + locale: acceptLanguage?.split(',')?.[0], + user: this.request.user + }); } @Post() diff --git a/apps/api/src/app/user/user.module.ts b/apps/api/src/app/user/user.module.ts index 8a21b0a55..7ca68d275 100644 --- a/apps/api/src/app/user/user.module.ts +++ b/apps/api/src/app/user/user.module.ts @@ -1,7 +1,9 @@ import { OrderModule } from '@ghostfolio/api/app/order/order.module'; import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module'; +import { RedactValuesInResponseModule } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; +import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; @@ -18,6 +20,7 @@ import { UserService } from './user.service'; imports: [ ConfigurationModule, I18nModule, + ImpersonationModule, JwtModule.register({ secret: process.env.JWT_SECRET_KEY, signOptions: { expiresIn: '30 days' } @@ -25,6 +28,7 @@ import { UserService } from './user.service'; OrderModule, PrismaModule, PropertyModule, + RedactValuesInResponseModule, SubscriptionModule, TagModule ], diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 3280fbfac..def0b94d9 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -30,7 +30,7 @@ import { PROPERTY_IS_READ_ONLY_MODE, PROPERTY_SYSTEM_MESSAGE, TAG_ID_EXCLUDE_FROM_ANALYSIS, - locale + locale as defaultLocale } from '@ghostfolio/common/config'; import { User as IUser, @@ -49,7 +49,7 @@ import { Injectable } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { Prisma, Role, User } from '@prisma/client'; import { differenceInDays, subDays } from 'date-fns'; -import { sortBy, without } from 'lodash'; +import { without } from 'lodash'; import { createHmac } from 'node:crypto'; @Injectable() @@ -96,10 +96,17 @@ export class UserService { return { accessToken, hashedAccessToken }; } - public async getUser( - { accounts, id, permissions, settings, subscription }: UserWithSettings, - aLocale = locale - ): Promise { + public async getUser({ + impersonationUserId, + locale = defaultLocale, + user + }: { + impersonationUserId: string; + locale?: string; + user: UserWithSettings; + }): Promise { + const { id, permissions, settings, subscription } = user; + const userData = await Promise.all([ this.prismaService.access.findMany({ include: { @@ -108,22 +115,31 @@ export class UserService { orderBy: { alias: 'asc' }, where: { granteeUserId: id } }), + this.prismaService.account.findMany({ + orderBy: { + name: 'asc' + }, + where: { + userId: impersonationUserId || user.id + } + }), this.prismaService.order.count({ - where: { userId: id } + where: { userId: impersonationUserId || user.id } }), this.prismaService.order.findFirst({ orderBy: { date: 'asc' }, - where: { userId: id } + where: { userId: impersonationUserId || user.id } }), - this.tagService.getTagsForUser(id) + this.tagService.getTagsForUser(impersonationUserId || user.id) ]); const access = userData[0]; - const activitiesCount = userData[1]; - const firstActivity = userData[2]; - let tags = userData[3].filter((tag) => { + const accounts = userData[1]; + const activitiesCount = userData[2]; + const firstActivity = userData[3]; + let tags = userData[4].filter((tag) => { return tag.id !== TAG_ID_EXCLUDE_FROM_ANALYSIS; }); @@ -146,7 +162,6 @@ export class UserService { } return { - accounts, activitiesCount, id, permissions, @@ -160,10 +175,13 @@ export class UserService { permissions: accessItem.permissions }; }), + accounts: accounts.sort((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }), dateOfFirstActivity: firstActivity?.date ?? new Date(), settings: { ...(settings.settings as UserSettings), - locale: (settings.settings as UserSettings)?.locale ?? aLocale + locale: (settings.settings as UserSettings)?.locale ?? locale } }; } @@ -516,9 +534,10 @@ export class UserService { currentPermissions.push(permissions.impersonateAllUsers); } - user.accounts = sortBy(user.accounts, ({ name }) => { - return name.toLowerCase(); + user.accounts = user.accounts.sort((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); + user.permissions = currentPermissions.sort(); return user; diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 5becbf2f9..e456f6f1d 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -4,6 +4,7 @@ "4": "4", "7": "Lucky7", "8": "8", + "21": "2131KOBUSHIDE", "32": "Project 32", "42": "Semantic Layer", "47": "President Trump", @@ -20,6 +21,7 @@ "1337": "EliteCoin", "1717": "1717 Masonic Commemorative Token", "2015": "2015 coin", + "2016": "2016 coin", "2024": "2024", "2025": "2025 TOKEN", "2026": "2026", @@ -56,6 +58,7 @@ "10SET": "Tenset", "1ART": "ArtWallet", "1CAT": "Bitcoin Cats", + "1COIN": "1 coin can change your life", "1CR": "1Credit", "1EARTH": "EarthFund", "1ECO": "1eco", @@ -115,6 +118,7 @@ "3DES": "3DES", "3DVANCE": "3D Vance", "3FT": "ThreeFold Token", + "3KDS": "3KDS", "3KM": "3 Kingdoms Multiverse", "3P": "Web3Camp", "3RDEYE": "3rd Eye", @@ -148,11 +152,13 @@ "7E": "7ELEVEN", "88MPH": "88mph", "8BIT": "8BIT Coin", + "8BITCOIN": "8-Bit COIN", "8BT": "8 Circuit Studios", "8LNDS": "8Lends", "8PAY": "8Pay", "8X8": "8X8 Protocol", "99BTC": "99 Bitcoins", + "9BIT": "The9bit", "9DOGS": "NINE DOGS", "9GAG": "9GAG", "9MM": "Shigure UI", @@ -177,6 +183,8 @@ "AAC": "Double-A Chain", "AAG": "AAG Ventures", "AAI": "AutoAir AI", + "AALON": "American Airlines Group (Ondo Tokenized)", + "AAPLON": "Apple (Ondo Tokenized)", "AAPLX": "Apple xStock", "AAPX": "AMPnet", "AARBWBTC": "Aave Arbitrum WBTC", @@ -435,6 +443,7 @@ "AIAI": "All In AI", "AIAKITA": "AiAkita", "AIAT": "AI Analysis Token", + "AIAV": "AI AVatar", "AIB": "AdvancedInternetBlock", "AIBABYDOGE": "AIBabyDoge", "AIBB": "AiBB", @@ -508,6 +517,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 +562,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 +635,7 @@ "ALIEN": "AlienCoin", "ALIENPEP": "Alien Pepe", "ALIENS": "Aliens", + "ALIENX": "ALIENX", "ALIF": " ALIF COIN", "ALINK": "Aave LINK v1", "ALIS": "ALISmedia", @@ -707,6 +718,7 @@ "AMBRX": "Amber xStock", "AMBT": "AMBT Token", "AMC": "AI Meta Coin", + "AMCON": "AMC Entertainment (Ondo Tokenized)", "AMDC": "Allmedi Coin", "AMDG": "AMDG", "AMDX": "AMD xStock", @@ -927,6 +939,7 @@ "ARBI": "Arbipad", "ARBINU": "ArbInu", "ARBIT": "Arbit Coin", + "ARBITROVE": "Arbitrove Governance Token", "ARBP": "ARB Protocol", "ARBS": "Arbswap", "ARBT": "ARBITRAGE", @@ -1095,6 +1108,7 @@ "ASTA": "ASTA", "ASTER": "Aster", "ASTERINU": "Aster INU", + "ASTHERUSUSDF": "Astherus USDF", "ASTO": "Altered State Token", "ASTON": "Aston", "ASTONV": "Aston Villa Fan Token", @@ -1165,6 +1179,7 @@ "ATON": "Further Network", "ATOPLUS": "ATO+", "ATOR": "ATOR Protocol", + "ATOS": "Atoshi", "ATOZ": "Race Kingdom", "ATP": "Atlas Protocol", "ATPAY": "AtPay", @@ -1372,6 +1387,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 +1634,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 +1668,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 +1765,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 +1855,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", @@ -1997,7 +2015,8 @@ "BIPC": "BipCoin", "BIPX": "Bispex", "BIR": "Birake", - "BIRB": "Birb", + "BIRB": "Moonbirds", + "BIRBV1": "Birb", "BIRD": "BIRD", "BIRDCHAIN": "Birdchain", "BIRDD": "BIRD DOG", @@ -2038,6 +2057,7 @@ "BITCOINCONFI": "Bitcoin Confidential", "BITCOINOTE": "BitcoiNote", "BITCOINP": "Bitcoin Private", + "BITCOINSCRYPT": "Bitcoin Scrypt", "BITCOINV": "BitcoinV", "BITCONNECT": "BitConnect Coin", "BITCORE": "BitCore", @@ -2060,6 +2080,7 @@ "BITOK": "BitOKX", "BITONE": "BITONE", "BITORB": "BitOrbit", + "BITPANDA": "Bitpanda Ecosystem Token", "BITRA": "Bitratoken", "BITRADIO": "Bitradio", "BITREWARDS": "BitRewards", @@ -2170,6 +2191,7 @@ "BLOCKASSET": "Blockasset", "BLOCKB": "Block Browser", "BLOCKBID": "Blockbid", + "BLOCKCHAINTRADED": "Blockchain Traded Fund", "BLOCKF": "Block Farm Club", "BLOCKG": "BlockGames", "BLOCKIFY": "Blockify.Games", @@ -2542,6 +2564,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 +2803,7 @@ "BTCHD": "Bitcoin HD", "BTCINU": "Bitcoin Inu", "BTCIX": "BITCOLOJIX", + "BTCJ": "Bitcoin (JustCrypto)", "BTCK": "Bitcoin Turbo Koin", "BTCL": "BTC Lite", "BTCM": "BTCMoon", @@ -2795,10 +2819,10 @@ "BTCR": "BitCurrency", "BTCRED": "Bitcoin Red", "BTCRY": "BitCrystal", - "BTCS": "Bitcoin Scrypt", + "BTCS": "BTCs", "BTCSR": "BTC Strategic Reserve", "BTCST": "BTC Standard Hashrate Token", - "BTCT": "Bitcoin Token", + "BTCTOKEN": "Bitcoin Token", "BTCUS": "Bitcoinus", "BTCV": "Bitcoin Vault", "BTCVB": "BitcoinVB", @@ -2810,9 +2834,10 @@ "BTELEGRAM": "BetterTelegram Token", "BTEV1": "Betero v1", "BTEX": "BTEX", - "BTF": "Blockchain Traded Fund", + "BTF": "Bitfinity Network", "BTFA": "Banana Task Force Ape", "BTG": "Bitcoin Gold", + "BTGON": "B2Gold (Ondo Tokenized)", "BTH": "Bithereum", "BTK": "Bostoken", "BTL": "Bitlocus", @@ -2955,13 +2980,16 @@ "BURRRD": "BURRRD", "BURT": "BURT", "BUSD": "Binance USD", + "BUSD0": "Bond USD0", "BUSDC": "BUSD", "BUSY": "Busy DAO", "BUT": "Bucket Token", "BUTT": "Buttercat", + "BUTTC": "Buttcoin", "BUTTCOIN": "The Next Bitcoin", "BUTTHOLE": "Butthole Coin", "BUTTPLUG": "fartcoin killer", + "BUTWHY": "ButWhy", "BUX": "BUX", "BUXCOIN": "Buxcoin", "BUY": "Burency", @@ -2993,6 +3021,7 @@ "BXA": "Blockchain Exchange Alliance", "BXBT": "BoxBet", "BXC": "BonusCloud", + "BXE": "Banxchange", "BXF": "BlackFort Token", "BXH": "BXH", "BXK": "Bitbook Gambling", @@ -3058,7 +3087,7 @@ "CAG": "Change", "CAGA": "Crypto Asset Governance Alliance", "CAH": "Moon Tropica", - "CAI": "Chasm", + "CAI": "CharacterX", "CAID": "ClearAid", "CAILA": "Caila", "CAIR": "Crypto-AI-Robo.com", @@ -3216,6 +3245,7 @@ "CATW": "Cat wif Hands", "CATWARRIOR": "Cat warrior", "CATWIF": "CatWifHat", + "CATWIFM": "catwifmask", "CATX": "CAT.trade Protocol", "CATZ": "CatzCoin", "CAU": "Canxium", @@ -3415,12 +3445,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 +3559,7 @@ "CHR": "Chroma", "CHRETT": "Chinese BRETT", "CHRISPUMP": "Christmas Pump", + "CHRONOEFFE": "Chronoeffector", "CHRP": "Chirpley", "CHS": "Chainsquare", "CHSB": "SwissBorg", @@ -3576,6 +3609,7 @@ "CIX100": "Cryptoindex", "CJ": "CryptoJacks", "CJC": "CryptoJournal", + "CJL": "Cjournal", "CJR": "Conjure", "CJT": "ConnectJob Token", "CKB": "Nervos Network", @@ -3595,6 +3629,8 @@ "CLASH": "GeorgePlaysClashRoyale", "CLASHUB": "Clashub", "CLASS": "Class Coin", + "CLAWD": "clawd.atg.eth", + "CLAWNCH": "CLAWNCH", "CLAY": "Clayton", "CLAYN": "Clay Nation", "CLB": "Cloudbric", @@ -3619,7 +3655,8 @@ "CLIN": "Clinicoin", "CLINK": "cLINK", "CLINT": "Clinton", - "CLIPPY": "CLIPPY", + "CLIPPY": "Clippy", + "CLIPPYETH": "CLIPPY", "CLIPS": "Clips", "CLIQ": "DefiCliq", "CLIST": "Chainlist", @@ -3761,6 +3798,7 @@ "COINBANK": "CoinBank", "COINBT": "CoinBot", "COINBUCK": "Coinbuck", + "COINCOLLECT": "CoinCollect", "COINDEALTOKEN": "CoinDeal Token", "COINDEFI": "Coin", "COINDEPO": "CoinDepo Token", @@ -3770,6 +3808,7 @@ "COINLION": "CoinLion", "COINM": "CoinMarketPrime", "COINONAT": "Coinonat", + "COINRADR": "CoinRadr", "COINSCOPE": "Coinscope", "COINSL": "CoinsLoot", "COINVEST": "Coinvest", @@ -3788,7 +3827,7 @@ "COLLAT": "Collaterize", "COLLE": "Collective Care", "COLLEA": "Colle AI", - "COLLECT": "CoinCollect", + "COLLECT": "Collect on Fanable", "COLLG": "Collateral Pay Governance", "COLON": "Colon", "COLR": "colR Coin", @@ -3847,6 +3886,7 @@ "COPIUM": "Copium", "COPPER": "COPPER", "COPS": "Cops Finance", + "COPXON": "Global X Copper Miners ETF (Ondo Tokenized)", "COPYCAT": "Copycat Finance", "COQ": "Coq Inu", "COR": "Coreto", @@ -3924,6 +3964,7 @@ "CPLO": "Cpollo", "CPM": "Crypto Pump Meme", "CPN": "CompuCoin", + "CPNGON": "Coupang (Ondo Tokenized)", "CPO": "Cryptopolis", "CPOO": "Cockapoo", "CPOOL": "Clearpool", @@ -3956,6 +3997,7 @@ "CRAPPY": "CrappyBird", "CRASH": "Solana Crash", "CRASHBOYS": "CRASHBOYS", + "CRAT": "CratD2C", "CRAVE": "CraveCoin", "CRAYRABBIT": "CrazyRabbit", "CRAZ": "CRAZY FLOKI", @@ -4391,6 +4433,7 @@ "DANJ": "Danjuan Cat", "DANK": "DarkKush", "DANKDOGE": "Dank Doge", + "DANKDOGEAI": "DankDogeAI", "DANNY": "Degen Danny", "DAO": "DAO Maker", "DAO1": "DAO1", @@ -4877,6 +4920,7 @@ "DLXV": "Delta-X", "DLY": "Daily Finance", "DLYCOP": "Daily COP", + "DM": "Dumb Money", "DMA": "Dragoma", "DMAGA": "Dark MAGA", "DMAIL": "DMAIL Network", @@ -4900,6 +4944,7 @@ "DMTR": "Dimitra", "DMX": "Dymmax", "DMZ": "DeMon Token", + "DN": "DeepNode", "DN8": "Pldgr", "DNA": "Metaverse", "DNAPEPE": "DNA PEPE", @@ -4909,6 +4954,7 @@ "DNFLX": "Netflix Tokenized Stock Defichain", "DNFT": "DareNFT", "DNN": "DNN Token", + "DNNON": "Denison Mines (Ondo Tokenized)", "DNO": "Denaro", "DNODE": "DecentraNode", "DNOTES": "Dnotes", @@ -4984,6 +5030,7 @@ "DOGEIN": "Doge In Glasses", "DOGEINU": "Doge Inu", "DOGEIUS": "DOGEIUS", + "DOGEJ": "Dogecoin (JustCrypto)", "DOGEKING": "DogeKing", "DOGELEGION": "DOGE LEGION", "DOGEM": "Doge Matrix", @@ -5073,7 +5120,8 @@ "DONKEY": "donkey", "DONNIEFIN": "Donnie Finance", "DONS": "The Dons", - "DONT": "Donald Trump (dont.cash)", + "DONT": "DisclaimerCoin", + "DONTCASH": "DONT", "DONU": "Donu", "DONUT": "Donut", "DONUTS": "The Simpsons", @@ -5428,6 +5476,7 @@ "ECET": "Evercraft Ecotechnologies", "ECG": "EcoSmart", "ECH": "EthereCash", + "ECHELON": "Echelon Token", "ECHO": "Echo", "ECHOBOT": "ECHO BOT", "ECHOD": "EchoDEX", @@ -5546,6 +5595,7 @@ "EHASH": "EHash", "EHIVE": "eHive", "EHRT": "Eight Hours Token", + "EICOIN": "EICOIN", "EIFI": "EIFI FINANCE", "EIGEN": "EigenLayer", "EIGENP": "Eigenpie", @@ -5630,6 +5680,7 @@ "ELONTRUMP": "ELON TRUMP", "ELP": "Ellerium", "ELS": "Ethlas", + "ELSA": "Elsa", "ELT": "Element Black", "ELTC2": "eLTC", "ELTCOIN": "ELTCOIN", @@ -5700,6 +5751,7 @@ "ENEDEX": "Enedex", "ENERGYLEDGER": "Energy Ledger", "ENERGYX": "Safe Energy", + "ENEXSPACE": "ENEX", "ENF": "enfineo", "ENG": "Enigma", "ENGT": "Engagement Token", @@ -5722,6 +5774,7 @@ "ENTER": "EnterCoin", "ENTR": "EnterDAO", "ENTRC": "ENTER COIN", + "ENTROPY": "Entropy", "ENTRP": "Hut34 Project", "ENTRY": "ENTRY", "ENTS": "Ents", @@ -5731,7 +5784,7 @@ "ENVIENTA": "Envienta", "ENVION": "Envion", "ENVOY": "Envoy A.I", - "ENX": "ENEX", + "ENX": "Enigma", "EOC": "EveryonesCoin", "EON": "Exscudo", "EONC": "Dimension", @@ -5783,6 +5836,7 @@ "ERA7": "Era Token", "ERASWAP": "Era Swap Token", "ERB": "ERBCoin", + "ERBB": "Exchange Request for Bitbon", "ERC": "EuropeCoin", "ERC20": "ERC20", "ERC20V1": "ERC20 v1", @@ -5821,7 +5875,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", @@ -5872,6 +5926,7 @@ "ETHEREM": "Etherempires", "ETHEREUMMEME": "Solana Ethereum Meme", "ETHEREUMP": "ETHEREUMPLUS", + "ETHEREUMSCRYPT": "EthereumScrypt", "ETHERINC": "EtherInc", "ETHERKING": "Ether Kingdoms Token", "ETHERNITY": "Ethernity Chain", @@ -5882,6 +5937,7 @@ "ETHFI": "Ether.fi", "ETHI": "Ethical Finance", "ETHIX": "EthicHub", + "ETHJ": "Ethereum (JustCrypto)", "ETHM": "Ethereum Meta", "ETHO": "The Etho Protocol", "ETHOS": "Ethos Project", @@ -5893,7 +5949,7 @@ "ETHPR": "Ethereum Premium", "ETHPY": "Etherpay", "ETHR": "Ethereal", - "ETHS": "EthereumScrypt", + "ETHS": "Ethscriptions", "ETHSHIB": "Eth Shiba", "ETHV": "Ethverse", "ETHW": "Ethereum PoW", @@ -5954,6 +6010,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 +6049,7 @@ "EVOC": "EVOCPLUS", "EVOL": "EVOL NETWORK", "EVOS": "EVOS", + "EVOSIM": "EvoSimGame", "EVOVERSES": "EvoVerses", "EVR": "Everus", "EVRICE": "Evrice", @@ -6066,6 +6124,7 @@ "F2C": "Ftribe Fighters", "F2K": "Farm2Kitchen", "F3": "Friend3", + "F5": "F5-promoT5", "F7": "Five7", "F9": "Falcon Nine", "FAB": "FABRK Token", @@ -6106,6 +6165,7 @@ "FAN": "Fanadise", "FAN360": "Fan360", "FANC": "fanC", + "FANCYTHATTOKEN": "Fancy That", "FAND": "Fandomdao", "FANG": "FANG Token", "FANS": "Fantasy Cash", @@ -6252,6 +6312,7 @@ "FIC": "Filecash", "FID": "Fidira", "FIDA": "Bonfida", + "FIDD": "Fidelity Digital Dollar", "FIDLE": "Fidlecoin", "FIDO": "FIDO", "FIDU": "Fidu", @@ -6328,6 +6389,7 @@ "FK": "FK Coin", "FKBIDEN": "Fkbiden", "FKGARY": "Fuck Gary Gensler", + "FKH": "Flying Ketamine Horse", "FKPEPE": "Fuck Pepe", "FKR": "Flicker", "FKRPRO": "FlickerPro", @@ -6453,7 +6515,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 +6545,7 @@ "FOFOTOKEN": "FOFO Token", "FOG": "FOGnet", "FOGE": "Fat Doge", + "FOGO": "Fogo", "FOGV1": "FOGnet v1", "FOIN": "Foin", "FOL": "Folder Protocol", @@ -6509,6 +6572,7 @@ "FORA": "UFORIKA", "FORCE": "TriForce Tokens", "FORCEC": "Force Coin", + "FORDON": "Ford Motor (Ondo Tokenized)", "FORE": "FORE Protocol", "FOREFRONT": "Forefront", "FOREST": "Forest", @@ -6638,6 +6702,7 @@ "FRR": "Frontrow", "FRSP": "Forkspot", "FRST": "FirstCoin", + "FRT": "FORT Token", "FRTC": "FART COIN", "FRTN": "EbisusBay Fortune", "FRTS": "Fruits", @@ -6868,6 +6933,7 @@ "GASP": "GASP", "GASPCOIN": "gAsp", "GASS": "Gasspas", + "GAST": "Gas Town", "GASTRO": "GastroCoin", "GAT": "Gather", "GATA": "Gata", @@ -7176,6 +7242,7 @@ "GMDP": "GMD Protocol", "GME": "GameStop", "GMEE": "GAMEE", + "GMEON": "GameStop (Ondo Tokenized)", "GMEPEPE": "GAMESTOP PEPE", "GMETHERFRENS": "GM", "GMETRUMP": "GME TRUMP", @@ -7254,6 +7321,7 @@ "GOFINDXR": "Gofind XR", "GOFX": "GooseFX", "GOG": "Guild of Guardians", + "GOGE": "GOLD DOGE", "GOGLZ": "GOGGLES", "GOGLZV1": "GOGGLES v1", "GOGO": "GOGO Finance", @@ -7364,10 +7432,12 @@ "GPU": "Node AI", "GPUCOIN": "GPU Coin", "GPUINU": "GPU Inu", + "GPUNET": "GPUnet", "GPX": "GPEX", "GQ": "Galactic Quadrant", "GR": "GROM", "GRAB": "GRABWAY", + "GRABON": "Grab Holdings (Ondo Tokenized)", "GRACY": "Gracy", "GRAI": "Gravita Protocol", "GRAIL": "Camelot Token", @@ -7376,6 +7446,7 @@ "GRAND": "Grand Theft Ape", "GRANDCOIN": "GrandCoin", "GRANDMA": "Grandma", + "GRANT": "GrantiX Token", "GRAPE": "GrapeCoin", "GRAPHGRAIAI": "GraphGrail AI", "GRASS": "Grass", @@ -7500,6 +7571,7 @@ "GTAN": "Giant Token", "GTAVI": "GTAVI", "GTBOT": "Gaming-T-Bot", + "GTBTC": "Gate Wrapped BTC", "GTC": "Gitcoin", "GTCC": "GTC COIN", "GTCOIN": "Game Tree", @@ -7562,6 +7634,7 @@ "GVT": "Genesis Vision", "GW": "Gyrowin", "GWD": "GreenWorld", + "GWEI": "ETHGas", "GWGW": "GoWrap", "GWT": "Galaxy War", "GX": "GameX", @@ -7618,6 +7691,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", @@ -7877,13 +7951,13 @@ "HLG": "Holograph", "HLINK": "Chainlink (Harmony One Bridge)", "HLM": "Helium", - "HLN": "Holonus", + "HLN": "Ēnosys", "HLO": "Halo", "HLOV1": "Halo v1", "HLP": "Purpose Coin", "HLPR": "HELPER COIN", "HLPT": "HLP Token", - "HLS": "Halis", + "HLS": "Helios", "HLT": "HyperLoot", "HLTC": "Huobi LTC", "HLX": "Helex", @@ -7942,6 +8016,7 @@ "HOLDON4": "HoldOn4DearLife", "HOLDS": "Holdstation", "HOLO": "Holoworld", + "HOLON": "Holonus", "HOLY": "Holy Trinity", "HOM": "Homeety", "HOME": "Home", @@ -8161,6 +8236,7 @@ "IAI": "inheritance Art", "IAM": "IAME Identity", "IAOMIN": "Yao Ming", + "IAUON": "iShares Gold Trust (Ondo Tokenized)", "IB": "Iron Bank", "IBANK": "iBankCoin", "IBAT": "Battle Infinity", @@ -8229,6 +8305,7 @@ "IDLE": "IDLE", "IDM": "IDM", "IDNA": "Idena", + "IDNG": "IDNGold", "IDO": "Idexo", "IDOL": "MEET48 Token", "IDOLINU": "IDOLINU", @@ -8318,7 +8395,7 @@ "IMS": "Independent Money System", "IMST": "Imsmart", "IMT": "Immortal Token", - "IMU": "imusify", + "IMUSIFY": "imusify", "IMVR": "ImmVRse", "IMX": "Immutable X", "IN": "INFINIT", @@ -8392,12 +8469,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", @@ -8481,6 +8560,7 @@ "IRA": "Diligence", "IRC": "IRIS", "IRENA": "Irena Coin Apps", + "IRENON": "IREN (Ondo Tokenized)", "IRIS": "IRIS Network", "IRISTOKEN": "Iris Ecosystem", "IRL": "IrishCoin", @@ -8554,6 +8634,7 @@ "IVZ": "InvisibleCoin", "IW": "iWallet", "IWFT": "İstanbul Wild Cats", + "IWMON": "iShares Russell 2000 ETF (Ondo Tokenized)", "IWT": "IwToken", "IX": "X-Block", "IXC": "IXcoin", @@ -8578,6 +8659,7 @@ "J9BC": "J9CASINO", "JACK": "Jack Token", "JACKPOT": "Solana Jackpot", + "JACKSON": "Jackson", "JACS": "JACS", "JACY": "JACY", "JADE": "Jade Protocol", @@ -8656,6 +8738,7 @@ "JETCOIN": "Jetcoin", "JETFUEL": "Jetfuel Finance", "JETTON": "JetTon Game", + "JETUSD": "JETUSD", "JEUR": "Jarvis Synthetic Euro", "JEW": "Shekel", "JEWEL": "DeFi Kingdoms", @@ -8704,6 +8787,7 @@ "JNX": "Janex", "JNY": "JNY", "JOB": "Jobchain", + "JOBCOIN": "buy instead of getting a job", "JOBIESS": "JobIess", "JOBS": "JobsCoin", "JOBSEEK": "JobSeek AI", @@ -8719,7 +8803,8 @@ "JOHNNY": "Johnny The Bull", "JOINCOIN": "JoinCoin", "JOINT": "Joint Ventures", - "JOJO": "JOJO", + "JOJO": "JOJOWORLD", + "JOJOSCLUB": "JOJO", "JOJOTOKEN": "JOJO", "JOK": "JokInTheBox", "JOKER": "JOKER", @@ -8803,6 +8888,7 @@ "JWBTC": "Wrapped Bitcoin (TON Bridge)", "JWIF": "Jerrywifhat", "JWL": "Jewels", + "JWT": "JW Token", "JYAI": "Jerry The Turtle By Matt Furie", "JYC": "Joe-Yo Coin", "K": "Sidekick", @@ -8811,7 +8897,13 @@ "KAAI": "KanzzAI", "KAAS": "KAASY.AI", "KAB": "KABOSU", - "KABOSU": "Kabosu Family", + "KABOSU": "X Meme Dog", + "KABOSUCOIN": "Kabosu", + "KABOSUCOM": "Kabosu", + "KABOSUFAMILY": "Kabosu Family", + "KABOSUTOKEN": "Kabosu", + "KABOSUTOKENETH": "KABOSU", + "KABUTO": "Kabuto", "KABY": "Kaby Arena", "KAC": "KACO Finance", "KACY": "markkacy", @@ -9111,6 +9203,7 @@ "KNDC": "KanadeCoin", "KNDM": "Kingdom", "KNDX": "Kondux", + "KNEKTED": "Knekted", "KNFT": "KStarNFT", "KNG": "BetKings", "KNGN": "KingN Coin", @@ -9123,7 +9216,7 @@ "KNOW": "KNOW", "KNOX": "KnoxDAO", "KNS": "Kenshi", - "KNT": "Knekted", + "KNT": "KayakNet", "KNTO": "Kento", "KNTQ": "Kinetiq Governance Token", "KNU": "Keanu", @@ -9613,10 +9706,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", @@ -9625,7 +9719,7 @@ "LITTLEGUY": "just a little guy", "LITTLEMANYU": "Little Manyu", "LIV": "LiviaCoin", - "LIVE": "TRONbetLive", + "LIVE": "SecondLive", "LIVENCOIN": "LivenPay", "LIVESEY": "Dr. Livesey", "LIVESTARS": "Live Stars", @@ -9748,7 +9842,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 +9918,7 @@ "LTCC": "Listerclassic Coin", "LTCD": "LitecoinDark", "LTCH": "Litecoin Cash", + "LTCJ": "Litecoin (JustCrypto)", "LTCP": "LitecoinPro", "LTCR": "LiteCreed", "LTCU": "LiteCoin Ultra", @@ -9875,6 +9970,7 @@ "LUFFYV1": "Luffy v1", "LUIGI": "Luigi Inu", "LUIS": "Tongue Cat", + "LUKKI": "Lukki Operating Token", "LULU": "LULU", "LUM": "Luminous", "LUMA": "LUMA Token", @@ -9961,6 +10057,7 @@ "M0": "M by M^0", "M1": "SupplyShock", "M2O": "M2O Token", + "M3H": "MehVerseCoin", "M3M3": "M3M3", "M87": "MESSIER", "MA": "Mind-AI", @@ -9979,6 +10076,8 @@ "MADOG": "MarvelDoge", "MADP": "Mad Penguin", "MADPEPE": "Mad Pepe", + "MADU": "Nicolas Maduro", + "MADURO": "MADURO", "MAECENAS": "Maecenas", "MAEP": "Maester Protocol", "MAF": "MetaMAFIA", @@ -10079,6 +10178,7 @@ "MAPS": "MAPS", "MAPU": "MatchAwards Platform Utility Token", "MAR3": "Mar3 AI", + "MARAON": "MARA Holdings (Ondo Tokenized)", "MARCO": "MELEGA", "MARCUS": "Marcus Cesar Inu", "MARE": "Mare Finance", @@ -10105,6 +10205,7 @@ "MARSMI": "MarsMi", "MARSO": "Marso.Tech", "MARSRISE": "MarsRise", + "MARSTOKEN": "Mars Token", "MARSUPILAMI": "MARSUPILAMI INU", "MARSW": "Marswap", "MART": "ArtMeta", @@ -10132,7 +10233,7 @@ "MASTERMIX": "Master MIX Token", "MASTERTRADER": "MasterTraderCoin", "MASYA": "MASYA", - "MAT": "My Master Wa", + "MAT": "Matchain", "MATA": "Ninneko", "MATAR": "MATAR AI", "MATCH": "Matching Game", @@ -10240,6 +10341,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 +10412,7 @@ "MEF": "MEFLEX", "MEFA": "Metaverse Face", "MEFAI": "META FINANCIAL AI", + "MEFI": "Meo Finance", "MEGA": "MegaFlash", "MEGABOT": "Megabot", "MEGAD": "Mega Dice Casino", @@ -10348,6 +10451,7 @@ "MEMEAI": "Meme Ai", "MEMEBRC": "MEME", "MEMECOIN": "just memecoin", + "MEMECOINDAOAI": "MemeCoinDAO", "MEMECUP": "Meme Cup", "MEMEETF": "Meme ETF", "MEMEFI": "MemeFi", @@ -10359,7 +10463,7 @@ "MEMEMUSK": "MEME MUSK", "MEMENTO": "MEMENTO•MORI (Runes)", "MEMERUNE": "MEME•ECONOMICS", - "MEMES": "MemeCoinDAO", + "MEMES": "memes will continue", "MEMESAI": "Memes AI", "MEMESQUAD": "Meme Squad", "MEMET": "MEMETOON", @@ -10547,7 +10651,7 @@ "MIININGNFT": "MiningNFT", "MIKE": "Mike", "MIKS": "MIKS COIN", - "MIL": "Milllionaire Coin", + "MIL": "Mil", "MILA": "MILADY MEME TOKEN", "MILC": "Micro Licensing Coin", "MILE": "milestoneBased", @@ -10560,6 +10664,7 @@ "MILLI": "Million", "MILLIM": "Millimeter", "MILLIMV1": "Millimeter v1", + "MILLLIONAIRECOIN": "Milllionaire Coin", "MILLY": "milly", "MILO": "Milo Inu", "MILOCEO": "Milo CEO", @@ -10830,6 +10935,7 @@ "MOLK": "Mobilink Token", "MOLLARS": "MollarsToken", "MOLLY": "Molly", + "MOLT": "Moltbook", "MOM": "Mother of Memes", "MOMA": "Mochi Market", "MOMIJI": "MAGA Momiji", @@ -10845,6 +10951,7 @@ "MONAV": "Monavale", "MONB": "MonbaseCoin", "MONDO": "mondo", + "MONEROAI": "Monero AI", "MONEROCHAN": "Monerochan", "MONET": "Claude Monet Memeory Coin", "MONETA": "Moneta", @@ -10953,6 +11060,7 @@ "MOTIONCOIN": "Motion", "MOTO": "Motocoin", "MOUND": "Mound Token", + "MOUNTA": "Mountain Protocol", "MOUTAI": "Moutai", "MOV": "MovieCoin", "MOVD": "MOVE Network", @@ -11034,6 +11142,7 @@ "MSCT": "MUSE ENT NFT", "MSD": "MSD", "MSFT": "Microsoft 6900", + "MSFTON": "Microsoft (Ondo Tokenized)", "MSFTX": "Microsoft xStock", "MSG": "MsgSender", "MSGO": "MetaSetGO", @@ -11057,6 +11166,7 @@ "MSTRX": "MicroStrategy xStock", "MSU": "MetaSoccer", "MSUSHI": "Sushi (Multichain)", + "MSVP": "MetaSoilVerseProtocol", "MSWAP": "MoneySwap", "MT": "Mint Token", "MTA": "Meta", @@ -11137,6 +11247,7 @@ "MUNITY": "Metahorse Unity", "MUNK": "Dramatic Chipmunk", "MUNSUN": "MUNSUN", + "MUON": "Micron Technology (Ondo Tokenized)", "MURA": "Murasaki", "MURATIAI": "MuratiAI", "MUSCAT": "MusCat", @@ -11184,9 +11295,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", @@ -11209,10 +11322,12 @@ "MYL": "MyLottoCoin", "MYLINX": "Linx", "MYLO": "MYLOCAT", + "MYMASTERWAR": "My Master Wa", "MYNE": "ITSMYNE", "MYO": "Mycro", "MYOBU": "Myōbu", "MYRA": "Mytheria", + "MYRC": "MYRC", "MYRE": "Myre", "MYRIA": "Myria", "MYRO": "Myro", @@ -11455,6 +11570,7 @@ "NEWSTOKENS": "NewsTokens", "NEWT": "Newton Protocol", "NEWTON": "Newtonium", + "NEWYORKCOIN": "NewYorkCoin", "NEX": "Nash Exchange", "NEXA": "Nexa", "NEXAI": "NexAI", @@ -11482,6 +11598,7 @@ "NFCR": "NFCore", "NFD": "Feisty Doge NFT", "NFE": "Edu3Labs", + "NFLXON": "Netflix (Ondo Tokenized)", "NFLXX": "Netflix xStock", "NFM": "NFMart", "NFN": "Nafen", @@ -11519,6 +11636,7 @@ "NGL": "Entangle", "NGM": "e-Money", "NGMI": "NGMI Coin", + "NGNT": "Naira Token", "NGTG": "NUGGET TRAP", "NHCT": "Nano Healthcare Token", "NHI": "Non Human Intelligence", @@ -11530,6 +11648,7 @@ "NIC": "NewInvestCoin", "NICE": "Nice", "NICEC": "NiceCoin", + "NIETZSCHEAN": "Nietzschean Penguin", "NIF": "Unifty", "NIFT": "Niftify", "NIFTSY": "Envelop", @@ -11561,6 +11680,7 @@ "NINU": "Nvidia Inu", "NIOB": "Niob Finance", "NIOCTIB": "nioctiB", + "NIOON": "NIO (Ondo Tokenized)", "NIOX": "Autonio", "NIOXV1": "Autonio v1", "NIOXV2": "Autonio v2", @@ -11616,6 +11736,7 @@ "NOBS": "No BS Crypto", "NOC": "Nono Coin", "NOCHILL": "AVAX HAS NO CHILL", + "NOCK": "Nockchain", "NODE": "NodeOps", "NODELYAI": "NodelyAI", "NODESYNAPSE": "NodeSynapse", @@ -11661,7 +11782,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 +11800,7 @@ "NPER": "NPER", "NPICK": "NPICK BLOCK", "NPLC": "Plus Coin", + "NPLCV1": "PlusCoin v1", "NPM": "Neptune Mutual", "NPRO": "NPRO", "NPT": "Neopin", @@ -11690,6 +11814,7 @@ "NRCH": "EnreachDAO", "NRFB": "NuriFootBall", "NRG": "Energi", + "NRGE": "New Resources Generation Energy", "NRGY": "NRGY Defi", "NRK": "Nordek", "NRM": "Neuromachine", @@ -11769,6 +11894,7 @@ "NVA": "Neeva Defi", "NVB": "NovaBank", "NVC": "NovaCoin", + "NVDAON": "NVIDIA (Ondo Tokenized)", "NVDAX": "NVIDIA xStock", "NVDX": "Nodvix", "NVG": "NightVerse Game", @@ -11810,7 +11936,7 @@ "NYANDOGE": "NyanDOGE International", "NYANTE": "Nyantereum International", "NYBBLE": "Nybble", - "NYC": "NewYorkCoin", + "NYC": "NYC", "NYCREC": "NYCREC", "NYE": "NewYork Exchange", "NYEX": "Nyerium", @@ -11866,6 +11992,7 @@ "OCE": "OceanEX Token", "OCEAN": "Ocean Protocol", "OCEANT": "Poseidon Foundation", + "OCEANV1": "Ocean Protocol v1", "OCH": "Orchai", "OCICAT": "OciCat", "OCL": "Oceanlab", @@ -12013,7 +12140,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 +12150,7 @@ "ONCH": "OnchainPoints.xyz", "ONDO": "Ondo", "ONDOAI": "Ondo DeFAI", + "ONDSON": "Ondas Holdings (Ondo Tokenized)", "ONE": "Harmony", "ONEROOT": "OneRoot Network", "ONES": "OneSwap DAO", @@ -12080,6 +12208,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 +12373,8 @@ "OWB": "OWB", "OWC": "Oduwa", "OWD": "Owlstand", - "OWL": "OWL Token", + "OWL": "Owlto", + "OWLTOKEN": "OWL Token", "OWN": "OTHERWORLD", "OWNDATA": "OWNDATA", "OWNLY": "Ownly", @@ -12268,6 +12398,7 @@ "OZG": "Ozagold", "OZK": "OrdiZK", "OZMPC": "Ozempic", + "OZNI": "Ni Token", "OZO": "Ozone Chain", "OZONE": "Ozone metaverse", "OZONEC": "Ozonechain", @@ -12277,6 +12408,7 @@ "P202": "Project 202", "P2P": "Sentinel", "P2PS": "P2P Solutions Foundation", + "P2PV1": "Sentinel", "P33L": "THE P33L", "P3D": "3DPass", "P404": "Potion 404", @@ -12292,6 +12424,7 @@ "PACOCA": "Pacoca", "PACP": "PAC Protocol", "PACT": "impactMarket", + "PACTTOKEN": "PACT community token", "PACTV1": "impactMarket v1", "PAD": "NearPad", "PAF": "Pacific", @@ -12335,6 +12468,7 @@ "PANGEA": "PANGEA", "PANIC": "PanicSwap", "PANO": "PanoVerse", + "PANTHER": "Panther Protocol", "PANTOS": "Pantos", "PAO": "South Pao", "PAPA": "Papa Bear", @@ -12447,10 +12581,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 +12597,7 @@ "PDD": "PDDOLLAR", "PDEX": "Polkadex", "PDF": "Port of DeFi Network", + "PDI": "Phuture DeFi Index", "PDJT": "President Donald J. Trump", "PDOG": "Polkadog", "PDOGE": "PolkaDoge", @@ -12523,6 +12660,7 @@ "PENDY": "Pendy", "PENG": "Peng", "PENGCOIN": "PENG", + "PENGO": "Petro Penguins", "PENGU": "Pudgy Penguins", "PENGUAI": "PENGU AI", "PENGUI": "Penguiana", @@ -12583,6 +12721,7 @@ "PEPEMO": "PepeMo", "PEPEMOON": "PEPEMOON", "PEPEMUSK": "pepemusk", + "PEPENODE": "PEPENODE", "PEPEOFSOL": "Pepe of Solana", "PEPEPI": "PEPEPi", "PEPER": "Baby Pepe", @@ -12618,6 +12757,7 @@ "PERC": "Perion", "PERCY": "Percy Verence", "PERI": "PERI Finance", + "PERKSCOIN": "PerksCoin ", "PERL": "PERL.eco", "PERMIAN": "Permian", "PERP": "Perpetual Protocol", @@ -12645,7 +12785,10 @@ "PEUSD": "peg-eUSD", "PEW": "pepe in a memes world", "PEX": "Pexcoin", + "PF": "Purple Frog", + "PFEON": "Pfizer (Ondo Tokenized)", "PFEX": "Pfizer xStock", + "PFF": "PumpFunFloki", "PFI": "PrimeFinance", "PFID": "Pofid Dao", "PFL": "Professional Fighters League Fan Token", @@ -12741,6 +12884,7 @@ "PIKAM": "Pikamoon", "PIKE": "Pike Token", "PIKO": "Pinnako", + "PIKZ": "PIKZ", "PILLAR": "PillarFi", "PILOT": "Unipilot", "PIM": "PIM", @@ -12835,7 +12979,7 @@ "PLAYCOIN": "PlayCoin", "PLAYFUN": "PLAYFUN", "PLAYKEY": "Playkey", - "PLAYSOL": "Play Solana", + "PLAYSOLANA": "Play Solana", "PLAYTOKEN": "Play Token", "PLB": "Paladeum", "PLBT": "Polybius", @@ -12878,12 +13022,14 @@ "PLSX": "PulseX", "PLT": "Poollotto.finance", "PLTC": "PlatonCoin", + "PLTRON": "Palantir Technologies (Ondo Tokenized)", "PLTRX": "Palantir xStock", "PLTX": "PlutusX", "PLTXYZ": "Add.xyz", "PLU": "Pluton", "PLUG": "PL^Gnet", "PLUGCN": "Plug Chain", + "PLUGON": "Plug Power (Ondo Tokenized)", "PLUME": "Plume", "PLUP": "PoolUp", "PLURA": "PluraCoin", @@ -12978,7 +13124,7 @@ "POLLEN": "Beraborrow", "POLLUK": "Jasse Polluk", "POLLUX": "Pollux Coin", - "POLLY": "Polynetica", + "POLLY": "Polly Penguin", "POLNX": "eToro Polish Zloty", "POLO": "NftyPlay", "POLS": "Polkastarter", @@ -12987,6 +13133,7 @@ "POLY": "Polymath Network", "POLYCUB": "PolyCub", "POLYDOGE": "PolyDoge", + "POLYN": "Polynetica", "POLYPAD": "PolyPad", "POLYX": "Polymesh", "POM": "Proof Of Memes", @@ -13114,6 +13261,7 @@ "PREAI": "Predict Crypto", "PREC": "Precipitate.AI", "PRED": "Predictcoin", + "PREDIC": "PredicTools", "PREM": "Premium", "PREME": "PREME Token", "PREMIA": "Premia", @@ -13122,6 +13270,7 @@ "PRESI": "Turbo Trump", "PRESID": "President Ron DeSantis", "PRESIDEN": "President Elon", + "PRESSX": "PressX", "PRFT": "Proof Suite Token", "PRG": "Paragon", "PRI": "PRIVATEUM INITIATIVE", @@ -13221,6 +13370,7 @@ "PSWAP": "Polkaswap", "PSY": "PsyOptions", "PSYOP": "PSYOP", + "PSYOPANIME": "PsyopAnime", "PT": "Phemex", "PTA": "PentaCoin", "PTAS": "La Peseta", @@ -13319,8 +13469,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 +13484,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", @@ -13351,6 +13503,7 @@ "PYME": "PymeDAO", "PYN": "Paynetic", "PYP": "PayPro", + "PYPLON": "PayPal (Ondo Tokenized)", "PYQ": "PolyQuity", "PYR": "Vulcan Forged", "PYRAM": "Pyram Token", @@ -13387,6 +13540,7 @@ "QBX": "qiibee foundation", "QBZ": "QUEENBEE", "QC": "Qcash", + "QCAD": "QCAD", "QCH": "QChi", "QCN": "Quazar Coin", "QCO": "Qravity", @@ -13458,6 +13612,7 @@ "QUA": "Quantum Tech", "QUAC": "QUACK", "QUACK": "Rich Quack", + "QUADRANS": "QuadransToken", "QUAI": "Quai Network", "QUAIN": "QUAIN", "QUAM": "Quam Network", @@ -13519,7 +13674,7 @@ "RADAR": "DappRadar", "RADI": "RadicalCoin", "RADIO": "RadioShack", - "RADR": "CoinRadr", + "RADR": "RADR", "RADX": "Radx AI", "RAFF": "Ton Raffles", "RAFFLES": "Degen Raffles", @@ -13534,6 +13689,7 @@ "RAIF": "RAI Finance", "RAIIN": "Raiin", "RAIL": "Railgun", + "RAILS": "Rails Token", "RAIN": "Rain", "RAINBOW": "Rainbow Token", "RAINC": "RainCheck", @@ -13582,6 +13738,7 @@ "RAYS": "Rays Network", "RAZE": "Raze Network", "RAZOR": "Razor Network", + "RAZORCOIN": "RazorCoin", "RB": "REBorn", "RBBT": "RabbitCoin", "RBC": "Rubic", @@ -13663,6 +13820,7 @@ "REALYN": "Real", "REAP": "ReapChain", "REAPER": "Grim Finance", + "REAT": "REAT", "REAU": "Vira-lata Finance", "REBD": "REBORN", "REBL": "REBL", @@ -13928,6 +14086,7 @@ "RNDR": "Render Token", "RNDX": "Round X", "RNEAR": "Near (Rainbow Bridge)", + "RNGR": "Ranger", "RNS": "RenosCoin", "RNT": "REAL NIGGER TATE", "RNTB": "BitRent", @@ -13966,6 +14125,7 @@ "ROK": "Rockchain", "ROKM": "Rocket Ma", "ROKO": "Roko", + "ROLL": "Roll", "ROLLSROYCE": "RollsRoyce", "ROLS": "RollerSwap", "ROM": "ROMCOIN", @@ -14158,7 +14318,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 +14380,7 @@ "SAKAI": "Sakai Vault", "SAKATA": "Sakata Inu", "SAKE": "SakeToken", + "SAKURACOIN": "Sakuracoin", "SAL": "Salvium", "SALD": "Salad", "SALE": "DxSale Network", @@ -14423,6 +14584,7 @@ "SEAM": "Seamless Protocol", "SEAMLESS": "SeamlessSwap", "SEAN": "Starfish Finance", + "SEAS": "Seasons", "SEAT": "Seamans Token", "SEATLABNFT": "SeatlabNFT", "SEBA": "Seba", @@ -14472,7 +14634,7 @@ "SENSOR": "Sensor Protocol", "SENSOV1": "SENSO v1", "SENSUS": "Sensus", - "SENT": "Sentinel", + "SENT": "Sentient", "SENTAI": "SentAI", "SENTI": "Sentinel Bot Ai", "SENTIS": "Sentism AI Token", @@ -14498,6 +14660,7 @@ "SETH": "sETH", "SETH2": "sETH2", "SETHER": "Sether", + "SETHH": "Staked ETH Harbour", "SETS": "Sensitrust", "SEUR": "Synth sEUR", "SEW": "simpson in a memes world", @@ -14540,6 +14703,7 @@ "SGB": "Songbird", "SGDX": "eToro Singapore Dollar", "SGE": "Society of Galactic Exploration", + "SGI": "SmartGolfToken", "SGLY": "Singularity", "SGN": "Signals Network", "SGO": "SafuuGO", @@ -14608,6 +14772,7 @@ "SHIBACASH": "ShibaCash", "SHIBADOG": "Shiba San", "SHIBAI": "AiShiba", + "SHIBAINU": "SHIBA INU", "SHIBAKEN": "Shibaken Finance", "SHIBAMOM": "Shiba Mom", "SHIBANCE": "Shibance Token", @@ -14678,6 +14843,7 @@ "SHOKI": "Shoki", "SHON": "ShonToken", "SHONG": "Shong Inu", + "SHOOK": "SHOOK", "SHOOT": "Mars Battle", "SHOOTER": "Top Down Survival Shooter", "SHOP": "Shoppi Coin", @@ -14727,6 +14893,7 @@ "SIFT": "Smart Investment Fund Token", "SIFU": "SIFU", "SIG": "Signal", + "SIGHT": "Empire of Sight", "SIGM": "Sigma", "SIGMA": "SIGMA", "SIGN": "Sign", @@ -14735,6 +14902,7 @@ "SIGNMETA": "Sign Token", "SIGT": "Signatum", "SIGU": "Singular", + "SIH": "Salient Investment Holding", "SIKA": "SikaSwap", "SIL": "SIL Finance Token V2", "SILENTIS": "Silentis", @@ -14772,6 +14940,7 @@ "SINE": "Sinelock", "SING": "SingularFarm", "SINGLE": "Single Finance", + "SINGULARRY": "SINGULARRY", "SINK": "Let that sink in", "SINS": "SafeInsure", "SINSO": "SINSO", @@ -14828,7 +14997,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 +15054,7 @@ "SLOKI": "Super Floki", "SLOP": "Slop", "SLORK": "SLORK", + "SLOT": "Alphaslot", "SLOTH": "Sloth", "SLOTHA": "Slothana", "SLP": "Smooth Love Potion", @@ -14898,6 +15068,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 +15093,7 @@ "SMBR": "Sombra", "SMBSWAP": "SimbCoin Swap", "SMC": "SmartCoin", + "SMCION": "Super Micro Computer (Ondo Tokenized)", "SMCW": "Space Misfits", "SMD": "SMD Coin", "SMETA": "StarkMeta", @@ -15024,7 +15196,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", @@ -15057,11 +15229,13 @@ "SOETH": "Wrapped Ethereum (Sollet)", "SOFAC": "SofaCat", "SOFI": "RAI Finance", + "SOFION": "SoFi Technologies (Ondo Tokenized)", "SOFTCO": "SOFT COQ INU", "SOFTT": "Wrapped FTT (Sollet)", "SOGNI": "Sogni AI", "SOGUR": "Sogur Currency", "SOH": "Stohn Coin", + "SOHMV1": "Staked Olympus v1", "SOHOT": "SOHOTRN", "SOIL": "Soil", "SOILCOIN": "SoilCoin", @@ -15113,6 +15287,7 @@ "SOLIDSEX": "SOLIDsex: Tokenized veSOLID", "SOLINK": "Wrapped Chainlink (Sollet)", "SOLITO": "SOLITO", + "SOLKABOSU": "Kabosu", "SOLKIT": "Solana Kit", "SOLLY": "Solly", "SOLM": "SolMix", @@ -15290,6 +15465,7 @@ "SPO": "Spores Network", "SPOK": "Spock", "SPOL": "Starterpool", + "SPON": "Spheron Network", "SPONG": "Spongebob", "SPONGE": "Sponge", "SPONGEBOB": "Spongebob Squarepants", @@ -15298,6 +15474,7 @@ "SPOOL": "Spool DAO Token", "SPORE": "Spore", "SPORT": "SportsCoin", + "SPORTFUN": "Sport.fun", "SPORTS": "ZenSports", "SPORTSFIX": "SportsFix", "SPORTSP": "SportsPie", @@ -15326,6 +15503,7 @@ "SPX6969": "SPX 6969", "SPXC": "SpaceXCoin", "SPY": "Smarty Pay", + "SPYON": "SPDR S&P 500 ETF (Ondo Tokenized)", "SPYRO": "SPYRO", "SPYX": "SP500 xStock", "SQ3": "Squad3", @@ -15334,6 +15512,7 @@ "SQG": "Squid Token", "SQGROW": "SquidGrow", "SQL": "Squall Coin", + "SQQQON": "ProShares UltraPro Short QQQ (Ondo Tokenized)", "SQR": "Magic Square", "SQRL": "Squirrel Swap", "SQT": "SubQuery Network", @@ -15351,6 +15530,8 @@ "SQUIDGROWV1": "SquidGrow v1", "SQUIDV1": "Squid Game v1", "SQUIDW": "Squidward Coin", + "SQUIG": "Squiggle DAO Token", + "SQUIGDAO": "SquiggleDAO ERC20", "SQUIRT": "SQUIRTLE", "SQUOGE": "DogeSquatch", "SR30": "SatsRush", @@ -15419,18 +15600,20 @@ "STAK": "Jigstack", "STAKE": "xDai Chain", "STAKEDETH": "StakeHound Staked Ether", + "STAKERDAOWXTZ": "Wrapped Tezos", "STALIN": "StalinCoin", "STAMP": "SafePost", "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 +16001,7 @@ "SYNCO": "Synco", "SYND": "Syndicate", "SYNDOG": "Synthesizer Dog", + "SYNESIS": "Synesis One", "SYNK": "Synk", "SYNLEV": "SynLev", "SYNO": "Synonym Finance", @@ -15918,6 +16102,7 @@ "TATSU": "Taτsu", "TAU": "Lamden Tau", "TAUC": "Taurus Coin", + "TAUD": "TrueAUD", "TAUM": "Orbitau Taureum", "TAUR": "Marnotaur", "TAVA": "ALTAVA", @@ -16117,6 +16302,7 @@ "THEPLAY": "PLAY", "THEREALCHAIN": "REAL", "THERESAMAY": "Theresa May Coin", + "THEROS": "THEROS", "THES": "The Standard Protocol (USDS)", "THESTANDARD": "Standard Token", "THETA": "Theta Network", @@ -16201,9 +16387,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 +16399,7 @@ "TITI": "TiTi Protocol", "TITN": "Titan", "TITS": "We Love Tits", + "TITTIECOIN": "TittieCoin", "TITTY": "TamaKitty", "TIUSD": "TiUSD", "TIX": "Blocktix", @@ -16226,6 +16414,7 @@ "TKMK": "TOKAMAK", "TKMN": "Tokemon", "TKN": "Token Name Service", + "TKNT": "TKN Token", "TKO": "Tokocrypto", "TKP": "TOKPIE", "TKR": "CryptoInsight", @@ -16239,6 +16428,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 +16583,7 @@ "TPV": "TravGoPV", "TPY": "Thrupenny", "TQ": "TonQuestion", + "TQQQON": "ProShares UltraPro QQQ (Ondo Tokenized)", "TQQQX": "TQQQ xStock", "TQRT": "TokoQrt", "TR3": "Tr3zor", @@ -16452,7 +16643,7 @@ "TRGI": "The Real Golden Inu", "TRHUB": "Tradehub", "TRI": "Triangles Coin", - "TRIA": "Triaconta", + "TRIA": "TRIA", "TRIAS": "Trias", "TRIBE": "Tribe", "TRIBETOKEN": "TribeToken", @@ -16487,6 +16678,7 @@ "TROLLMODE": "TROLL MODE", "TROLLRUN": "TROLL", "TROLLS": "trolls in a memes world", + "TRONBETLIVE": "TRONbetLive", "TRONDOG": "TronDog", "TRONI": "Tron Inu", "TRONP": "Donald Tronp", @@ -16494,7 +16686,7 @@ "TROP": "Interop", "TROPPY": "TROPPY", "TROSS": "Trossard", - "TROVE": "Arbitrove Governance Token", + "TROVE": "TROVE", "TROY": "Troy", "TRP": "Tronipay", "TRR": "Terran Coin", @@ -16595,6 +16787,7 @@ "TSHARE": "Tomb Shares", "TSHP": "12Ships", "TSL": "Energo", + "TSLAON": "Tesla (Ondo Tokenized)", "TSLAX": "Tesla xStock", "TSLT": "Tamkin", "TSN": "Tsunami Exchange Token", @@ -16616,7 +16809,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 +16826,8 @@ "TUKI": "Tuki", "TUKIV1": "Tuki v1", "TULIP": "Tulip Protocol", - "TUNA": "TUNACOIN", + "TUNA": "DefiTuna", + "TUNACOIN": "TUNACOIN", "TUNE": "Bitune", "TUNETRADEX": "TuneTrade", "TUP": "Tenup", @@ -16710,7 +16904,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 +16931,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 +17053,7 @@ "UNIL": "UniLayer", "UNIM": "Unicorn Milk", "UNIO": "Unio Coin", + "UNION": "Union", "UNIPOWER": "UniPower", "UNIPT": "Universal Protocol Token", "UNIQ": "Uniqredit", @@ -16934,7 +17130,9 @@ "US": "Talus Token", "USA": "Based USA", "USACOIN": "American Coin", - "USAT": "USAT", + "USAGIBNB": "U", + "USAT": "Tether America USD", + "USATINC": "USAT", "USBT": "Universal Blockchain", "USC": "Ultimate Secure Cash", "USCC": "USC", @@ -16973,14 +17171,15 @@ "USDGLOBI": "Globiance USD Stablecoin", "USDGV1": "USDG v1", "USDGV2": "USDG", - "USDH": "USDH Hubble Stablecoin", + "USDH": "USDH", + "USDHHUBBLE": "USDH Hubble Stablecoin", "USDHL": "Hyper USD", "USDI": "Interest Protocol USDi", "USDJ": "USDJ", "USDK": "USDK", "USDKG": "USDKG", "USDL": "Lift Dollar", - "USDM": "Mountain Protocol", + "USDM": "USDM", "USDMA": "USD mars", "USDN": "Neutral AI", "USDO": "USD Open Dollar", @@ -17021,6 +17220,7 @@ "USN": "USN", "USNBT": "NuBits", "USNOTA": "NOTA", + "USOR": "U.S Oil", "USP": "USP Token", "USPEPE": "American pepe", "USPLUS": "Fluent Finance", @@ -17038,7 +17238,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", @@ -17066,8 +17267,9 @@ "UUU": "U Network", "UVT": "UvToken", "UW3S": "Utility Web3Shot", - "UWU": "UwU Lend", + "UWU": "Unlimited Wealth Utility", "UWUCOIN": "uwu", + "UWULEND": "UwU Lend", "UX": "Umee", "UXLINK": "UXLINK", "UXLINKV1": "UXLINK v1", @@ -17193,6 +17395,7 @@ "VEO": "Amoveo", "VER": "VersalNFT", "VERA": "Vera", + "VEREM": "Verified Emeralds", "VERI": "Veritaseum", "VERIC": "VeriCoin", "VERIFY": "Verify", @@ -17391,6 +17594,7 @@ "VRC": "Virtual Coin", "VRFY": "VERIFY", "VRGW": "Virtual Reality Game World", + "VRGX": "VROOMGO", "VRH": "Versailles Heroes", "VRL": "Virtual X", "VRM": "Verium", @@ -17424,6 +17628,7 @@ "VSYS": "V Systems", "VT": "Virtual Tourist", "VTC": "Vertcoin", + "VTCN": "Versatize Coin", "VTG": "Victory Gem", "VTHO": "VeChainThor", "VTIX": "Vanguard xStock", @@ -17456,6 +17661,7 @@ "VVS": "VVS Finance", "VVV": "Venice Token", "VX": "Visa xStock", + "VXC": "VINX COIN", "VXL": "Voxel X Network", "VXR": "Vox Royale", "VXRP": "Venus XRP", @@ -17468,6 +17674,7 @@ "VYPER": "VYPER.WIN", "VYVO": "Vyvo AI", "VZ": "Vault Zero", + "VZON": "Verizon (Ondo Tokenized)", "VZT": "Vezt", "W": "Wormhole", "W1": "W1", @@ -17525,7 +17732,7 @@ "WANNA": "Wanna Bot", "WANUSDT": "wanUSDT", "WAP": "Wet Ass Pussy", - "WAR": "WeStarter", + "WAR": "WAR", "WARP": "WarpCoin", "WARPED": "Warped Games", "WARPIE": "Warpie", @@ -17594,6 +17801,7 @@ "WCFGV1": "Wrapped Centrifuge", "WCFX": "Wrapped Conflux", "WCG": "World Crypto Gold", + "WCHZ": "Wrapped Chiliz", "WCKB": "Wrapped Nervos Network", "WCOIN": "WCoin", "WCORE": "Wrapped Core", @@ -17666,6 +17874,7 @@ "WERK": "Werk Family", "WESHOWTOKEN": "WeShow Token", "WEST": "Waves Enterprise", + "WESTARTER": "WeStarter", "WET": "HumidiFi Token", "WETH": "WETH", "WETHV1": "WETH v1", @@ -17685,6 +17894,7 @@ "WFIL": "Wrapped Filecoin", "WFLAMA": "WIFLAMA", "WFLOW": "Wrapped Flow", + "WFLR": "Wrapped Flare", "WFO": "WoofOracle", "WFRAGSOL": "Wrapped fragSOL", "WFT": "Windfall Token", @@ -17709,6 +17919,7 @@ "WHATSONPIC": "WhatsOnPic", "WHBAR": "Wrapped HBAR", "WHC": "Whales Club", + "WHCHZ": "Chiliz (Portal Bridge)", "WHEAT": "Wheat Token", "WHEE": "WHEE (Ordinals)", "WHEEL": "Wheelers", @@ -17721,6 +17932,7 @@ "WHISKEY": "WHISKEY", "WHITE": "WhiteRock", "WHITEHEART": "Whiteheart", + "WHITEPEPE": "The White Pepe", "WHITEWHALE": "The White Whale", "WHL": "WhaleCoin", "WHO": "Truwho", @@ -17838,6 +18050,7 @@ "WMNT": "Wrapped Mantle", "WMOXY": "Moxy", "WMT": "World Mobile Token v1", + "WMTON": "Walmart (Ondo Tokenized)", "WMTX": "World Mobile Token", "WMW": "WoopMoney", "WMX": "Wombex Finance", @@ -17995,6 +18208,7 @@ "WUF": "WUFFI", "WUK": "WUKONG", "WUKONG": "Sun Wukong", + "WULFON": "Terawulf (Ondo Tokenized)", "WULFY": "Wulfy", "WUM": "Unicorn Meat", "WUSD": "Worldwide USD", @@ -18020,7 +18234,6 @@ "WXPL": "Wrapped XPL", "WXRP": "Wrapped XRP", "WXT": "WXT", - "WXTZ": "Wrapped Tezos", "WYAC": "Woman Yelling At Cat", "WYN": "Wynn", "WYNN": "Anita Max Wynn", @@ -18063,6 +18276,7 @@ "XAS": "Asch", "XAT": "ShareAt", "XAUC": "XauCoin", + "XAUH": "Herculis Gold Coin", "XAUM": "Matrixdock Gold", "XAUR": "Xaurum", "XAUT": "Tether Gold", @@ -18161,6 +18375,7 @@ "XENO": "Xeno", "XENOVERSE": "Xenoverse", "XEP": "Electra Protocol", + "XERA": "XERA", "XERS": "X Project", "XES": "Proxeus", "XET": "Xfinite Entertainment Token", @@ -18340,6 +18555,7 @@ "XRPCV1": "XRP Classic v1", "XRPEPE": "XRPEPE", "XRPH": "XRP Healthcare", + "XRPHEDGE": "1X Short XRP Token", "XRS": "Xrius", "XRT": "Robonomics Network", "XRUN": "XRun", @@ -18607,6 +18823,7 @@ "ZAIF": "Zaif Token", "ZAIFIN": "Zero Collateral Dai", "ZAM": "Zamio", + "ZAMA": "Zama", "ZAMZAM": "ZAMZAM", "ZANO": "Zano", "ZAO": "zkTAO", @@ -18679,6 +18896,7 @@ "ZENPROTOCOL": "Zen Protocol", "ZENQ": "Zenqira", "ZENT": "Zentry", + "ZENV1": "Horizen v1", "ZEON": "Zeon Network", "ZEP": "Zeppelin Dao", "ZEPH": "Zephyr Protocol", @@ -18696,12 +18914,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 +18968,7 @@ "ZKEVM": "zkEVMChain (BSC)", "ZKEX": "zkExchange", "ZKF": "ZKFair", + "ZKFG": "ZKFG", "ZKGPT": "ZKGPT", "ZKGROK": "ZKGROK", "ZKGUN": "zkGUN", @@ -18759,7 +18980,7 @@ "ZKLAB": "zkSync Labs", "ZKLK": "ZkLock", "ZKML": "zKML", - "ZKP": "Panther Protocol", + "ZKP": "zkPass", "ZKPAD": "zkLaunchpad", "ZKPEPE": "ZKPEPEs", "ZKS": "ZKSpace", @@ -18803,6 +19024,7 @@ "ZOOM": "ZoomCoin", "ZOOMER": "Zoomer Coin", "ZOON": "CryptoZoon", + "ZOOSTORY": "ZOO", "ZOOT": "Zoo Token", "ZOOTOPIA": "Zootopia", "ZORA": "Zora", @@ -18830,8 +19052,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", @@ -18879,5 +19102,13 @@ "vXDEFI": "vXDEFI", "wsOHM": "Wrapped Staked Olympus", "修仙": "修仙", - "币安人生": "币安人生" + "分红狗头": "分红狗头", + "哭哭马": "哭哭马", + "安": "安", + "币安人生": "币安人生", + "恶俗企鹅": "恶俗企鹅", + "我踏马来了": "我踏马来了", + "老子": "老子", + "雪球": "雪球", + "黑马": "黑马" } diff --git a/apps/api/src/helper/object.helper.spec.ts b/apps/api/src/helper/object.helper.spec.ts index e1ec81b8f..ed821390f 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': { @@ -117,6 +111,7 @@ describe('redactAttributes', () => { hasError: false, holdings: { 'AAPL.US': { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -136,7 +131,6 @@ describe('redactAttributes', () => { marketPrice: 220.79, symbol: 'AAPL.US', tags: [], - transactionCount: 1, allocationInPercentage: 0.044900865255793135, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -169,6 +163,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.0694356974830054 }, 'ALV.DE': { + activitiesCount: 2, currency: 'EUR', markets: { UNKNOWN: 0, @@ -188,7 +183,6 @@ describe('redactAttributes', () => { marketPrice: 296.5, symbol: 'ALV.DE', tags: [], - transactionCount: 2, allocationInPercentage: 0.026912563036519527, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -216,6 +210,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.04161818652826481 }, AMZN: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -235,7 +230,6 @@ describe('redactAttributes', () => { marketPrice: 187.99, symbol: 'AMZN', tags: [], - transactionCount: 1, allocationInPercentage: 0.07646101417126275, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -268,6 +262,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.11824101426541227 }, bitcoin: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 36985.0332704, @@ -293,7 +288,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 1, allocationInPercentage: 0.15042891393226654, assetClass: 'LIQUIDITY', assetSubClass: 'CRYPTOCURRENCY', @@ -319,6 +313,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.232626620912395 }, BONDORA_GO_AND_GROW: { + activitiesCount: 5, currency: 'EUR', markets: { UNKNOWN: 2231.644722160232, @@ -344,7 +339,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 5, allocationInPercentage: 0.009076749759365777, assetClass: 'FIXED_INCOME', assetSubClass: 'BOND', @@ -370,6 +364,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.014036487867880205 }, FRANKLY95P: { + activitiesCount: 6, currency: 'CHF', markets: { UNKNOWN: 0, @@ -395,7 +390,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 6, allocationInPercentage: 0.09095764645669335, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -494,6 +488,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.14065892911313693 }, MSFT: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -513,7 +508,6 @@ describe('redactAttributes', () => { marketPrice: 428.02, symbol: 'MSFT', tags: [], - transactionCount: 1, allocationInPercentage: 0.05222646409742627, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -546,6 +540,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08076416659271518 }, TSLA: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -565,7 +560,6 @@ describe('redactAttributes', () => { marketPrice: 260.46, symbol: 'TSLA', tags: [], - transactionCount: 1, allocationInPercentage: 0.1589050142378352, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -598,6 +592,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.2457342510950259 }, VTI: { + activitiesCount: 5, currency: 'USD', markets: { UNKNOWN: 0, @@ -617,7 +612,6 @@ describe('redactAttributes', () => { marketPrice: 282.05, symbol: 'VTI', tags: [], - transactionCount: 5, allocationInPercentage: 0.057358979326040366, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -770,6 +764,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08870120238725339 }, 'VWRL.SW': { + activitiesCount: 5, currency: 'CHF', markets: { UNKNOWN: 0, @@ -789,7 +784,6 @@ describe('redactAttributes', () => { marketPrice: 117.62, symbol: 'VWRL.SW', tags: [], - transactionCount: 5, allocationInPercentage: 0.09386983901959013, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -1178,6 +1172,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.145162408515095 }, 'XDWD.DE': { + activitiesCount: 1, currency: 'EUR', markets: { UNKNOWN: 0, @@ -1197,7 +1192,6 @@ describe('redactAttributes', () => { marketPrice: 105.72, symbol: 'XDWD.DE', tags: [], - transactionCount: 1, allocationInPercentage: 0.03598477442100562, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -1456,6 +1450,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.055647656152211074 }, USD: { + activitiesCount: 0, currency: 'USD', allocationInPercentage: 0.20291717628620132, assetClass: 'LIQUIDITY', @@ -1478,7 +1473,6 @@ describe('redactAttributes', () => { sectors: [], symbol: 'USD', tags: [], - transactionCount: 0, valueInBaseCurrency: 49890, valueInPercentage: 0.3137956381563603 } @@ -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: { @@ -1648,6 +1615,7 @@ describe('redactAttributes', () => { hasError: false, holdings: { 'AAPL.US': { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -1667,7 +1635,6 @@ describe('redactAttributes', () => { marketPrice: 220.79, symbol: 'AAPL.US', tags: [], - transactionCount: 1, allocationInPercentage: 0.044900865255793135, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -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, @@ -1700,6 +1667,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.0694356974830054 }, 'ALV.DE': { + activitiesCount: 2, currency: 'EUR', markets: { UNKNOWN: 0, @@ -1719,7 +1687,6 @@ describe('redactAttributes', () => { marketPrice: 296.5, symbol: 'ALV.DE', tags: [], - transactionCount: 2, allocationInPercentage: 0.026912563036519527, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -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, @@ -1747,6 +1714,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.04161818652826481 }, AMZN: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -1766,7 +1734,6 @@ describe('redactAttributes', () => { marketPrice: 187.99, symbol: 'AMZN', tags: [], - transactionCount: 1, allocationInPercentage: 0.07646101417126275, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -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, @@ -1799,6 +1766,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.11824101426541227 }, bitcoin: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 36985.0332704, @@ -1824,14 +1792,13 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 1, allocationInPercentage: 0.15042891393226654, assetClass: 'LIQUIDITY', assetSubClass: 'CRYPTOCURRENCY', countries: [], dataSource: 'COINGECKO', dateOfFirstActivity: '2017-08-15T22:00:00.000Z', - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 17.4925166352, grossPerformancePercentWithCurrencyEffect: 17.4925166352, @@ -1850,6 +1817,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.232626620912395 }, BONDORA_GO_AND_GROW: { + activitiesCount: 5, currency: 'EUR', markets: { UNKNOWN: 2231.644722160232, @@ -1875,14 +1843,13 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 5, allocationInPercentage: 0.009076749759365777, assetClass: 'FIXED_INCOME', assetSubClass: 'BOND', countries: [], dataSource: 'MANUAL', dateOfFirstActivity: '2021-01-31T23:00:00.000Z', - dividend: 11.45, + dividend: null, grossPerformance: null, grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: -0.06153834320225245, @@ -1901,6 +1868,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.014036487867880205 }, FRANKLY95P: { + activitiesCount: 6, currency: 'CHF', markets: { UNKNOWN: 0, @@ -1926,7 +1894,6 @@ describe('redactAttributes', () => { userId: null } ], - transactionCount: 6, allocationInPercentage: 0.09095764645669335, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -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, @@ -2005,6 +1972,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.14065892911313693 }, MSFT: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -2024,7 +1992,6 @@ describe('redactAttributes', () => { marketPrice: 428.02, symbol: 'MSFT', tags: [], - transactionCount: 1, allocationInPercentage: 0.05222646409742627, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -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, @@ -2057,6 +2024,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08076416659271518 }, TSLA: { + activitiesCount: 1, currency: 'USD', markets: { UNKNOWN: 0, @@ -2076,7 +2044,6 @@ describe('redactAttributes', () => { marketPrice: 260.46, symbol: 'TSLA', tags: [], - transactionCount: 1, allocationInPercentage: 0.1589050142378352, assetClass: 'EQUITY', assetSubClass: 'STOCK', @@ -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, @@ -2109,6 +2076,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.2457342510950259 }, VTI: { + activitiesCount: 5, currency: 'USD', markets: { UNKNOWN: 0, @@ -2128,7 +2096,6 @@ describe('redactAttributes', () => { marketPrice: 282.05, symbol: 'VTI', tags: [], - transactionCount: 5, allocationInPercentage: 0.057358979326040366, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -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, @@ -2281,6 +2248,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.08870120238725339 }, 'VWRL.SW': { + activitiesCount: 5, currency: 'CHF', markets: { UNKNOWN: 0, @@ -2300,7 +2268,6 @@ describe('redactAttributes', () => { marketPrice: 117.62, symbol: 'VWRL.SW', tags: [], - transactionCount: 5, allocationInPercentage: 0.09386983901959013, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -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, @@ -2681,6 +2648,7 @@ describe('redactAttributes', () => { valueInPercentage: 0.145162408515095 }, 'XDWD.DE': { + activitiesCount: 1, currency: 'EUR', markets: { UNKNOWN: 0, @@ -2700,7 +2668,6 @@ describe('redactAttributes', () => { marketPrice: 105.72, symbol: 'XDWD.DE', tags: [], - transactionCount: 1, allocationInPercentage: 0.03598477442100562, assetClass: 'EQUITY', assetSubClass: 'ETF', @@ -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, @@ -2959,12 +2926,13 @@ describe('redactAttributes', () => { valueInPercentage: 0.055647656152211074 }, USD: { + activitiesCount: 0, currency: 'USD', allocationInPercentage: 0.20291717628620132, assetClass: 'LIQUIDITY', assetSubClass: 'CASH', countries: [], - dividend: 0, + dividend: null, grossPerformance: null, grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: 0, @@ -2981,7 +2949,6 @@ describe('redactAttributes', () => { sectors: [], symbol: 'USD', tags: [], - transactionCount: 0, valueInBaseCurrency: null, valueInPercentage: 0.3137956381563603 } 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/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..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 @@ -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; @@ -206,17 +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 - }); - } - } + }; + }); + }); } else if ( assetSubClass === 'STOCK' && assetProfile.summaryProfile?.country diff --git a/apps/api/src/services/tag/tag.service.ts b/apps/api/src/services/tag/tag.service.ts index eb2d7bfef..f4cbd4cb1 100644 --- a/apps/api/src/services/tag/tag.service.ts +++ b/apps/api/src/services/tag/tag.service.ts @@ -75,12 +75,16 @@ export class TagService { } }); - return tags.map(({ _count, id, name, userId }) => ({ - id, - name, - userId, - isUsed: _count.activities > 0 - })); + return tags + .map(({ _count, id, name, userId }) => ({ + id, + name, + userId, + isUsed: _count.activities > 0 + })) + .sort((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }); } public async getTagsWithActivityCount() { 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..e41d3415c 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
@@ -102,8 +102,6 @@
Holdings
{ - 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}` }); 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/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/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/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..86f4676f3 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
@@ -377,13 +377,12 @@ @@ -400,7 +399,7 @@ ; 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/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 @@
- +
+ +
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..cab1caa23 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/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..3d9d7ee5c 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.html +++ b/apps/client/src/app/pages/accounts/accounts-page.html @@ -4,8 +4,8 @@

Accounts

= + 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..517ad7101 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,72 @@
} + + @if (user?.settings?.isExperimentalFeatures) { +
+
+ + + Total amount + + +
+
+ + + Change with currency effect + + +
+
+ + + Performance with currency effect + + +
+
+ } +
  • - Everything in -   - Basic, - plus: + Everything in Basic, plus:
  • diff --git a/apps/client/src/app/pages/public/public-page.html b/apps/client/src/app/pages/public/public-page.html index 079566e0d..c422f9006 100644 --- a/apps/client/src/app/pages/public/public-page.html +++ b/apps/client/src/app/pages/public/public-page.html @@ -78,7 +78,6 @@ [showLabels]="deviceType !== 'mobile'" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 762f8f73a..a6bec7df3 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 @@ -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? @@ -387,7 +379,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -403,7 +395,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -467,7 +459,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 +471,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 +487,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -523,7 +515,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 +547,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 +563,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 +595,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 +631,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 +855,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -871,27 +863,19 @@ 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 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -899,7 +883,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -907,7 +891,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -927,7 +911,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -1015,7 +999,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 +1007,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 +1159,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 +1227,7 @@ Està segur qeu vol eliminar aquest cupó? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1251,7 +1235,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 +1243,7 @@ Està segur que vol depurar el cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1267,7 +1251,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 +1387,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1427,7 +1411,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1499,7 +1483,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1567,11 +1551,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 +1591,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -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 @@ -1703,7 +1687,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1739,7 +1723,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1955,7 +1939,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2003,7 +1987,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 @@ -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 - 193 + 259 @@ -2135,7 +2119,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 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 @@ -2355,7 +2339,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2363,11 +2347,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 +2359,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 +2371,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -2399,11 +2391,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 +2447,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 @@ -2519,7 +2511,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2547,7 +2539,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2555,7 +2547,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 +2555,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 +2571,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 +2579,7 @@ Vista del presentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2595,7 +2587,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 +2623,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2639,7 +2631,7 @@ Format de data i número apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2647,7 +2639,7 @@ Aparença apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2655,7 +2647,7 @@ Llum apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2663,7 +2655,7 @@ Fosc apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2671,7 +2663,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 +2675,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 +2691,7 @@ Autenticació biomètrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2707,7 +2699,7 @@ Inicieu la sessió amb l’empremta digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2715,7 +2707,7 @@ Característiques experimentals apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2723,7 +2715,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 +2723,7 @@ Exporta dades apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2739,7 +2731,7 @@ Zona de perill apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -2747,7 +2739,7 @@ Tanca el compte apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -3227,11 +3219,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 +3408,7 @@ Programari de codi obert apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3428,7 +3420,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3440,7 +3432,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3912,7 +3904,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4040,7 +4032,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4472,7 +4464,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4500,7 +4492,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4520,15 +4512,15 @@ 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 - 88 + 89 @@ -4536,7 +4528,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -4544,7 +4536,7 @@ Mensualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4552,7 +4544,7 @@ Anualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4568,7 +4560,7 @@ Rendiment absolut dels actius apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -4576,7 +4568,7 @@ Rendiment de l’actiu apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -4584,7 +4576,7 @@ Rendiment absolut de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -4592,7 +4584,7 @@ Rendiment de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -4600,7 +4592,7 @@ A dalt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -4608,7 +4600,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -4616,7 +4608,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -4624,7 +4616,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -4632,7 +4624,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4640,7 +4632,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4648,7 +4640,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -4824,7 +4816,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4840,7 +4832,7 @@ Suport per correu electrònic i xat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4848,7 +4840,7 @@ Pagament únic, sense renovació automàtica. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4856,11 +4848,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 @@ -4868,7 +4860,7 @@ És gratuït. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -5001,7 +4993,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 +5005,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5297,7 +5289,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5429,7 +5421,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5437,11 +5429,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 +5441,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5457,11 +5449,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 +5461,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5477,7 +5469,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 +5481,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -5497,11 +5489,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 @@ -5585,7 +5577,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5685,11 +5677,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 +5697,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5936,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 @@ -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 @@ -6845,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6957,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 @@ -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,15 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7367,7 +7379,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7451,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenia @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..44ee607c3 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 @@ -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? @@ -146,7 +138,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 +150,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 +166,7 @@ Gesamt libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -202,11 +194,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 +210,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 +242,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 +278,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 +482,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -518,7 +510,7 @@ Möchtest du diesen Gutscheincode wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -526,7 +518,7 @@ Möchtest du den Cache wirklich leeren? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -534,7 +526,7 @@ Bitte gebe deine Systemmeldung ein: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -654,7 +646,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -730,7 +722,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -742,7 +734,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -790,7 +782,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -830,7 +822,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 @@ -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 - 193 + 259 @@ -938,7 +930,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1046,11 +1038,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 +1058,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1078,7 +1070,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1086,11 +1078,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 +1090,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 +1102,19 @@ 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 + + + + Performance with currency effect + Performance mit Währungseffekt + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -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 @@ -1254,7 +1254,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -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 @@ -1854,7 +1854,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -1862,7 +1862,7 @@ Gewinner apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -1870,7 +1870,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -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 @@ -2338,7 +2338,7 @@ kontaktiere uns apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2526,7 +2526,7 @@ Monatlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -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 @@ -2754,7 +2754,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -3130,7 +3130,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -3138,7 +3138,7 @@ Suchst du nach einem Studentenrabatt? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3166,7 +3166,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3290,7 +3290,7 @@ Jährlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3361,6 +3361,14 @@ 28 + + Everything in Basic, plus + Alles von Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satellit @@ -3374,7 +3382,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 +3390,7 @@ Unbeschwertes Erlebnis für turbulente Zeiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3390,7 +3398,7 @@ Vorschau auf kommende Funktionalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3430,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3446,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3462,7 +3470,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3510,7 +3518,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3594,7 +3602,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3610,7 +3618,7 @@ Einmalige Zahlung, keine automatische Erneuerung. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3618,11 +3626,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 @@ -3630,7 +3638,7 @@ Es ist kostenlos. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3662,7 +3670,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3706,7 +3714,7 @@ E-Mail und Chat Support apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3758,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3782,7 +3790,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3846,7 +3854,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3882,7 +3890,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 +3898,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4026,7 +4034,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4034,7 +4042,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4078,7 +4086,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4218,7 +4226,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4481,20 +4489,12 @@ 43 - - Everything in - Alles von - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 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 @@ -5388,7 +5388,7 @@ mit deiner Universitäts-E-Mail-Adresse apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5572,7 +5572,7 @@ Fordere ihn an apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -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 @@ -5876,15 +5876,15 @@ 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 - 88 + 89 @@ -5892,7 +5892,7 @@ hier apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5908,7 +5908,7 @@ Absolute Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5916,7 +5916,7 @@ Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5924,7 +5924,7 @@ Absolute Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5932,7 +5932,7 @@ Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6869,7 +6873,7 @@ Wenn du die Eröffnung eines Kontos planst bei apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6981,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 @@ -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,15 @@ Bitte gebe deinen Ghostfolio API-Schlüssel ein. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Änderung mit Währungseffekt + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7391,7 +7403,7 @@ KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7407,7 +7419,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7415,7 +7427,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7455,7 +7467,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7463,7 +7475,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7471,7 +7483,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7487,7 +7499,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 +7519,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7542,6 +7554,14 @@ 67 + + Total amount + Gesamtbetrag + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenien @@ -7611,7 +7631,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 +7643,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 +7651,7 @@ Konto, Position oder Seite finden... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7696,7 +7716,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7704,7 +7724,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 @@ -7720,7 +7740,7 @@ inklusive API-Zugriff für apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Demo Benutzerkonto wurde synchronisiert. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..7564e4d80 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 @@ -40,10 +40,10 @@ please - please + por favor apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -84,20 +84,12 @@ with - with + con apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 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? @@ -147,7 +139,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 +151,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 +167,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -203,11 +195,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 +211,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 +243,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 +279,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -376,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 @@ -491,7 +483,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -519,7 +511,7 @@ ¿Estás seguro de eliminar este cupón? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -527,7 +519,7 @@ ¿Estás seguro de limpiar la caché? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -535,7 +527,7 @@ Por favor, establece tu mensaje del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -639,7 +631,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -660,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 @@ -715,7 +707,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -727,7 +719,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -775,7 +767,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -815,7 +807,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 @@ -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 - 193 + 259 @@ -923,7 +915,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1031,11 +1023,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 +1043,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1063,7 +1055,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1071,11 +1063,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 +1075,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 +1087,19 @@ 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 + + + + 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 @@ -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 @@ -1239,7 +1239,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -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 @@ -1839,7 +1839,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -1847,7 +1847,7 @@ Lo mejor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -1855,7 +1855,7 @@ Lo peor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -1912,10 +1912,10 @@ Current week - Current week + Semana actual 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 @@ -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 @@ -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 @@ -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,10 +2320,10 @@ contact us - contact us + contactarnos apps/client/src/app/pages/pricing/pricing-page.html - 339 + 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 @@ -2555,7 +2555,7 @@ Mensual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -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 @@ -2656,14 +2656,14 @@ 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 - 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 @@ -2739,7 +2739,7 @@ Evolución cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -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,10 +3112,10 @@ Looking for a student discount? - Looking for a student discount? + ¿Buscando un descuento para estudiantes? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3143,7 +3143,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3155,7 +3155,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -3275,7 +3275,7 @@ Anual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3346,6 +3346,14 @@ 28 + + Everything in Basic, plus + Todo en Básico, más + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satélite @@ -3359,7 +3367,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 +3375,7 @@ Experiencia sin distracciones para tiempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3375,7 +3383,7 @@ Un adelanto de las próximas funciones apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3399,7 +3407,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3415,7 +3423,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3431,7 +3439,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3447,7 +3455,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3495,7 +3503,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3579,7 +3587,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3595,19 +3603,19 @@ Pago único, sin renovación automática. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 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 - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3615,7 +3623,7 @@ Es gratis. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3647,7 +3655,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3691,7 +3699,7 @@ Soporte a Traves de Email y Chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3735,7 +3743,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3759,7 +3767,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3804,7 +3812,7 @@ By - By + Por apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -3820,10 +3828,10 @@ Current year - Current year + Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3856,10 +3864,10 @@ 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 - 579 + 578 @@ -3867,7 +3875,7 @@ ¿Realmente deseas eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4003,7 +4011,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4011,7 +4019,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4048,14 +4056,14 @@ View Details - View Details + Ver detalles apps/client/src/app/components/admin-users/admin-users.html 225 libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4184,7 +4192,7 @@ per week - per week + por semana apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 130 @@ -4195,7 +4203,7 @@ Software de código abierto apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4208,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 @@ -4252,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 @@ -4432,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 @@ -4458,20 +4466,12 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 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 @@ -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 @@ -4615,7 +4615,7 @@ Autenticación biométrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4656,7 +4656,7 @@ Job ID - Job ID + ID de trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html 34 @@ -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 @@ -4740,7 +4740,7 @@ for - for + para apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 128 @@ -4764,14 +4764,14 @@ 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 - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -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 @@ -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 @@ -5354,7 +5354,7 @@ Ghostfolio Status - Ghostfolio Status + Estado de Ghostfolio apps/client/src/app/pages/about/overview/about-overview-page.html 62 @@ -5362,10 +5362,10 @@ 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 - 351 + 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,10 +5546,10 @@ Request it - Request it + Solicitar apps/client/src/app/pages/pricing/pricing-page.html - 347 + 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 @@ -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 @@ -5853,28 +5853,28 @@ 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 - 88 + 89 here - here + aquí apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 Close Holding - Close Holding + Cerrar posición apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 442 @@ -5885,7 +5885,7 @@ Rendimiento absoluto de los activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5893,7 +5893,7 @@ Rendimiento de activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5901,7 +5901,7 @@ Rendimiento absoluto de divisas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5909,7 +5909,7 @@ Rendimiento de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -6535,7 +6539,7 @@ View Holding - View Holding + Ver fondos libs/ui/src/lib/activities-table/activities-table.component.html 450 @@ -6658,7 +6662,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -6679,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 @@ -6687,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 @@ -6759,7 +6763,7 @@ Close - Cerca + Cerrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 594 @@ -6803,7 +6807,7 @@ Role - Role + Rol apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 14 @@ -6835,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 @@ -6843,15 +6847,15 @@ 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 - 315 + 312 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 @@ -6875,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 @@ -6947,7 +6951,7 @@ , assuming a - , assuming a + , asumiendo un apps/client/src/app/pages/portfolio/fire/fire-page.html 174 @@ -6955,10 +6959,10 @@ 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 - 343 + 340 @@ -7035,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 @@ -7192,7 +7196,7 @@ ¿Realmente deseas eliminar la clave API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7349,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 @@ -7360,7 +7364,15 @@ Por favor, ingresa tu clave API de Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + 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 @@ -7368,7 +7380,7 @@ El aviso de IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7384,7 +7396,7 @@ Perezoso apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7404,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7444,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 +7452,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7448,7 +7460,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7464,7 +7476,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 +7496,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7497,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 @@ -7519,6 +7531,14 @@ 67 + + Total amount + Cantidad total + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenia @@ -7588,7 +7608,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,15 +7620,15 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 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 - 153 + 151 @@ -7673,7 +7693,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 +7701,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 @@ -7697,7 +7717,7 @@ con acceso a la API para apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7777,7 +7797,7 @@ ¿Realmente deseas eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7838,7 @@ La cuenta de usuario de demostración se ha sincronizado. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7996,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8008,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8029,10 +8049,10 @@ Current month - Current month + Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 @@ -8214,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 @@ -8246,7 +8266,7 @@ - + apps/client/src/app/components/admin-users/admin-users.html 39 @@ -8314,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 @@ -8322,7 +8342,7 @@ Emergency Fund - Emergency Fund + Fondo de emergencia apps/client/src/app/pages/i18n/i18n-page.html 144 @@ -8330,7 +8350,7 @@ Fees - Fees + Comisiones apps/client/src/app/pages/i18n/i18n-page.html 161 @@ -8338,7 +8358,7 @@ Liquidity - Liquidity + Liquidez apps/client/src/app/pages/i18n/i18n-page.html 70 @@ -8346,7 +8366,7 @@ Buying Power - Buying Power + Poder de compra apps/client/src/app/pages/i18n/i18n-page.html 71 @@ -8354,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 @@ -8362,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 @@ -8370,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 @@ -8402,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 @@ -8410,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 @@ -8418,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 @@ -8434,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 @@ -8442,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 @@ -8450,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 @@ -8474,7 +8494,7 @@ Asia-Pacific - Asia-Pacific + Asia-Pacífico apps/client/src/app/pages/i18n/i18n-page.html 165 @@ -8482,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 @@ -8490,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 @@ -8498,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 @@ -8506,7 +8526,7 @@ Emerging Markets - Emerging Markets + Mercados emergentes apps/client/src/app/pages/i18n/i18n-page.html 180 @@ -8514,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 @@ -8522,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 @@ -8530,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 @@ -8538,7 +8558,7 @@ Europe - Europe + Europa apps/client/src/app/pages/i18n/i18n-page.html 195 @@ -8546,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 @@ -8554,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 @@ -8562,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 @@ -8674,7 +8694,7 @@ Registration Date - Registration Date + Fecha de registro apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 26 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 5bb9d6489..0da1c3f6a 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 @@ -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 ? @@ -110,7 +102,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -154,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 @@ -166,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 @@ -182,7 +174,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -210,7 +202,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 +222,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -258,11 +250,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 +266,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 +298,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 +334,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 +526,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -554,7 +546,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -710,7 +702,7 @@ Voulez-vous vraiment supprimer ce code promotionnel ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -718,7 +710,7 @@ Voulez-vous vraiment vider le cache ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -726,7 +718,7 @@ Veuillez définir votre message système : apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -850,7 +842,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -902,11 +894,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 +926,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 +1002,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1098,7 +1090,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 @@ -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 - 193 + 259 @@ -1206,7 +1198,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1290,7 +1282,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1310,7 +1302,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1318,11 +1310,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 +1322,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 +1334,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -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 @@ -1534,7 +1534,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -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 @@ -2386,7 +2386,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -2414,7 +2414,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -2442,7 +2442,7 @@ Mensuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2450,7 +2450,7 @@ Haut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -2458,7 +2458,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -2466,7 +2466,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -2474,7 +2474,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -2482,7 +2482,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -2574,7 +2574,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -2586,7 +2586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -2814,7 +2814,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -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 @@ -3274,7 +3274,7 @@ Annuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3345,6 +3345,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satellite @@ -3358,7 +3366,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 +3374,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 +3382,7 @@ Avant-première de fonctionnalités futures apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3398,7 +3406,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3430,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3446,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3494,7 +3502,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3578,7 +3586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3594,7 +3602,7 @@ Paiement unique, sans auto-renouvellement. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3602,11 +3610,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 @@ -3614,7 +3622,7 @@ C’est gratuit. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3646,7 +3654,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3690,7 +3698,7 @@ Support par E-mail et Tchat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3734,7 +3742,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3758,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3822,7 +3830,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3866,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 +3874,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4002,7 +4010,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4010,7 +4018,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4054,7 +4062,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4202,7 @@ Logiciel Open Source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4457,20 +4465,12 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 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 @@ -5364,7 +5364,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5548,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -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 @@ -5852,15 +5852,15 @@ 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 - 88 + 89 @@ -5868,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5884,7 +5884,7 @@ Performance des Actifs en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5892,7 +5892,7 @@ Performance des Actifs apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5900,7 +5900,7 @@ Performance des devises en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5908,7 +5908,7 @@ Performance des devises apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6845,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6957,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 @@ -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,15 @@ Veuillez saisir votre clé API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7367,7 +7379,7 @@ Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,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 +7451,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Arménie @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ avec accès API pour apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Le compte utilisateur de démonstration a été synchronisé. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..746e1fbd1 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 @@ -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? @@ -147,7 +139,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 +151,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 +167,7 @@ Totale libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -203,11 +195,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 +211,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 +243,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 +279,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 +483,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -519,7 +511,7 @@ Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -527,7 +519,7 @@ Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -535,7 +527,7 @@ Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -639,7 +631,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -715,7 +707,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -727,7 +719,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -775,7 +767,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -815,7 +807,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 @@ -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 - 193 + 259 @@ -923,7 +915,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1031,11 +1023,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 +1043,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1063,7 +1055,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1071,11 +1063,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 +1075,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 +1087,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -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 @@ -1239,7 +1239,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -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 @@ -1839,7 +1839,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -1847,7 +1847,7 @@ In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -1855,7 +1855,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -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 @@ -2323,7 +2323,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2555,7 +2555,7 @@ Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -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 @@ -2739,7 +2739,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -3115,7 +3115,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3143,7 +3143,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3155,7 +3155,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -3275,7 +3275,7 @@ Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3346,6 +3346,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satellite @@ -3359,7 +3367,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 +3375,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 +3383,7 @@ Un’anteprima delle funzionalità in arrivo apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3399,7 +3407,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3415,7 +3423,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3431,7 +3439,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3447,7 +3455,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3495,7 +3503,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3579,7 +3587,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3595,7 +3603,7 @@ Pagamento una tantum, senza rinnovo automatico. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3603,11 +3611,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 @@ -3615,7 +3623,7 @@ È gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3647,7 +3655,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3691,7 +3699,7 @@ Supporto via email e chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3735,7 +3743,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3759,7 +3767,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3823,7 +3831,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3859,7 +3867,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 +3875,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4003,7 +4011,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4011,7 +4019,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4055,7 +4063,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4195,7 +4203,7 @@ Software open source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4458,20 +4466,12 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 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 @@ -5365,7 +5365,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5549,7 +5549,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -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 @@ -5853,15 +5853,15 @@ 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 - 88 + 89 @@ -5869,7 +5869,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5885,7 +5885,7 @@ Rendimento assoluto dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5893,7 +5893,7 @@ Rendimento dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5901,7 +5901,7 @@ Rendimento assoluto della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5909,7 +5909,7 @@ Rendimento della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6846,7 +6850,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6958,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 @@ -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,15 @@ Inserisci la tua API key di Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7368,7 +7380,7 @@ L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7384,7 +7396,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7404,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7444,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7452,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7448,7 +7460,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7464,7 +7476,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 +7496,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7519,6 +7531,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenia @@ -7588,7 +7608,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 +7620,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 +7628,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7693,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 +7701,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 @@ -7697,7 +7717,7 @@ con accesso API per apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7777,7 +7797,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7838,7 @@ L’account utente demo è stato sincronizzato. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7996,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8008,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8032,7 +8052,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..67443706b 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 @@ -244,7 +244,7 @@ 부탁드립니다 apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -291,20 +291,12 @@ 87 - - plus - 추가로 - - apps/client/src/app/pages/pricing/pricing-page.html - 202 - - Do you really want to revoke this granted access? 이 부여된 접근 권한을 정말로 회수하시겠습니까? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -320,7 +312,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -336,7 +328,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -368,7 +360,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 +392,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 +404,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 +420,7 @@ 합계 libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -436,11 +428,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 +448,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 +480,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 +496,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 +528,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 +544,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 +564,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 +600,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -624,7 +616,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,27 +752,19 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html 96 - - Everything in - 다음 통화 기준으로 모두 표시 - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -788,7 +772,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -804,7 +788,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -816,7 +800,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 +808,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -896,7 +880,7 @@ 이런! 과거 데이터를 파싱할 수 없습니다. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -936,7 +920,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 +932,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 +952,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 +972,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 +988,7 @@ 심볼 매핑 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -1020,7 +1004,7 @@ 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -1028,7 +1012,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 +1052,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 +1072,7 @@ 이 쿠폰을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1096,7 +1080,7 @@ 이 시스템 메시지를 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1104,7 +1088,7 @@ 정말로 캐시를 플러시하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1112,7 +1096,7 @@ 시스템 메시지를 설정하십시오: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1236,11 +1220,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 +1235,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 +1272,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 199 @@ -1352,7 +1344,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 215 @@ -1415,6 +1407,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 +1452,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 +1464,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 +1528,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1664,7 +1668,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 191 @@ -1712,7 +1716,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 @@ -1756,7 +1760,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1820,7 +1824,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 259 @@ -1832,7 +1836,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1900,7 +1904,7 @@ 비상금 금액을 설정해 주세요. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1936,7 +1940,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1976,7 +1980,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1996,7 +2000,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -2012,7 +2016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2028,7 +2032,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2040,7 +2044,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2056,7 +2060,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2112,7 +2116,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -2124,7 +2128,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2132,11 +2136,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 +2148,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 +2160,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -2168,11 +2180,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 +2216,7 @@ 쿠폰 코드를 입력해주세요. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2212,7 +2224,7 @@ 쿠폰 코드를 사용할 수 없습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2220,7 +2232,7 @@ 쿠폰 코드가 사용되었습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2228,7 +2240,7 @@ 새로고침 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2248,7 +2260,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2272,11 +2284,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 +2296,7 @@ 이 로그인 방법을 정말로 제거하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2292,7 +2304,7 @@ 발표자 보기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2300,7 +2312,7 @@ 절대 성과 및 수량 값과 같은 민감한 정보를 보호합니다. apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2324,11 +2336,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 +2348,7 @@ 날짜 및 숫자 형식 apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2344,7 +2356,7 @@ 테마 apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2352,7 +2364,7 @@ 라이트 apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2360,7 +2372,7 @@ 다크 apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2368,7 +2380,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 +2392,7 @@ 격동의 시대에 방해받지 않는 경험 apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2396,7 +2408,7 @@ 생체인증 apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2404,7 +2416,7 @@ 지문으로 로그인 apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2412,7 +2424,7 @@ 실험적 기능 apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2420,7 +2432,7 @@ 곧 출시될 기능 미리보기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2432,7 +2444,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 +2456,7 @@ 데이터 내보내기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2488,7 +2500,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 +2768,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 +2907,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 +3076,7 @@ 오픈 소스 소프트웨어 apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3064,7 +3088,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3076,7 +3100,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3132,7 +3156,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 @@ -3532,7 +3556,7 @@ 대학 이메일 주소로 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -3628,7 +3652,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 +3684,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4084,7 +4108,7 @@ 학생 할인을 찾고 계십니까? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4112,7 +4136,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4140,7 +4164,7 @@ 월간 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4148,7 +4172,7 @@ 매년 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4156,7 +4180,7 @@ 상위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -4164,7 +4188,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -4172,7 +4196,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -4180,7 +4204,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -4188,7 +4212,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4196,7 +4220,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4204,7 +4228,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -4380,7 +4404,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4396,7 +4420,7 @@ 이메일 및 채팅 지원 apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4412,7 +4436,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4420,7 +4444,19 @@ 일회성 결제, 자동 갱신 없음. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 + + + + 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 @@ -4428,7 +4464,7 @@ 무료입니다. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4785,7 +4821,7 @@ 스위스 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4797,7 +4833,7 @@ 글로벌 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -4849,7 +4885,7 @@ 요청하세요 apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -5017,7 +5053,7 @@ 저희에게 연락주세요 apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5101,11 +5137,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 +5157,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5161,11 +5197,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 +5229,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 @@ -5344,6 +5380,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite 위성 @@ -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 @@ -5825,7 +5869,7 @@ 절대적인 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5841,7 +5885,7 @@ 절대자산성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5857,15 +5901,15 @@ 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 - 88 + 89 @@ -5873,7 +5917,7 @@ 여기 apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5881,7 +5925,7 @@ 자산 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5889,7 +5933,7 @@ 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6842,7 +6890,7 @@ 에서 계좌를 개설할 계획이라면 apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6930,7 +6978,7 @@ 추천 링크를 사용하고 1년 동안 Ghostfolio 프리미엄 멤버십을 얻으려면 apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -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,15 @@ Ghostfolio API 키를 입력하세요. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7348,7 +7404,7 @@ AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7356,7 +7412,7 @@ 링크가 클립보드에 복사되었습니다. apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7364,7 +7420,7 @@ 방법 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7372,7 +7428,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7380,7 +7436,7 @@ 선택자 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7388,7 +7444,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 229 @@ -7396,7 +7452,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 225 @@ -7404,7 +7460,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7412,7 +7468,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 229 @@ -7420,7 +7476,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 225 @@ -7428,7 +7484,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7444,7 +7500,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 +7520,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7499,6 +7555,14 @@ 97 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia 아르메니아 @@ -7568,7 +7632,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 241 @@ -7576,7 +7640,7 @@ 계정, 보유 또는 페이지 찾기... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7584,7 +7648,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 +7717,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 633 @@ -7661,7 +7725,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 641 @@ -7669,7 +7733,7 @@ 적용하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7677,7 +7741,7 @@ 다음에 대한 API 액세스 권한이 있는 apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7733,7 +7797,7 @@ 이 항목을 정말로 삭제하시겠습니까? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7782,7 +7846,7 @@ 데모 사용자 계정이 동기화되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7952,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -7964,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -7988,7 +8052,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..d7d0b71e8 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 @@ -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? @@ -146,7 +138,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 +150,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 +166,7 @@ Totaal libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -202,11 +194,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 +210,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 +242,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 +278,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 +482,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -518,7 +510,7 @@ Wil je deze coupon echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -526,7 +518,7 @@ Wil je echt de cache legen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -534,7 +526,7 @@ Stel je systeemboodschap in: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -638,7 +630,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -714,7 +706,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -726,7 +718,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -774,7 +766,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -814,7 +806,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 @@ -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 - 193 + 259 @@ -922,7 +914,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1030,11 +1022,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 +1042,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1062,7 +1054,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1070,11 +1062,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 +1074,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 +1086,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -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 @@ -1238,7 +1238,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -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 @@ -1838,7 +1838,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -1846,7 +1846,7 @@ Winnaars apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -1854,7 +1854,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -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 @@ -2322,7 +2322,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -2554,7 +2554,7 @@ Maandelijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -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 @@ -2738,7 +2738,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -3114,7 +3114,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3142,7 +3142,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3154,7 +3154,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -3274,7 +3274,7 @@ Jaarlijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3345,6 +3345,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satelliet @@ -3358,7 +3366,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 +3374,7 @@ Afleidingsvrije ervaring voor roerige tijden apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3382,7 @@ Voorproefje van nieuwe functionaliteit apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3398,7 +3406,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3430,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3446,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3494,7 +3502,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3578,7 +3586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3594,7 +3602,7 @@ Eenmalige betaling, geen automatische verlenging. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3602,11 +3610,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 @@ -3614,7 +3622,7 @@ Het is gratis. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3646,7 +3654,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3690,7 +3698,7 @@ Ondersteuning via e-mail en chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3734,7 +3742,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3758,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3822,7 +3830,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3866,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 +3874,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4002,7 +4010,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4010,7 +4018,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4054,7 +4062,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4202,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4457,20 +4465,12 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 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 @@ -5364,7 +5364,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5548,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -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 @@ -5852,15 +5852,15 @@ 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 - 88 + 89 @@ -5868,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5884,7 +5884,7 @@ Absolute Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5892,7 +5892,7 @@ Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5900,7 +5900,7 @@ Absolute Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5908,7 +5908,7 @@ Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6845,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6957,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 @@ -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,15 @@ Voer uw Ghostfolio API-sleutel in. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7367,7 +7379,7 @@ AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,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 +7451,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenië @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ met API toegang tot apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Demo-gebruikersaccount is gesynchroniseerd. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..a94a76d2f 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 @@ -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? @@ -319,7 +311,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -335,7 +327,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -391,7 +383,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 +395,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 +411,7 @@ Suma libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -447,7 +439,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 +471,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 +487,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 +519,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 +555,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -751,27 +743,19 @@ 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 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -779,7 +763,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -795,7 +779,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -815,7 +799,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -871,7 +855,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 +1039,7 @@ Czy naprawdę chcesz usunąć ten kupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1063,7 +1047,7 @@ Czy naprawdę chcesz usunąć tę wiadomość systemową? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1071,7 +1055,7 @@ Czy naprawdę chcesz wyczyścić pamięć podręczną? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1079,7 +1063,7 @@ Proszę ustawić swoją wiadomość systemową: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1223,7 +1207,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 +1215,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1255,7 +1239,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1327,7 +1311,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1395,11 +1379,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 +1419,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 +1495,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1651,7 +1635,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1699,7 +1683,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 @@ -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 - 193 + 259 @@ -1819,7 +1803,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1923,7 +1907,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -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 @@ -2111,7 +2095,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2119,11 +2103,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 +2115,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 +2127,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -2155,11 +2147,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 @@ -2235,7 +2227,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2263,7 +2255,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2271,7 +2263,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 +2271,7 @@ Widok Prezentera apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2287,7 +2279,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 +2307,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2323,7 +2315,7 @@ Format daty i liczb apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2331,7 +2323,7 @@ Wygląd (tryb) apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2339,7 +2331,7 @@ Jasny apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2347,7 +2339,7 @@ Ciemny apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2355,7 +2347,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 +2359,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 +2375,7 @@ Uwierzytelnianie Biometryczne apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2391,7 +2383,7 @@ Logowanie za pomocą linii papilarnych apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2399,7 +2391,7 @@ Funkcje Eksperymentalne apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2407,7 +2399,7 @@ Podgląd nadchodzących funkcjonalności apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2419,7 +2411,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 +2423,7 @@ Eksportuj Dane apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2887,11 +2879,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 +3043,7 @@ Oprogramowanie Open Source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3063,7 +3055,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3075,7 +3067,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3531,7 +3523,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -3659,7 +3651,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4083,7 +4075,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4111,7 +4103,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4139,7 +4131,7 @@ Miesięcznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4147,7 +4139,7 @@ Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4155,7 +4147,7 @@ Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -4163,7 +4155,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -4171,7 +4163,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -4179,7 +4171,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -4187,7 +4179,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4195,7 +4187,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4203,7 +4195,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -4379,7 +4371,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -4395,7 +4387,7 @@ Wsparcie przez E-mail i Czat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -4411,7 +4403,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -4419,7 +4411,7 @@ Płatność jednorazowa, bez automatycznego odnawiania. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -4427,11 +4419,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 @@ -4439,7 +4431,7 @@ Jest bezpłatny. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4784,7 +4776,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 +4788,7 @@ Globalny apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -4848,7 +4840,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -4992,7 +4984,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -5076,11 +5068,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 +5088,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5319,6 +5311,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Satelita @@ -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 @@ -5852,15 +5852,15 @@ 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 - 88 + 89 @@ -5868,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5884,7 +5884,7 @@ Łączny wynik aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5892,7 +5892,7 @@ Wyniki aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5900,7 +5900,7 @@ Łączny wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5908,7 +5908,7 @@ Wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6845,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6957,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 @@ -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,15 @@ Wprowadź swój klucz API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7367,7 +7379,7 @@ Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7451,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenia @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ z dostępem API dla apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Konto użytkownika demonstracyjnego zostało zsynchronizowane. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..2bcd7c401 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 @@ -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? @@ -110,7 +102,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -154,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 @@ -166,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 @@ -182,7 +174,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -210,7 +202,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 +222,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -258,11 +250,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 +266,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 +298,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 +334,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 +526,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -554,7 +546,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -610,7 +602,7 @@ Deseja realmente eliminar este cupão? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -618,7 +610,7 @@ Deseja realmente limpar a cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -626,7 +618,7 @@ Por favor, defina a sua mensagem do sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -718,7 +710,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -770,11 +762,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 +794,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 +870,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -982,7 +974,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 @@ -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 - 193 + 259 @@ -1090,7 +1082,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1174,7 +1166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1274,11 +1266,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 +1286,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1306,7 +1298,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1314,11 +1306,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 +1318,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 +1330,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -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 @@ -1530,7 +1530,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -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 @@ -2358,7 +2358,7 @@ Mensalmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2366,7 +2366,7 @@ Topo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -2374,7 +2374,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -2382,7 +2382,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -2390,7 +2390,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -2510,7 +2510,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -2522,7 +2522,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -2714,7 +2714,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -3178,7 +3178,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3206,7 +3206,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3218,7 +3218,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -3274,7 +3274,7 @@ Anualmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3345,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 @@ -3358,7 +3366,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 +3374,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 +3382,7 @@ Acesso antecipado a funcionalidades futuras apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3398,7 +3406,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -3430,7 +3438,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -3446,7 +3454,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -3494,7 +3502,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -3578,7 +3586,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3594,7 +3602,7 @@ Pagamento único, sem renovação automática. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3602,11 +3610,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 @@ -3614,7 +3622,7 @@ É gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -3646,7 +3654,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -3690,7 +3698,7 @@ Suporte por Email e Chat apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3734,7 +3742,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -3758,7 +3766,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3822,7 +3830,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3866,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 +3874,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4002,7 +4010,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4010,7 +4018,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4054,7 +4062,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4202,7 @@ Software de código aberto apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4457,20 +4465,12 @@ 43 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 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 @@ -5364,7 +5364,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5548,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -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 @@ -5852,15 +5852,15 @@ 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 - 88 + 89 @@ -5868,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5884,7 +5884,7 @@ Desempenho absoluto de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5892,7 +5892,7 @@ Desempenho de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5900,7 +5900,7 @@ Desempenho absoluto da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5908,7 +5908,7 @@ Desempenho da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6845,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6957,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 @@ -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,15 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7367,7 +7379,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7451,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenia @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..421ef3855 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 @@ -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? @@ -291,7 +283,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -307,7 +299,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -351,7 +343,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 +355,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 +371,7 @@ Toplam libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -407,7 +399,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 +431,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 +447,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 +479,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 +515,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -715,27 +707,19 @@ 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 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -743,7 +727,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -751,7 +735,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -771,7 +755,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -971,7 +955,7 @@ Bu kuponu gerçekten silmek istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -979,7 +963,7 @@ Önbelleği temizlemeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -987,7 +971,7 @@ Lütfen sistem mesajınızı belirleyin: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1139,7 +1123,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 +1131,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1171,7 +1155,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1195,7 +1179,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 +1247,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 +1287,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 +1363,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1519,7 +1503,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1567,7 +1551,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 @@ -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 - 193 + 259 @@ -1675,7 +1659,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1779,7 +1763,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -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 @@ -1979,7 +1963,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1987,11 +1971,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 +1983,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 +1995,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -2023,11 +2015,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 +2443,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 +2575,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 +2619,7 @@ Açık Kaynak Yazılım apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -2639,7 +2631,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -2651,7 +2643,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3159,7 +3151,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -3567,7 +3559,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3595,7 +3587,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3623,7 +3615,7 @@ Aylık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -3631,7 +3623,7 @@ Yıllık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3639,7 +3631,7 @@ Üst apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -3647,7 +3639,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -3655,7 +3647,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -3663,7 +3655,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -3671,7 +3663,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -3679,7 +3671,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -3687,7 +3679,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -3863,7 +3855,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -3879,7 +3871,7 @@ E-posta ve Sohbet Desteği apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -3895,7 +3887,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 282 + 279 @@ -3903,7 +3895,7 @@ Tek seferlik ödeme, otomatik yenileme yok. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -3911,11 +3903,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 @@ -3923,7 +3915,7 @@ Ücretsiz. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -4268,7 +4260,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 +4272,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 +4340,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -4388,7 +4380,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 @@ -4420,7 +4412,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -4444,7 +4436,7 @@ Sunum Görünümü apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -4452,7 +4444,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 +4472,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -4488,7 +4480,7 @@ Tarih ve Sayı Formatları apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -4496,7 +4488,7 @@ Görünüm apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -4504,7 +4496,7 @@ Açık apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -4512,7 +4504,7 @@ Koyu apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -4520,7 +4512,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 +4528,7 @@ Biyometrik Kimlik Doğrulama apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4544,7 +4536,7 @@ Parmak iziyle oturum aç apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -4552,7 +4544,7 @@ Deneysel Özellikler apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -4560,7 +4552,7 @@ Gelecek özelliklere göz atın apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -4572,7 +4564,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 +4576,7 @@ Verileri Dışa Aktar apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4688,7 +4680,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -4772,11 +4764,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 +4784,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5015,6 +5007,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Uydu @@ -5080,7 +5080,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5372,7 +5372,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -5548,7 +5548,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -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 @@ -5852,15 +5852,15 @@ 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 - 88 + 89 @@ -5868,7 +5868,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -5884,7 +5884,7 @@ Mutlak Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5892,7 +5892,7 @@ Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -5900,7 +5900,7 @@ Mutlak Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5908,7 +5908,7 @@ Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6845,7 +6849,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6957,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 @@ -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,15 @@ Lütfen Ghostfolio API anahtarınızı girin. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7367,7 +7379,7 @@ Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7451,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Ermenistan @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ API erişimi için apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Demo kullanıcı hesabı senkronize edildi. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..2fc389030 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 @@ -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? Ви дійсно хочете відкликати цей наданий доступ? @@ -403,7 +395,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -419,7 +411,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -483,7 +475,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 +487,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 +503,7 @@ Загалом libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -539,7 +531,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 +563,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 +579,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 +611,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 +647,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 +835,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -851,27 +843,19 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -879,7 +863,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -887,7 +871,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -923,7 +907,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -1011,7 +995,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -1019,7 +1003,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -1155,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 @@ -1239,7 +1223,7 @@ Ви дійсно хочете видалити цей купон? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1247,7 +1231,7 @@ Ви дійсно хочете видалити це системне повідомлення? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1255,7 +1239,7 @@ Ви дійсно хочете очистити кеш? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1263,7 +1247,7 @@ Будь ласка, встановіть ваше системне повідомлення: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1391,7 +1375,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1415,7 +1399,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1507,7 +1491,7 @@ Ви дійсно хочете видалити ключ API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -1515,7 +1499,7 @@ Будь ласка, введіть ваш ключ API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -1551,7 +1535,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1623,7 +1607,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1679,11 +1663,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 +1703,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -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 @@ -1815,7 +1799,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1831,7 +1815,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -1875,7 +1859,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2091,7 +2075,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2139,7 +2123,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 @@ -2215,7 +2199,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 259 @@ -2227,7 +2211,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 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 @@ -2567,7 +2551,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2575,11 +2559,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 +2571,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 +2583,19 @@ 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 + + + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -2611,11 +2603,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 +2659,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 @@ -2807,7 +2799,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2835,7 +2827,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2843,7 +2835,7 @@ Ви дійсно хочете закрити ваш обліковий запис Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -2851,7 +2843,7 @@ Ви дійсно хочете вилучити цей спосіб входу? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2867,7 +2859,7 @@ Упс! Виникла помилка під час налаштування біометричної автентифікації. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -2875,7 +2867,7 @@ Режим доповідача apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2883,7 +2875,7 @@ Захист конфіденційної інформації, такої як абсолютні показники та кількісні значення apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2919,7 +2911,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2927,7 +2919,7 @@ Формат дати та чисел apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2935,7 +2927,7 @@ Зовнішній вигляд apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2943,7 +2935,7 @@ Світлий apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2951,7 +2943,7 @@ Темний apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2959,7 +2951,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 +2963,7 @@ Досвід без відволікань для неспокійних часів apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2987,7 +2979,7 @@ Біометрична аутентифікація apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2995,7 +2987,7 @@ Увійти з відбитком пальця apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -3003,7 +2995,7 @@ Експериментальні функції apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -3011,7 +3003,7 @@ Попередній перегляд майбутніх функцій apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3019,7 +3011,7 @@ Експортувати дані apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -3027,7 +3019,7 @@ Зона небезпеки apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -3035,7 +3027,7 @@ Закрити обліковий запис apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -3507,11 +3499,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 +3688,7 @@ Програмне забезпечення з відкритим кодом apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3708,7 +3700,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3720,7 +3712,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -4192,7 +4184,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -4320,7 +4312,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4788,7 +4780,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4816,7 +4808,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4836,15 +4828,15 @@ 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 - 88 + 89 @@ -4852,7 +4844,7 @@ here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 @@ -4860,7 +4852,7 @@ Щомісячно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4868,7 +4860,7 @@ Щорічно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4884,7 +4876,7 @@ Абсолютна прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -4892,7 +4884,7 @@ Прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 @@ -4900,7 +4892,7 @@ Абсолютна прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -4908,7 +4900,7 @@ Прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -4916,7 +4908,7 @@ Топ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -4924,7 +4916,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -4932,7 +4924,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -4940,7 +4932,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -4948,7 +4940,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4956,7 +4948,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4964,7 +4956,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -5180,7 +5172,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 255 + 252 @@ -5196,7 +5188,7 @@ Підтримка електронної пошти та чату apps/client/src/app/pages/pricing/pricing-page.html - 251 + 248 @@ -5204,7 +5196,7 @@ Разова оплата, без автоматичного поновлення. apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 @@ -5212,11 +5204,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 @@ -5224,7 +5216,7 @@ Це безкоштовно. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -5431,7 +5423,7 @@ Швейцарія apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5443,7 +5435,7 @@ Глобальний apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5455,7 +5447,7 @@ Альтернатива apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -5463,7 +5455,7 @@ Додаток apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -5471,7 +5463,7 @@ Бюджетування apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -5487,47 +5479,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 +5531,7 @@ Сімейний офіс apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -5543,7 +5539,7 @@ Інвестор apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -5555,7 +5551,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -5567,7 +5563,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -5575,7 +5571,7 @@ Конфіденційність apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -5583,7 +5579,7 @@ Програмне забезпечення apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -5591,7 +5587,7 @@ Інструмент apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -5599,7 +5595,7 @@ Користувацький досвід apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -5607,7 +5603,7 @@ Багатство apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -5615,7 +5611,7 @@ Управління багатством apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -5835,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 @@ -6023,7 +6019,7 @@ Request it apps/client/src/app/pages/pricing/pricing-page.html - 347 + 344 @@ -6155,7 +6151,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -6163,11 +6159,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 +6171,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -6183,11 +6179,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 +6191,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -6203,7 +6199,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 +6211,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6223,11 +6219,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 @@ -6311,7 +6307,7 @@ contact us apps/client/src/app/pages/pricing/pricing-page.html - 339 + 336 @@ -6419,7 +6415,7 @@ Упс! Не вдалося отримати історичні дані. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -6427,11 +6423,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 +6443,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -6778,6 +6774,14 @@ 28 + + Everything in Basic, plus + Everything in Basic, plus + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + Satellite Супутник @@ -6843,7 +6847,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -7370,12 +7374,20 @@ 174 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 + + AI prompt has been copied to the clipboard Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7383,7 +7395,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7403,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7443,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7451,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7447,7 +7459,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7463,7 +7475,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 +7495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7518,6 +7530,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia Armenia @@ -7587,7 +7607,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 +7619,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 +7627,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7692,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 +7700,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 @@ -7696,7 +7716,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7776,7 +7796,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7837,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7995,7 +8015,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8007,7 +8027,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8031,7 +8051,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..a6907698d 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 @@ -228,7 +228,7 @@ please apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -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? @@ -297,7 +290,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -312,7 +305,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -373,7 +366,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 +378,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 +393,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -427,7 +420,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 +451,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 +467,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 +498,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 +533,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -711,32 +704,25 @@ 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 96 - - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - 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 +736,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -769,7 +755,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -833,7 +819,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 +995,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 +1144,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 +1172,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1250,7 +1236,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1311,11 +1297,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 +1334,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 +1405,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1544,7 +1530,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1588,7 +1574,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 @@ -1631,7 +1617,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1689,7 +1675,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 259 @@ -1700,7 +1686,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1793,7 +1779,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1829,7 +1815,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1848,7 +1834,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -1863,7 +1849,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -1878,7 +1864,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -1889,7 +1875,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -1904,7 +1890,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -1957,7 +1943,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -1968,51 +1954,58 @@ 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 + + + + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 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 @@ -2080,7 +2073,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2105,28 +2098,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 +2144,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 +2190,7 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2211,28 +2204,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 +2236,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 +2247,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2683,11 +2676,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 +2823,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -2841,7 +2834,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -2853,7 +2846,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3097,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 @@ -3262,7 +3262,7 @@ with your university e-mail address apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -3380,7 +3380,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -3759,7 +3759,7 @@ Looking for a student discount? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -3786,7 +3786,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3811,63 +3811,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 + 305 Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 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,32 +4056,32 @@ 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 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 It’s free. apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -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 @@ -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 @@ -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 @@ -5341,7 +5341,7 @@ Absolute Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5355,7 +5355,7 @@ Absolute Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5370,79 +5370,79 @@ 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 - 88 + 89 here apps/client/src/app/pages/pricing/pricing-page.html - 350 + 347 Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 190 Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 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 @@ -6256,7 +6260,7 @@ If you plan to open an account at apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6334,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 @@ -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,14 +6709,21 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -6747,14 +6758,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,21 +6779,21 @@ 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 Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -6796,7 +6807,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 +6826,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6847,6 +6858,13 @@ 97 + + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia @@ -6907,21 +6925,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 +7001,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 @@ -7004,7 +7022,7 @@ with API access for apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7054,7 +7072,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7098,7 +7116,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7250,7 +7268,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -7261,7 +7279,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -7282,7 +7300,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..7ec9d85a0 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 @@ -244,7 +244,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 336 + 333 @@ -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? 您真的要撤销此访问权限吗? @@ -320,7 +312,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -336,7 +328,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -400,7 +392,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 +404,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 +420,7 @@ 总计 libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -456,7 +448,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 +480,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 +496,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 +528,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 +564,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -760,27 +752,19 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html 96 - - Everything in - Everything in - - apps/client/src/app/pages/pricing/pricing-page.html - 199 - - ETFs without Countries 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -788,7 +772,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -804,7 +788,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -824,7 +808,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -880,7 +864,7 @@ 哎呀!无法解析历史数据。 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1064,7 +1048,7 @@ 您确实要删除此优惠券吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1072,7 +1056,7 @@ 您真的要删除这条系统消息吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1080,7 +1064,7 @@ 您真的要刷新缓存吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1088,7 +1072,7 @@ 请设置您的系统消息: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1229,10 +1213,10 @@ 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 - 579 + 578 @@ -1240,12 +1224,12 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 By - By + 预计到 apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -1264,7 +1248,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1336,7 +1320,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -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,14 +1385,14 @@ Could not validate form - 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 +1428,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 +1504,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1660,7 +1644,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1708,7 +1692,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 @@ -1752,7 +1736,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 329 + 326 apps/client/src/app/pages/register/register-page.html @@ -1816,7 +1800,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 259 @@ -1828,7 +1812,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 278 @@ -1932,7 +1916,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1972,7 +1956,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 207 + 204 @@ -1992,7 +1976,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 211 + 208 @@ -2008,7 +1992,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 215 + 212 @@ -2024,7 +2008,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 219 + 216 @@ -2036,7 +2020,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 223 + 220 @@ -2052,7 +2036,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 246 + 243 @@ -2108,7 +2092,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 284 + 281 @@ -2120,7 +2104,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2128,11 +2112,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 +2124,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 +2136,19 @@ 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 + + + + Performance with currency effect + 含货币影响的表现 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 135 @@ -2164,11 +2156,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 @@ -2244,7 +2236,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 268 + 265 @@ -2272,7 +2264,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2280,7 +2272,7 @@ 您确实要删除此登录方法吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2288,7 +2280,7 @@ 演示者视图 apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2296,7 +2288,7 @@ 保护绝对业绩、金额等敏感信息 apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2324,7 +2316,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2332,7 +2324,7 @@ 日期和数字格式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2340,7 +2332,7 @@ 外观 apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2348,7 +2340,7 @@ 明亮 apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2356,7 +2348,7 @@ 黑暗 apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2364,7 +2356,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,12 +2368,12 @@ 动荡时期的无干扰体验 apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 this is projected to increase to - this is projected to increase to + 预计将增至 apps/client/src/app/pages/portfolio/fire/fire-page.html 147 @@ -2392,7 +2384,7 @@ 生物识别认证 apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2400,7 +2392,7 @@ 使用指纹登录 apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2408,7 +2400,7 @@ 实验性功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2416,7 +2408,7 @@ 预览即将推出的功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2428,7 +2420,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 +2432,7 @@ 导出数据 apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2893,14 +2885,14 @@ 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 - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3060,7 +3052,7 @@ 开源软件 apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3072,7 +3064,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3084,7 +3076,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 363 + 360 apps/client/src/app/pages/public/public-page.html @@ -3351,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 或加密货币 @@ -3540,7 +3540,7 @@ 使用您的学校电子邮件地址 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 348 @@ -3668,7 +3668,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4092,7 +4092,7 @@ 寻找学生折扣? apps/client/src/app/pages/pricing/pricing-page.html - 345 + 342 @@ -4120,7 +4120,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4129,7 +4129,7 @@ annual interest rate - annual interest rate + 年利率 apps/client/src/app/pages/portfolio/fire/fire-page.html 185 @@ -4148,7 +4148,7 @@ 每月 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4156,7 +4156,7 @@ 每年 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4164,7 +4164,7 @@ 顶部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 305 @@ -4172,7 +4172,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 354 @@ -4180,7 +4180,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 407 @@ -4188,7 +4188,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 434 @@ -4196,7 +4196,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 455 @@ -4204,7 +4204,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 464 @@ -4212,7 +4212,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 491 @@ -4361,7 +4361,7 @@ Free - 自由的 + 免费 apps/client/src/app/pages/pricing/pricing-page.html 86 @@ -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,19 +4428,19 @@ 一次性付款,无自动续订。 apps/client/src/app/pages/pricing/pricing-page.html - 288 + 285 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 - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4448,7 +4448,7 @@ 免费。 apps/client/src/app/pages/pricing/pricing-page.html - 365 + 362 @@ -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 @@ -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 @@ -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 @@ -5442,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 @@ -5554,7 +5554,7 @@ Authentication - Authentication + 认证 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 35 @@ -5765,7 +5765,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5845,7 +5845,7 @@ 绝对货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 211 @@ -5861,7 +5861,7 @@ 绝对资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 168 @@ -5877,15 +5877,15 @@ 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 - 88 + 89 @@ -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 - 124 + 190 @@ -5909,7 +5909,7 @@ 货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 236 @@ -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 @@ -6687,7 +6691,7 @@ , based on your total assets of - 基于您总资产的 + 基于您总资产的 apps/client/src/app/pages/portfolio/fire/fire-page.html 96 @@ -6846,7 +6850,7 @@ 如果您计划开通账户在 apps/client/src/app/pages/pricing/pricing-page.html - 315 + 312 @@ -6947,7 +6951,7 @@ , assuming a - , assuming a + , 假设一个 apps/client/src/app/pages/portfolio/fire/fire-page.html 174 @@ -6958,7 +6962,7 @@ 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 apps/client/src/app/pages/pricing/pricing-page.html - 343 + 340 @@ -7192,7 +7196,7 @@ 您确定要删除此 API 密钥吗? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,15 @@ 请输入您的 Ghostfolio API 密钥。 apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 + + + + Change with currency effect + 含货币影响的涨跌 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 116 @@ -7368,7 +7380,7 @@ AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7384,7 +7396,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7404,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7444,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7452,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7448,7 +7460,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7464,7 +7476,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 +7496,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7519,6 +7531,14 @@ 67 + + Total amount + 总金额 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 95 + + Armenia 亚美尼亚 @@ -7588,7 +7608,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 +7620,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7628,7 @@ 查找账户、持仓或页面... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7693,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7701,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7697,7 +7717,7 @@ 包含 API 访问权限,适用于 apps/client/src/app/pages/pricing/pricing-page.html - 238 + 235 @@ -7777,7 +7797,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7838,7 @@ 演示用户账户已同步。 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7996,7 +8016,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 297 + 294 @@ -8008,7 +8028,7 @@ apps/client/src/app/pages/pricing/pricing-page.html - 300 + 297 @@ -8032,7 +8052,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 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/calculation-helper.ts b/libs/common/src/lib/calculation-helper.ts index d67384a30..76b38f9b2 100644 --- a/libs/common/src/lib/calculation-helper.ts +++ b/libs/common/src/lib/calculation-helper.ts @@ -9,7 +9,7 @@ import { subDays, subYears } from 'date-fns'; -import { isNumber } from 'lodash'; +import { isFinite, isNumber } from 'lodash'; import { resetHours } from './helper'; import { DateRange } from './types'; @@ -28,7 +28,7 @@ export function getAnnualizedPerformancePercent({ exponent ); - if (!isNaN(growthFactor)) { + if (isFinite(growthFactor)) { return new Big(growthFactor).minus(1); } } diff --git a/libs/common/src/lib/chart-helper.ts b/libs/common/src/lib/chart-helper.ts index 697f39467..1f385e901 100644 --- a/libs/common/src/lib/chart-helper.ts +++ b/libs/common/src/lib/chart-helper.ts @@ -1,4 +1,13 @@ -import { Chart, TooltipPosition } from 'chart.js'; +import type { ElementRef } from '@angular/core'; +import type { + Chart, + ChartType, + ControllerDatasetOptions, + Plugin, + Point, + TooltipOptions, + TooltipPosition +} from 'chart.js'; import { format } from 'date-fns'; import { @@ -15,7 +24,7 @@ export function formatGroupedDate({ date, groupBy }: { - date: Date; + date: number; groupBy: GroupBy; }) { if (groupBy === 'month') { @@ -27,47 +36,55 @@ export function formatGroupedDate({ return format(date, DATE_FORMAT); } -export function getTooltipOptions({ +export function getTooltipOptions({ colorScheme, currency = '', groupBy, locale = getLocale(), unit = '' }: { - colorScheme?: ColorScheme; + colorScheme: ColorScheme; currency?: string; 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; @@ -92,16 +109,17 @@ export function getTooltipPositionerMapTop( if (!position || !chart?.chartArea) { return false; } + return { x: position.x, y: chart.chartArea.top }; } -export function getVerticalHoverLinePlugin( - chartCanvas, - colorScheme?: ColorScheme -) { +export function getVerticalHoverLinePlugin( + chartCanvas: ElementRef, + colorScheme: ColorScheme +): Plugin { return { afterDatasetsDraw: (chart, _, options) => { const active = chart.getActiveElements(); @@ -110,8 +128,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 } @@ -119,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/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/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/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index cb4c0e1b7..4db1fcf2d 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, ''); @@ -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,9 +271,9 @@ 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'; - }).value; + return formatObject.find(({ type }) => { + return type === 'decimal'; + })?.value; } export function getNumberFormatGroup(aLocale = getLocale()) { @@ -281,9 +281,9 @@ export function getNumberFormatGroup(aLocale = getLocale()) { useGrouping: true }).formatToParts(9999.99); - return formatObject.find((object) => { - return object.type === 'group'; - }).value; + return formatObject.find(({ type }) => { + return type === 'group'; + })?.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/activities.interface.ts b/libs/common/src/lib/interfaces/activities.interface.ts index 8c88cc2cf..b9e64984b 100644 --- a/libs/common/src/lib/interfaces/activities.interface.ts +++ b/libs/common/src/lib/interfaces/activities.interface.ts @@ -8,7 +8,7 @@ export interface Activity extends Order { error?: ActivityError; feeInAssetProfileCurrency: number; feeInBaseCurrency: number; - SymbolProfile?: EnhancedSymbolProfile; + SymbolProfile: EnhancedSymbolProfile; tagIds?: string[]; tags?: Tag[]; unitPriceInAssetProfileCurrency: number; diff --git a/libs/common/src/lib/interfaces/admin-data.interface.ts b/libs/common/src/lib/interfaces/admin-data.interface.ts index 23821a86b..dd25b516d 100644 --- a/libs/common/src/lib/interfaces/admin-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-data.interface.ts @@ -1,12 +1,12 @@ 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[] }; - transactionCount: number; userCount: number; version: string; } 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/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; } diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts index e277ba468..620cc00e9 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,6 @@ export interface PortfolioPosition { sectors: Sector[]; symbol: string; tags?: Tag[]; - transactionCount: number; type?: string; url?: string; valueInBaseCurrency?: number; 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; -} 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..90f1303e0 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,9 @@ import { AccountWithValue } from '@ghostfolio/common/types'; export interface AccountsResponse { accounts: AccountWithValue[]; + activitiesCount: number; totalBalanceInBaseCurrency: number; totalDividendInBaseCurrency: number; totalInterestInBaseCurrency: number; totalValueInBaseCurrency: number; - transactionCount: number; } 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; } 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..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 @@ -1,5 +1,4 @@ import { - Activity, Benchmark, DataProviderInfo, EnhancedSymbolProfile, @@ -9,17 +8,14 @@ import { import { Tag } from '@prisma/client'; export interface PortfolioHoldingResponse { - /** @deprecated */ - activities: Activity[]; - activitiesCount: number; averagePrice: number; dataProviderInfo: DataProviderInfo; + dateOfFirstActivity: string; dividendInBaseCurrency: number; dividendYieldPercent: number; dividendYieldPercentWithCurrencyEffect: number; feeInBaseCurrency: number; - firstBuyDate: string; grossPerformance: number; grossPerformancePercent: number; grossPerformancePercentWithCurrencyEffect: number; 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/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index 8eae56cf7..13f9001d5 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -9,12 +9,15 @@ import { Big } from 'big.js'; import { Transform, Type } from 'class-transformer'; export class TimelinePosition { + activitiesCount: number; + @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) averagePrice: Big; currency: string; dataSource: DataSource; + dateOfFirstActivity: string; @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) @@ -32,8 +35,6 @@ export class TimelinePosition { @Type(() => Big) feeInBaseCurrency: Big; - firstBuyDate: string; - @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) grossPerformance: Big; @@ -92,8 +93,6 @@ export class TimelinePosition { @Type(() => Big) timeWeightedInvestmentWithCurrencyEffect: Big; - transactionCount: number; - @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) valueInBaseCurrency: Big; 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/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts index 08af86454..23cb14749 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,12 @@ import { Account as AccountModel, Platform } from '@prisma/client'; export type AccountWithValue = AccountModel & { + activitiesCount: number; allocationInPercentage: number; balanceInBaseCurrency: number; dividendInBaseCurrency: number; interestInBaseCurrency: number; platform?: Platform; - transactionCount: number; value: number; valueInBaseCurrency: number; }; 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 } } 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 f76a5d676..15f5bb21f 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1,4 +1,4 @@ -@if (showActions) { +@if (showActions()) {
    -@if (isLoading) { +@if (isLoading()) { (); - @Output() accountToUpdate = new EventEmitter(); - @Output() transferBalance = new EventEmitter(); - - @ViewChild(MatSort) sort: MatSort; - - public dataSource = new MatTableDataSource(); - public displayedColumns = []; - public isLoading = true; - public routeQueryParams: Subscription; - - private unsubscribeSubject = new Subject(); - - public constructor( - private notificationService: NotificationService, - private router: Router - ) { - addIcons({ - arrowRedoOutline, - createOutline, - documentTextOutline, - ellipsisHorizontal, - eyeOffOutline, - trashOutline, - walletOutline - }); - } - - public ngOnChanges() { - this.displayedColumns = ['status', 'account', 'platform']; - - if (this.showTransactions) { - this.displayedColumns.push('transactions'); +export class GfAccountsTableComponent { + public readonly accounts = input.required(); + public readonly activitiesCount = input(); + public readonly baseCurrency = input(); + public readonly hasPermissionToOpenDetails = input(true); + public readonly locale = input(getLocale()); + public readonly showActions = input(); + public readonly showActivitiesCount = input(true); + public readonly showAllocationInPercentage = input(); + public readonly showBalance = input(true); + public readonly showFooter = input(true); + public readonly showValue = input(true); + public readonly showValueInBaseCurrency = input(false); + public readonly totalBalanceInBaseCurrency = input(); + public readonly totalValueInBaseCurrency = input(); + + public readonly accountDeleted = output(); + public readonly accountToUpdate = output(); + public readonly transferBalance = output(); + + public readonly sort = viewChild.required(MatSort); + + protected readonly dataSource = new MatTableDataSource([]); + + protected readonly displayedColumns = computed(() => { + const columns = ['status', 'account', 'platform']; + + if (this.showActivitiesCount()) { + columns.push('activitiesCount'); } - if (this.showBalance) { - this.displayedColumns.push('balance'); + if (this.showBalance()) { + columns.push('balance'); } - if (this.showValue) { - this.displayedColumns.push('value'); + if (this.showValue()) { + columns.push('value'); } - this.displayedColumns.push('currency'); + columns.push('currency'); - if (this.showValueInBaseCurrency) { - this.displayedColumns.push('valueInBaseCurrency'); + if (this.showValueInBaseCurrency()) { + columns.push('valueInBaseCurrency'); } - if (this.showAllocationInPercentage) { - this.displayedColumns.push('allocation'); + if (this.showAllocationInPercentage()) { + columns.push('allocation'); } - this.displayedColumns.push('comment'); + columns.push('comment'); - if (this.showActions) { - this.displayedColumns.push('actions'); + if (this.showActions()) { + columns.push('actions'); } - this.isLoading = true; + return columns; + }); + + protected readonly isLoading = computed(() => !this.accounts()); + + private readonly notificationService = inject(NotificationService); + private readonly router = inject(Router); + + public constructor() { + addIcons({ + arrowRedoOutline, + createOutline, + documentTextOutline, + ellipsisHorizontal, + eyeOffOutline, + trashOutline, + walletOutline + }); - this.dataSource = new MatTableDataSource(this.accounts); this.dataSource.sortingDataAccessor = getLowercase; - this.dataSource.sort = this.sort; + // Reactive data update + effect(() => { + this.dataSource.data = this.accounts(); + }); - if (this.accounts) { - this.isLoading = false; - } + // Reactive view connection + effect(() => { + this.dataSource.sort = this.sort(); + }); } - public onDeleteAccount(aId: string) { + protected onDeleteAccount(aId: string) { this.notificationService.confirm({ confirmFn: () => { this.accountDeleted.emit(aId); @@ -151,30 +149,25 @@ export class GfAccountsTableComponent implements OnChanges, OnDestroy { }); } - public onOpenAccountDetailDialog(accountId: string) { - if (this.hasPermissionToOpenDetails) { + protected onOpenAccountDetailDialog(accountId: string) { + if (this.hasPermissionToOpenDetails()) { this.router.navigate([], { queryParams: { accountId, accountDetailDialog: true } }); } } - public onOpenComment(aComment: string) { + protected onOpenComment(aComment: string) { this.notificationService.alert({ title: aComment }); } - public onTransferBalance() { + protected onTransferBalance() { this.transferBalance.emit(); } - public onUpdateAccount(aAccount: Account) { + protected onUpdateAccount(aAccount: Account) { this.accountToUpdate.emit(aAccount); } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index b8e1882d4..bdb1e6373 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -21,7 +21,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) {