diff --git a/CHANGELOG.md b/CHANGELOG.md index 666d2b1eb..ba01864fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,100 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Migrated from _Material Design_ 2 to _Material Design_ 3 +## 2.195.0 - 2025-08-29 + +### Changed + +- Reused the request timeout in various functions of the data providers +- Refactored the _ZEN_ page to standalone +- Upgraded `chart.js` from version `4.4.9` to `4.5.0` + +### Fixed + +- Handled an exception in the get quotes functionality of the _Financial Modeling Prep_ service + +## 2.194.0 - 2025-08-27 + +### Added + +- Extended the watchlist endpoint by 50-Day and 200-Day trends (experimental) + +### Changed + +- Moved the support to customize rules in the _X-ray_ section from experimental to general availability +- Improved the create or update activity dialog’s asset sub class selector for valuables to update the options dynamically based on the selected asset class +- Improved the error handling in data providers +- Randomized the minutes of the hourly data gathering cron job +- Refactored the dialog footer component to standalone +- Refactored the dialog header component to standalone +- Refactored the landing page to standalone +- Refactored the pricing page to standalone +- Refactored the register page to standalone +- Migrated the login with access token dialog from `ngModel` to form control +- Upgraded `@ionic/angular` from version `8.6.3` to `8.7.3` +- Upgraded `ionicons` from version `8.0.10` to `8.0.13` +- Upgraded `prisma` from version `6.12.0` to `6.14.0` + +## 2.193.0 - 2025-08-22 + +### Added + +- Added a filter by data source for the asset profiles in the admin control panel +- Extended the data providers management of the admin control panel by every data provider in use + +### Changed + +- Improved the error handling in data providers +- Upgraded `yahoo-finance2` from version `3.4.1` to `3.6.4` + +## 2.192.0 - 2025-08-21 + +### Added + +- Included accounts in the search results of the assistant +- Included the data source in the asset profile search results of the assistant +- Added the quantity column to the holdings table of the account detail dialog + +### Changed + +- Migrated the prompt dialog component from `ngModel` to form control +- Refreshed the cryptocurrencies list +- Improved the language localization for German (`de`) + +## 2.191.1 - 2025-08-14 + +### Added + +- Added a new static portfolio analysis rule: _Liquidity_ (Buying Power) +- Added the interest and dividend values to the account detail dialog + +### Changed + +- Moved the chart of the account detail dialog from experimental to general availability +- Improved the dynamic numerical precision for various values in the account detail dialog +- Improved the usability of the _Cancel_ / _Close_ and _Save_ buttons in various dialogs +- Extended the accounts endpoint by allocations +- Extended the accounts endpoint by dividend and interest +- Refactored the portfolio performance component to standalone +- Improved the language localization for German (`de`) +- Improved the language localization for Portuguese (`pt`) +- Improved the language localization for Spanish (`es`) + +## 2.190.0 - 2025-08-09 + +### Changed + +- Extended the import functionality by tags +- Improved the dynamic numerical precision for various values in the holding detail dialog +- Shortened the date in the activities table on mobile +- Introduced the fuzzy search for the accounts endpoint +- Refactored the fuzzy search for the holdings of the assistant +- Eliminated the warnings of the database seeding process +- Improved the language localization for German (`de`) +- Improved the language localization for Polish (`pl`) +- Improved the language localization for Spanish (`es`) +- Removed the unused `codelyzer` dependency + ## 2.189.0 - 2025-08-05 ### Changed diff --git a/README.md b/README.md index 02f17fe49..82d5710d1 100644 --- a/README.md +++ b/README.md @@ -295,7 +295,7 @@ Are you building your own project? Add the `ghostfolio` topic to your _GitHub_ r Ghostfolio is **100% free** and **open source**. We encourage and support an active and healthy community that accepts contributions from the public - including you. -Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. +Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index 51a33fa9e..7b24ccdcb 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -89,6 +89,7 @@ export class AccountController { public async getAllAccounts( @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Query('dataSource') filterByDataSource?: string, + @Query('query') filterBySearchQuery?: string, @Query('symbol') filterBySymbol?: string ): Promise { const impersonationUserId = @@ -96,6 +97,7 @@ export class AccountController { const filters = this.apiService.buildFiltersFromQueryParams({ filterByDataSource, + filterBySearchQuery, filterBySymbol }); diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts index 1c8adbd16..398a89bb9 100644 --- a/apps/api/src/app/account/account.service.ts +++ b/apps/api/src/app/account/account.service.ts @@ -12,7 +12,8 @@ import { AccountBalance, Order, Platform, - Prisma + Prisma, + SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; import { format } from 'date-fns'; @@ -62,7 +63,7 @@ export class AccountService { orderBy?: Prisma.AccountOrderByWithRelationInput; }): Promise< (Account & { - activities?: Order[]; + activities?: (Order & { SymbolProfile?: SymbolProfile })[]; balances?: AccountBalance[]; platform?: Platform; })[] diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 8b2118ab1..27cc088d1 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -66,7 +66,7 @@ export class AdminController { @HasPermission(permissions.accessAdminControl) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getAdminData(): Promise { - return this.adminService.get({ user: this.request.user }); + return this.adminService.get(); } @Get('demo-user/sync') @@ -197,6 +197,7 @@ export class AdminController { @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getMarketData( @Query('assetSubClasses') filterByAssetSubClasses?: string, + @Query('dataSource') filterByDataSource?: string, @Query('presetId') presetId?: MarketDataPreset, @Query('query') filterBySearchQuery?: string, @Query('skip') skip?: number, @@ -206,6 +207,7 @@ export class AdminController { ): Promise { const filters = this.apiService.buildFiltersFromQueryParams({ filterByAssetSubClasses, + filterByDataSource, filterBySearchQuery }); diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 9e645c059..d07e74013 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -29,7 +29,7 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; -import { MarketDataPreset, UserWithSettings } from '@ghostfolio/common/types'; +import { MarketDataPreset } from '@ghostfolio/common/types'; import { BadRequestException, @@ -133,11 +133,8 @@ export class AdminService { } } - public async get({ user }: { user: UserWithSettings }): Promise { - const dataSources = await this.dataProviderService.getDataSources({ - user, - includeGhostfolio: true - }); + public async get(): Promise { + const dataSources = Object.values(DataSource); const [settings, transactionCount, userCount] = await Promise.all([ this.propertyService.get(), @@ -145,24 +142,31 @@ export class AdminService { this.countUsersWithAnalytics() ]); - const dataProviders = await Promise.all( - dataSources.map(async (dataSource) => { - const dataProviderInfo = this.dataProviderService - .getDataProvider(dataSource) - .getDataProviderInfo(); + const dataProviders = ( + await Promise.all( + dataSources.map(async (dataSource) => { + const assetProfileCount = + await this.prismaService.symbolProfile.count({ + where: { + dataSource + } + }); - const assetProfileCount = await this.prismaService.symbolProfile.count({ - where: { - dataSource + if (assetProfileCount > 0 || dataSource === 'GHOSTFOLIO') { + const dataProviderInfo = this.dataProviderService + .getDataProvider(dataSource) + .getDataProviderInfo(); + + return { + ...dataProviderInfo, + assetProfileCount + }; } - }); - return { - ...dataProviderInfo, - assetProfileCount - }; - }) - ); + return null; + }) + ) + ).filter(Boolean); return { dataProviders, @@ -214,12 +218,12 @@ export class AdminService { return type === 'SEARCH_QUERY'; })?.id; - const { ASSET_SUB_CLASS: filtersByAssetSubClass } = groupBy( - filters, - ({ type }) => { - return type; - } - ); + const { + ASSET_SUB_CLASS: filtersByAssetSubClass, + DATA_SOURCE: filtersByDataSource + } = groupBy(filters, ({ type }) => { + return type; + }); const marketDataItems = await this.prismaService.marketData.groupBy({ _count: true, @@ -230,6 +234,10 @@ export class AdminService { where.assetSubClass = AssetSubClass[filtersByAssetSubClass[0].id]; } + if (filtersByDataSource) { + where.dataSource = DataSource[filtersByDataSource[0].id]; + } + if (searchQuery) { where.OR = [ { id: { mode: 'insensitive', startsWith: searchQuery } }, diff --git a/apps/api/src/app/endpoints/tags/create-tag.dto.ts b/apps/api/src/app/endpoints/tags/create-tag.dto.ts index 09c29d25a..b41c37a50 100644 --- a/apps/api/src/app/endpoints/tags/create-tag.dto.ts +++ b/apps/api/src/app/endpoints/tags/create-tag.dto.ts @@ -1,6 +1,10 @@ import { IsOptional, IsString } from 'class-validator'; export class CreateTagDto { + @IsOptional() + @IsString() + id?: string; + @IsString() name: string; diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts index 36a498e1d..666023dbf 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts @@ -116,10 +116,13 @@ export class WatchlistService { return profile.dataSource === dataSource && profile.symbol === symbol; }); - const allTimeHigh = await this.marketDataService.getMax({ - dataSource, - symbol - }); + const [allTimeHigh, trends] = await Promise.all([ + this.marketDataService.getMax({ + dataSource, + symbol + }), + this.benchmarkService.getBenchmarkTrends({ dataSource, symbol }) + ]); const performancePercent = this.benchmarkService.calculateChangeInPercentage( @@ -138,7 +141,9 @@ export class WatchlistService { performancePercent, date: allTimeHigh?.date } - } + }, + trend50d: trends.trend50d, + trend200d: trends.trend200d }; }) ); diff --git a/apps/api/src/app/import/import-data.dto.ts b/apps/api/src/app/import/import-data.dto.ts index 138d16961..330bc52f6 100644 --- a/apps/api/src/app/import/import-data.dto.ts +++ b/apps/api/src/app/import/import-data.dto.ts @@ -3,6 +3,7 @@ import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { Type } from 'class-transformer'; import { IsArray, IsOptional, ValidateNested } from 'class-validator'; +import { CreateTagDto } from '../endpoints/tags/create-tag.dto'; import { CreateAccountWithBalancesDto } from './create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from './create-asset-profile-with-market-data.dto'; @@ -23,4 +24,10 @@ export class ImportDataDto { @Type(() => CreateAssetProfileWithMarketDataDto) @ValidateNested({ each: true }) assetProfiles?: CreateAssetProfileWithMarketDataDto[]; + + @IsArray() + @IsOptional() + @Type(() => CreateTagDto) + @ValidateNested({ each: true }) + tags?: CreateTagDto[]; } diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index 8c06bdc6d..2681444df 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -74,6 +74,7 @@ export class ImportController { accountsWithBalancesDto: importData.accounts ?? [], activitiesDto: importData.activities, assetProfilesWithMarketDataDto: importData.assetProfiles ?? [], + tagsDto: importData.tags ?? [], user: this.request.user }); diff --git a/apps/api/src/app/import/import.module.ts b/apps/api/src/app/import/import.module.ts index fb6c29fc5..88990af2e 100644 --- a/apps/api/src/app/import/import.module.ts +++ b/apps/api/src/app/import/import.module.ts @@ -13,6 +13,7 @@ import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-da import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { DataGatheringModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; +import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; import { Module } from '@nestjs/common'; @@ -35,6 +36,7 @@ import { ImportService } from './import.service'; PrismaModule, RedisCacheModule, SymbolProfileModule, + TagModule, TransformDataSourceInRequestModule, TransformDataSourceInResponseModule ], diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index ef9d25f53..a96200261 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -13,12 +13,14 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { TagService } from '@ghostfolio/api/services/tag/tag.service'; import { DATA_GATHERING_QUEUE_PRIORITY_HIGH } from '@ghostfolio/common/config'; import { getAssetProfileIdentifier, parseDate } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { AccountWithPlatform, OrderWithAccount, @@ -46,7 +48,8 @@ export class ImportService { private readonly orderService: OrderService, private readonly platformService: PlatformService, private readonly portfolioService: PortfolioService, - private readonly symbolProfileService: SymbolProfileService + private readonly symbolProfileService: SymbolProfileService, + private readonly tagService: TagService ) {} public async getDividends({ @@ -154,6 +157,7 @@ export class ImportService { assetProfilesWithMarketDataDto, isDryRun = false, maxActivitiesToImport, + tagsDto, user }: { accountsWithBalancesDto: ImportDataDto['accounts']; @@ -161,10 +165,12 @@ export class ImportService { assetProfilesWithMarketDataDto: ImportDataDto['assetProfiles']; isDryRun?: boolean; maxActivitiesToImport: number; + tagsDto: ImportDataDto['tags']; user: UserWithSettings; }): Promise { const accountIdMapping: { [oldAccountId: string]: string } = {}; const assetProfileSymbolMapping: { [oldSymbol: string]: string } = {}; + const tagIdMapping: { [oldTagId: string]: string } = {}; const userCurrency = user.settings.settings.baseCurrency; if (!isDryRun && accountsWithBalancesDto?.length) { @@ -293,6 +299,50 @@ export class ImportService { } } + if (tagsDto?.length) { + const existingTagsOfUser = await this.tagService.getTagsForUser(user.id); + + const canCreateOwnTag = hasPermission( + user.permissions, + permissions.createOwnTag + ); + + for (const tag of tagsDto) { + const existingTagOfUser = existingTagsOfUser.find(({ id }) => { + return id === tag.id; + }); + + if (!existingTagOfUser || existingTagOfUser.userId !== null) { + if (!canCreateOwnTag) { + throw new Error( + `Insufficient permissions to create custom tag ("${tag.name}")` + ); + } + + if (!isDryRun) { + const existingTag = await this.tagService.getTag({ id: tag.id }); + let oldTagId: string; + + if (existingTag) { + oldTagId = tag.id; + delete tag.id; + } + + const tagObject: Prisma.TagCreateInput = { + ...tag, + user: { connect: { id: user.id } } + }; + + const newTag = await this.tagService.createTag(tagObject); + + if (existingTag && oldTagId) { + tagIdMapping[oldTagId] = newTag.id; + } + } + } + } + } + for (const activity of activitiesDto) { if (!activity.dataSource) { if (['FEE', 'INTEREST', 'LIABILITY'].includes(activity.type)) { @@ -313,6 +363,11 @@ export class ImportService { if (assetProfileSymbolMapping[activity.symbol]) { activity.symbol = assetProfileSymbolMapping[activity.symbol]; } + + // If a new tag is created, then update the tag ID in all activities + activity.tags = (activity.tags ?? []).map((tagId) => { + return tagIdMapping[tagId] ?? tagId; + }); } } @@ -340,6 +395,24 @@ export class ImportService { }); } + const tags = (await this.tagService.getTagsForUser(user.id)).map( + ({ id, name }) => { + return { id, name }; + } + ); + + if (isDryRun) { + tagsDto + .filter(({ id }) => { + return !tags.some(({ id: tagId }) => { + return tagId === id; + }); + }) + .forEach(({ id, name }) => { + tags.push({ id, name }); + }); + } + const activities: Activity[] = []; for (const activity of activitiesExtendedWithErrors) { @@ -351,6 +424,7 @@ export class ImportService { const fee = activity.fee; const quantity = activity.quantity; const SymbolProfile = activity.SymbolProfile; + const tagIds = activity.tagIds ?? []; const type = activity.type; const unitPrice = activity.unitPrice; @@ -388,11 +462,17 @@ export class ImportService { const validatedAccount = accounts.find(({ id }) => { return id === accountId; }); + const validatedTags = tags.filter(({ id: tagId }) => { + return tagIds.some((activityTagId) => { + return activityTagId === tagId; + }); + }); let order: | OrderWithAccount - | (Omit & { - Account?: { id: string; name: string }; + | (Omit & { + account?: { id: string; name: string }; + tags?: { id: string; name: string }[]; }); if (isDryRun) { @@ -404,7 +484,7 @@ export class ImportService { quantity, type, unitPrice, - Account: validatedAccount, + account: validatedAccount, accountId: validatedAccount?.id, accountUserId: undefined, createdAt: new Date(), @@ -436,6 +516,7 @@ export class ImportService { userId: dataSource === 'MANUAL' ? user.id : undefined }, symbolProfileId: undefined, + tags: validatedTags, updatedAt: new Date(), userId: user.id }; @@ -469,6 +550,9 @@ export class ImportService { } } }, + tags: validatedTags.map(({ id }) => { + return { id }; + }), updateAccountBalance: false, user: { connect: { id: user.id } }, userId: user.id @@ -546,6 +630,7 @@ export class ImportService { fee, quantity, symbol, + tags, type, unitPrice }) => { @@ -594,7 +679,8 @@ export class ImportService { isActive: true, sectors: undefined, updatedAt: undefined - } + }, + tagIds: tags }; } ); @@ -626,7 +712,7 @@ export class ImportService { const assetProfiles: { [assetProfileIdentifier: string]: Partial; } = {}; - const dataSources = await this.dataProviderService.getDataSources({ user }); + const dataSources = await this.dataProviderService.getDataSources(); for (const [ index, diff --git a/apps/api/src/app/order/create-order.dto.ts b/apps/api/src/app/order/create-order.dto.ts index c2b10fd81..af87fd93e 100644 --- a/apps/api/src/app/order/create-order.dto.ts +++ b/apps/api/src/app/order/create-order.dto.ts @@ -1,13 +1,7 @@ import { IsCurrencyCode } from '@ghostfolio/api/validators/is-currency-code'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; -import { - AssetClass, - AssetSubClass, - DataSource, - Tag, - Type -} from '@prisma/client'; +import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { IsArray, @@ -70,7 +64,7 @@ export class CreateOrderDto { @IsArray() @IsOptional() - tags?: Tag[]; + tags?: string[]; @IsEnum(Type, { each: true }) type: Type; diff --git a/apps/api/src/app/order/interfaces/activities.interface.ts b/apps/api/src/app/order/interfaces/activities.interface.ts index 99dd87fea..01a5a60f0 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -14,6 +14,7 @@ export interface Activity extends Order { feeInAssetProfileCurrency: number; feeInBaseCurrency: number; SymbolProfile?: EnhancedSymbolProfile; + tagIds?: string[]; tags?: Tag[]; unitPriceInAssetProfileCurrency: number; updateAccountBalance?: boolean; diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index 9bd45050e..ffed8ac2e 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -217,6 +217,9 @@ export class OrderController { } } }, + tags: data.tags?.map((id) => { + return { id }; + }), user: { connect: { id: this.request.user.id } }, userId: this.request.user.id }); @@ -293,6 +296,9 @@ export class OrderController { name: data.symbol } }, + tags: data.tags?.map((id) => { + return { id }; + }), user: { connect: { id: this.request.user.id } } }, where: { diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index e9d72233e..fd50f5e74 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -97,7 +97,7 @@ export class OrderService { assetSubClass?: AssetSubClass; currency?: string; symbol?: string; - tags?: Tag[]; + tags?: { id: string }[]; updateAccountBalance?: boolean; userId: string; } @@ -201,9 +201,7 @@ export class OrderService { account, isDraft, tags: { - connect: tags.map(({ id }) => { - return { id }; - }) + connect: tags } }, include: { SymbolProfile: true } @@ -658,7 +656,7 @@ export class OrderService { assetSubClass?: AssetSubClass; currency?: string; symbol?: string; - tags?: Tag[]; + tags?: { id: string }[]; type?: ActivityType; }; where: Prisma.OrderWhereUniqueInput; @@ -720,9 +718,7 @@ export class OrderService { ...data, isDraft, tags: { - connect: tags.map(({ id }) => { - return { id }; - }) + connect: tags } } }); diff --git a/apps/api/src/app/order/update-order.dto.ts b/apps/api/src/app/order/update-order.dto.ts index eabd1f418..25c92532a 100644 --- a/apps/api/src/app/order/update-order.dto.ts +++ b/apps/api/src/app/order/update-order.dto.ts @@ -1,13 +1,7 @@ import { IsCurrencyCode } from '@ghostfolio/api/validators/is-currency-code'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; -import { - AssetClass, - AssetSubClass, - DataSource, - Tag, - Type -} from '@prisma/client'; +import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { IsArray, @@ -71,7 +65,7 @@ export class UpdateOrderDto { @IsArray() @IsOptional() - tags?: Tag[]; + tags?: string[]; @IsString() type: Type; 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 3594b4427..ad64cb383 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 @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -108,6 +109,9 @@ describe('PortfolioCalculator', () => { name: 'Bitcoin', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: 44558.42 })); 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 d1d9fbd93..d17fd028a 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 @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -108,6 +109,9 @@ describe('PortfolioCalculator', () => { name: 'Bitcoin', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: 44558.42 })); 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 96bbbc757..18455477e 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 @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -111,6 +112,9 @@ describe('PortfolioCalculator', () => { name: 'Novartis AG', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: activity.unitPrice })); 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 c19f6917e..e20400cb7 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 @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -111,6 +112,9 @@ describe('PortfolioCalculator', () => { name: 'Novartis AG', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: activity.unitPrice })); diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index f6cbbf105..748cdceb8 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -413,6 +413,7 @@ export class PortfolioController { filterByAssetClasses, filterByDataSource, filterByHoldingType, + filterBySearchQuery, filterBySymbol, filterByTags }); @@ -421,7 +422,6 @@ export class PortfolioController { dateRange, filters, impersonationId, - query: filterBySearchQuery, userId: this.request.user.id }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index d1b9af892..1d010bcf7 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -15,6 +15,7 @@ import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/model import { EconomicMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/emerging-markets'; import { EmergencyFundSetup } from '@ghostfolio/api/models/rules/emergency-fund/emergency-fund-setup'; import { FeeRatioInitialInvestment } from '@ghostfolio/api/models/rules/fees/fee-ratio-initial-investment'; +import { BuyingPower } from '@ghostfolio/api/models/rules/liquidity/buying-power'; import { RegionalMarketClusterRiskAsiaPacific } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/asia-pacific'; import { RegionalMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/emerging-markets'; import { RegionalMarketClusterRiskEurope } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/europe'; @@ -161,7 +162,7 @@ export class PortfolioService { this.accountService.accounts({ where, include: { - activities: true, + activities: { include: { SymbolProfile: true } }, platform: true }, orderBy: { name: 'asc' } @@ -176,39 +177,74 @@ export class PortfolioService { const userCurrency = this.request.user.settings.settings.baseCurrency; - return accounts.map((account) => { - let transactionCount = 0; + return Promise.all( + accounts.map(async (account) => { + let dividendInBaseCurrency = 0; + let interestInBaseCurrency = 0; + let transactionCount = 0; - for (const { isDraft } of account.activities) { - if (!isDraft) { - transactionCount += 1; + for (const { + currency, + date, + isDraft, + quantity, + SymbolProfile, + type, + unitPrice + } of account.activities) { + switch (type) { + case ActivityType.DIVIDEND: + dividendInBaseCurrency += + await this.exchangeRateDataService.toCurrencyAtDate( + new Big(quantity).mul(unitPrice).toNumber(), + currency ?? SymbolProfile.currency, + userCurrency, + date + ); + break; + case ActivityType.INTEREST: + interestInBaseCurrency += + await this.exchangeRateDataService.toCurrencyAtDate( + unitPrice, + currency ?? SymbolProfile.currency, + userCurrency, + date + ); + break; + } + + if (!isDraft) { + transactionCount += 1; + } } - } - const valueInBaseCurrency = - details.accounts[account.id]?.valueInBaseCurrency ?? 0; + const valueInBaseCurrency = + details.accounts[account.id]?.valueInBaseCurrency ?? 0; - const result = { - ...account, - transactionCount, - valueInBaseCurrency, - allocationInPercentage: null, // TODO - balanceInBaseCurrency: this.exchangeRateDataService.toCurrency( - account.balance, - account.currency, - userCurrency - ), - value: this.exchangeRateDataService.toCurrency( + const result = { + ...account, + dividendInBaseCurrency, + interestInBaseCurrency, + transactionCount, valueInBaseCurrency, - userCurrency, - account.currency - ) - }; + allocationInPercentage: 0, + balanceInBaseCurrency: this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ), + value: this.exchangeRateDataService.toCurrency( + valueInBaseCurrency, + userCurrency, + account.currency + ) + }; - delete result.activities; + delete result.activities; - return result; - }); + return result; + }) + ); } public async getAccountsWithAggregations({ @@ -220,12 +256,30 @@ export class PortfolioService { userId: string; withExcludedAccounts?: boolean; }): Promise { - const accounts = await this.getAccounts({ + let accounts = await this.getAccounts({ filters, userId, withExcludedAccounts }); + + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + + if (searchQuery) { + const fuse = new Fuse(accounts, { + keys: ['name', 'platform.name'], + threshold: 0.3 + }); + + accounts = fuse.search(searchQuery).map(({ item }) => { + return item; + }); + } + let totalBalanceInBaseCurrency = new Big(0); + let totalDividendInBaseCurrency = new Big(0); + let totalInterestInBaseCurrency = new Big(0); let totalValueInBaseCurrency = new Big(0); let transactionCount = 0; @@ -233,16 +287,33 @@ export class PortfolioService { totalBalanceInBaseCurrency = totalBalanceInBaseCurrency.plus( account.balanceInBaseCurrency ); + totalDividendInBaseCurrency = totalDividendInBaseCurrency.plus( + account.dividendInBaseCurrency + ); + totalInterestInBaseCurrency = totalInterestInBaseCurrency.plus( + account.interestInBaseCurrency + ); totalValueInBaseCurrency = totalValueInBaseCurrency.plus( account.valueInBaseCurrency ); transactionCount += account.transactionCount; } + for (const account of accounts) { + account.allocationInPercentage = + totalValueInBaseCurrency.toNumber() > Number.EPSILON + ? Big(account.valueInBaseCurrency) + .div(totalValueInBaseCurrency) + .toNumber() + : 0; + } + return { accounts, transactionCount, totalBalanceInBaseCurrency: totalBalanceInBaseCurrency.toNumber(), + totalDividendInBaseCurrency: totalDividendInBaseCurrency.toNumber(), + totalInterestInBaseCurrency: totalInterestInBaseCurrency.toNumber(), totalValueInBaseCurrency: totalValueInBaseCurrency.toNumber() }; } @@ -276,13 +347,11 @@ export class PortfolioService { dateRange, filters, impersonationId, - query, userId }: { dateRange: DateRange; filters?: Filter[]; impersonationId: string; - query?: string; userId: string; }) { userId = await this.getUserId(impersonationId, userId); @@ -295,13 +364,17 @@ export class PortfolioService { let holdings = Object.values(holdingsMap); - if (query) { + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + + if (searchQuery) { const fuse = new Fuse(holdings, { keys: ['isin', 'name', 'symbol'], threshold: 0.3 }); - holdings = fuse.search(query).map(({ item }) => { + holdings = fuse.search(searchQuery).map(({ item }) => { return item; }); } @@ -1268,6 +1341,17 @@ export class PortfolioService { ], userSettings ), + liquidity: await this.rulesService.evaluate( + [ + new BuyingPower( + this.exchangeRateDataService, + this.i18nService, + summary.cash, + userSettings.language + ) + ], + userSettings + ), regionalMarketClusterRisk: summary.activityCount > 0 ? await this.rulesService.evaluate( diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 405c4c0b0..a84e10c44 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -13,6 +13,7 @@ import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/model import { EconomicMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/emerging-markets'; import { EmergencyFundSetup } from '@ghostfolio/api/models/rules/emergency-fund/emergency-fund-setup'; import { FeeRatioInitialInvestment } from '@ghostfolio/api/models/rules/fees/fee-ratio-initial-investment'; +import { BuyingPower } from '@ghostfolio/api/models/rules/liquidity/buying-power'; import { RegionalMarketClusterRiskAsiaPacific } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/asia-pacific'; import { RegionalMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/emerging-markets'; import { RegionalMarketClusterRiskEurope } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/europe'; @@ -287,6 +288,12 @@ export class UserService { undefined, undefined ).getSettings(user.settings.settings), + BuyingPower: new BuyingPower( + undefined, + undefined, + undefined, + undefined + ).getSettings(user.settings.settings), CurrencyClusterRiskBaseCurrencyCurrentInvestment: new CurrencyClusterRiskBaseCurrencyCurrentInvestment( undefined, diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 7144de8c5..20baa7ddd 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -60,6 +60,7 @@ "1GUY": "1GUY", "1HUB": "1HubAI", "1INCH": "1inch", + "1IQ": "People with 1 IQ", "1IRST": "1irstcoin", "1MCT": "MicroCreditToken", "1MDC": "1MDC", @@ -122,7 +123,6 @@ "4EVER": "4EVERLAND", "4JNET": "4JNET", "4MW": "For Meta World", - "4P": "4P FOUR", "4RZ": "4REALZA COIN", "4THPILLAR": "4th Pillar Four Token", "4TOKEN": "Ignore Fud", @@ -148,6 +148,7 @@ "A1INCH": "1inch (Arbitrum Bridge)", "A2A": "A2A", "A2I": "Arcana AI", + "A2Z": "Arena-Z", "A4": "A4 Finance", "A47": "AGENDA 47", "A4M": "AlienForm", @@ -466,6 +467,7 @@ "AINN": "AINN", "AINTI": "AIntivirus", "AINU": "Ainu Token", + "AIO": "AIO", "AION": "Aion", "AIONE": "AiONE", "AIOS": "INT OS", @@ -668,6 +670,7 @@ "AMERICA": "America", "AMERICAI": "AMERICA AI Agent", "AMERICANCOIN": "AmericanCoin", + "AMETA": "Alpha City", "AMF": "AddMeFast", "AMG": "DeHeroGame Amazing Token", "AMI": "AMMYI Coin", @@ -764,6 +767,7 @@ "ANTMONS": "Antmons", "ANTS": "ANTS Reloaded", "ANTT": "Antara Token", + "ANUBHAV": "Anubhav Trainings", "ANUS": "URANUS", "ANV": "Aniverse", "ANVL": "Anvil", @@ -998,8 +1002,9 @@ "ASMO": "AS Monaco Fan Token", "ASN": "Ascension Coin", "ASNT": "Assent Protocol", - "ASP": "Aspire", + "ASP": "Aspecta", "ASPC": "Astropup Coin", + "ASPIRE": "Aspire", "ASPIRIN": "Aspirin", "ASPO": "ASPO Shards", "ASQT": "ASQ Protocol", @@ -1008,6 +1013,7 @@ "ASS": "Australian Safe Shepherd", "ASSA": "AssaPlay", "ASSARA": "ASSARA", + "ASSDAQ": "ASSDAQ", "ASSET": "iAssets", "ASST": "AssetStream", "AST": "AirSwap", @@ -1093,8 +1099,10 @@ "ATS": "Alltoscan", "ATT": "Attila", "ATTR": "Attrace", + "ATU": "Quantum", "ATX": "ArtexCoin", "AU": "AutoCrypto", + "AU79": "AU79", "AUA": "ArubaCoin", "AUC": "Auctus", "AUCO": "Advanced United Continent", @@ -1271,6 +1279,7 @@ "BABYBOME": "Book of Baby Memes", "BABYBOMEOW": "Baby of BOMEOW", "BABYBONK": "Baby Bonk", + "BABYBOSS": "Baby Boss", "BABYBROC": "Baby Broccoli", "BABYBROCCOL": "Baby Broccoli", "BABYBROCCOLI": "BabyBroccoli", @@ -1361,6 +1370,7 @@ "BABYWLFI": "Baby WLFI", "BABYX": "Baby X", "BAC": "Basis Cash", + "BACHI": "Bachi on Base", "BACK": "DollarBack", "BACOIN": "BACoin", "BACON": "BaconDAO (BACON)", @@ -1397,6 +1407,7 @@ "BALIN": "Balin Bank", "BALKANCOIN": "Balkancoin", "BALL": "BitBall", + "BALLTZE": "BALLTZE", "BALLZ": "Wolf Wif", "BALN": "Balanced", "BALPHA": "bAlpha", @@ -1517,6 +1528,7 @@ "BBG": "BigBang", "BBGC": "BigBang Game", "BBI": "BelugaPay", + "BBITBTC": "BounceBit BTC", "BBK": "BitBlocks", "BBL": "beoble", "BBN": "BBNCOIN", @@ -2145,6 +2157,7 @@ "BNC": "Bifrost Native Coin", "BND": "Bened", "BNF": "BonFi", + "BNFT": "APENFT (BitTorrent Bridge)", "BNIU": "Backed Niu Technologies", "BNIX": "BNIX Token", "BNK": "Bankera", @@ -2191,6 +2204,7 @@ "BOBMARLEY": "Bob Marley Meme", "BOBO": "BOBO", "BOBOT": "Bobo The Bear", + "BOBR": "Based BOBR", "BOBS": "Bob's Repair", "BOBT": "BOB Token", "BOBTHE": "Bob The Builder", @@ -2391,6 +2405,7 @@ "BPUNI": "Binance-Peg Uniswap Protocol Token (Binance Bridge)", "BPUSDC": "Binance-Peg USD Coin (Binance Bridge)", "BPX": "Black Phoenix", + "BPXL": "BombPixel", "BQ": "Bitqy", "BQC": "BQCoin", "BQQQ": "Bitsdaq Token", @@ -2462,6 +2477,7 @@ "BRK": "BreakoutCoin", "BRKBX": "Berkshire Hathaway xStock", "BRKL": "Brokoli Token", + "BRM": "BullRun Meme", "BRMV": "BRMV Token", "BRN": "BRN Metaverse", "BRNK": "Brank", @@ -2549,9 +2565,11 @@ "BSTC": "BST Chain", "BSTK": "BattleStake", "BSTN": "BitStation", + "BSTR": "BSTR", "BSTS": "Magic Beasties", "BSTY": "GlobalBoost", "BSV": "Bitcoin SV", + "BSVBRC": "BSVBRC", "BSW": "Biswap", "BSWAP": "BaseSwap", "BSWT": "BaySwap", @@ -2693,7 +2711,8 @@ "BUCKY": "Bucky", "BUD": "Buddy", "BUDDHA": "Buddha", - "BUDDY": "BUDDY", + "BUDDY": "alright buddy", + "BUDDYONSOL": "BUDDY", "BUDG": "Bulldogswap", "BUENO": "Bueno", "BUF": "Buftoad", @@ -2728,7 +2747,9 @@ "BULLIONFX": "BullionFX", "BULLISH": "bullish", "BULLMOON": "Bull Moon", - "BULLPEPE": "Bullpepe", + "BULLPEPE": "Bull Pepe", + "BULLPEPEIO": "Bullpepe", + "BULLPEPENET": "Bull Pepe", "BULLS": "Bull Coin", "BULLSEYE": "bulls-eye", "BULLSH": "Bullshit Inu", @@ -2832,6 +2853,7 @@ "BZX": "Bitcoin Zero", "BZZ": "Swarmv", "BZZONE": "Bzzone", + "C": "Chainbase Token", "C2": "Coin.2", "C20": "Crypto20", "C25": "C25 Coin", @@ -3390,6 +3412,7 @@ "CLH": "ClearDAO", "CLICK": "Clickcoin", "CLIFF": "Clifford Inu", + "CLIFFORD": "Clifford", "CLIMB": "CLIMB TOKEN FINANCE", "CLIN": "Clinicoin", "CLINK": "cLINK", @@ -3408,6 +3431,7 @@ "CLOA": "Cloak", "CLOAK": "CloakCoin", "CLOKI": "CATLOKI", + "CLOOTS": "CryptoLoots", "CLORE": "Clore.ai", "CLOUD": "Cloud", "CLOUDGPU": "CloudGPU", @@ -3588,6 +3612,7 @@ "CONJ": "Conjee", "CONK": "ShibaPoconk", "CONS": "ConSpiracy Coin", + "CONSCIOUS": "Conscious Token", "CONSENTIUM": "Consentium", "CONTENTBOX": "ContentBox", "CONTROL": "Control Token", @@ -3924,6 +3949,7 @@ "CTN": "Continuum Finance", "CTO": "BaseCTO", "CTOAI": "ClustroAI", + "CTOC": "CTOC", "CTOK": "Codyfight", "CTP": "Ctomorrow Platform", "CTPL": "Cultiplan", @@ -4169,6 +4195,7 @@ "DARKEN": "Dark Energy Crystals", "DARKF": "Dark Frontiers", "DARKMAGACOIN": "DARK MAGA", + "DARKSTAR": "DarkStar", "DARKT": "Dark Trump", "DARKTOKEN": "DarkToken", "DART": "dART Insurance", @@ -4373,6 +4400,7 @@ "DEOD": "Decentrawood", "DEOR": "Decentralized Oracle", "DEP": "DEAPCOIN", + "DEPIN": "DEPIN", "DEPINU": "Depression Inu", "DEPO": "Depo", "DEPTH": "Depth Token", @@ -5368,6 +5396,7 @@ "EMILY": "Emily", "EMIT": "Time Machine NFTs", "EML": "EML Protocol", + "EMMM": "emmm", "EMN.CUR": "Eastman Chemical", "EMOJI": "MOMOJI", "EMON": "Ethermon", @@ -5808,6 +5837,7 @@ "FARTDEV": "Fart Dev", "FARTIMUS": "Fartimus Prime", "FARTING": "Farting Unicorn", + "FARTLESS": "FARTLESS COIN", "FAS": "fast construction coin", "FAST": "Fastswap", "FASTAI": "Fast And Ai", @@ -5875,6 +5905,7 @@ "FEGV1": "FEG Token v1", "FEGV2": "FEG Token", "FEI": "Fei Protocol", + "FELIS": "Felis", "FELIX": "FelixCoin", "FELIX2": "Felix 2.0 ETH", "FEN": "First Ever NFT", @@ -5964,6 +5995,7 @@ "FIO": "FIO Protocol", "FIONA": "Fiona", "FIONABSC": "Fiona", + "FIR": "Fireverse", "FIRA": "Defira", "FIRE": "Matr1x Fire", "FIRECOIN": "FireCoin", @@ -6072,6 +6104,7 @@ "FLOVM": "FLOV MARKET", "FLOW": "Flow", "FLOWER": "FlowerAI", + "FLOWM": "Flowmatic", "FLOWP": "Flow Protocol", "FLOYX": "Floyx", "FLP": "Gameflip", @@ -6099,7 +6132,7 @@ "FLY": "Franklin", "FLYCOIN": "FlyCoin", "FLZ": "Fellaz", - "FM": "Flowmatic", + "FM": "Full Moon", "FMA": "FLAMA", "FMB": "FREEMOON BINANCE", "FMC": "Fimarkcoin", @@ -6272,6 +6305,7 @@ "FROGE": "Froge Finance", "FROGEX": "FrogeX", "FROGGER": "FROGGER", + "FROGGIE": "Froggie", "FROGGY": "Froggy", "FROGLIC": "Pink Hood Froglicker", "FROGO": "Frogo", @@ -6762,6 +6796,7 @@ "GLFT": "Global Fan Token", "GLI": "GLI TOKEN", "GLIDE": "Glide Finance", + "GLIDR": "Glidr", "GLIESE": "GlieseCoin", "GLINK": "Gemlink", "GLINT": "BeamSwap", @@ -6893,6 +6928,7 @@ "GOLDN": "GoLondon", "GOLDPIECES": "GoldPieces", "GOLDS": "Gold Standard", + "GOLDSECURED": "Gold Secured Currency", "GOLDX": "eToro Gold", "GOLDY": "DeFi Land Gold", "GOLF": "GolfCoin", @@ -7046,6 +7082,7 @@ "GROKGIRL": "Grok Girl", "GROKGROW": "GrokGrow", "GROKHEROES": "GROK heroes", + "GROKIM": "Grok Imagine Penguin", "GROKINU": "Grok Inu", "GROKKING": "GrokKing", "GROKKY": "GroKKy", @@ -7096,7 +7133,7 @@ "GSTT": "GSTT", "GSWAP": "Gameswap", "GSWIFT": "GameSwift", - "GSX": "Gold Secured Currency", + "GSX": "Goldman Sachs xStock", "GSY": "GenesysCoin", "GSYS": "Genesys", "GT": "Gatechain Token", @@ -7342,6 +7379,7 @@ "HELI": "Helion", "HELINK": "Chainlink (Huobi Exchange)", "HELIOS": "Mission Helios", + "HELIOSAI": "HeliosAI", "HELL": "HELL COIN", "HELLO": "HELLO", "HELMET": "Helmet Insure", @@ -7672,6 +7710,7 @@ "HUSKY": "Husky", "HUSL": "Hustle Token", "HUSTLE": "Agent Hustle", + "HUSTLEV1": "Tensorium", "HUT": "Hibiki Run", "HVC": "HeavyCoin", "HVCO": "High Voltage Coin", @@ -7713,7 +7752,7 @@ "HYPERC": "HyperChainX", "HYPERCOIN": "HyperCoin", "HYPERD": "HyperDAO", - "HYPERF": "HyperFly", + "HYPERFLY": "HyperFly", "HYPERIONX": "HyperionX", "HYPERS": "HyperSpace", "HYPERSKIDS": "HYPERSKIDS", @@ -7831,6 +7870,7 @@ "IFIT": "CALO INDOOR", "IFLT": "InflationCoin", "IFOR": "iFortune", + "IFR": "Inferium", "IFT": "InvestFeed", "IFUM": "Infleum", "IFUND": "Unifund", @@ -7851,6 +7891,7 @@ "IJC": "IjasCoin", "IJZ": "iinjaz", "IJZV1": "iinjaz v1", + "IKA": "IKA Token", "IKI": "ikipay", "IKIGAI": "Ikigai", "ILA": "Infinite Launch", @@ -7861,6 +7902,7 @@ "ILT": "iOlite", "ILV": "Illuvium", "IMAGE": "Imagen AI", + "IMAGINE": "IMAGINE", "IMARO": "IMARO", "IMAYC": "IMAYC", "IMBREX": "Imbrex", @@ -7895,7 +7937,7 @@ "IMU": "imusify", "IMVR": "ImmVRse", "IMX": "Immutable X", - "IN": "InCoin", + "IN": "INFINIT", "INA": "pepeinatux", "INARI": "Inari", "INB": "Insight Chain", @@ -8012,6 +8054,7 @@ "IOSHIB": "IoTexShiba", "IOST": "IOS token", "IOT": "Helium IOT", + "IOTAI": "IoTAI", "IOTW": "IOTW", "IOTX": "IoTeX Network", "IOU": "IOU1", @@ -8120,6 +8163,7 @@ "IX": "X-Block", "IXC": "IXcoin", "IXIR": "IXIR", + "IXORA": "IXORAPAD", "IXP": "IMPACTXPRIME", "IXS": "IX Swap", "IXT": "iXledger", @@ -8163,6 +8207,7 @@ "JASMY": "JasmyCoin", "JASON": "Jason Derulo", "JAV": "Javsphere", + "JAWN": "Long Jawn Silvers", "JAWS": "AutoShark", "JAY": "Jaypeggers", "JBO": "JBOX", @@ -8186,7 +8231,8 @@ "JEETOLAX": "Jeetolax", "JEETS": "I'm a Jeet", "JEFE": "JEFE TOKEN", - "JEFF": "Jeff in Space", + "JEFF": "JEFF", + "JEFFINSPACE": "Jeff in Space", "JEFFRY": "jeffry", "JEJUDOGE": "Jejudoge", "JELLI": "JELLI", @@ -8265,6 +8311,7 @@ "JOEY": "Joey Inu", "JOGECO": "Jogecodog", "JOHM": "Johm lemmon", + "JOHN": "John Tsubasa Rivals", "JOHNNY": "Johnny The Bull", "JOINCOIN": "JoinCoin", "JOINT": "Joint Ventures", @@ -8428,6 +8475,7 @@ "KAT": "Karat", "KATA": "Katana Inu", "KATANA": "Katana Finance", + "KATANANET": "Katana Network", "KATCHU": "Katchu Coin", "KATT": "Katt Daddy", "KATYCAT": "Katy Perry Fans", @@ -8527,6 +8575,7 @@ "KHAI": "khai", "KHEOWZOO": "khaokheowzoo", "KHM": "Kohima", + "KHYPE": "Kinetiq Staked HYPE", "KI": "Genopets KI", "KIAN": "Porta", "KIBA": "Kiba Inu", @@ -8662,6 +8711,7 @@ "KNUT": "Knut From Zoo", "KNW": "Knowledge", "KOAI": "KOI", + "KOALA": "KOALA", "KOBAN": "KOBAN", "KOBE": "Shabu Shabu", "KOBO": "KoboCoin", @@ -8776,7 +8826,7 @@ "KTT": "K-Tune", "KTX": "KwikTrust", "KUAI": "Kuai Token", - "KUB": "Bitkub Coin", + "KUB": "KUB Coin", "KUBE": "KubeCoin", "KUBO": "KUBO", "KUBOS": "KubosCoin", @@ -8891,6 +8941,7 @@ "LAS": "LNAsolution Coin", "LASOL": "LamaSol", "LAT": "PlatON Network", + "LATINA": "Latina", "LATOKEN": "LATOKEN", "LATOM": "Liquid ATOM", "LATTE": "LatteSwap", @@ -8910,6 +8961,7 @@ "LAY3R": "AutoLayer", "LAYER": "Solayer", "LAZ": "Lazarus", + "LAZHUZHU": "LAZHUZHU", "LAZIO": "Lazio Fan Token", "LAZYCAT": "LAZYCAT", "LB": "LoveBit", @@ -9110,12 +9162,14 @@ "LIO": "Lio", "LION": "Loaded Lions", "LIONT": "Lion Token", + "LIORA": "Liora", "LIPC": "LIpcoin", "LIPS": "LipChain", "LIQ": "LIQ Protocol", - "LIQD": "Liquid Finance", + "LIQD": "LiquidLaunch", "LIQR": "Topshelf Finance", "LIQUI": "Liquidus", + "LIQUID": "Liquid Finance", "LIQUIDIUM": "LIQUIDIUM•TOKEN", "LIR": "Let it Ride", "LIS": "Realis Network", @@ -9134,6 +9188,7 @@ "LITHO": "Lithosphere", "LITION": "Lition", "LITT": "LitLab Games", + "LITTLEGUY": "just a little guy", "LIV": "LiviaCoin", "LIVE": "TRONbetLive", "LIVENCOIN": "LivenPay", @@ -9235,6 +9290,7 @@ "LONGFU": "LONGFU", "LONGM": "Long Mao", "LONGSHINE": "LongShine", + "LOOBY": "Looby by Stephen Bliss", "LOOK": "LookCoin", "LOOKS": "LooksRare", "LOOM": "Loom Network", @@ -9308,6 +9364,7 @@ "LSHARE": "LSHARE", "LSILVER": "Lyfe Silver", "LSK": "Lisk", + "LSKV1": "Lisk v1", "LSP": "Lumenswap", "LSPHERE": "Lunasphere", "LSR": "LaserEyes", @@ -9456,7 +9513,7 @@ "LZ": "LaunchZone", "LZM": "LoungeM", "LZUSDC": "LayerZero Bridged USDC (Fantom)", - "M": "MetaVerse-M", + "M": "MemeCore", "M1": "SupplyShock", "M2O": "M2O Token", "M3M3": "M3M3", @@ -9466,6 +9523,7 @@ "MABA": "Make America Based Again", "MAC": "MachineCoin", "MACHO": "macho", + "MACRO": "Macro Millions", "MADA": "MilkADA", "MADAGASCARTOKEN": "Madagascar Token", "MADANA": "MADANA", @@ -9492,6 +9550,7 @@ "MAGAF": "MAGA FRENS", "MAGAHAT": "MAGA Hat", "MAGAIBA": "Magaiba", + "MAGAL": "Magallaneer", "MAGAN": "Maganomics On Solana", "MAGANOMICS": "Maganomics", "MAGAP": "MAGA PEPE", @@ -9579,6 +9638,7 @@ "MARI": "MarijuanaCoin", "MARIC": "Maricoin", "MARIE": "Marie Rose", + "MARIEROSE": "Marie", "MARIO": "MARIO CEO", "MARK": "Benchmark Protocol", "MARKE": "Market Ledger", @@ -9592,6 +9652,7 @@ "MARSC": "MarsCoin", "MARSCOIN": "MarsCoin", "MARSH": "Unmarshal", + "MARSMI": "MarsMi", "MARSO": "Marso.Tech", "MARSRISE": "MarsRise", "MARSUPILAMI": "MARSUPILAMI INU", @@ -9678,6 +9739,7 @@ "MBET": "MoonBet", "MBF": "MoonBear.Finance", "MBG": "MBG Token", + "MBGA": "MBGA", "MBI": "Monster Byte Inc", "MBID": "myBID", "MBILLY": "MAMA BILLY", @@ -9770,6 +9832,7 @@ "MDX": "Mdex (BSC)", "MDXH": "Mdex (HECO)", "ME": "Magic Eden", + "MEA": "MECCA", "MEAN": "Meanfi", "MEB": "Meblox Protocol", "MEC": "MegaCoin", @@ -9914,6 +9977,7 @@ "METAUFO": "MetaUFO", "METAV": "METAVERSE", "METAVE": "Metaverse Convergence", + "METAVERSEM": "MetaVerse-M", "METAVERSEX": "MetaverseX", "METAVIE": "Metavie", "METAVPAD": "MetaVPad", @@ -10018,6 +10082,7 @@ "MIKS": "MIKS COIN", "MIL": "Milllionaire Coin", "MILA": "MILADY MEME TOKEN", + "MILC": "Micro Licensing Coin", "MILE": "milestoneBased", "MILEI": "MILEI", "MILK": "MilkyWay", @@ -10026,6 +10091,7 @@ "MILKSHAKE": "Milkshake Swap", "MILKYWAY": "MilkyWayZone", "MILLI": "Million", + "MILLIMV1": "Millimeter v1", "MILLY": "milly", "MILO": "Milo Inu", "MILOCEO": "Milo CEO", @@ -10045,6 +10111,7 @@ "MINDC": "MindCoin", "MINDCOIN": "MindCoin", "MINDEX": "Mindexcoin", + "MINDFAK": "Mindfak By Matt Furie", "MINDGENE": "Mind Gene", "MINDS": "Minds", "MINDSYNC": "Mindsync", @@ -10166,6 +10233,7 @@ "MMIT": "MangoMan Intelligent", "MMNXT": "MMNXT", "MMO": "MMOCoin", + "MMON": "Multiverse Monkey", "MMPRO": "Market Making Pro", "MMS": "Marsverse", "MMSC": "MMSC PLATFORM", @@ -10370,6 +10438,7 @@ "MOOO": "Hashtagger", "MOOV": "dotmoovs", "MOOX": "Moox Protocol", + "MOOXV1": "Moox Protocol v1", "MOPS": "Mops", "MOR": "Morpheus", "MORA": "Meliora", @@ -10394,6 +10463,7 @@ "MOTH": "MOTH", "MOTHER": "Mother Iggy", "MOTI": "Motion", + "MOTION": "motion", "MOTO": "Motocoin", "MOUND": "Mound Token", "MOUTAI": "Moutai", @@ -10481,6 +10551,7 @@ "MSHEESHA": "Sheesha Finance Polygon", "MSHIB": "Magic Shiba Starter", "MSHIP": "MetaShipping", + "MSIA": "Messiah", "MSN": "Meson.Network", "MSOL": "Marinade Staked SOL", "MSOT": "BTour Chain", @@ -10701,6 +10772,7 @@ "NANJ": "NANJCOIN", "NANO": "Nano", "NAO": "Nettensor", + "NAORIS": "Naoris Protocol", "NAOS": "NAOS Finance", "NAP": "Napoli Fan Token", "NARCO": "Mr. Narco", @@ -10830,7 +10902,8 @@ "NERD": "Nerd Bot", "NERDS": "NERDS", "NERF": "Neural Radiance Field", - "NERO": "Nero Token", + "NERO": "NERO Chain", + "NEROTOKEN": "Nero Token", "NERVE": "NERVE", "NES": "Nest AI", "NESS": "Ness LAB", @@ -10893,6 +10966,7 @@ "NEXMI": "NexMillionaires", "NEXMS": "NexMillionaires", "NEXO": "NEXO", + "NEXOR": "Nexora", "NEXT": "Connext Network", "NEXTEX": "Next.exchange Token", "NEXTEXV1": "Next.exchange Token v1", @@ -11034,6 +11108,7 @@ "NNT": "Nunu Spirits", "NOA": "NOA PLAY", "NOAH": "NOAHCOIN", + "NOBIKO": "Longcat", "NOBL": "NobleCoin", "NOBODY": "Nobody Sausage", "NOBS": "No BS Crypto", @@ -11421,6 +11496,7 @@ "OMNILAYER": "Omni", "OMNIR": "Omni Real Estate Token", "OMNIX": "OmniBotX", + "OMNIXIO": "OMNIX", "OMNOM": "Doge Eat Doge", "OMNOMN": "Omega Network", "OMT": "Mars Token", @@ -11439,6 +11515,7 @@ "ONET": "ONE Token", "ONEX": "ONE TECH", "ONF": "ONF Token", + "ONFA": "ONFA Hope", "ONGAS": "Ontology Gas", "ONI": "ONINO", "ONIG": "Onigiri", @@ -11485,6 +11562,7 @@ "OPENP": "Open Platform", "OPENRI": "Open Rights Exchange", "OPENSOURCE": "Open Source Network", + "OPENVC": "OpenVoiceCoin", "OPENW": "OpenWorld", "OPENX": "OpenSwap Optimism Token", "OPEPE": "Optimism PEPE", @@ -11640,6 +11718,7 @@ "OWNDATA": "OWNDATA", "OWNLY": "Ownly", "OWO": "SoMon", + "OWOCOIN": "Owo", "OX": "Open Exchange Token", "OXAI": "OxAI.com", "OXB": "Oxbull Tech", @@ -11737,6 +11816,7 @@ "PAR": "Parachute", "PARA": "Paralink Network", "PARAB": "Parabolic", + "PARABO": "PARABOLIC AI", "PARAD": "Paradox", "PARADOX": "The Paradox Metaverse", "PARAG": "Paragon Network", @@ -11864,6 +11944,7 @@ "PEAS": "Peapods Finance", "PEBIRD": "PEPE BIRD", "PEC": "PeaceCoin", + "PECH": "PEPE CASH", "PECL": "PECland", "PED": "PEDRO", "PEDRO": "Pedro The Raccoon", @@ -12170,6 +12251,7 @@ "PIZZACOIN": "PizzaCoin", "PIZZASWAP": "PizzaSwap", "PJM": "Pajama.Finance", + "PJN": "PJN", "PKB": "ParkByte", "PKC": "Pikciochain", "PKD": "PetKingdom", @@ -12255,6 +12337,7 @@ "PLY": "Aurigami", "PLYR": "PLYR L1", "PLZ": "PLUNZ", + "PM": "PumpMeme", "PMA": "PumaPay", "PMD": "Pandemic Multiverse", "PME": "DogePome", @@ -12310,6 +12393,7 @@ "POGAI": "POGAI", "POGS": "POG", "POINT": "SportPoint", + "POINTS": "POINTS", "POK": "Pokmonsters", "POKEGROK": "PokeGROK", "POKEM": "Pokemonio", @@ -12521,6 +12605,7 @@ "PROTOCOLZ": "Protocol Zero", "PROTON": "Proton", "PROUD": "PROUD Money", + "PROVE": "Succinct", "PROXI": "PROXI", "PRP": "Pepe Prime", "PRPS": "Purpose", @@ -12618,6 +12703,7 @@ "PUMPY": "WOW MOON LAMBO PUMPPPPPPY", "PUN": "Punkko", "PUNCH": "PUNCHWORD", + "PUNCHI": "Punchimals", "PUNDIAI": "Pundi AI", "PUNDIX": "Pundi X", "PUNDU": "Pundu", @@ -12711,6 +12797,7 @@ "QAC": "Quasarcoin", "QAI": "QuantixAI", "QANX": "QANplatform", + "QANXV2": "QANplatform v2", "QARK": "QANplatform", "QASH": "Quoine Liquid", "QAU": "Quantum", @@ -13137,6 +13224,7 @@ "RHINOMARS": "RhinoMars", "RHOC": "RChain", "RHP": "Rhypton Club", + "RHUB": "ROLLHUB", "RIA": "aRIA Currency", "RIB": "Ribus", "RIBB": "Ribbit", @@ -13177,6 +13265,7 @@ "RINTARO": "Rintaro", "RINU": "Raichu Inu", "RIO": "Realio Network", + "RION": "Hyperion", "RIOT": "Riot Racers", "RIOV1": "Realio Network v1", "RIP": "Fantom Doge", @@ -13383,13 +13472,16 @@ "RUBIT": "Rublebit", "RUBIUS": "Rubius", "RUBIX": "Rubix", + "RUBMEME": "Reverse Unit Bias", "RUBX": "eToro Russian Ruble", "RUBY": "RubyToken", "RUBYEX": "Ruby.Exchange", "RUC": "Rush", "RUFF": "Ruff", - "RUG": "Rug", + "RUG": "RUGMAN", "RUGA": "RUGAME", + "RUGMONEY": "Rug", + "RUGPROOF": "Launchpad", "RUGPULL": "Captain Rug Pull", "RUGZ": "pulltherug.finance", "RULER": "Ruler Protocol", @@ -13491,6 +13583,7 @@ "SAFEREUM": "Safereum", "SAFES": "SafeSwap", "SAFESTAR": "Safe Star", + "SAFESV1": "SafeSwap v1", "SAFET": "SafemoonTon", "SAFEX": "SafeExchangeCoin", "SAFLE": "Safle", @@ -13550,6 +13643,7 @@ "SAPP": "Sapphire", "SAPPC": "SappChat", "SAR": "Saren", + "SARA": "Pulsara", "SARCO": "Sarcophagus", "SARM": "Stella Armada", "SAROS": "Saros", @@ -13676,6 +13770,7 @@ "SCSX": "Secure Cash", "SCT": "SuperCells", "SCTK": "SharesChain", + "SCTRL": "SOLCONTROL", "SCUBA": "Scuba Dog", "SCY": "Synchrony", "SD": "Stader", @@ -14026,6 +14121,7 @@ "SILVERWAY": "Silverway", "SIM": "Simpson", "SIMBA": "SIMBA The Sloth", + "SIMON": "Simon the Gator", "SIMP": "SO-COL", "SIMPLE": "SimpleChain", "SIMPS": "Simpson MAGA", @@ -14120,6 +14216,7 @@ "SLA": "SUPERLAUNCH", "SLAM": "Slam Token", "SLAP": "CatSlap", + "SLAPS": "Slap", "SLAVI": "Slavi Coin", "SLAYER": "ThreatSlayerAI by Virtuals", "SLB": "Solberg", @@ -14336,6 +14433,7 @@ "SOLAMA": "Solama", "SOLAMB": "SOLAMB", "SOLAN": "Solana Beach", + "SOLANACORN": "Solanacorn", "SOLANAP": "Solana Poker", "SOLANAS": "Solana Swap", "SOLANATREASURY": "Solana Treasury Machine", @@ -14571,6 +14669,7 @@ "SPURS": "Tottenham Hotspur Fan Token", "SPWN": "Bitspawn", "SPX": "SPX6900", + "SPX6969": "SPX 6969", "SPXC": "SpaceXCoin", "SPY": "Smarty Pay", "SPYRO": "SPYRO", @@ -14880,6 +14979,7 @@ "SUMI": "SUMI", "SUMMER": "Summer", "SUMMIT": "Summit", + "SUMMITTHE": "SUMMIT", "SUMO": "Sumokoin", "SUN": "Sun Token", "SUNC": "Sunrise", @@ -15087,6 +15187,7 @@ "TALE": "PrompTale AI", "TALENT": "Talent Protocol", "TALES": "Tales of Pepe", + "TALEX": "TaleX", "TALIS": "Talis Protocol", "TALK": "Talken", "TAMA": "Tamadoge", @@ -15197,6 +15298,7 @@ "TDX": "Tidex Token", "TEA": "TeaDAO", "TEAM": "TeamUP", + "TEARS": "Liberals Tears", "TEC": "TeCoin", "TECAR": "Tesla Cars", "TECH": "TechCoin", @@ -15461,8 +15563,10 @@ "TOC": "TouchCon", "TODAY": "TodayCoin", "TODD": "TURBO TODD", + "TOG": "Token of Games", "TOK": "Tokai", "TOKA": "Tonka Finance", + "TOKABU": "Tokabu", "TOKAMAK": "Tokamak Network", "TOKAU": "Tokyo AU", "TOKC": "Tokyo Coin", @@ -15550,6 +15654,7 @@ "TOWELI": "Towelie", "TOWER": "Tower", "TOWN": "Town Star", + "TOWNS": "Towns", "TOX": "INTOverse", "TOXI": "ToxicGarden.finance SEED", "TOYBOX": "Memefi Toybox 404", @@ -15562,6 +15667,7 @@ "TPG": "Troll Payment", "TPRO": "TPRO Network", "TPT": "Token Pocket", + "TPTU": "Trading and Payment Token", "TPU": "TensorSpace", "TPV": "TravGoPV", "TPY": "Thrupenny", @@ -15608,8 +15714,9 @@ "TREAT": "Shiba Inu Treat", "TREB": "Treble", "TRECENTO": "Trecento Blockchain Capital", - "TREE": "Tree", + "TREE": "Treehouse", "TREEB": "Retreeb", + "TREEOFALPHA": "Tree", "TREMP": "Doland Tremp", "TRENCHER": "Trencher", "TRESTLE": "TRESTLE", @@ -15646,6 +15753,7 @@ "TROGE": "Troge", "TROLL": "TROLL", "TROLLC": "Trollcoin", + "TROLLGE": "TROLLGE", "TROLLHEIM": "Trollheim", "TROLLICTO": "TROLLI CTO", "TROLLMODE": "TROLL MODE", @@ -15807,6 +15915,7 @@ "TUSD": "True USD", "TUSDV1": "True USD v1", "TUT": "Tutorial", + "TUTC": "TUTUT COIN", "TUTELLUS": "Tutellus", "TUTTER": "Tutter", "TUX": "Tux The Penguin", @@ -15932,6 +16041,7 @@ "UGOLD": "UGOLD Inc.", "UGT": "Universal Games Token", "UHP": "Ulgen Hash Power", + "UI": "uiui", "UIBT": "Unibit", "UIM": "UNIVERSE ISLAND", "UIN": "Alliance Chain", @@ -16016,6 +16126,7 @@ "UNIT": "Universal Currency", "UNIT0": "UNIT0", "UNITARYSTATUS": "UnitaryStatus Dollar", + "UNITE": "Unite", "UNITED": "UnitedCoins", "UNITRADE": "UniTrade", "UNITREEAI": "Unitree G1 AI", @@ -16065,6 +16176,7 @@ "UR": "UR", "URAC": "Uranus", "URALS": "Urals Coin", + "URANUS": "Uranus", "URFA": "Urfaspor Token", "URMOM": "urmom", "URO": "Urolithin A", @@ -16237,7 +16349,7 @@ "VANT": "Vanta Network", "VANY": "Vanywhere", "VAPE": "VAPE", - "VAPOR": "Vaporcoin", + "VAPOR": "Hypervapor", "VARA": "Vara Network", "VARIUS": "Varius", "VARK": "Aardvark", @@ -16289,8 +16401,9 @@ "VEEN": "LIVEEN", "VEG": "BitVegan", "VEGA": "Vega Protocol", - "VEGAS": "Vegasino", + "VEGAS": "Vegas", "VEGASI": "Vegas Inu Token", + "VEGASINO": "Vegasino", "VEGE": "Vege Token", "VEIL": "VEIL", "VEKTOR": "VEKTOR", @@ -16388,6 +16501,7 @@ "VIRES": "Vires Finance", "VIRTU": "VIRTUCLOUD", "VIRTUAL": "Virtual Protocol", + "VIRTUALMINING": "VirtualMining Coin", "VIRTUM": "VIRTUMATE", "VIS": "Vigorus", "VISIO": "Visio", @@ -16435,7 +16549,7 @@ "VLXPAD": "VelasPad", "VMANTA": "Bifrost Voucher MANTA", "VMATIC": "Venus MATIC", - "VMC": "VirtualMining Coin", + "VMC": "VMS Classic", "VME": "TrueVett", "VMINT": "Volumint", "VMPX": "VMPX (Ordinals)", @@ -16521,6 +16635,7 @@ "VSG": "Vitalik Smart Gas", "VSHARE": "V3S Share", "VSL": "vSlice", + "VSN": "Vision", "VSO": "Verso", "VSOL": "VSolidus", "VSP": "Vesper Finance", @@ -16757,6 +16872,7 @@ "WEN": "Wen", "WEND": "Wellnode", "WENIS": "WenisCoin", + "WENL": "Wen Lambo Financial", "WENLAMBO": "Wenlambo", "WEOS": "Wrapped EOS", "WEPC": "World Earn & Play Community", @@ -17535,6 +17651,7 @@ "YES": "YES Money", "YESCOIN": "YesCoin", "YESP": "Yesports", + "YESTOKEN": "Yes Token", "YESW": "Yes World", "YETI": "Yeti Finance", "YETIUSD": "YUSD Stablecoin", @@ -17665,7 +17782,8 @@ "ZARP": "ZARP Stablecoin", "ZARX": "eToro South African Rand", "ZASH": "ZIMBOCASH", - "ZAT": "ZatGo", + "ZAT": "zkApes", + "ZATGO": "ZatGo", "ZAZA": "ZAZA", "ZAZU": "Zazu", "ZAZZLES": "Zazzles", 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 83b66b370..73b18960a 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 @@ -50,12 +50,15 @@ export class RedactValuesInResponseInterceptor 'feeInBaseCurrency', 'grossPerformance', 'grossPerformanceWithCurrencyEffect', + 'interestInBaseCurrency', 'investment', 'netPerformance', 'netPerformanceWithCurrencyEffect', 'quantity', 'symbolMapping', 'totalBalanceInBaseCurrency', + 'totalDividendInBaseCurrency', + 'totalInterestInBaseCurrency', 'totalValueInBaseCurrency', 'unitPrice', 'value', diff --git a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts index dbf3fee4d..0601eea9a 100644 --- a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts +++ b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts @@ -124,7 +124,7 @@ export class AccountClusterRiskCurrentInvestment extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; } diff --git a/apps/api/src/models/rules/account-cluster-risk/single-account.ts b/apps/api/src/models/rules/account-cluster-risk/single-account.ts index 6045e5892..8890bb767 100644 --- a/apps/api/src/models/rules/account-cluster-risk/single-account.ts +++ b/apps/api/src/models/rules/account-cluster-risk/single-account.ts @@ -74,7 +74,7 @@ export class AccountClusterRiskSingleAccount extends Rule { public getSettings({ xRayRules }: UserSettings): RuleSettings { return { - isActive: xRayRules?.[this.getKey()].isActive ?? true + isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } } diff --git a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts index c427a842e..2c2b6c4d6 100644 --- a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts +++ b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts @@ -100,7 +100,7 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; } diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts index 1de51d0e7..d97805fa6 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts @@ -62,7 +62,7 @@ export class EmergencyFundSetup extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true + isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } } diff --git a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts index 805b86fd4..93c9aafd3 100644 --- a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts +++ b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts @@ -85,7 +85,7 @@ export class FeeRatioInitialInvestment extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.01 }; } diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts new file mode 100644 index 000000000..c4884c066 --- /dev/null +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -0,0 +1,90 @@ +import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface'; +import { Rule } from '@ghostfolio/api/models/rule'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; +import { UserSettings } from '@ghostfolio/common/interfaces'; + +export class BuyingPower extends Rule { + private buyingPower: number; + + public constructor( + protected exchangeRateDataService: ExchangeRateDataService, + private i18nService: I18nService, + buyingPower: number, + languageCode: string + ) { + super(exchangeRateDataService, { + languageCode, + key: BuyingPower.name + }); + + this.buyingPower = buyingPower; + } + + public evaluate(ruleSettings: Settings) { + if (this.buyingPower < ruleSettings.thresholdMin) { + return { + evaluation: this.i18nService.getTranslation({ + id: 'rule.liquidityBuyingPower.false', + languageCode: this.getLanguageCode(), + placeholders: { + baseCurrency: ruleSettings.baseCurrency, + thresholdMin: ruleSettings.thresholdMin + } + }), + value: false + }; + } + + return { + evaluation: this.i18nService.getTranslation({ + id: 'rule.liquidityBuyingPower.true', + languageCode: this.getLanguageCode(), + placeholders: { + baseCurrency: ruleSettings.baseCurrency, + thresholdMin: ruleSettings.thresholdMin + } + }), + value: true + }; + } + + public getCategoryName() { + return this.i18nService.getTranslation({ + id: 'rule.liquidity.category', + languageCode: this.getLanguageCode() + }); + } + + public getConfiguration() { + return { + threshold: { + max: 200000, + min: 0, + step: 1000, + unit: '' + }, + thresholdMin: true + }; + } + + public getName() { + return this.i18nService.getTranslation({ + id: 'rule.liquidityBuyingPower', + languageCode: this.getLanguageCode() + }); + } + + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + return { + baseCurrency, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, + thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0 + }; + } +} + +interface Settings extends RuleSettings { + baseCurrency: string; + thresholdMin: number; +} diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index 602ad5e9c..473d909ee 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -40,9 +40,6 @@ export class ConfigurationService { DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: json({ default: [] }), - DATA_SOURCES_LEGACY: json({ - default: [] - }), ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }), ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }), ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }), diff --git a/apps/api/src/services/cron/cron.service.ts b/apps/api/src/services/cron/cron.service.ts index b770aa2d7..88fcabce2 100644 --- a/apps/api/src/services/cron/cron.service.ts +++ b/apps/api/src/services/cron/cron.service.ts @@ -17,6 +17,7 @@ import { Cron, CronExpression } from '@nestjs/schedule'; @Injectable() export class CronService { + private static readonly EVERY_HOUR_AT_RANDOM_MINUTE = `${new Date().getMinutes()} * * * *`; private static readonly EVERY_SUNDAY_AT_LUNCH_TIME = '0 12 * * 0'; public constructor( @@ -28,8 +29,8 @@ export class CronService { private readonly userService: UserService ) {} - @Cron(CronExpression.EVERY_HOUR) - public async runEveryHour() { + @Cron(CronService.EVERY_HOUR_AT_RANDOM_MINUTE) + public async runEveryHourAtRandomMinute() { if (await this.isDataGatheringEnabled()) { await this.dataGatheringService.gather7Days(); } diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index 7776ff46c..561d7d6db 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -78,7 +78,7 @@ export class CoinGeckoService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; @@ -196,8 +196,10 @@ export class CoinGeckoService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; } @@ -212,15 +214,16 @@ export class CoinGeckoService implements DataProviderInterface { return 'bitcoin'; } - public async search({ query }: GetSearchParams): Promise { + public async search({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: GetSearchParams): Promise { let items: LookupItem[] = []; try { const { coins } = await fetch(`${this.apiUrl}/search?query=${query}`, { headers: this.headers, - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) + signal: AbortSignal.timeout(requestTimeout) }).then((res) => res.json()); items = coins.map(({ id: symbol, name }) => { @@ -237,7 +240,7 @@ export class CoinGeckoService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; 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 54167bc5b..ecbc38256 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 @@ -163,7 +163,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { public async getAssetProfile( aSymbol: string ): Promise> { - const response: Partial = {}; + let response: Partial = {}; try { let symbol = aSymbol; @@ -241,10 +241,13 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { } const url = assetProfile.summaryProfile?.website; + if (url) { response.url = url; } } catch (error) { + response = undefined; + if (error.message === `Quote not found for symbol: ${aSymbol}`) { throw new AssetProfileDelistedError( `No data found, ${aSymbol} (${this.getName()}) may be delisted` diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 674672326..8754c3537 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -26,13 +26,12 @@ import { LookupItem, LookupResponse } from '@ghostfolio/common/interfaces'; -import { hasRole } from '@ghostfolio/common/permissions'; import type { Granularity, UserWithSettings } from '@ghostfolio/common/types'; import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { DataSource, MarketData, SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; -import { eachDayOfInterval, format, isBefore, isValid } from 'date-fns'; +import { eachDayOfInterval, format, isValid } from 'date-fns'; import { groupBy, isEmpty, isNumber, uniqWith } from 'lodash'; import ms from 'ms'; @@ -108,7 +107,9 @@ export class DataProviderService implements OnModuleInit { promises.push( promise.then((symbolProfile) => { - response[symbol] = symbolProfile; + if (symbolProfile) { + response[symbol] = symbolProfile; + } }) ); } @@ -160,25 +161,9 @@ export class DataProviderService implements OnModuleInit { return DataSource[this.configurationService.get('DATA_SOURCE_IMPORT')]; } - public async getDataSources({ - includeGhostfolio = false, - user - }: { - includeGhostfolio?: boolean; - user: UserWithSettings; - }): Promise { - let dataSourcesKey: 'DATA_SOURCES' | 'DATA_SOURCES_LEGACY' = 'DATA_SOURCES'; - - if ( - !hasRole(user, 'ADMIN') && - isBefore(user.createdAt, new Date('2025-03-23')) && - this.configurationService.get('DATA_SOURCES_LEGACY')?.length > 0 - ) { - dataSourcesKey = 'DATA_SOURCES_LEGACY'; - } - + public async getDataSources(): Promise { const dataSources: DataSource[] = this.configurationService - .get(dataSourcesKey) + .get('DATA_SOURCES') .map((dataSource) => { return DataSource[dataSource]; }); @@ -187,7 +172,7 @@ export class DataProviderService implements OnModuleInit { PROPERTY_API_KEY_GHOSTFOLIO ); - if (includeGhostfolio || ghostfolioApiKey) { + if (ghostfolioApiKey) { dataSources.push('GHOSTFOLIO'); } @@ -634,7 +619,7 @@ export class DataProviderService implements OnModuleInit { return { items: lookupItems }; } - const dataSources = await this.getDataSources({ user }); + const dataSources = await this.getDataSources(); const dataProviderServices = dataSources.map((dataSource) => { return this.getDataProvider(DataSource[dataSource]); diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index ddb94bb1a..c18ec193f 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -51,18 +51,26 @@ export class EodHistoricalDataService implements DataProviderInterface { } public async getAssetProfile({ + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbol }: GetAssetProfileParams): Promise> { - const [searchResult] = await this.getSearchResult(symbol); + const [searchResult] = await this.getSearchResult({ + requestTimeout, + query: symbol + }); + + if (!searchResult) { + return undefined; + } return { symbol, - assetClass: searchResult?.assetClass, - assetSubClass: searchResult?.assetSubClass, - currency: this.convertCurrency(searchResult?.currency), + assetClass: searchResult.assetClass, + assetSubClass: searchResult.assetSubClass, + currency: this.convertCurrency(searchResult.currency), dataSource: this.getName(), - isin: searchResult?.isin, - name: searchResult?.name + isin: searchResult.isin, + name: searchResult.name }; } @@ -282,8 +290,10 @@ export class EodHistoricalDataService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; } @@ -298,8 +308,11 @@ export class EodHistoricalDataService implements DataProviderInterface { return 'AAPL.US'; } - public async search({ query }: GetSearchParams): Promise { - const searchResult = await this.getSearchResult(query); + public async search({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: GetSearchParams): Promise { + const searchResult = await this.getSearchResult({ query, requestTimeout }); return { items: searchResult @@ -388,7 +401,13 @@ export class EodHistoricalDataService implements DataProviderInterface { return name; } - private async getSearchResult(aQuery: string) { + private async getSearchResult({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: { + query: string; + requestTimeout?: number; + }) { let searchResult: (LookupItem & { assetClass: AssetClass; assetSubClass: AssetSubClass; @@ -397,11 +416,9 @@ export class EodHistoricalDataService implements DataProviderInterface { try { const response = await fetch( - `${this.URL}/search/${aQuery}?api_token=${this.apiKey}`, + `${this.URL}/search/${query}?api_token=${this.apiKey}`, { - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) + signal: AbortSignal.timeout(requestTimeout) } ).then((res) => res.json()); @@ -426,8 +443,8 @@ export class EodHistoricalDataService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to search for ${aQuery} was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; } diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 2dcb689a7..8f52fb779 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -64,7 +64,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbol }: GetAssetProfileParams): Promise> { - const response: Partial = { + let response: Partial = { symbol, dataSource: this.getName() }; @@ -201,8 +201,9 @@ export class FinancialModelingPrepService implements DataProviderInterface { } } catch (error) { let message = error; + response = undefined; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; @@ -364,8 +365,13 @@ export class FinancialModelingPrepService implements DataProviderInterface { await Promise.all( quotes.map(({ symbol }) => { - return this.getAssetProfile({ symbol }).then(({ currency }) => { - currencyBySymbolMap[symbol] = { currency }; + return this.getAssetProfile({ + requestTimeout, + symbol + }).then((assetProfile) => { + if (assetProfile?.currency) { + currencyBySymbolMap[symbol] = { currency: assetProfile.currency }; + } }); }) ); @@ -392,8 +398,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; } @@ -408,7 +416,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { return 'AAPL'; } - public async search({ query }: GetSearchParams): Promise { + public async search({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: GetSearchParams): Promise { const assetProfileBySymbolMap: { [symbol: string]: Partial; } = {}; @@ -419,9 +430,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { const result = await fetch( `${this.getUrl({ version: 'stable' })}/search-isin?isin=${query.toUpperCase()}&apikey=${this.apiKey}`, { - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) + signal: AbortSignal.timeout(requestTimeout) } ).then((res) => res.json()); @@ -469,7 +478,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index 3fd9e1bea..ca8d72827 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -51,43 +51,48 @@ export class GhostfolioService implements DataProviderInterface { requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbol }: GetAssetProfileParams): Promise> { - let response: DataProviderGhostfolioAssetProfileResponse = {}; + let assetProfile: DataProviderGhostfolioAssetProfileResponse; try { - const assetProfile = (await fetch( + const response = await fetch( `${this.URL}/v1/data-providers/ghostfolio/asset-profile/${symbol}`, { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => - res.json() - )) as DataProviderGhostfolioAssetProfileResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } - response = assetProfile; + assetProfile = + (await response.json()) as DataProviderGhostfolioAssetProfileResponse; } catch (error) { let message = error; - if (error.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; - } else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + } else if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); } - return response; + return assetProfile; } public getDataProviderInfo(): DataProviderInfo { @@ -108,12 +113,12 @@ export class GhostfolioService implements DataProviderInterface { }: GetDividendsParams): Promise<{ [date: string]: IDataProviderHistoricalResponse; }> { - let response: { + let dividends: { [date: string]: IDataProviderHistoricalResponse; } = {}; try { - const { dividends } = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/dividends/${symbol}?from=${format(from, DATE_FORMAT)}&granularity=${granularity}&to=${format( to, DATE_FORMAT @@ -122,28 +127,34 @@ export class GhostfolioService implements DataProviderInterface { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as DividendsResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } - response = dividends; + dividends = ((await response.json()) as DividendsResponse).dividends; } catch (error) { let message = error; - if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); } - return response; + return dividends; } public async getHistorical({ @@ -156,7 +167,7 @@ export class GhostfolioService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { try { - const { historicalData } = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/historical/${symbol}?from=${format(from, DATE_FORMAT)}&granularity=${granularity}&to=${format( to, DATE_FORMAT @@ -165,27 +176,36 @@ export class GhostfolioService implements DataProviderInterface { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as HistoricalResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } + + const { historicalData } = (await response.json()) as HistoricalResponse; return { [symbol]: historicalData }; } catch (error) { - let message = error; - - if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { - message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { + error.name = 'RequestError'; + error.message = + 'RequestError: The daily request limit has been exceeded'; + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + error.name = 'RequestError'; + error.message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + Logger.error(error.message, 'GhostfolioService'); throw new Error( `Could not get historical market data for ${symbol} (${this.getName()}) from ${format( @@ -210,45 +230,53 @@ export class GhostfolioService implements DataProviderInterface { }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse; }> { - let response: { [symbol: string]: IDataProviderResponse } = {}; + let quotes: { [symbol: string]: IDataProviderResponse } = {}; if (symbols.length <= 0) { - return response; + return quotes; } try { - const { quotes } = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/quotes?symbols=${symbols.join(',')}`, { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as QuotesResponse; + ); - response = quotes; + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } + + quotes = ((await response.json()) as QuotesResponse).quotes; } catch (error) { let message = error; - if (error.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; - } else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + } else if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); } - return response; + return quotes; } public getTestSymbol() { @@ -256,36 +284,44 @@ export class GhostfolioService implements DataProviderInterface { } public async search({ - requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), - query + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') }: GetSearchParams): Promise { let searchResult: LookupResponse = { items: [] }; try { - searchResult = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/lookup?query=${query}`, { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as LookupResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } + + searchResult = (await response.json()) as LookupResponse; } catch (error) { let message = error; - if (error.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; - } else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + } else if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); diff --git a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts index f067f042c..111f2d004 100644 --- a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts +++ b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts @@ -36,13 +36,10 @@ export class GoogleSheetsService implements DataProviderInterface { return true; } - public async getAssetProfile({ - symbol - }: GetAssetProfileParams): Promise> { - return { - symbol, - dataSource: this.getName() - }; + public async getAssetProfile({}: GetAssetProfileParams): Promise< + Partial + > { + return undefined; } public getDataProviderInfo(): DataProviderInfo { diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 1c1c4c2da..c411f678b 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -45,21 +45,20 @@ export class ManualService implements DataProviderInterface { public async getAssetProfile({ symbol }: GetAssetProfileParams): Promise> { - const assetProfile: Partial = { - symbol, - dataSource: this.getName() - }; - const [symbolProfile] = await this.symbolProfileService.getSymbolProfiles([ { symbol, dataSource: this.getName() } ]); - if (symbolProfile) { - assetProfile.currency = symbolProfile.currency; - assetProfile.name = symbolProfile.name; + if (!symbolProfile) { + return undefined; } - return assetProfile; + return { + symbol, + currency: symbolProfile.currency, + dataSource: this.getName(), + name: symbolProfile.name + }; } public getDataProviderInfo(): DataProviderInfo { diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 5675f1eb0..824f44328 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -35,13 +35,10 @@ export class RapidApiService implements DataProviderInterface { return !!this.configurationService.get('API_KEY_RAPID_API'); } - public async getAssetProfile({ - symbol - }: GetAssetProfileParams): Promise> { - return { - symbol, - dataSource: this.getName() - }; + public async getAssetProfile({}: GetAssetProfileParams): Promise< + Partial + > { + return undefined; } public getDataProviderInfo(): DataProviderInfo { @@ -165,7 +162,7 @@ export class RapidApiService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; diff --git a/apps/api/src/services/interfaces/environment.interface.ts b/apps/api/src/services/interfaces/environment.interface.ts index c0e228429..2f94739fb 100644 --- a/apps/api/src/services/interfaces/environment.interface.ts +++ b/apps/api/src/services/interfaces/environment.interface.ts @@ -16,7 +16,6 @@ export interface Environment extends CleanedEnvAccessors { DATA_SOURCE_IMPORT: string; DATA_SOURCES: string[]; DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: string[]; - DATA_SOURCES_LEGACY: string[]; ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean; ENABLE_FEATURE_READ_ONLY_MODE: boolean; ENABLE_FEATURE_SOCIAL_LOGIN: boolean; diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 70d4f8b30..dae10fbf1 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -106,9 +106,7 @@ const routes: Routes = [ { path: publicRoutes.pricing.path, loadChildren: () => - import('./pages/pricing/pricing-page.module').then( - (m) => m.PricingPageModule - ) + import('./pages/pricing/pricing-page.routes').then((m) => m.routes) }, { path: publicRoutes.public.path, @@ -120,9 +118,7 @@ const routes: Routes = [ { path: publicRoutes.register.path, loadChildren: () => - import('./pages/register/register-page.module').then( - (m) => m.RegisterPageModule - ) + import('./pages/register/register-page.routes').then((m) => m.routes) }, { path: publicRoutes.resources.path, @@ -132,9 +128,7 @@ const routes: Routes = [ { path: publicRoutes.start.path, loadChildren: () => - import('./pages/landing/landing-page.module').then( - (m) => m.LandingPageModule - ) + import('./pages/landing/landing-page.routes').then((m) => m.routes) }, { loadComponent: () => @@ -147,7 +141,7 @@ const routes: Routes = [ { path: internalRoutes.zen.path, loadChildren: () => - import('./pages/zen/zen-page.module').then((m) => m.ZenPageModule) + import('./pages/zen/zen-page.routes').then((m) => m.routes) }, { // wildcard, if requested url doesn't match any paths for routes defined diff --git a/apps/client/src/app/components/access-table/access-table.component.html b/apps/client/src/app/components/access-table/access-table.component.html index 44aee1644..be374db9c 100644 --- a/apps/client/src/app/components/access-table/access-table.component.html +++ b/apps/client/src/app/components/access-table/access-table.component.html @@ -67,12 +67,18 @@ @if (element.type === 'PUBLIC') {
}
diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts index c94f86df1..9f32be650 100644 --- a/apps/client/src/app/components/access-table/access-table.component.ts +++ b/apps/client/src/app/components/access-table/access-table.component.ts @@ -22,10 +22,12 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { + copyOutline, ellipsisHorizontal, linkOutline, lockClosedOutline, - lockOpenOutline + lockOpenOutline, + removeCircleOutline } from 'ionicons/icons'; import ms from 'ms'; @@ -62,10 +64,12 @@ export class GfAccessTableComponent implements OnChanges { private snackBar: MatSnackBar ) { addIcons({ + copyOutline, ellipsisHorizontal, linkOutline, lockClosedOutline, - lockOpenOutline + lockOpenOutline, + removeCircleOutline }); } 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 16cd468e8..2886910c4 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 @@ -2,6 +2,7 @@ import { CreateAccountBalanceDto } from '@ghostfolio/api/app/account-balance/cre import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; import { AccountBalancesResponse, @@ -51,12 +52,18 @@ export class AccountDetailDialog implements OnDestroy, OnInit { public accountBalances: AccountBalancesResponse['balances']; public activities: OrderWithAccount[]; public balance: number; + public balancePrecision = 2; public currency: string; public dataSource: MatTableDataSource; + public dividendInBaseCurrency: number; + public dividendInBaseCurrencyPrecision = 2; public equity: number; + public equityPrecision = 2; public hasPermissionToDeleteAccountBalance: boolean; public historicalDataItems: HistoricalDataItem[]; public holdings: PortfolioPosition[]; + public interestInBaseCurrency: number; + public interestInBaseCurrencyPrecision = 2; public isLoadingActivities: boolean; public isLoadingChart: boolean; public name: string; @@ -181,6 +188,8 @@ export class AccountDetailDialog implements OnDestroy, OnInit { ({ balance, currency, + dividendInBaseCurrency, + interestInBaseCurrency, name, platform, transactionCount, @@ -188,14 +197,48 @@ export class AccountDetailDialog implements OnDestroy, OnInit { valueInBaseCurrency }) => { this.balance = balance; + + if ( + this.balance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.data.deviceType === 'mobile' + ) { + this.balancePrecision = 0; + } + this.currency = currency; + this.dividendInBaseCurrency = dividendInBaseCurrency; + + if ( + this.data.deviceType === 'mobile' && + this.dividendInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.dividendInBaseCurrencyPrecision = 0; + } if (isNumber(balance) && isNumber(value)) { this.equity = new Big(value).minus(balance).toNumber(); + + if ( + this.data.deviceType === 'mobile' && + this.equity >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.equityPrecision = 0; + } } else { this.equity = null; } + this.interestInBaseCurrency = interestInBaseCurrency; + + if ( + this.data.deviceType === 'mobile' && + this.interestInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.interestInBaseCurrencyPrecision = 0; + } + this.name = name; this.platformName = platform?.name ?? '-'; this.transactionCount = transactionCount; 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 45d88fc78..c43c5cb68 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 @@ -20,20 +20,18 @@ - @if (user?.settings?.isExperimentalFeatures) { -
- -
- } +
+ +
@@ -42,6 +40,7 @@ size="medium" [isCurrency]="true" [locale]="user?.settings?.locale" + [precision]="balancePrecision" [unit]="currency" [value]="balance" >Cash BalanceEquity
+
+ Interest +
+
+ Dividend +
Activities { - return assetSubClass !== 'CASH'; - }) - .map((assetSubClass) => { + public allFilters: Filter[] = [ + ...Object.keys(AssetSubClass) + .filter((assetSubClass) => { + return assetSubClass !== 'CASH'; + }) + .map((assetSubClass) => { + return { + id: assetSubClass.toString(), + label: translate(assetSubClass), + type: 'ASSET_SUB_CLASS' as Filter['type'] + }; + }), + ...Object.keys(DataSource).map((dataSource) => { return { - id: assetSubClass.toString(), - label: translate(assetSubClass), - type: 'ASSET_SUB_CLASS' as Filter['type'] + id: dataSource.toString(), + label: dataSource, + type: 'DATA_SOURCE' as Filter['type'] }; - }) - .concat([ - { - id: 'BENCHMARKS', - label: $localize`Benchmarks`, - type: 'PRESET_ID' as Filter['type'] - }, - { - id: 'CURRENCIES', - label: $localize`Currencies`, - type: 'PRESET_ID' as Filter['type'] - }, - { - id: 'ETF_WITHOUT_COUNTRIES', - label: $localize`ETFs without Countries`, - type: 'PRESET_ID' as Filter['type'] - }, - { - id: 'ETF_WITHOUT_SECTORS', - label: $localize`ETFs without Sectors`, - type: 'PRESET_ID' as Filter['type'] - } - ]); + }), + { + id: 'BENCHMARKS', + label: $localize`Benchmarks`, + type: 'PRESET_ID' as Filter['type'] + }, + { + id: 'CURRENCIES', + label: $localize`Currencies`, + type: 'PRESET_ID' as Filter['type'] + }, + { + id: 'ETF_WITHOUT_COUNTRIES', + label: $localize`ETFs without Countries`, + type: 'PRESET_ID' as Filter['type'] + }, + { + id: 'ETF_WITHOUT_SECTORS', + label: $localize`ETFs without Sectors`, + type: 'PRESET_ID' as Filter['type'] + } + ]; public benchmarks: Partial[]; public currentDataSource: DataSource; public currentSymbol: string; diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index 0ea28c618..264d0a1b0 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -13,6 +13,7 @@ import { import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { AdminMarketDataDetails, + AssetClassSelectorOption, AssetProfileIdentifier, LineChartItem, ScraperConfiguration, @@ -82,10 +83,7 @@ import ms from 'ms'; import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; -import { - AssetClassSelectorOption, - AssetProfileDialogParams -} from './interfaces/interfaces'; +import { AssetProfileDialogParams } from './interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 993cf9b12..fad1e8cc1 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -549,7 +549,13 @@ Data Gathering
- +
- + diff --git a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html index 0efb9d307..d2fdad30e 100644 --- a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html +++ b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html @@ -22,12 +22,18 @@
- + diff --git a/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts b/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts index 923b153b3..92ffc71b3 100644 --- a/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts +++ b/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts @@ -5,18 +5,20 @@ import { Input, Output } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { close } from 'ionicons/icons'; @Component({ + changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'justify-content-center' }, + imports: [IonIcon, MatButtonModule], selector: 'gf-dialog-footer', - changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './dialog-footer.component.html', styleUrls: ['./dialog-footer.component.scss'], - standalone: false + templateUrl: './dialog-footer.component.html' }) -export class DialogFooterComponent { +export class GfDialogFooterComponent { @Input() deviceType: string; @Output() closeButtonClicked = new EventEmitter(); diff --git a/apps/client/src/app/components/dialog-footer/dialog-footer.module.ts b/apps/client/src/app/components/dialog-footer/dialog-footer.module.ts deleted file mode 100644 index 486068f72..000000000 --- a/apps/client/src/app/components/dialog-footer/dialog-footer.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { DialogFooterComponent } from './dialog-footer.component'; - -@NgModule({ - declarations: [DialogFooterComponent], - exports: [DialogFooterComponent], - imports: [CommonModule, IonIcon, MatButtonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfDialogFooterModule {} diff --git a/apps/client/src/app/components/dialog-header/dialog-header.component.ts b/apps/client/src/app/components/dialog-header/dialog-header.component.ts index 03a5357b5..0487034e9 100644 --- a/apps/client/src/app/components/dialog-header/dialog-header.component.ts +++ b/apps/client/src/app/components/dialog-header/dialog-header.component.ts @@ -1,3 +1,4 @@ +import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -5,18 +6,20 @@ import { Input, Output } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { close } from 'ionicons/icons'; @Component({ + changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'justify-content-center' }, + imports: [CommonModule, IonIcon, MatButtonModule], selector: 'gf-dialog-header', - changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './dialog-header.component.html', styleUrls: ['./dialog-header.component.scss'], - standalone: false + templateUrl: './dialog-header.component.html' }) -export class DialogHeaderComponent { +export class GfDialogHeaderComponent { @Input() deviceType: string; @Input() position: 'center' | 'left' = 'left'; @Input() title: string; diff --git a/apps/client/src/app/components/dialog-header/dialog-header.module.ts b/apps/client/src/app/components/dialog-header/dialog-header.module.ts deleted file mode 100644 index da5c2ec28..000000000 --- a/apps/client/src/app/components/dialog-header/dialog-header.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { DialogHeaderComponent } from './dialog-header.component'; - -@NgModule({ - declarations: [DialogHeaderComponent], - exports: [DialogHeaderComponent], - imports: [CommonModule, IonIcon, MatButtonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfDialogHeaderModule {} 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 8f0e6ae68..8f6616174 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 @@ -1,9 +1,13 @@ import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { NUMERICAL_PRECISION_THRESHOLD } from '@ghostfolio/common/config'; +import { + NUMERICAL_PRECISION_THRESHOLD_3_FIGURES, + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES, + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES +} from '@ghostfolio/common/config'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; import { DataProviderInfo, @@ -74,8 +78,8 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; GfAccountsTableComponent, GfActivitiesTableComponent, GfDataProviderCreditsComponent, - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfHistoricalMarketDataEditorComponent, GfLineChartComponent, GfPortfolioProportionChartComponent, @@ -101,6 +105,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public assetClass: string; public assetSubClass: string; public averagePrice: number; + public averagePricePrecision = 2; public benchmarkDataItems: LineChartItem[]; public benchmarkLabel = $localize`Average Unit Price`; public countries: { @@ -122,11 +127,15 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public marketDataItems: MarketData[] = []; public marketPrice: number; public marketPriceMax: number; + public marketPriceMaxPrecision = 2; public marketPriceMin: number; + public marketPriceMinPrecision = 2; + public marketPricePrecision = 2; public netPerformance: number; public netPerformancePrecision = 2; public netPerformancePercent: number; public netPerformancePercentWithCurrencyEffect: number; + public netPerformancePercentWithCurrencyEffectPrecision = 2; public netPerformanceWithCurrencyEffect: number; public netPerformanceWithCurrencyEffectPrecision = 2; public quantity: number; @@ -274,6 +283,14 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { value }) => { this.averagePrice = averagePrice; + + if ( + this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.data.deviceType === 'mobile' + ) { + this.averagePricePrecision = 0; + } + this.benchmarkDataItems = []; this.countries = {}; this.dataProviderInfo = dataProviderInfo; @@ -281,7 +298,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if ( this.data.deviceType === 'mobile' && - this.dividendInBaseCurrency >= NUMERICAL_PRECISION_THRESHOLD + this.dividendInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.dividendInBaseCurrencyPrecision = 0; } @@ -320,19 +338,42 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if ( this.data.deviceType === 'mobile' && this.investmentInBaseCurrencyWithCurrencyEffect >= - NUMERICAL_PRECISION_THRESHOLD + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0; } this.marketPrice = marketPrice; this.marketPriceMax = marketPriceMax; + + if ( + this.data.deviceType === 'mobile' && + this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.marketPriceMaxPrecision = 0; + } + this.marketPriceMin = marketPriceMin; + + if ( + this.data.deviceType === 'mobile' && + this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.marketPriceMinPrecision = 0; + } + + if ( + this.data.deviceType === 'mobile' && + this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.marketPricePrecision = 0; + } + this.netPerformance = netPerformance; if ( this.data.deviceType === 'mobile' && - this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD + this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.netPerformancePrecision = 0; } @@ -342,13 +383,21 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.netPerformancePercentWithCurrencyEffect = netPerformancePercentWithCurrencyEffect; + if ( + this.data.deviceType === 'mobile' && + this.netPerformancePercentWithCurrencyEffect >= + NUMERICAL_PRECISION_THRESHOLD_3_FIGURES + ) { + this.netPerformancePercentWithCurrencyEffectPrecision = 0; + } + this.netPerformanceWithCurrencyEffect = netPerformanceWithCurrencyEffect; if ( this.data.deviceType === 'mobile' && this.netPerformanceWithCurrencyEffect >= - NUMERICAL_PRECISION_THRESHOLD + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.netPerformanceWithCurrencyEffectPrecision = 0; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index e0673a1f5..30ce98634 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 @@ -77,6 +77,7 @@ [colorizeSign]="true" [isPercent]="true" [locale]="data.locale" + [precision]="netPerformancePercentWithCurrencyEffectPrecision" [value]="netPerformancePercentWithCurrencyEffect" > @if ( @@ -95,6 +96,7 @@ size="medium" [isCurrency]="true" [locale]="data.locale" + [precision]="averagePricePrecision" [unit]="SymbolProfile?.currency" [value]="averagePrice" >Average Unit PriceMarket PriceMinimum PriceMaximum Price= - NUMERICAL_PRECISION_THRESHOLD + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.precision = 0; } diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts index ccb1664f1..226d748cd 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -7,7 +7,6 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { BenchmarkTrend } from '@ghostfolio/common/types'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; @@ -137,17 +136,7 @@ export class HomeWatchlistComponent implements OnDestroy, OnInit { .fetchWatchlist() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(({ watchlist }) => { - this.watchlist = watchlist.map( - ({ dataSource, marketCondition, name, performances, symbol }) => ({ - dataSource, - marketCondition, - name, - performances, - symbol, - trend50d: 'UNKNOWN' as BenchmarkTrend, - trend200d: 'UNKNOWN' as BenchmarkTrend - }) - ); + this.watchlist = watchlist; this.changeDetectorRef.markForCheck(); }); diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts index 9ee0adcdc..4f11f1025 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts @@ -6,6 +6,7 @@ import { import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Router } from '@angular/router'; @@ -20,6 +21,10 @@ import { eyeOffOutline, eyeOutline } from 'ionicons/icons'; standalone: false }) export class LoginWithAccessTokenDialog { + public accessTokenFormControl = new FormControl( + this.data.accessToken, + Validators.required + ); public isAccessTokenHidden = true; public constructor( @@ -45,8 +50,10 @@ export class LoginWithAccessTokenDialog { } public onLoginWithAccessToken() { - if (this.data.accessToken) { - this.dialogRef.close(this.data); + if (this.accessTokenFormControl.valid) { + this.dialogRef.close({ + accessToken: this.accessTokenFormControl.value + }); } } diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html index 77191db8e..18f4fec27 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -11,9 +11,8 @@ Security Token diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts index d6035ae52..355ae58f8 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts @@ -1,7 +1,7 @@ import { TextFieldModule } from '@angular/cdk/text-field'; import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; @@ -9,15 +9,14 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { IonIcon } from '@ionic/angular/standalone'; -import { GfDialogHeaderModule } from '../dialog-header/dialog-header.module'; +import { GfDialogHeaderComponent } from '../dialog-header/dialog-header.component'; import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.component'; @NgModule({ declarations: [LoginWithAccessTokenDialog], imports: [ CommonModule, - FormsModule, - GfDialogHeaderModule, + GfDialogHeaderComponent, IonIcon, MatButtonModule, MatCheckboxModule, diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts index caef1082f..c98a26831 100644 --- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts +++ b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts @@ -8,7 +8,9 @@ import { PortfolioPerformance, ResponseError } from '@ghostfolio/common/interfaces'; +import { GfValueComponent } from '@ghostfolio/ui/value'; +import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -17,19 +19,21 @@ import { OnChanges, ViewChild } from '@angular/core'; +import { IonIcon } from '@ionic/angular/standalone'; import { CountUp } from 'countup.js'; import { addIcons } from 'ionicons'; import { timeOutline } from 'ionicons/icons'; import { isNumber } from 'lodash'; +import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ - selector: 'gf-portfolio-performance', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './portfolio-performance.component.html', + imports: [CommonModule, GfValueComponent, IonIcon, NgxSkeletonLoaderModule], + selector: 'gf-portfolio-performance', styleUrls: ['./portfolio-performance.component.scss'], - standalone: false + templateUrl: './portfolio-performance.component.html' }) -export class PortfolioPerformanceComponent implements OnChanges { +export class GfPortfolioPerformanceComponent implements OnChanges { @Input() deviceType: string; @Input() errors: ResponseError['errors']; @Input() isAllTimeHigh: boolean; diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts b/apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts deleted file mode 100644 index e5b606255..000000000 --- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { GfValueComponent } from '@ghostfolio/ui/value'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { IonIcon } from '@ionic/angular/standalone'; -import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; - -import { PortfolioPerformanceComponent } from './portfolio-performance.component'; - -@NgModule({ - declarations: [PortfolioPerformanceComponent], - exports: [PortfolioPerformanceComponent], - imports: [CommonModule, GfValueComponent, IonIcon, NgxSkeletonLoaderModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfPortfolioPerformanceModule {} diff --git a/apps/client/src/app/components/rule/rule.component.html b/apps/client/src/app/components/rule/rule.component.html index 7cea512e3..239beb733 100644 --- a/apps/client/src/app/components/rule/rule.component.html +++ b/apps/client/src/app/components/rule/rule.component.html @@ -64,14 +64,24 @@ @if (rule?.isActive && rule?.configuration) { +
}
diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index 4ea7d0ec6..624338915 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -16,8 +16,10 @@ import { import { MatDialog } from '@angular/material/dialog'; import { addIcons } from 'ionicons'; import { + addCircleOutline, checkmarkCircleOutline, ellipsisHorizontal, + optionsOutline, removeCircleOutline, warningOutline } from 'ionicons/icons'; @@ -50,8 +52,10 @@ export class RuleComponent implements OnInit { private dialog: MatDialog ) { addIcons({ + addCircleOutline, checkmarkCircleOutline, ellipsisHorizontal, + optionsOutline, removeCircleOutline, warningOutline }); diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html index b903c64d5..210933d61 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -55,12 +55,18 @@ }
- + diff --git a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts index 6c8af4197..6ea68d863 100644 --- a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts +++ b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { FormsModule } from '@angular/forms'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; @@ -7,11 +7,11 @@ import { MatInputModule } from '@angular/material/input'; @Component({ imports: [ - FormsModule, MatButtonModule, MatDialogModule, MatFormFieldModule, - MatInputModule + MatInputModule, + ReactiveFormsModule ], selector: 'gf-prompt-dialog', templateUrl: './prompt-dialog.html' @@ -20,8 +20,8 @@ export class GfPromptDialogComponent { public confirmLabel: string; public defaultValue: string; public discardLabel: string; + public formControl = new FormControl(''); public title: string; - public value: string; public valueLabel: string; public constructor(public dialogRef: MatDialogRef) {} @@ -36,8 +36,8 @@ export class GfPromptDialogComponent { this.confirmLabel = aParams.confirmLabel; this.defaultValue = aParams.defaultValue; this.discardLabel = aParams.discardLabel; + this.formControl.setValue(aParams.defaultValue); this.title = aParams.title; - this.value = aParams.defaultValue; this.valueLabel = aParams.valueLabel; } } diff --git a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html index 5568cfdae..d73c8dabb 100644 --- a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html +++ b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html @@ -7,7 +7,7 @@ @if (valueLabel) { {{ valueLabel }} } - +
@@ -15,7 +15,12 @@ - diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html index e87876c45..9a9d89624 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -100,12 +100,18 @@ }
- + diff --git a/apps/client/src/app/pages/i18n/i18n-page.html b/apps/client/src/app/pages/i18n/i18n-page.html index 5db40a5b0..f42412473 100644 --- a/apps/client/src/app/pages/i18n/i18n-page.html +++ b/apps/client/src/app/pages/i18n/i18n-page.html @@ -67,6 +67,16 @@ (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% +
  • Liquidity
  • +
  • Buying Power
  • +
  • + Your buying power is below ${thresholdMin} + ${baseCurrency} +
  • +
  • + Your buying power exceeds ${thresholdMin} + ${baseCurrency} +
  • Currency Cluster Risks
  • Investment: Base Currency diff --git a/apps/client/src/app/pages/landing/landing-page-routing.module.ts b/apps/client/src/app/pages/landing/landing-page-routing.module.ts deleted file mode 100644 index 0a8ac146d..000000000 --- a/apps/client/src/app/pages/landing/landing-page-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { LandingPageComponent } from './landing-page.component'; - -const routes: Routes = [ - { path: '', component: LandingPageComponent, canActivate: [AuthGuard] } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class LandingPageRoutingModule {} diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts index 0a965b8fa..bc859a5e3 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -1,21 +1,46 @@ +import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module'; import { DataService } from '@ghostfolio/client/services/data.service'; import { Statistics } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { GfCarouselComponent } from '@ghostfolio/ui/carousel'; +import { GfLogoComponent } from '@ghostfolio/ui/logo'; +import { GfValueComponent } from '@ghostfolio/ui/value'; +import { CommonModule } from '@angular/common'; import { Component, OnDestroy, OnInit } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { format } from 'date-fns'; +import { addIcons } from 'ionicons'; +import { + cloudDownloadOutline, + peopleOutline, + starOutline +} from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; @Component({ host: { class: 'page' }, + imports: [ + CommonModule, + GfCarouselComponent, + GfLogoComponent, + GfValueComponent, + GfWorldMapChartModule, + IonIcon, + MatButtonModule, + MatCardModule, + RouterModule + ], selector: 'gf-landing-page', styleUrls: ['./landing-page.scss'], - templateUrl: './landing-page.html', - standalone: false + templateUrl: './landing-page.html' }) -export class LandingPageComponent implements OnDestroy, OnInit { +export class GfLandingPageComponent implements OnDestroy, OnInit { public countriesOfSubscribersMap: { [code: string]: { value: number }; } = {}; @@ -118,6 +143,12 @@ export class LandingPageComponent implements OnDestroy, OnInit { ); this.statistics = statistics; + + addIcons({ + cloudDownloadOutline, + peopleOutline, + starOutline + }); } public ngOnInit() { diff --git a/apps/client/src/app/pages/landing/landing-page.module.ts b/apps/client/src/app/pages/landing/landing-page.module.ts deleted file mode 100644 index ca39e6023..000000000 --- a/apps/client/src/app/pages/landing/landing-page.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module'; -import { GfCarouselComponent } from '@ghostfolio/ui/carousel'; -import { GfLogoComponent } from '@ghostfolio/ui/logo'; -import { GfValueComponent } from '@ghostfolio/ui/value'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { RouterModule } from '@angular/router'; - -import { LandingPageRoutingModule } from './landing-page-routing.module'; -import { LandingPageComponent } from './landing-page.component'; - -@NgModule({ - declarations: [LandingPageComponent], - imports: [ - CommonModule, - GfCarouselComponent, - GfLogoComponent, - GfValueComponent, - GfWorldMapChartModule, - LandingPageRoutingModule, - MatButtonModule, - MatCardModule, - RouterModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class LandingPageModule {} diff --git a/apps/client/src/app/pages/landing/landing-page.routes.ts b/apps/client/src/app/pages/landing/landing-page.routes.ts new file mode 100644 index 000000000..181661bc2 --- /dev/null +++ b/apps/client/src/app/pages/landing/landing-page.routes.ts @@ -0,0 +1,15 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfLandingPageComponent } from './landing-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfLandingPageComponent, + path: '', + title: publicRoutes.register.title + } +]; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index 656e4a88f..fde4f20fa 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -1,8 +1,12 @@ import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { ASSET_CLASS_MAPPING } from '@ghostfolio/common/config'; import { getDateFormatString } from '@ghostfolio/common/helper'; -import { LookupItem } from '@ghostfolio/common/interfaces'; +import { + AssetClassSelectorOption, + LookupItem +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { translate } from '@ghostfolio/ui/i18n'; @@ -37,7 +41,7 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { IonIcon } from '@ionic/angular/standalone'; -import { AssetClass, AssetSubClass, Tag, Type } from '@prisma/client'; +import { AssetClass, Tag, Type } from '@prisma/client'; import { isAfter, isToday } from 'date-fns'; import { addIcons } from 'ionicons'; import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; @@ -73,12 +77,16 @@ import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces'; }) export class GfCreateOrUpdateActivityDialog implements OnDestroy { public activityForm: FormGroup; - public assetClasses = Object.keys(AssetClass).map((assetClass) => { - return { id: assetClass, label: translate(assetClass) }; - }); - public assetSubClasses = Object.keys(AssetSubClass).map((assetSubClass) => { - return { id: assetSubClass, label: translate(assetSubClass) }; - }); + + public assetClassOptions: AssetClassSelectorOption[] = Object.keys(AssetClass) + .map((id) => { + return { id, label: translate(id) } as AssetClassSelectorOption; + }) + .sort((a, b) => { + return a.label.localeCompare(b.label); + }); + + public assetSubClassOptions: AssetClassSelectorOption[] = []; public currencies: string[] = []; public currencyOfAssetProfile: string; public currentMarketPrice = null; @@ -273,6 +281,26 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { } }); + this.activityForm + .get('assetClass') + .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((assetClass) => { + const assetSubClasses = ASSET_CLASS_MAPPING.get(assetClass) ?? []; + + this.assetSubClassOptions = assetSubClasses + .map((assetSubClass) => { + return { + id: assetSubClass, + label: translate(assetSubClass) + }; + }) + .sort((a, b) => a.label.localeCompare(b.label)); + + this.activityForm.get('assetSubClass').setValue(null); + + this.changeDetectorRef.markForCheck(); + }); + this.activityForm.get('date').valueChanges.subscribe(() => { if (isToday(this.activityForm.get('date').value)) { this.activityForm.get('updateAccountBalance').enable(); @@ -495,7 +523,9 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { ? undefined : this.activityForm.get('searchSymbol')?.value?.symbol) ?? this.activityForm.get('name')?.value, - tags: this.activityForm.get('tags').value, + tags: this.activityForm.get('tags').value?.map(({ id }) => { + return id; + }), type: this.activityForm.get('type').value, unitPrice: this.activityForm.get('unitPrice').value }; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html index b0185dc72..d7f466743 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -290,9 +290,12 @@ Asset Class - @for (assetClass of assetClasses; track assetClass) { - {{ - assetClass.label + @for ( + assetClassOption of assetClassOptions; + track assetClassOption.id + ) { + {{ + assetClassOption.label }} } @@ -306,9 +309,12 @@ Asset Sub Class - @for (assetSubClass of assetSubClasses; track assetSubClass) { - {{ - assetSubClass.label + @for ( + assetSubClassOption of assetSubClassOptions; + track assetSubClassOption.id + ) { + {{ + assetSubClassOption.label }} } @@ -335,12 +341,18 @@ [value]="total" />
    - + diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 660e7265e..8f7130a10 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -1,8 +1,9 @@ +import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'; import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { GfFileDropModule } from '@ghostfolio/client/directives/file-drop/file-drop.module'; import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module'; import { DataService } from '@ghostfolio/client/services/data.service'; @@ -57,8 +58,8 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces'; changeDetection: ChangeDetectionStrategy.OnPush, imports: [ GfActivitiesTableComponent, - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfFileDropModule, GfSymbolModule, IonIcon, @@ -94,6 +95,7 @@ export class GfImportActivitiesDialog implements OnDestroy { public sortColumn = 'date'; public sortDirection: SortDirection = 'desc'; public stepperOrientation: StepperOrientation; + public tags: CreateTagDto[] = []; public totalItems: number; private unsubscribeSubject = new Subject(); @@ -169,7 +171,8 @@ export class GfImportActivitiesDialog implements OnDestroy { await this.importActivitiesService.importSelectedActivities({ accounts: this.accounts, activities: this.selectedActivities, - assetProfiles: this.assetProfiles + assetProfiles: this.assetProfiles, + tags: this.tags }); this.snackBar.open( @@ -297,6 +300,7 @@ export class GfImportActivitiesDialog implements OnDestroy { this.accounts = content.accounts; this.assetProfiles = content.assetProfiles; + this.tags = content.tags; if (!isArray(content.activities)) { if (isArray(content.orders)) { @@ -328,7 +332,8 @@ export class GfImportActivitiesDialog implements OnDestroy { accounts: content.accounts, activities: content.activities, assetProfiles: content.assetProfiles, - isDryRun: true + isDryRun: true, + tags: content.tags }); this.activities = activities; this.dataSource = new MatTableDataSource(activities.reverse()); diff --git a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html index 24ca0f474..ce55c4fff 100644 --- a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html +++ b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html @@ -59,6 +59,28 @@
    }
  • +
    +

    + Liquidity + @if (user?.subscription?.type === 'Basic') { + + } +

    + +
    Inactive { + return isActive; + }) ?? null; + this.regionalMarketClusterRiskRules = rules['regionalMarketClusterRisk']?.filter(({ isActive }) => { return isActive; diff --git a/apps/client/src/app/pages/pricing/pricing-page-routing.module.ts b/apps/client/src/app/pages/pricing/pricing-page-routing.module.ts deleted file mode 100644 index 5ba675184..000000000 --- a/apps/client/src/app/pages/pricing/pricing-page-routing.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { PricingPageComponent } from './pricing-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: PricingPageComponent, - path: '', - title: $localize`Pricing` - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class PricingPageRoutingModule {} diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index 5186aaadf..170d70914 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -5,10 +5,27 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { translate } from '@ghostfolio/ui/i18n'; +import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { + ChangeDetectorRef, + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy, + OnInit +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; -import { checkmarkCircleOutline, checkmarkOutline } from 'ionicons/icons'; +import { + checkmarkCircleOutline, + checkmarkOutline, + informationCircleOutline +} from 'ionicons/icons'; import { StringValue } from 'ms'; import { StripeService } from 'ngx-stripe'; import { Subject } from 'rxjs'; @@ -16,12 +33,21 @@ import { catchError, switchMap, takeUntil } from 'rxjs/operators'; @Component({ host: { class: 'page' }, + imports: [ + CommonModule, + GfPremiumIndicatorComponent, + IonIcon, + MatButtonModule, + MatCardModule, + MatTooltipModule, + RouterModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-pricing-page', styleUrls: ['./pricing-page.scss'], - templateUrl: './pricing-page.html', - standalone: false + templateUrl: './pricing-page.html' }) -export class PricingPageComponent implements OnDestroy, OnInit { +export class GfPricingPageComponent implements OnDestroy, OnInit { public baseCurrency: string; public coupon: number; public couponId: string; @@ -56,7 +82,11 @@ export class PricingPageComponent implements OnDestroy, OnInit { private stripeService: StripeService, private userService: UserService ) { - addIcons({ checkmarkCircleOutline, checkmarkOutline }); + addIcons({ + checkmarkCircleOutline, + checkmarkOutline, + informationCircleOutline + }); } public ngOnInit() { diff --git a/apps/client/src/app/pages/pricing/pricing-page.module.ts b/apps/client/src/app/pages/pricing/pricing-page.module.ts deleted file mode 100644 index 3cfa09ade..000000000 --- a/apps/client/src/app/pages/pricing/pricing-page.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { PricingPageRoutingModule } from './pricing-page-routing.module'; -import { PricingPageComponent } from './pricing-page.component'; - -@NgModule({ - declarations: [PricingPageComponent], - imports: [ - CommonModule, - GfPremiumIndicatorComponent, - IonIcon, - MatButtonModule, - MatCardModule, - MatTooltipModule, - PricingPageRoutingModule, - RouterModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class PricingPageModule {} diff --git a/apps/client/src/app/pages/pricing/pricing-page.routes.ts b/apps/client/src/app/pages/pricing/pricing-page.routes.ts new file mode 100644 index 000000000..a5b2c6639 --- /dev/null +++ b/apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -0,0 +1,14 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { Routes } from '@angular/router'; + +import { GfPricingPageComponent } from './pricing-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfPricingPageComponent, + path: '', + title: $localize`Pricing` + } +]; diff --git a/apps/client/src/app/pages/public/public-page.html b/apps/client/src/app/pages/public/public-page.html index b5a225c73..a82c9d079 100644 --- a/apps/client/src/app/pages/public/public-page.html +++ b/apps/client/src/app/pages/public/public-page.html @@ -201,6 +201,7 @@ [data]="holdings" [deviceType]="deviceType" [hasPermissionToOpenDetails]="false" + [hasPermissionToShowQuantities]="false" [hasPermissionToShowValues]="false" [pageSize]="7" /> diff --git a/apps/client/src/app/pages/register/register-page-routing.module.ts b/apps/client/src/app/pages/register/register-page-routing.module.ts deleted file mode 100644 index 157302999..000000000 --- a/apps/client/src/app/pages/register/register-page-routing.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { publicRoutes } from '@ghostfolio/common/routes/routes'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { RegisterPageComponent } from './register-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: RegisterPageComponent, - path: '', - title: publicRoutes.register.title - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class RegisterPageRoutingModule {} diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts index 11b81c32a..35b9d5cd2 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -3,26 +3,39 @@ import { InternetIdentityService } from '@ghostfolio/client/services/internet-id import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { InfoItem, LineChartItem } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { GfLogoComponent } from '@ghostfolio/ui/logo'; -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy, + OnInit +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; -import { Router } from '@angular/router'; +import { Router, RouterModule } from '@angular/router'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { ShowAccessTokenDialogParams } from './show-access-token-dialog/interfaces/interfaces'; import { ShowAccessTokenDialog } from './show-access-token-dialog/show-access-token-dialog.component'; +import { ShowAccessTokenDialogModule } from './show-access-token-dialog/show-access-token-dialog.module'; @Component({ host: { class: 'page' }, + imports: [ + GfLogoComponent, + MatButtonModule, + RouterModule, + ShowAccessTokenDialogModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-register-page', styleUrls: ['./register-page.scss'], - templateUrl: './register-page.html', - standalone: false + templateUrl: './register-page.html' }) -export class RegisterPageComponent implements OnDestroy, OnInit { - public demoAuthToken: string; +export class GfRegisterPageComponent implements OnDestroy, OnInit { public deviceType: string; public hasPermissionForSocialLogin: boolean; public hasPermissionForSubscription: boolean; @@ -46,18 +59,20 @@ export class RegisterPageComponent implements OnDestroy, OnInit { } public ngOnInit() { - const { demoAuthToken, globalPermissions } = this.dataService.fetchInfo(); + const { globalPermissions } = this.dataService.fetchInfo(); - this.demoAuthToken = demoAuthToken; this.deviceType = this.deviceService.getDeviceInfo().deviceType; + this.hasPermissionForSocialLogin = hasPermission( globalPermissions, permissions.enableSocialLogin ); + this.hasPermissionForSubscription = hasPermission( globalPermissions, permissions.enableSubscription ); + this.hasPermissionToCreateUser = hasPermission( globalPermissions, permissions.createUserAccount diff --git a/apps/client/src/app/pages/register/register-page.module.ts b/apps/client/src/app/pages/register/register-page.module.ts deleted file mode 100644 index 5ce8e3ed9..000000000 --- a/apps/client/src/app/pages/register/register-page.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { GfLogoComponent } from '@ghostfolio/ui/logo'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { RegisterPageRoutingModule } from './register-page-routing.module'; -import { RegisterPageComponent } from './register-page.component'; -import { ShowAccessTokenDialogModule } from './show-access-token-dialog/show-access-token-dialog.module'; - -@NgModule({ - declarations: [RegisterPageComponent], - imports: [ - CommonModule, - GfLogoComponent, - IonIcon, - MatButtonModule, - RegisterPageRoutingModule, - RouterModule, - ShowAccessTokenDialogModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class RegisterPageModule {} diff --git a/apps/client/src/app/pages/register/register-page.routes.ts b/apps/client/src/app/pages/register/register-page.routes.ts new file mode 100644 index 000000000..ca5b00376 --- /dev/null +++ b/apps/client/src/app/pages/register/register-page.routes.ts @@ -0,0 +1,15 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfRegisterPageComponent } from './register-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfRegisterPageComponent, + path: '', + title: publicRoutes.register.title + } +]; diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts index 397a2eb47..0224c13c7 100644 --- a/apps/client/src/app/pages/zen/zen-page.component.ts +++ b/apps/client/src/app/pages/zen/zen-page.component.ts @@ -2,7 +2,11 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { CommonModule } from '@angular/common'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { MatTabsModule } from '@angular/material/tabs'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { analyticsOutline, walletOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; @@ -11,12 +15,12 @@ import { takeUntil } from 'rxjs/operators'; @Component({ host: { class: 'page has-tabs' }, + imports: [CommonModule, IonIcon, MatTabsModule, RouterModule], selector: 'gf-zen-page', styleUrls: ['./zen-page.scss'], - templateUrl: './zen-page.html', - standalone: false + templateUrl: './zen-page.html' }) -export class ZenPageComponent implements OnDestroy, OnInit { +export class GfZenPageComponent implements OnDestroy, OnInit { public deviceType: string; public tabs: TabConfiguration[] = []; public user: User; diff --git a/apps/client/src/app/pages/zen/zen-page.module.ts b/apps/client/src/app/pages/zen/zen-page.module.ts deleted file mode 100644 index 2346e3705..000000000 --- a/apps/client/src/app/pages/zen/zen-page.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { GfHomeHoldingsComponent } from '@ghostfolio/client/components/home-holdings/home-holdings.component'; -import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatTabsModule } from '@angular/material/tabs'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { ZenPageRoutingModule } from './zen-page-routing.module'; -import { ZenPageComponent } from './zen-page.component'; - -@NgModule({ - declarations: [ZenPageComponent], - imports: [ - CommonModule, - GfHomeHoldingsComponent, - GfHomeOverviewComponent, - IonIcon, - MatTabsModule, - RouterModule, - ZenPageRoutingModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class ZenPageModule {} diff --git a/apps/client/src/app/pages/zen/zen-page-routing.module.ts b/apps/client/src/app/pages/zen/zen-page.routes.ts similarity index 68% rename from apps/client/src/app/pages/zen/zen-page-routing.module.ts rename to apps/client/src/app/pages/zen/zen-page.routes.ts index 84099425c..60e163ca4 100644 --- a/apps/client/src/app/pages/zen/zen-page-routing.module.ts +++ b/apps/client/src/app/pages/zen/zen-page.routes.ts @@ -3,12 +3,11 @@ import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-over import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; +import { Routes } from '@angular/router'; -import { ZenPageComponent } from './zen-page.component'; +import { GfZenPageComponent } from './zen-page.component'; -const routes: Routes = [ +export const routes: Routes = [ { canActivate: [AuthGuard], children: [ @@ -22,14 +21,8 @@ const routes: Routes = [ title: internalRoutes.home.subRoutes.holdings.title } ], - component: ZenPageComponent, + component: GfZenPageComponent, path: '', title: internalRoutes.zen.title } ]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class ZenPageRoutingModule {} diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 033ae7e24..27a34652b 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -1,3 +1,4 @@ +import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'; import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; @@ -75,12 +76,14 @@ export class ImportActivitiesService { accounts, activities, assetProfiles, - isDryRun = false + isDryRun = false, + tags }: { activities: CreateOrderDto[]; accounts?: CreateAccountWithBalancesDto[]; assetProfiles?: CreateAssetProfileWithMarketDataDto[]; isDryRun?: boolean; + tags?: CreateTagDto[]; }): Promise<{ activities: Activity[]; }> { @@ -89,7 +92,8 @@ export class ImportActivitiesService { { accounts, activities, - assetProfiles + assetProfiles, + tags }, isDryRun ) @@ -110,11 +114,13 @@ export class ImportActivitiesService { public importSelectedActivities({ accounts, activities, - assetProfiles + assetProfiles, + tags }: { accounts?: CreateAccountWithBalancesDto[]; activities: Activity[]; assetProfiles?: CreateAssetProfileWithMarketDataDto[]; + tags?: CreateTagDto[]; }): Promise<{ activities: Activity[]; }> { @@ -124,7 +130,12 @@ export class ImportActivitiesService { importData.push(this.convertToCreateOrderDto(activity)); } - return this.importJson({ accounts, assetProfiles, activities: importData }); + return this.importJson({ + accounts, + assetProfiles, + tags, + activities: importData + }); } private convertToCreateOrderDto({ @@ -135,6 +146,7 @@ export class ImportActivitiesService { fee, quantity, SymbolProfile, + tags, type, unitPrice, updateAccountBalance @@ -150,7 +162,10 @@ export class ImportActivitiesService { currency: currency ?? SymbolProfile.currency, dataSource: SymbolProfile.dataSource, date: date.toString(), - symbol: SymbolProfile.symbol + symbol: SymbolProfile.symbol, + tags: tags?.map(({ id }) => { + return id; + }) }; } @@ -391,6 +406,7 @@ export class ImportActivitiesService { accounts?: CreateAccountWithBalancesDto[]; activities: CreateOrderDto[]; assetProfiles?: CreateAssetProfileWithMarketDataDto[]; + tags?: CreateTagDto[]; }, aIsDryRun = false ) { diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 55c10bd2e..6e5a9b3ea 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -355,7 +355,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -371,7 +371,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -387,7 +387,7 @@ En cartera libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -395,7 +395,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -507,7 +507,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -543,15 +543,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -583,7 +583,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -619,7 +619,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -815,7 +815,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -879,7 +879,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1015,7 +1015,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -1031,7 +1031,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -1047,7 +1047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -1067,7 +1067,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1611,7 +1611,7 @@ Preu Mínim apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1619,7 +1619,7 @@ Preu Màxim apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1627,7 +1627,7 @@ Quantitat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1635,7 +1635,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1643,7 +1647,7 @@ Rendiment del Dividend apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -1651,7 +1655,7 @@ Comissions apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1659,7 +1663,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1667,7 +1671,7 @@ Indonèsia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -1675,7 +1679,7 @@ Activitat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -1683,7 +1687,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1723,7 +1727,7 @@ Gestionar Activitats apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1739,7 +1743,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1755,7 +1759,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1967,7 +1971,7 @@ Les dades del mercat s’han retardat apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -2219,7 +2223,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -2227,7 +2231,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -2235,7 +2239,7 @@ 1 any libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -2243,7 +2247,7 @@ 5 anys libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -2251,7 +2255,7 @@ Màx libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2262,6 +2266,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Grant access Concedeix accés @@ -2583,7 +2595,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2603,7 +2615,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2619,7 +2631,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2747,7 +2759,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2843,7 +2855,7 @@ Dades de mercat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3192,7 +3204,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3200,7 +3212,7 @@ Explotacions apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3304,7 +3316,7 @@ Programari de gestió patrimonial de codi obert apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3700,11 +3712,11 @@ Activitats apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3720,11 +3732,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3816,7 +3828,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -3824,7 +3836,7 @@ Activitats d’importació apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3832,7 +3844,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -3840,7 +3852,7 @@ Importar dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3848,7 +3860,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3856,7 +3868,7 @@ S’estan important dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3864,7 +3876,7 @@ La importació s’ha completat apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3872,7 +3884,7 @@ S’estan validant les dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3900,7 +3912,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -4150,9 +4162,13 @@ Dividend Dividend + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4180,7 +4196,7 @@ Inversió apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4356,7 +4372,7 @@ Riscos del clúster de divises apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -4364,7 +4380,7 @@ Riscos del clúster de comptes apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -4596,7 +4612,7 @@ Vols refinar la teva estratègia d’inversió personal? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -4604,7 +4620,7 @@ Ghostfolio us permet fer un seguiment de la vostra riquesa. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4709,7 +4725,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5033,7 +5049,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -5045,7 +5061,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -5069,7 +5085,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -5077,7 +5093,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -5085,7 +5101,7 @@ De veritat vols suprimir aquestes activitats? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -5093,7 +5109,7 @@ Realment vols suprimir aquesta activitat? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -5101,7 +5117,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5109,7 +5125,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5117,7 +5133,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5125,7 +5141,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5133,7 +5149,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5149,7 +5165,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5157,7 +5173,7 @@ anys libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5173,7 +5189,7 @@ Interval de dates libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5181,7 +5197,7 @@ Restableix els filtres libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5189,7 +5205,7 @@ Aplicar filtres libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5283,6 +5299,10 @@ Interest Interès + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -5313,7 +5333,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5329,7 +5349,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -5341,11 +5361,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -5377,7 +5397,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -5385,7 +5405,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -5409,7 +5429,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -5473,7 +5493,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -5509,7 +5529,7 @@ Japó libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5593,7 +5613,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5605,7 +5625,7 @@ Etiqueta libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5649,7 +5669,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5727,6 +5747,10 @@ Liquidity Liquiditat + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5849,7 +5873,7 @@ Por extrema libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5857,7 +5881,7 @@ Avarícia extrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5865,7 +5889,7 @@ Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -6097,7 +6121,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6129,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6137,7 @@ Belgium libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6145,7 @@ Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6153,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6161,7 @@ Czech Republic libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6169,7 @@ Finland libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6177,7 @@ France libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6185,7 @@ Germany libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6193,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6201,7 @@ Italy libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6209,7 @@ Netherlands libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6217,7 @@ New Zealand libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6225,7 @@ Poland libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6233,7 @@ Romania libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6241,7 @@ South Africa libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6249,7 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6257,7 @@ United States libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6265,7 +6289,7 @@ Inactive apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6277,7 +6301,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6285,11 +6309,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6297,11 +6321,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6309,7 +6333,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6327,10 +6351,34 @@ Close Close + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6344,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copy link to clipboard @@ -6373,7 +6429,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6629,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6663,7 +6719,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6783,7 +6839,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6791,11 +6847,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6811,15 +6867,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6831,7 +6887,7 @@ Asset Class Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6883,7 +6939,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generate Security Token @@ -7115,7 +7179,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Find holding or page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Quick Links libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Asset Profiles libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 7cb7937a3..bef98b3b6 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -182,15 +182,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -222,7 +222,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -258,7 +258,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -418,7 +418,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -438,7 +438,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -666,7 +666,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -714,7 +714,7 @@ Aktivitäten verwalten apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -898,7 +898,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -918,7 +918,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -942,7 +942,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -954,7 +954,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -970,7 +970,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -982,7 +982,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -990,7 +990,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -998,7 +998,7 @@ 1J libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1006,7 +1006,7 @@ 5J libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1014,7 +1014,7 @@ Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1030,7 +1030,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1266,7 +1266,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1322,7 +1322,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1330,7 +1330,7 @@ Cash-Bestand apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1346,7 +1346,7 @@ Plattform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1754,7 +1754,7 @@ Positionen apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1778,7 +1778,7 @@ Positionen libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1838,7 +1838,7 @@ Anzahl apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1846,7 +1846,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1858,7 +1862,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1882,11 +1886,11 @@ Aktivitäten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1902,11 +1906,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1926,7 +1930,7 @@ Daten importieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1934,7 +1938,7 @@ Der Import wurde abgeschlossen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2006,7 +2010,7 @@ Ghostfolio verschafft dir den Überblick über dein Vermögen. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2106,7 +2110,7 @@ Aktivitäten importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2114,7 +2118,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2126,7 +2130,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2138,7 +2142,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2146,7 +2150,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2154,7 +2158,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2162,7 +2166,7 @@ Möchtest du diese Aktivität wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2234,7 +2238,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2246,7 +2250,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2254,7 +2258,7 @@ Minimum Preis apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2262,7 +2266,7 @@ Maximum Preis apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2274,7 +2278,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2290,7 +2294,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2368,6 +2372,10 @@ Interest Verzinsung + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2418,7 +2426,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2434,7 +2442,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2578,11 +2586,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2606,7 +2614,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2614,7 +2622,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2642,7 +2650,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2654,7 +2662,7 @@ Tag libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -2778,7 +2786,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2928,9 +2936,13 @@ Dividend Dividenden + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2970,7 +2982,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2994,7 +3006,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3018,7 +3030,7 @@ Marktdaten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3054,7 +3066,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3078,7 +3090,7 @@ Dividenden importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3086,7 +3098,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3422,7 +3434,7 @@ Gebühren apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3430,7 +3442,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -3606,7 +3618,7 @@ Möchtest du diese Aktivitäten wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4258,7 +4270,7 @@ Japan libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5000,7 +5012,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5084,7 +5096,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5136,7 +5148,7 @@ Währungsklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5144,7 +5156,7 @@ Kontoklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5280,7 +5292,7 @@ Open Source Software für die Vermögensverwaltung apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5304,7 +5316,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5312,7 +5324,7 @@ Extreme Gier libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5320,7 +5332,7 @@ Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5360,7 +5372,7 @@ Cash-Bestände apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5412,7 +5424,7 @@ Zeitraum libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5447,6 +5459,14 @@ 91 + + Argentina + Argentinien + + libs/ui/src/lib/i18n.ts + 77 + + Private Privat @@ -5468,7 +5488,7 @@ Die Marktdaten sind verzögert für apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5476,7 +5496,7 @@ Investition apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5548,7 +5568,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5556,7 +5576,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5564,7 +5584,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5572,7 +5592,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5580,7 +5600,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5616,7 +5636,7 @@ Filter zurücksetzen libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5632,7 +5652,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5640,7 +5660,7 @@ Jahre libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5648,7 +5668,7 @@ Filter anwenden libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5745,7 +5765,7 @@ Indonesien libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5753,7 +5773,7 @@ Aktivität apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5761,7 +5781,7 @@ Dividendenrendite apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5791,6 +5811,10 @@ Liquidity Liquidität + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5945,7 +5969,7 @@ Möchtest du deine persönliche Anlagestrategie verfeinern? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6121,7 +6145,7 @@ Australien libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6129,7 +6153,7 @@ Österreich libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6137,7 +6161,7 @@ Belgien libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6145,7 +6169,7 @@ Bulgarien libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6153,7 +6177,7 @@ Kanada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6161,7 +6185,7 @@ Tschechien libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6169,7 +6193,7 @@ Finnland libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6177,7 +6201,7 @@ Frankreich libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6185,7 +6209,7 @@ Deutschland libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6193,7 +6217,7 @@ Indien libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6201,7 +6225,7 @@ Italien libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6209,7 +6233,7 @@ Niederlande libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6217,7 +6241,7 @@ Neuseeland libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6225,7 +6249,7 @@ Polen libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6233,7 +6257,7 @@ Rumänien libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6241,7 +6265,7 @@ Südafrika libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6249,7 +6273,7 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6257,7 +6281,7 @@ USA libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6289,7 +6313,7 @@ Inaktiv apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6301,7 +6325,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6309,11 +6333,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6321,11 +6345,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6333,7 +6357,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6351,10 +6375,34 @@ Close Schliessen + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6368,6 +6416,14 @@ 33 + + Accounts + Konten + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Link in die Zwischenablage kopieren @@ -6397,7 +6453,7 @@ Performance mit Währungseffekt Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6597,7 +6653,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6687,7 +6743,7 @@ Wirtschaftsraumklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6807,7 +6863,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6815,11 +6871,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6835,15 +6891,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6855,7 +6911,7 @@ Anlageklasseklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6907,7 +6963,7 @@ Regionale Marktklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6995,7 +7051,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7015,7 +7071,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7055,7 +7111,7 @@ Britische Jungferninseln libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7063,7 +7119,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7126,6 +7182,14 @@ 201 + + Find account, holding or page... + Konto, Position oder Seite finden... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Sicherheits-Token generieren @@ -7139,7 +7203,7 @@ Vereinigtes Königreich libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Einrichtung apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ Es wurde kein Notfallfonds eingerichtet apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ Ein Notfallfonds wurde eingerichtet apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Gebührenverhältnis apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ Die Gebühren übersteigen ${thresholdMax}% deiner ursprünglichen Investition (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ Die Gebühren übersteigen ${thresholdMax}% deiner ursprünglichen Investition (${feeRatio}%) nicht apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Position oder Seite finden... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Schnellzugriff libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Anlageprofile libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Investition: Basiswährung apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ Der Hauptteil deiner aktuellen Investition ist nicht in deiner Basiswährung (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ Der Hauptteil deiner aktuellen Investition ist in deiner Basiswährung (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Investition apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Über ${thresholdMax}% deiner aktuellen Investition ist in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ Der Hauptteil deiner aktuellen Investition ist in ${currency} (${maxValueRatio}%) und übersteigt ${thresholdMax}% nicht apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Währungsklumpenrisiken apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Wirtschaftsraumklumpenrisiken apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Notfallfonds apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Gebühren apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidität + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Kaufkraft + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Deine Kaufkraft liegt unter ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Deine Kaufkraft übersteigt ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Regionale Marktklumpenrisiken apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ Keine Ergebnisse gefunden... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Entwickelte Länder apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ Der Anteil entwickelter Länder deiner aktuellen Investition (${developedMarketsValueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ Der Anteil entwickelter Länder deiner aktuellen Investition (${developedMarketsValueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ Der Anteil entwickelter Länder deiner aktuellen Investition (${developedMarketsValueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Schwellenländer apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${emergingMarketsValueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${emergingMarketsValueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${emergingMarketsValueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Asien-Pazifik apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ Der Anteil des Asien-Pazifik-Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ Der Anteil des Asien-Pazifik-Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ Der Anteil des Asien-Pazifik-Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Schwellenländer apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ Der Anteil des europäischen Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ Der Anteil des europäischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ Der Anteil des europäischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ Der Anteil des japanischen Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ Der Anteil des japanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ Der Anteil des japanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ Nordamerika apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ Der Anteil des nordamerikanischen Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ Der Anteil des nordamerikanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ Der Anteil des nordamerikanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 47ced2075..3f2fb0a0b 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -183,15 +183,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -223,7 +223,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -259,7 +259,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -419,7 +419,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -439,7 +439,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -651,7 +651,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -699,7 +699,7 @@ Gestión de las operaciones apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -883,7 +883,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -903,7 +903,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -927,7 +927,7 @@ Reporta un anomalía de los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -939,7 +939,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -955,7 +955,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -967,7 +967,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -975,7 +975,7 @@ Desde principio de año libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -983,7 +983,7 @@ 1 año libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -991,7 +991,7 @@ 5 años libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -999,7 +999,7 @@ Máximo libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1015,7 +1015,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1251,7 +1251,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1307,7 +1307,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1315,7 +1315,7 @@ Saldo en efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1331,7 +1331,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1739,7 +1739,7 @@ Participaciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1763,7 +1763,7 @@ Participaciones libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1823,7 +1823,7 @@ Cantidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1831,7 +1831,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1843,7 +1847,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1867,11 +1871,11 @@ Operación apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1887,11 +1891,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1911,7 +1915,7 @@ Importando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1919,7 +1923,7 @@ La importación se ha completado apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -1991,7 +1995,7 @@ Ghostfolio te permite hacer un seguimiento de tu riqueza. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2091,7 +2095,7 @@ Importar operaciones apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2099,7 +2103,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2111,7 +2115,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2123,7 +2127,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2131,7 +2135,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2139,7 +2143,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2147,7 +2151,7 @@ ¿Estás seguro de eliminar esta operación? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2215,7 +2219,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2231,7 +2235,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2263,7 +2267,7 @@ Precio máximo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2299,7 +2303,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2315,7 +2319,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2323,7 +2327,7 @@ Precio mínimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2345,6 +2349,10 @@ Interest Interés + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2403,7 +2411,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2419,7 +2427,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2563,11 +2571,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2591,7 +2599,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2599,7 +2607,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2627,7 +2635,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2639,7 +2647,7 @@ Etiqueta libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -2763,7 +2771,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2905,9 +2913,13 @@ Dividend Dividendo + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2955,7 +2967,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2979,7 +2991,7 @@ Validando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3003,7 +3015,7 @@ Datos del mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3039,7 +3051,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3063,7 +3075,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3071,7 +3083,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3407,7 +3419,7 @@ Comisiones apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3415,7 +3427,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -3583,7 +3595,7 @@ ¿Realmente deseas eliminar estas actividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4235,7 +4247,7 @@ Japón libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4977,7 +4989,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5061,7 +5073,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5113,7 +5125,7 @@ Riesgos de clúster de divisas apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5121,7 +5133,7 @@ Riesgos de clúster de cuentas apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5257,7 +5269,7 @@ Software de gestión de patrimonio de código abierto apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5281,7 +5293,7 @@ Miedo extremo libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5289,7 +5301,7 @@ Avaricia extrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5297,7 +5309,7 @@ Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5337,7 +5349,7 @@ Saldos de efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5389,7 +5401,7 @@ Rango de fechas libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5424,6 +5436,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privado @@ -5445,7 +5465,7 @@ Los datos del mercado se retrasan por apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5453,7 +5473,7 @@ Inversión apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5525,7 +5545,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5533,7 +5553,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5541,7 +5561,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5549,7 +5569,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5557,7 +5577,7 @@ El año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5593,7 +5613,7 @@ Reiniciar filtros libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5609,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5617,7 +5637,7 @@ años libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5625,7 +5645,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5722,7 +5742,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5730,7 +5750,7 @@ Actividad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5738,7 +5758,7 @@ Rendimiento por dividendo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5768,6 +5788,10 @@ Liquidity Liquidez + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5922,7 +5946,7 @@ ¿Te gustaría refinar tu estrategia de inversión personal? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6098,7 +6122,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6106,7 +6130,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6114,7 +6138,7 @@ Bélgica libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6122,7 +6146,7 @@ Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6130,7 +6154,7 @@ Canadá libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6138,7 +6162,7 @@ República Checa libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6146,7 +6170,7 @@ Finlandia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6154,7 +6178,7 @@ Francia libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6162,7 +6186,7 @@ Alemania libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6170,7 +6194,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6178,7 +6202,7 @@ Italia libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6186,7 +6210,7 @@ Países Bajos libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6194,7 +6218,7 @@ Nueva Zelanda libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6202,7 +6226,7 @@ Polonia libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6210,7 +6234,7 @@ Rumanía libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6218,7 +6242,7 @@ Sudáfrica libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6226,7 +6250,7 @@ Tailandia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6234,7 +6258,7 @@ Estados Unidos libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6266,7 +6290,7 @@ Inactiva apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6278,7 +6302,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6286,11 +6310,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6298,11 +6322,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6310,7 +6334,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6328,10 +6352,34 @@ Close Cerca + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6345,6 +6393,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copiar enlace al portapapeles @@ -6374,7 +6430,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6574,7 +6630,7 @@ Ucrania libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6664,7 +6720,7 @@ Riesgos de clúster del mercado económico apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6784,7 +6840,7 @@ Ahorrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6792,11 +6848,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6812,15 +6868,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6832,7 +6888,7 @@ Riesgos del grupo de clases de activos apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6884,7 +6940,7 @@ Riesgos del mercado regional agrupados apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6972,7 +7028,7 @@ Cambiar libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6992,7 +7048,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7032,7 +7088,7 @@ Islas Vírgenes Británicas libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7040,7 +7096,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7103,6 +7159,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generar token de seguridad @@ -7116,7 +7180,7 @@ Reino Unido libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7326,7 +7390,7 @@ Fondo de Emergencia: Establecer apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7334,7 +7398,7 @@ No se ha creado ningún fondo de emergencia apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7342,7 +7406,7 @@ Se ha creado un fondo de emergencia apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7350,7 +7414,7 @@ Relación de tarifas apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7358,7 +7422,7 @@ Las tarifas superan el ${thresholdMax}% de su inversión inicial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7366,7 +7430,7 @@ Las tarifas no superan el ${thresholdMax}% de su inversión inicial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7377,20 +7441,12 @@ 12 - - Find holding or page... - Buscar explotación o página... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Enlaces rápidos libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7398,7 +7454,7 @@ Perfiles de activos libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7581,7 +7637,7 @@ The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% + La contribución de renta variable de tu inversión actual (${equityValueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 43 @@ -7589,7 +7645,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% - The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% + La contribución de renta variable de tu inversión actual (${equityValueRatio}%) está por debajo del ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 47 @@ -7597,7 +7653,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución de renta variable de tu inversión actual (${equityValueRatio}%) está dentro del rango entre ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 51 @@ -7605,7 +7661,7 @@ Fixed Income - Fixed Income + Renta fija apps/client/src/app/pages/i18n/i18n-page.html 55 @@ -7613,7 +7669,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% + La contribución de renta fija de tu inversión actual (${fixedIncomeValueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 57 @@ -7621,7 +7677,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% + La contribución de renta fija de tu inversión actual (${fixedIncomeValueRatio}%) está por debajo del ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 61 @@ -7629,7 +7685,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución de renta fija de tu inversión actual (${fixedIncomeValueRatio}%) está dentro del rango entre ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 66 @@ -7637,55 +7693,55 @@ Investment: Base Currency - Investment: Base Currency + Inversión: Moneda base apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + La mayor parte de tu inversión actual no está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + La mayor parte de tu inversión actual está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 Investment - Investment + Inversión apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) - Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) + Más del ${thresholdMax}% de tu inversión actual está en ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% + La mayor parte de tu inversión actual está en ${currency} (${maxValueRatio}%) y no supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 start - start + comenzar kebab-case libs/common/src/lib/routes/routes.ts @@ -7698,7 +7754,7 @@ Do you really want to generate a new security token? - Do you really want to generate a new security token? + ¿Realmente deseas generar un nuevo token de seguridad? apps/client/src/app/components/user-account-access/user-account-access.component.ts 174 @@ -7706,7 +7762,7 @@ Generate - Generate + Generar apps/client/src/app/components/user-account-access/user-account-access.html 43 @@ -7714,7 +7770,7 @@ Stocks - Stocks + Acciones apps/client/src/app/components/markets/markets.component.ts 52 @@ -7726,7 +7782,7 @@ Cryptocurrencies - Cryptocurrencies + Criptomonedas apps/client/src/app/components/markets/markets.component.ts 53 @@ -7746,15 +7802,15 @@ Manage Asset Profile - Manage Asset Profile + Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 Alternative Investment - Alternative Investment + Inversión alternativa libs/ui/src/lib/i18n.ts 45 @@ -7762,7 +7818,7 @@ Collectible - Collectible + Coleccionable libs/ui/src/lib/i18n.ts 55 @@ -7770,19 +7826,19 @@ Average Unit Price - Average Unit Price + Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 Account Cluster Risks - Account Cluster Risks + Riesgos de grupo de cuentas apps/client/src/app/pages/i18n/i18n-page.html 14 @@ -7790,7 +7846,7 @@ Asset Class Cluster Risks - Asset Class Cluster Risks + Riesgos de grupo de clases de activos apps/client/src/app/pages/i18n/i18n-page.html 39 @@ -7798,10 +7854,10 @@ Currency Cluster Risks - Currency Cluster Risks + Riesgos del clúster de divisas apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7809,7 +7865,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7817,7 +7873,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7825,7 +7881,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7833,7 +7921,7 @@ Riesgos de los grupos de mercados regionales apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7841,7 +7929,7 @@ No se encontraron resultados... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7849,7 +7937,7 @@ Mercados desarrollados apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7857,7 +7945,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7865,7 +7953,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7873,7 +7961,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7881,7 +7969,7 @@ Mercados emergentes apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7889,7 +7977,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7897,7 +7985,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7905,7 +7993,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7929,7 +8017,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7937,7 +8025,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7945,7 +8033,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7953,7 +8041,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7961,7 +8049,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7969,7 +8057,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7977,7 +8065,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7985,7 +8073,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7993,7 +8081,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8001,7 +8089,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8009,7 +8097,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8017,7 +8105,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8025,7 +8113,7 @@ Japón apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8033,7 +8121,7 @@ La contribución al mercado japonés de su inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8041,7 +8129,7 @@ La contribución al mercado japonés de su inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8049,7 +8137,7 @@ La contribución al mercado japonés de su inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8057,7 +8145,7 @@ Norteamérica apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8065,7 +8153,7 @@ La contribución del mercado de América del Norte de su inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8073,7 +8161,7 @@ La contribución al mercado de América del Norte de su inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8081,7 +8169,7 @@ La contribución al mercado de América del Norte de su inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index d14fa2bdf..db30d79cb 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -78,7 +78,7 @@ Plateforme apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -186,7 +186,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -194,7 +194,7 @@ Balance Cash apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -238,15 +238,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -314,7 +314,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -474,7 +474,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -502,7 +502,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -574,7 +574,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -590,7 +590,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -606,7 +606,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -626,7 +626,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -946,7 +946,7 @@ Gérer les Activités apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -962,7 +962,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -978,7 +978,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1178,7 +1178,7 @@ Prix Minimum apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1186,7 +1186,7 @@ Prix Maximum apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1194,7 +1194,7 @@ Quantité apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1202,7 +1202,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1210,7 +1214,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1222,7 +1226,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1230,7 +1234,7 @@ CDA libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1238,7 +1242,7 @@ 1A libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1246,7 +1250,7 @@ 5A libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1254,7 +1258,7 @@ Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1278,7 +1282,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -1290,7 +1294,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -1306,7 +1310,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1594,7 +1598,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1634,7 +1638,7 @@ Données du marché apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -1818,7 +1822,7 @@ Positions apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1898,11 +1902,11 @@ Activités apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1918,11 +1922,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1998,7 +2002,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -2006,7 +2010,7 @@ Import des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -2014,7 +2018,7 @@ L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2022,7 +2026,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -2216,9 +2220,13 @@ Dividend Dividende + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2326,7 +2334,7 @@ Positions libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -2382,7 +2390,7 @@ Ghostfolio vous aide à garder un aperçu de votre patrimoine. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2394,7 +2402,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2546,7 +2554,7 @@ Importer Activités apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2554,7 +2562,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2566,7 +2574,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2578,7 +2586,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2586,7 +2594,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2594,7 +2602,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2602,7 +2610,7 @@ Voulez-vous vraiment supprimer cette activité ? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2640,6 +2648,10 @@ Interest Intérêt + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2670,7 +2682,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -2686,7 +2698,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -2698,11 +2710,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2726,7 +2738,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2734,7 +2746,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2758,7 +2770,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2782,7 +2794,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2822,7 +2834,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2834,7 +2846,7 @@ Étiquette libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3038,7 +3050,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3062,7 +3074,7 @@ Importer Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3070,7 +3082,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3406,7 +3418,7 @@ Frais apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3414,7 +3426,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -3582,7 +3594,7 @@ Voulez-vous vraiment supprimer toutes vos activités ? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4234,7 +4246,7 @@ Japon libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4976,7 +4988,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5060,7 +5072,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5112,7 +5124,7 @@ Risques de change apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5132,7 @@ Risques liés aux regroupements de comptes apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5268,7 @@ Logiciel libre de Gestion de Patrimoine apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5280,7 +5292,7 @@ Extreme Peur libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5300,7 @@ Extreme Cupidité libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5308,7 @@ Neutre libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5336,7 +5348,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5388,7 +5400,7 @@ Intervalle de Date libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5423,6 +5435,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privée @@ -5444,7 +5464,7 @@ Les données du marché sont retardées de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5452,7 +5472,7 @@ Investissement apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5524,7 +5544,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5532,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5540,7 +5560,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5548,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5556,7 +5576,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5592,7 +5612,7 @@ Réinitialiser les Filtres libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5608,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5616,7 +5636,7 @@ années libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5624,7 +5644,7 @@ Appliquer les Filtres libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5721,7 +5741,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5749,7 @@ Activitées apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5757,7 @@ Rendement en Dividende apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5767,6 +5787,10 @@ Liquidity Liquiditées + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5921,7 +5945,7 @@ Souhaitez-vous affiner votre stratégie d’investissement personnelle? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6097,7 +6121,7 @@ Australie libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6129,7 @@ Autriche libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6137,7 @@ Belgique libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6145,7 @@ Bulgarie libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6153,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6161,7 @@ République Tchèque libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6169,7 @@ Finlande libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6177,7 @@ France libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6185,7 @@ Allemagne libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6193,7 @@ Inde libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6201,7 @@ Italie libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6209,7 @@ Pays-Bas libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6217,7 @@ Nouvelle-Zélande libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6225,7 @@ Pologne libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6233,7 @@ Roumanie libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6241,7 @@ Afrique du Sud libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6249,7 @@ Thaïlande libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6257,7 @@ Etats-Unis libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6265,7 +6289,7 @@ Inactif apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6277,7 +6301,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6285,11 +6309,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6297,11 +6321,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6309,7 +6333,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6327,10 +6351,34 @@ Close Fermer + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6344,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copier le lien dans le presse-papiers @@ -6373,7 +6429,7 @@ Performance avec taux de change appliqué Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6629,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6663,7 +6719,7 @@ Risques liés aux zones économiques du marché apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6783,7 +6839,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6791,11 +6847,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6811,15 +6867,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6831,7 +6887,7 @@ Risques liés aux regroupements de classes d’actifs apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6883,7 +6939,7 @@ Risques liés aux regroupements de marchés régionaux apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ Îles Vierges britanniques libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapour libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Générer un jeton de sécurité @@ -7115,7 +7179,7 @@ Royaume-Uni libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Fonds d’urgence : Mise en place apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ Aucun fonds d’urgence n’a été mis en place apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ Un fonds d’urgence a été mis en place apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Ratio de frais apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ Les frais dépassent ${thresholdMax}% de votre investissement initial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ Les frais ne dépassent pas ${thresholdMax}% de votre investissement initial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Rechercher une position ou une page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Liens rapides libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Profils d’Actifs libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Investissement apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Plus de ${thresholdMax}% de votre investissement actuel est en ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ La majeure partie de votre investissement actuel est en ${currency} (${maxValueRatio}%) et n’excède pas ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 0a13e4dd7..9d8bd6e92 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -183,15 +183,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -223,7 +223,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -259,7 +259,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -419,7 +419,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -439,7 +439,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -651,7 +651,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -699,7 +699,7 @@ Gestione delle attività apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -883,7 +883,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -903,7 +903,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -927,7 +927,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -939,7 +939,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -955,7 +955,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -967,7 +967,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -975,7 +975,7 @@ anno corrente libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -983,7 +983,7 @@ 1 anno libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -991,7 +991,7 @@ 5 anni libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -999,7 +999,7 @@ Massimo libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1015,7 +1015,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1251,7 +1251,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1307,7 +1307,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1315,7 +1315,7 @@ Saldo di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1331,7 +1331,7 @@ Piattaforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1739,7 +1739,7 @@ Partecipazioni apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1763,7 +1763,7 @@ Partecipazioni libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1823,7 +1823,7 @@ Quantità apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1831,7 +1831,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1843,7 +1847,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1867,11 +1871,11 @@ Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1887,11 +1891,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1911,7 +1915,7 @@ Importazione dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1919,7 +1923,7 @@ L’importazione è stata completata apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -1991,7 +1995,7 @@ Ghostfolio ti permette di tenere traccia della tua ricchezza. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2091,7 +2095,7 @@ Importa le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2099,7 +2103,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2111,7 +2115,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2123,7 +2127,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2131,7 +2135,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2139,7 +2143,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2147,7 +2151,7 @@ Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2215,7 +2219,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2231,7 +2235,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2263,7 +2267,7 @@ Prezzo massimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2299,7 +2303,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2315,7 +2319,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2323,7 +2327,7 @@ Prezzo minimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2345,6 +2349,10 @@ Interest Interesse + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2403,7 +2411,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2419,7 +2427,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2563,11 +2571,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2591,7 +2599,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2599,7 +2607,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2627,7 +2635,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2639,7 +2647,7 @@ Etichetta libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -2763,7 +2771,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2905,9 +2913,13 @@ Dividend Dividendi + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2955,7 +2967,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2979,7 +2991,7 @@ Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3003,7 +3015,7 @@ Dati del mercato apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3039,7 +3051,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3063,7 +3075,7 @@ Importa i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3071,7 +3083,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3407,7 +3419,7 @@ Commissioni apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3415,7 +3427,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -3583,7 +3595,7 @@ Vuoi davvero eliminare tutte le tue attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4235,7 +4247,7 @@ Giappone libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4977,7 +4989,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5061,7 +5073,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5113,7 +5125,7 @@ Rischio di Concentrazione Valutario apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5121,7 +5133,7 @@ Rischi di Concentrazione dei Conti apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5257,7 +5269,7 @@ Software Open Source per la gestione della tua ricchezza apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5281,7 +5293,7 @@ Paura estrema libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5289,7 +5301,7 @@ Avidità estrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5297,7 +5309,7 @@ Neutrale libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5337,7 +5349,7 @@ Saldi di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5389,7 +5401,7 @@ Intervallo di date libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5424,6 +5436,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privato @@ -5445,7 +5465,7 @@ I dati di mercato sono ritardati di apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5453,7 +5473,7 @@ Investimento apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5525,7 +5545,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5533,7 +5553,7 @@ Settimana corrente libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5541,7 +5561,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5549,7 +5569,7 @@ Mese corrente libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5557,7 +5577,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5593,7 +5613,7 @@ Reset Filtri libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5609,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5617,7 +5637,7 @@ anni libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5625,7 +5645,7 @@ Applica i Filtri libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5722,7 +5742,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5730,7 +5750,7 @@ Attività apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5738,7 +5758,7 @@ Rendimento da Dividendi apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5768,6 +5788,10 @@ Liquidity Liquidità + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5922,7 +5946,7 @@ Vorresti perfezionare la tua strategia personale di investimento? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6098,7 +6122,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6106,7 +6130,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6114,7 +6138,7 @@ Belgio libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6122,7 +6146,7 @@ Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6130,7 +6154,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6138,7 +6162,7 @@ Repubblica Ceca libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6146,7 +6170,7 @@ Finlandia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6154,7 +6178,7 @@ Francia libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6162,7 +6186,7 @@ Germania libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6170,7 +6194,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6178,7 +6202,7 @@ Italia libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6186,7 +6210,7 @@ Olanda libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6194,7 +6218,7 @@ Nuova Zelanda libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6202,7 +6226,7 @@ Polonia libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6210,7 +6234,7 @@ Romania libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6218,7 +6242,7 @@ Sud Africa libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6226,7 +6250,7 @@ Tailandia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6234,7 +6258,7 @@ Stati Uniti libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6266,7 +6290,7 @@ Inattivo apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6278,7 +6302,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6286,11 +6310,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6298,11 +6322,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6310,7 +6334,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6328,10 +6352,34 @@ Close Chiudi + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6345,6 +6393,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copia link negli appunti @@ -6374,7 +6430,7 @@ Prestazioni con effetto valuta Prestazioni apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6574,7 +6630,7 @@ Ucraina libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6664,7 +6720,7 @@ Rischi del cluster di mercato economico apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6784,7 +6840,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6792,11 +6848,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6812,15 +6868,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6832,7 +6888,7 @@ Rischi del cluster di classi di asset apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6884,7 +6940,7 @@ Rischi del cluster di mercato regionale apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6972,7 +7028,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6992,7 +7048,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7032,7 +7088,7 @@ Isole Vergini Britanniche libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7040,7 +7096,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7103,6 +7159,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Genera Token di Sicurezza @@ -7116,7 +7180,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7326,7 +7390,7 @@ Fondo di emergenza: istituito apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7334,7 +7398,7 @@ Non è stato istituito alcun fondo di emergenza apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7342,7 +7406,7 @@ È stato istituito un fondo di emergenza apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7350,7 +7414,7 @@ Rapporto tariffario apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7358,7 +7422,7 @@ Le commissioni superano il ${thresholdMax}% del tuo investimento iniziale (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7366,7 +7430,7 @@ Le commissioni non superano il ${thresholdMax}% del tuo investimento iniziale (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7377,20 +7441,12 @@ 12 - - Find holding or page... - Trova azienda o pagina... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Collegamenti rapidi libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7398,7 +7454,7 @@ Profili delle risorse libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7640,7 +7696,7 @@ Investimento: valuta di base apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7648,7 +7704,7 @@ La maggior parte del tuo investimento attuale non è nella valuta di base (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7656,7 +7712,7 @@ La maggior parte del tuo investimento attuale è nella valuta di base (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7664,7 +7720,7 @@ Investimento apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7672,7 +7728,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7680,7 +7736,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7749,7 +7805,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7773,11 +7829,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7801,7 +7857,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7809,7 +7865,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7817,7 +7873,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7825,7 +7881,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7833,7 +7921,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7841,7 +7929,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7849,7 +7937,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7857,7 +7945,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7865,7 +7953,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7873,7 +7961,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7881,7 +7969,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7889,7 +7977,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7897,7 +7985,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7905,7 +7993,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7929,7 +8017,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7937,7 +8025,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7945,7 +8033,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7953,7 +8041,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7961,7 +8049,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7969,7 +8057,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7977,7 +8065,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7985,7 +8073,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7993,7 +8081,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8001,7 +8089,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8009,7 +8097,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8017,7 +8105,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8025,7 +8113,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8033,7 +8121,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8041,7 +8129,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8049,7 +8137,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8057,7 +8145,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8065,7 +8153,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8073,7 +8161,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8081,7 +8169,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 74f6af32e..3b7de7aa9 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -182,15 +182,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -222,7 +222,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -258,7 +258,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -418,7 +418,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -438,7 +438,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -650,7 +650,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -698,7 +698,7 @@ Activiteiten beheren apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -882,7 +882,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -902,7 +902,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -926,7 +926,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -938,7 +938,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -954,7 +954,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -966,7 +966,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -974,7 +974,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -982,7 +982,7 @@ 1J libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -990,7 +990,7 @@ 5J libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -998,7 +998,7 @@ Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1014,7 +1014,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1250,7 +1250,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1306,7 +1306,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1314,7 +1314,7 @@ Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1330,7 +1330,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1738,7 +1738,7 @@ Posities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1762,7 +1762,7 @@ Posities libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1822,7 +1822,7 @@ Hoeveelheid apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1830,7 +1830,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1842,7 +1846,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1866,11 +1870,11 @@ Activiteiten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1886,11 +1890,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1910,7 +1914,7 @@ Gegevens importeren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1918,7 +1922,7 @@ Importeren is voltooid apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -1990,7 +1994,7 @@ Ghostfolio stelt je in staat om je vermogen bij te houden. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2090,7 +2094,7 @@ Activiteiten importeren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2098,7 +2102,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2110,7 +2114,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2122,7 +2126,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2130,7 +2134,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2138,7 +2142,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2146,7 +2150,7 @@ Wil je deze activiteit echt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2214,7 +2218,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2230,7 +2234,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2262,7 +2266,7 @@ Maximale prijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2298,7 +2302,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2314,7 +2318,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2322,7 +2326,7 @@ Minimale prijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2344,6 +2348,10 @@ Interest Rente + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2402,7 +2410,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2418,7 +2426,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2562,11 +2570,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2590,7 +2598,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2598,7 +2606,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2626,7 +2634,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2638,7 +2646,7 @@ Label libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -2762,7 +2770,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2904,9 +2912,13 @@ Dividend Dividend + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2954,7 +2966,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2978,7 +2990,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3002,7 +3014,7 @@ Marktgegevens apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3038,7 +3050,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3062,7 +3074,7 @@ Importeer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3070,7 +3082,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3406,7 +3418,7 @@ Kosten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3414,7 +3426,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -3582,7 +3594,7 @@ Weet je zeker dat je alle activiteiten wilt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4234,7 +4246,7 @@ Japan libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4976,7 +4988,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5060,7 +5072,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5112,7 +5124,7 @@ Valuta Cluster Risico’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5132,7 @@ Account Cluster Risco’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5268,7 @@ Open Source Vermogensbeheer Software apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5280,7 +5292,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5300,7 @@ Extreme Hebzucht libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5308,7 @@ Neutraal libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5336,7 +5348,7 @@ Contant Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5388,7 +5400,7 @@ Datumbereik libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5423,6 +5435,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Prive @@ -5444,7 +5464,7 @@ Markt data is vertraagd voor apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5452,7 +5472,7 @@ Investering apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5524,7 +5544,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5532,7 +5552,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5540,7 +5560,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5548,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5556,7 +5576,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5592,7 +5612,7 @@ Filters Herstellen libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5608,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5616,7 +5636,7 @@ jaren libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5624,7 +5644,7 @@ Filters Toepassen libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5721,7 +5741,7 @@ Indonesië libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5749,7 @@ Activiteit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5757,7 @@ Dividendrendement apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5767,6 +5787,10 @@ Liquidity Liquiditeit + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5921,7 +5945,7 @@ Wilt u uw persoonlijke belegginngsstrategie verfijnen? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6097,7 +6121,7 @@ Australië libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6129,7 @@ Oostenrijk libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6137,7 @@ België libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6145,7 @@ Bulgarije libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6153,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6161,7 @@ Tsjechische Republiek libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6169,7 @@ Finland libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6177,7 @@ Frankrijk libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6185,7 @@ Duitsland libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6193,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6201,7 @@ Italië libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6209,7 @@ Nederland libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6217,7 @@ Nieuw-Zeeland libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6225,7 @@ Polen libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6233,7 @@ Roemenië libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6241,7 @@ Zuid-Afrika libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6249,7 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6257,7 @@ Verenigde Station libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6265,7 +6289,7 @@ Inactief apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6277,7 +6301,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6285,11 +6309,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6297,11 +6321,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6309,7 +6333,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6327,10 +6351,34 @@ Close Sluiten + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6344,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Kopieer link naar klembord @@ -6373,7 +6429,7 @@ Prestatie met valuta effect Prestatie apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6629,7 @@ Oekraïne libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6663,7 +6719,7 @@ Risico’s van Economische Marktclusters apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6783,7 +6839,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6791,11 +6847,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6811,15 +6867,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6831,7 +6887,7 @@ Activa Klasse Cluster Risico’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6883,7 +6939,7 @@ Regionale Markt Clusterrisico’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ Britse Maagdeneilanden libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Beveiligingstoken Aanmaken @@ -7115,7 +7179,7 @@ Verenigd Koninkrijk libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Opgezet apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ Er is geen noodfonds ingesteld apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ Er is een noodfonds opgericht apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Vergoedingsverhouding apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ De kosten overschrijden ${thresholdMax}% van uw initiële investering (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ De kosten bedragen niet meer dan ${thresholdMax}% van uw initiële investering (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Zoek holding of pagina... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Snelle koppelingen libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Activaprofielen libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Investering: basisvaluta apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ Het grootste deel van uw huidige investering staat niet in uw basisvaluta (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ Het grootste deel van uw huidige investering bevindt zich in uw basisvaluta (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Investering apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Meer dan ${thresholdMax}% van uw huidige investering is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ Het grootste deel van uw huidige investering is in ${currency} (${maxValueRatio}%) en overschrijdt ${thresholdMax}% niet apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Valutaclusterrisico’s apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Risico’s van economische marktclusters apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Noodfonds apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Kosten apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Risico’s van regionale marktclusters apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ Geen resultaten gevonden... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Ontwikkelde markten apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ De bijdrage van ontwikkelde markten aan je huidige investering (${developedMarketsValueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ De bijdrage van ontwikkelde markten aan je huidige investering (${developedMarketsValueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ De bijdrage van ontwikkelde markten aan je huidige investering (${developedMarketsValueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Opkomende markten apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ De bijdrage van opkomende markten aan je huidige investering (${emergingMarketsValueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ De bijdrage van opkomende markten aan je huidige investering (${emergingMarketsValueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ De bijdrage van opkomende markten aan je huidige investering (${emergingMarketsValueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Azië-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ De bijdrage van de Azië-Pacific markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ De bijdrage van de Azië-Pacific markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ De bijdrage van de Azië-Pacific markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Opkomende markten apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ De bijdrage van de opkomende markten aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ De bijdrage van de opkomende markten aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ De bijdrage van de opkomende markten aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ De bijdrage van de Europese markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ De bijdrage van de Europese markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ De bijdrage van de Europese markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ De bijdrage van de Japanse markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ De bijdrage van de Japanse markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ De bijdrage van de Japanse markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ Noord-Amerika apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ De bijdrage van de Noord-Amerikaanse markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ De bijdrage van de Noord-Amerikaanse markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ De bijdrage van de Noord-Amerikaanse markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 65e363299..e6b118c7d 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -287,7 +287,7 @@ Saldo Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -303,7 +303,7 @@ Platforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -423,7 +423,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -459,15 +459,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -499,7 +499,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -535,7 +535,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -695,7 +695,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -759,7 +759,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -855,7 +855,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -871,7 +871,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -887,7 +887,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -907,7 +907,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1419,7 +1419,7 @@ Zarządzaj Aktywnościami apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1435,7 +1435,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1451,7 +1451,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1671,7 +1671,7 @@ Opłaty apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1679,7 +1679,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1771,7 +1771,7 @@ Cena Minimalna apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1779,7 +1779,7 @@ Cena Maksymalna apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1787,7 +1787,7 @@ Ilość apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1795,7 +1795,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1803,7 +1807,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1967,7 +1971,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1975,7 +1979,7 @@ Liczony od początku roku (year-to-date) libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1983,7 +1987,7 @@ 1 rok libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1991,7 +1995,7 @@ 5 lat libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1999,7 +2003,7 @@ Maksimum libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2275,7 +2279,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2287,7 +2291,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2303,7 +2307,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2423,7 +2427,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2511,7 +2515,7 @@ Dane Rynkowe apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2835,7 +2839,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2843,7 +2847,7 @@ Inwestycje apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2939,7 +2943,7 @@ Oprogramowanie Open Source do Zarządzania Majątkiem apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3327,11 +3331,11 @@ Aktywności apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3347,11 +3351,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3371,7 +3375,7 @@ Czy na pewno chcesz usunąć te aktywności? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -3451,7 +3455,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -3459,7 +3463,7 @@ Importuj Aktywności apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3467,7 +3471,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -3475,7 +3479,7 @@ Impotruj Dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3483,7 +3487,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3491,7 +3495,7 @@ Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3499,7 +3503,7 @@ Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3507,7 +3511,7 @@ Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3535,7 +3539,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3684,7 +3688,7 @@ Exclude from Analysis - Exclude from Analysis + Wyklucz z analizy apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 90 @@ -3769,9 +3773,13 @@ Dividend Dywidenda + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3903,7 +3911,7 @@ Ryzyko związane z klastrem walutowym apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -3911,7 +3919,7 @@ Ryzyko związane z klastrem kont apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -3919,7 +3927,7 @@ Inwestycje libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -4167,7 +4175,7 @@ Ghostfolio umożliwia śledzenie wartości swojego majątku. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4472,7 +4480,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4576,7 +4584,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4588,7 +4596,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4604,7 +4612,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -4612,7 +4620,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -4620,7 +4628,7 @@ Czy na pewno chcesz usunąć tę działalność? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4698,6 +4706,10 @@ Interest Udział + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4728,7 +4740,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4744,7 +4756,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4756,11 +4768,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4792,7 +4804,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4800,7 +4812,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -4824,7 +4836,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4880,7 +4892,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -4916,7 +4928,7 @@ Japonia libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5000,7 +5012,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5012,7 +5024,7 @@ Tag libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5056,7 +5068,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5248,7 +5260,7 @@ Skrajny Strach libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5256,7 +5268,7 @@ Skrajna Zachłanność libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5264,7 +5276,7 @@ Neutralny libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5336,7 +5348,7 @@ Salda Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5388,7 +5400,7 @@ Zakres Dat libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5423,6 +5435,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Prywatny @@ -5444,7 +5464,7 @@ Dane rynkowe są opóźnione o apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5452,7 +5472,7 @@ Inwestycje apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5524,7 +5544,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5532,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5540,7 +5560,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5548,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5556,7 +5576,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5592,7 +5612,7 @@ Resetuj Filtry libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5608,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5616,7 +5636,7 @@ lata libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5624,7 +5644,7 @@ Zastosuj Filtry libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5721,7 +5741,7 @@ Indonezja libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5749,7 @@ Aktywność apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5757,7 @@ Dochód z Dywidendy apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5767,6 +5787,10 @@ Liquidity Płynność środków finansowych + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5921,7 +5945,7 @@ Chcesz udoskonalić swoją osobistą strategię inwestycyjną? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6097,7 +6121,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6129,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6137,7 @@ Belgia libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6145,7 @@ Bułgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6153,7 @@ Kanada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6161,7 @@ Czechy libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6169,7 @@ Finlandia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6177,7 @@ Francja libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6185,7 @@ Niemcy libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6193,7 @@ Indie libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6201,7 @@ Włochy libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6209,7 @@ Holandia libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6217,7 @@ Nowa Zelandia libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6225,7 @@ Polska libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6233,7 @@ Rumunia libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6241,7 @@ Południowa Afryka libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6249,7 @@ Tajlandia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6257,7 @@ Stany Zjednoczone libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6265,7 +6289,7 @@ Nieaktywny apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6277,7 +6301,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6285,11 +6309,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6297,11 +6321,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6309,7 +6333,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6327,10 +6351,34 @@ Close Zamknij + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6344,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Kopiuj link do schowka @@ -6373,7 +6429,7 @@ Wydajność z efektem walutowym Wydajność apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6629,7 @@ Ukraina libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6663,7 +6719,7 @@ Ryzyko związane z klastrem rynków gospodarczych apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6783,7 +6839,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6791,11 +6847,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6811,15 +6867,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6831,7 +6887,7 @@ Ryzyko klastra klasy aktywów apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6883,7 +6939,7 @@ Ryzyka klastrów regionalnych rynków apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ Brytyjskie Wyspy Dziewicze libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generowanie Tokena Zabezpieczającego @@ -7115,7 +7179,7 @@ Wielka Brytania libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Fundusz awaryjny: Utworzenie apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ Nie utworzono funduszu awaryjnego apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ Utworzono fundusz awaryjny apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Stosunek opłat apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ Opłaty przekraczają ${thresholdMax}% początkowej inwestycji (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ Opłaty nie przekraczają ${thresholdMax}% początkowej inwestycji (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Znajdź gospodarstwo lub stronę... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Szybkie linki libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Profile zasobów libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7480,7 +7536,7 @@ Fuel your self-hosted Ghostfolio with a powerful data provider to access 80,000+ tickers from over 50 exchanges worldwide. - Fuel your self-hosted Ghostfolio with a powerful data provider to access 80,000+ tickers from over 50 exchanges worldwide. + Zasilać swój Ghostfolio self‑hosted za pomocą potężnego dostawcy danych, aby uzyskać dostęp do ponad 80,000 notowań z ponad 50 giełd na całym świecie. apps/client/src/app/components/admin-settings/admin-settings.component.html 16 @@ -7556,7 +7612,7 @@ Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) - Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) + Ponad ${thresholdMax}% twojej bieżącej inwestycji znajduje się na koncie ${maxAccountName} (${maxInvestmentRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 17 @@ -7564,7 +7620,7 @@ The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% - The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% + Główna część twojej obecnej inwestycji znajduje się na koncie ${maxAccountName} (${maxInvestmentRatio}%) i nie przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 24 @@ -7572,7 +7628,7 @@ Equity - Equity + Kapitał własny apps/client/src/app/pages/i18n/i18n-page.html 41 @@ -7580,7 +7636,7 @@ The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% + Udział kapitału własnego w twojej obecnej inwestycji (${equityValueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 43 @@ -7588,7 +7644,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% - The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% + Udział kapitału własnego w twojej obecnej inwestycji (${equityValueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 47 @@ -7596,7 +7652,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział kapitału własnego w twojej obecnej inwestycji (${equityValueRatio}%) mieści się w zakresie od ${thresholdMin}% do ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 51 @@ -7604,7 +7660,7 @@ Fixed Income - Fixed Income + Dochód stały apps/client/src/app/pages/i18n/i18n-page.html 55 @@ -7612,7 +7668,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% + Udział dochodu stałego w twojej obecnej inwestycji (${fixedIncomeValueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 57 @@ -7620,7 +7676,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% + Udział dochodu stałego w twojej obecnej inwestycji (${fixedIncomeValueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 61 @@ -7628,7 +7684,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział dochodu stałego w twojej obecnej inwestycji (${fixedIncomeValueRatio}%) mieści się w zakresie od ${thresholdMin}% do ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 66 @@ -7636,55 +7692,55 @@ Investment: Base Currency - Investment: Base Currency + Inwestycja: Waluta bazowa apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + Główna część twojej bieżącej inwestycji nie jest w walucie bazowej (${baseCurrencyValueRatio}% w ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + Główna część twojej bieżącej inwestycji jest w walucie bazowej (${baseCurrencyValueRatio}% w ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 Investment - Investment + Inwestycja apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) - Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) + Ponad ${thresholdMax}% Twojej obecnej inwestycji znajduje się w ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% + Główna część Twojej obecnej inwestycji znajduje się w ${currency} (${maxValueRatio}%) i nie przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 start - start + rozpocznij kebab-case libs/common/src/lib/routes/routes.ts @@ -7697,7 +7753,7 @@ Do you really want to generate a new security token? - Do you really want to generate a new security token? + Czy na pewno chcesz wygenerować nowy token bezpieczeństwa? apps/client/src/app/components/user-account-access/user-account-access.component.ts 174 @@ -7705,7 +7761,7 @@ Generate - Generate + Generuj apps/client/src/app/components/user-account-access/user-account-access.html 43 @@ -7713,7 +7769,7 @@ Stocks - Stocks + Akcje apps/client/src/app/components/markets/markets.component.ts 52 @@ -7725,7 +7781,7 @@ Cryptocurrencies - Cryptocurrencies + Kryptowaluty apps/client/src/app/components/markets/markets.component.ts 53 @@ -7745,15 +7801,15 @@ Manage Asset Profile - Manage Asset Profile + Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 Alternative Investment - Alternative Investment + Inwestycja alternatywna libs/ui/src/lib/i18n.ts 45 @@ -7761,7 +7817,7 @@ Collectible - Collectible + Kolekcjonerskie libs/ui/src/lib/i18n.ts 55 @@ -7769,14 +7825,14 @@ Average Unit Price - Average Unit Price + Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index b4733f39c..e6255b1e4 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -78,7 +78,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -186,7 +186,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -194,7 +194,7 @@ Saldo disponível em dinheiro apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -238,15 +238,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -314,7 +314,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -474,7 +474,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -502,7 +502,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -818,7 +818,7 @@ Gerir Atividades apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -834,7 +834,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -850,7 +850,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1058,7 +1058,7 @@ Preço Mínimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1066,7 +1066,7 @@ Preço Máximo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1074,7 +1074,7 @@ Quantidade apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1082,7 +1082,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1094,7 +1098,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -1110,7 +1114,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -1126,7 +1130,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -1146,7 +1150,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1170,7 +1174,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1182,7 +1186,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1198,7 +1202,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -1210,7 +1214,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1218,7 +1222,7 @@ AATD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1226,7 +1230,7 @@ 1A libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1234,7 +1238,7 @@ 5A libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1242,7 +1246,7 @@ Máx libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1266,7 +1270,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -1278,7 +1282,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -1294,7 +1298,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1590,7 +1594,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1870,11 +1874,11 @@ Atividades apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1890,11 +1894,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1970,7 +1974,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1994,7 +1998,7 @@ A importar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -2002,7 +2006,7 @@ A importação foi concluída apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2119,7 +2123,7 @@ Exclude from Analysis - Exclude from Analysis + Excluir da Análise apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 90 @@ -2246,7 +2250,7 @@ Posições apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2270,7 +2274,7 @@ Posições libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -2326,7 +2330,7 @@ O Ghostfolio permite-lhe estar a par e gerir a sua riqueza. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2338,7 +2342,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2458,7 +2462,7 @@ Importar Atividades apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2466,7 +2470,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2478,7 +2482,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2490,7 +2494,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2498,7 +2502,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2506,7 +2510,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2514,7 +2518,7 @@ Deseja realmente eliminar esta atividade? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2552,6 +2556,10 @@ Interest Juros + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2582,11 +2590,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2610,7 +2618,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2618,7 +2626,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2638,7 +2646,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2678,7 +2686,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2690,7 +2698,7 @@ Marcador libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -2922,7 +2930,7 @@ Dados de Mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2946,7 +2954,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -2968,9 +2976,13 @@ Dividend Dividendos + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3018,7 +3030,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -3038,7 +3050,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3062,7 +3074,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3070,7 +3082,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3406,7 +3418,7 @@ Taxas apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3414,7 +3426,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -3555,7 +3567,7 @@ Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover operational costs for the hosting infrastructure and professional data providers, and to fund ongoing development. - A nossa oferta oficial Ghostfolio Premium na nuvem é a maneira mais fácil de começar. Com o tempo que poupa, esta será a melhor opção para a maioria das pessoas. A receita é utilizada para cobrir a infraestrutura de hospedagem e financiar o desenvolvimento contínuo do Ghostfolio. + Nossa oferta oficial Ghostfolio Premium na nuvem é a maneira mais fácil de começar. Devido ao tempo que economiza, esta será a melhor opção para a maioria das pessoas. A receita é utilizada para cobrir os custos operacionais da infraestrutura de hospedagem e dos provedores de dados profissionais, além de financiar o desenvolvimento contínuo. apps/client/src/app/pages/pricing/pricing-page.html 7 @@ -3582,7 +3594,7 @@ Deseja mesmo eliminar estas atividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4234,7 +4246,7 @@ Japão libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4976,7 +4988,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5060,7 +5072,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5112,7 +5124,7 @@ Riscos de cluster monetário apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5132,7 @@ Riscos de cluster de contas apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5268,7 @@ Software de gerenciamento de patrimônio de código aberto apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5280,7 +5292,7 @@ Medo Extremo libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5300,7 @@ Ganância Extrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5308,7 @@ Neutro libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5336,7 +5348,7 @@ Saldos de caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5388,7 +5400,7 @@ Período libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5423,6 +5435,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privado @@ -5444,7 +5464,7 @@ Dados de mercado estão atrasados para apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5452,7 +5472,7 @@ Investimento apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5524,7 +5544,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5532,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5540,7 +5560,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5548,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5556,7 +5576,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5592,7 +5612,7 @@ Redefinir filtros libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5608,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5616,7 +5636,7 @@ anos libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5624,7 +5644,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5718,10 +5738,10 @@ Indonesia - Indonesia + Indonésia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5749,7 @@ Atividade apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5757,7 @@ Rendimento de dividendos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5767,6 +5787,10 @@ Liquidity Liquidez + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5921,7 +5945,7 @@ Você gostaria de refinar seu estratégia de investimento pessoal? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6097,7 +6121,7 @@ Austrália libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6129,7 @@ Áustria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6137,7 @@ Bélgica libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6145,7 @@ Bulgária libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6153,7 @@ Canadá libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6161,7 @@ República Tcheca libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6169,7 @@ Finlândia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6177,7 @@ França libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6185,7 @@ Alemanha libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6193,7 @@ Índia libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6201,7 @@ Itália libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6209,7 @@ Holanda libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6217,7 @@ Nova Zelândia libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6225,7 @@ Polônia libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6233,7 @@ Romênia libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6241,7 @@ África do Sul libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6249,7 @@ Tailândia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6257,7 @@ Estados Unidos libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6265,7 +6289,7 @@ Inativo apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6277,7 +6301,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6285,11 +6309,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6297,11 +6321,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6309,7 +6333,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6327,10 +6351,34 @@ Close Fechar + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6344,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copiar link para a área de transferência @@ -6373,7 +6429,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6629,7 @@ Ucrânia libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6663,7 +6719,7 @@ Riscos do Cluster do Mercado Econômico apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6700,7 +6756,7 @@ Please enter your Ghostfolio API key: - Please enter your Ghostfolio API key: + Por favor, insira a sua chave da API do Ghostfolio: apps/client/src/app/pages/api/api-page.component.ts 41 @@ -6708,7 +6764,7 @@ API Requests Today - API Requests Today + Pedidos de API Hoje apps/client/src/app/components/admin-users/admin-users.html 162 @@ -6716,7 +6772,7 @@ Could not generate an API key - Could not generate an API key + Não foi possível gerar uma chave de API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 141 @@ -6724,7 +6780,7 @@ Set this API key in your self-hosted environment: - Set this API key in your self-hosted environment: + Defina esta chave de API no seu ambiente auto-hospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 156 @@ -6732,7 +6788,7 @@ Ghostfolio Premium Data Provider API Key - Ghostfolio Premium Data Provider API Key + Chave de API do Provedor de Dados do Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 159 @@ -6740,7 +6796,7 @@ Do you really want to generate a new API key? - Do you really want to generate a new API key? + Você realmente deseja gerar uma nova chave de API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 164 @@ -6748,7 +6804,7 @@ API Key - API Key + Chave de API libs/ui/src/lib/membership-card/membership-card.component.html 18 @@ -6756,7 +6812,7 @@ Generate Ghostfolio Premium Data Provider API key for self-hosted environments... - Generate Ghostfolio Premium Data Provider API key for self-hosted environments... + Gerar chave de API do Provedor de Dados do Ghostfolio Premium para ambientes auto-hospedados... libs/ui/src/lib/membership-card/membership-card.component.html 26 @@ -6764,7 +6820,7 @@ out of - out of + de apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 56 @@ -6772,7 +6828,7 @@ rules align with your portfolio. - rules align with your portfolio. + regras alinham-se com o seu portfólio. apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 58 @@ -6780,10 +6836,10 @@ Save - Save + Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6791,11 +6847,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6811,15 +6867,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6828,10 +6884,10 @@ Asset Class Cluster Risks - Asset Class Cluster Risks + Riscos do Cluster de Classes de Ativos apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6883,7 +6939,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generate Security Token @@ -7115,7 +7179,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Encontrar holding ou página... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Links rápidos libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Perfis de ativos libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Riscos de cluster monetário apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Riscos de Cluster do Mercado Econômico apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Fundo de Emergência apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Tarifas apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Riscos de cluster de mercado regional apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ Nenhum resultado encontrado... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Mercados Emergentes apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Ásia-Pacífico apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Mercados Emergentes apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japão apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ América do Norte apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index da6bd74cc..f6e99f832 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -259,7 +259,7 @@ Nakit Bakiye apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -275,7 +275,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -383,7 +383,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -419,15 +419,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -459,7 +459,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -495,7 +495,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -655,7 +655,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -711,7 +711,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -783,7 +783,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -799,7 +799,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -815,7 +815,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -835,7 +835,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1275,7 +1275,7 @@ İşlemleri Yönet apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1291,7 +1291,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1307,7 +1307,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1611,7 +1611,7 @@ Asgari Fiyat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1619,7 +1619,7 @@ Azami Fiyat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1627,7 +1627,7 @@ Miktar apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1635,7 +1635,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1643,7 +1647,7 @@ Komisyon apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1651,7 +1655,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1659,7 +1663,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1823,7 +1827,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1831,7 +1835,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1839,7 +1843,7 @@ 1Y libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1847,7 +1851,7 @@ 5Y libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1855,7 +1859,7 @@ Maks. libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1879,7 +1883,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -1891,7 +1895,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -1907,7 +1911,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2027,7 +2031,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2083,7 +2087,7 @@ Piyasa Verileri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2419,7 +2423,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2427,7 +2431,7 @@ Varlıklar apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2859,11 +2863,11 @@ İşlemler apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2879,11 +2883,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2903,7 +2907,7 @@ Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -2959,7 +2963,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -2967,7 +2971,7 @@ İşlemleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2975,7 +2979,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2983,7 +2987,7 @@ Temettüleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2991,7 +2995,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -2999,7 +3003,7 @@ Veri içe aktarılıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3007,7 +3011,7 @@ İçe aktarma tamamlandı apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3015,7 +3019,7 @@ Veri doğrulanıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3043,7 +3047,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3285,9 +3289,13 @@ Dividend Temettü + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3419,7 +3427,7 @@ Varlıklar libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -3667,7 +3675,7 @@ Ghostfolio, varlıklarınızı takip etmenizi sağlar. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -3984,7 +3992,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4320,7 +4328,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4332,7 +4340,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4348,7 +4356,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -4356,7 +4364,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -4364,7 +4372,7 @@ TBu işlemi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4426,6 +4434,10 @@ Interest Faiz + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4456,7 +4468,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4472,7 +4484,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4484,11 +4496,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4520,7 +4532,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4528,7 +4540,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -4552,7 +4564,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4608,7 +4620,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -4644,7 +4656,7 @@ Japonya libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4728,7 +4740,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -4740,7 +4752,7 @@ Etiket libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5068,7 +5080,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5112,7 +5124,7 @@ Kur Kümelenme Riskleri (Currency Cluster Risks) apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5132,7 @@ Hesap Kümelenme Riski (Account Cluster Risks) apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5268,7 @@ Açık Kaynak Varlık Yönetim Yazılımı apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5280,7 +5292,7 @@ Aşırı Korku libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5300,7 @@ Aşırı Açgözlülük libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5308,7 @@ Nötr libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5336,7 +5348,7 @@ Nakit Bakiyeleri apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5388,7 +5400,7 @@ Tarih Aralığı libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5423,6 +5435,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Özel @@ -5444,7 +5464,7 @@ Piyasa verileri gecikmeli apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5452,7 +5472,7 @@ Yatırım apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5524,7 +5544,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5532,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5540,7 +5560,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5548,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5556,7 +5576,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5592,7 +5612,7 @@ Filtreleri Sıfırla libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5608,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5616,7 +5636,7 @@ Yıllar libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5624,7 +5644,7 @@ Filtreleri Uygula libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5721,7 +5741,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5749,7 @@ Etkinlik apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5757,7 @@ Temettü Getiri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5767,6 +5787,10 @@ Liquidity Likidite + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5921,7 +5945,7 @@ Senin özel yatırım stratejinizi iyileştirmek ister misin? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6097,7 +6121,7 @@ Avustralya libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6129,7 @@ Avusturya libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6137,7 @@ Belçika libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6145,7 @@ Bulgaristan libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6153,7 @@ Kanada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6161,7 @@ Çek Cumhuriyeti libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6169,7 @@ Finlandiya libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6177,7 @@ Fransa libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6185,7 @@ Almanya libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6193,7 @@ Hindistan libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6201,7 @@ İtalya libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6209,7 @@ Hollanda libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6217,7 @@ Yeni Zelanda libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6225,7 @@ Polonya libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6233,7 @@ Romanya libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6241,7 @@ Güney Afrika libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6249,7 @@ Tayland libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6257,7 @@ Amerika Birleşik Devletleri libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6265,7 +6289,7 @@ Pasif apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6277,7 +6301,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6285,11 +6309,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6297,11 +6321,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6309,7 +6333,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6327,10 +6351,34 @@ Close Kapat + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6344,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Bağlantıyı panoya kopyala @@ -6373,7 +6429,7 @@ Kur farkı etkisiyle performans Performans apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6629,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6663,7 +6719,7 @@ Ekonomik Piyasa Küme Riskleri apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6783,7 +6839,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6791,11 +6847,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6811,15 +6867,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6831,7 +6887,7 @@ Varlık Sınıfı Küme Riskleri apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6883,7 +6939,7 @@ Bölgesel Piyasa Küme Riskleri apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ Britanya Virjin Adaları libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Güvenlik belirteci oluştur @@ -7115,7 +7179,7 @@ Birleşik Krallık libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Acil Durum Fonu: Kurulum apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ Acil durum fonu oluşturulmadı apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ Acil durum fonu kuruldu apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Ücret Oranı apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ Ücretler, ilk yatırımınızın %${thresholdMax} kadarını aşıyor (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ Ücretler, ilk yatırımınızın %${thresholdMax}’ını (${feeRatio}%) aşmaz apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Holding veya sayfayı bulun... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Hızlı Bağlantılar libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Varlık Profilleri libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Yatırım: Baz Para Birimi apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Yatırım apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Asya-Pasifik apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Gelişmekte Olan Piyasalar apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Avrupa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japonya apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ Kuzey Amerika apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 6bce87b52..c2d420b1f 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -334,6 +334,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Скопіювати посилання в буфер обміну @@ -371,7 +379,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -387,7 +395,7 @@ Платформа apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -403,7 +411,7 @@ Активи libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -411,7 +419,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -523,7 +531,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -559,15 +567,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -599,7 +607,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -635,7 +643,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -855,7 +863,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -875,7 +883,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -995,7 +1003,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -1011,7 +1019,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -1027,7 +1035,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -1047,7 +1055,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1715,7 +1723,7 @@ Прибутковість з урахуванням валютного ефекту валюти Прибутковість apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -1723,7 +1731,7 @@ Мінімальна ціна apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1731,7 +1739,7 @@ Максимальна ціна apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1739,7 +1747,7 @@ Кількість apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1747,7 +1755,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1755,7 +1767,7 @@ Дохідність дивіденду apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -1763,7 +1775,7 @@ Комісії apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1771,7 +1783,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1779,7 +1791,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -1787,7 +1799,7 @@ Активність apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -1795,7 +1807,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1835,7 +1847,7 @@ Керування діяльністю apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1851,7 +1863,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1867,7 +1879,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2047,7 +2059,7 @@ Ринкові дані затримуються для apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -2155,7 +2167,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2163,11 +2175,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -2183,15 +2195,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -2403,7 +2415,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -2411,7 +2423,7 @@ З початку року libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -2419,7 +2431,7 @@ 1 рік libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -2427,7 +2439,7 @@ 5 років libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -2435,7 +2447,7 @@ Максимум libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2446,6 +2458,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Grant access Надати доступ @@ -2531,7 +2551,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2843,7 +2863,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2863,7 +2883,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2991,7 +3011,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -3087,7 +3107,7 @@ Ринкові дані apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3444,7 +3464,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3452,7 +3472,7 @@ Активи apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3556,7 +3576,7 @@ Програмне забезпечення управління багатством з відкритим кодом apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3952,11 +3972,11 @@ Активності apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3972,11 +3992,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4088,7 +4108,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -4096,7 +4116,7 @@ Імпортувати активності apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4104,7 +4124,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -4112,7 +4132,7 @@ Імпорт дивідендів apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4120,7 +4140,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -4128,7 +4148,7 @@ Імпортуються дані... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -4136,7 +4156,7 @@ Імпорт завершено apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -4144,7 +4164,7 @@ Перевірка даних... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -4172,7 +4192,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -4438,9 +4458,13 @@ Dividend Дивіденди + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4468,7 +4492,7 @@ Інвестиції apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4668,7 +4692,7 @@ Ризики зосередження валюти apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -4676,7 +4700,7 @@ Ризики зосередження класу активів apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -4684,7 +4708,7 @@ Ризики зосередження рахунків apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -4692,7 +4716,7 @@ Ризики зосередження економічного ринку apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -4700,7 +4724,7 @@ Неактивний apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -4948,7 +4972,7 @@ Чи хотіли б ви удосконалити вашу особисту інвестиційну стратегію? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -4956,7 +4980,7 @@ Ghostfolio надає можливість вам стежити за вашим багатством. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -5119,7 +5143,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5715,7 +5739,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -5727,7 +5751,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -5751,7 +5775,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -5759,7 +5783,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -5767,7 +5791,7 @@ Ви дійсно хочете видалити ці дії? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -5775,7 +5799,7 @@ Ви дійсно хочете видалити цю активність? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -5783,7 +5807,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5791,7 +5815,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5799,7 +5823,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5807,7 +5831,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5815,7 +5839,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5831,7 +5855,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5839,7 +5863,7 @@ роки libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5855,7 +5879,7 @@ Діапазон дат libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5863,7 +5887,7 @@ Скинути фільтри libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5871,7 +5895,7 @@ Застосувати фільтри libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5965,6 +5989,10 @@ Interest Відсотки + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -6011,7 +6039,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6027,7 +6055,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -6039,11 +6067,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -6075,7 +6103,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -6083,7 +6111,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -6107,7 +6135,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -6135,7 +6163,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6143,11 +6171,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6155,11 +6183,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6167,7 +6195,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6193,10 +6221,34 @@ Close Закрити + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6239,7 +6291,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -6359,7 +6411,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -6371,7 +6423,7 @@ Тег libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -6423,7 +6475,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -6501,6 +6553,10 @@ Liquidity Ліквідність + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6623,7 +6679,7 @@ Австралія libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6631,7 +6687,7 @@ Австрія libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6639,7 +6695,7 @@ Бельгія libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6647,7 +6703,7 @@ Болгарія libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6655,7 +6711,7 @@ Канада libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6663,7 +6719,7 @@ Чеська Республіка libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6671,7 +6727,7 @@ Фінляндія libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6679,7 +6735,7 @@ Франція libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6687,7 +6743,7 @@ Німеччина libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6695,7 +6751,7 @@ Індія libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6703,7 +6759,7 @@ Італія libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6711,7 +6767,7 @@ Японія libs/ui/src/lib/i18n.ts - 90 + 91 @@ -6719,7 +6775,7 @@ Нідерланди libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6727,7 +6783,7 @@ Нова Зеландія libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6735,7 +6791,7 @@ Польща libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6743,7 +6799,7 @@ Румунія libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6751,7 +6807,7 @@ Південна Африка libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6759,7 +6815,7 @@ Таїланд libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6767,7 +6823,7 @@ Україна libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6775,7 +6831,7 @@ Сполучені Штати libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6783,7 +6839,7 @@ Екстремальний страх libs/ui/src/lib/i18n.ts - 104 + 105 @@ -6791,7 +6847,7 @@ Екстремальна жадібність libs/ui/src/lib/i18n.ts - 105 + 106 @@ -6799,7 +6855,7 @@ Нейтрально libs/ui/src/lib/i18n.ts - 108 + 109 @@ -6883,7 +6939,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6971,7 +7027,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6991,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7031,7 +7087,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7095,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7102,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generate Security Token @@ -7115,7 +7179,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7325,7 +7389,7 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7333,7 +7397,7 @@ No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7341,7 +7405,7 @@ An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7349,7 +7413,7 @@ Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7357,7 +7421,7 @@ The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7365,7 +7429,7 @@ The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7376,20 +7440,12 @@ 12 - - Find holding or page... - Find holding or page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Quick Links libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7397,7 +7453,7 @@ Asset Profiles libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7639,7 +7695,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7647,7 +7703,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7655,7 +7711,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7663,7 +7719,7 @@ Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7671,7 +7727,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7679,7 +7735,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7748,7 +7804,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7828,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7800,7 +7856,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7808,7 +7864,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7816,7 +7872,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7824,7 +7880,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7832,7 +7920,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7840,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7848,7 +7936,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7856,7 +7944,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7864,7 +7952,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7872,7 +7960,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7880,7 +7968,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7888,7 +7976,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7896,7 +7984,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7904,7 +7992,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7928,7 +8016,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7936,7 +8024,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7944,7 +8032,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7952,7 +8040,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7960,7 +8048,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7968,7 +8056,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7976,7 +8064,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7984,7 +8072,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7992,7 +8080,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8000,7 +8088,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8008,7 +8096,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8016,7 +8104,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8024,7 +8112,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8032,7 +8120,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8040,7 +8128,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8048,7 +8136,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8056,7 +8144,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8064,7 +8152,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8072,7 +8160,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8080,7 +8168,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index fddbb1c45..af021f379 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -268,7 +268,7 @@ Cash Balance apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -283,7 +283,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -298,7 +298,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -406,7 +406,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -441,15 +441,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -480,7 +480,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -515,7 +515,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -660,7 +660,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -718,7 +718,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -826,7 +826,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -841,7 +841,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -856,7 +856,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -875,7 +875,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1335,7 +1335,7 @@ Manage Activities apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1350,7 +1350,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1365,7 +1365,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1564,7 +1564,7 @@ Fees apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1572,7 +1572,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1653,21 +1653,21 @@ Minimum Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 Maximum Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 Quantity apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1675,14 +1675,18 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1834,35 +1838,35 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 1Y libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 5Y libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2107,7 +2111,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2118,7 +2122,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2133,7 +2137,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2245,7 +2249,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2324,7 +2328,7 @@ Market Data apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2627,14 +2631,14 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 Holdings apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2725,7 +2729,7 @@ Open Source Wealth Management Software apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3068,11 +3072,11 @@ Activities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3088,11 +3092,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3111,7 +3115,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -3182,14 +3186,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 Import Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3197,14 +3201,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 Import Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3212,28 +3216,28 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 Importing data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 Import has been completed apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3258,7 +3262,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3467,9 +3471,13 @@ Dividend + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3587,21 +3595,21 @@ Currency Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 Account Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 Holdings libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -3827,7 +3835,7 @@ Ghostfolio empowers you to keep track of your wealth. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4114,7 +4122,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4216,7 +4224,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4227,7 +4235,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4241,21 +4249,21 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 Do you really want to delete this activity? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4337,6 +4345,10 @@ Interest + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4365,7 +4377,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4380,7 +4392,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4391,11 +4403,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4425,7 +4437,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4433,7 +4445,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -4456,7 +4468,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4507,7 +4519,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -4539,7 +4551,7 @@ Japan libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4615,7 +4627,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -4626,7 +4638,7 @@ Tag libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -4666,7 +4678,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -4836,21 +4848,21 @@ Extreme Fear libs/ui/src/lib/i18n.ts - 104 + 105 Extreme Greed libs/ui/src/lib/i18n.ts - 105 + 106 Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -4909,7 +4921,7 @@ Date Range libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -4933,6 +4945,13 @@ 91 + + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Restricted view @@ -4973,7 +4992,7 @@ Market data is delayed for apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5001,7 +5020,7 @@ Investment apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5045,35 +5064,35 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5098,7 +5117,7 @@ Reset Filters libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5120,21 +5139,21 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 years libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 Apply Filters libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5221,21 +5240,21 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 Activity apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 Dividend Yield apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5261,6 +5280,10 @@ Liquidity + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5396,7 +5419,7 @@ Would you like to refine your personal investment strategy? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -5465,35 +5488,35 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 India libs/ui/src/lib/i18n.ts - 87 + 88 Austria libs/ui/src/lib/i18n.ts - 78 + 79 Poland libs/ui/src/lib/i18n.ts - 93 + 94 Italy libs/ui/src/lib/i18n.ts - 89 + 90 @@ -5535,21 +5558,21 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 New Zealand libs/ui/src/lib/i18n.ts - 92 + 93 Netherlands libs/ui/src/lib/i18n.ts - 91 + 92 @@ -5588,21 +5611,21 @@ Romania libs/ui/src/lib/i18n.ts - 94 + 95 Germany libs/ui/src/lib/i18n.ts - 86 + 87 United States libs/ui/src/lib/i18n.ts - 101 + 102 @@ -5616,7 +5639,7 @@ Belgium libs/ui/src/lib/i18n.ts - 79 + 80 @@ -5634,28 +5657,28 @@ Czech Republic libs/ui/src/lib/i18n.ts - 83 + 84 Australia libs/ui/src/lib/i18n.ts - 77 + 78 South Africa libs/ui/src/lib/i18n.ts - 96 + 97 Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -5669,14 +5692,14 @@ Finland libs/ui/src/lib/i18n.ts - 84 + 85 France libs/ui/src/lib/i18n.ts - 85 + 86 @@ -5694,7 +5717,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5702,11 +5725,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -5714,11 +5737,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -5726,7 +5749,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -5752,15 +5775,39 @@ Inactive apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 Close + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -5812,7 +5859,14 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 + + + + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 @@ -5963,7 +6017,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6059,7 +6113,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6171,7 +6225,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6179,11 +6233,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6199,15 +6253,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6218,7 +6272,7 @@ Asset Class Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6264,7 +6318,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6341,7 +6395,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6360,7 +6414,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6382,7 +6436,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -6396,7 +6450,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -6448,6 +6502,13 @@ 201 + + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Security token @@ -6470,7 +6531,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -6643,63 +6704,56 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 - - - - Find holding or page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 + 155 Quick Links libs/ui/src/lib/assistant/assistant.html - 56 + 58 Asset Profiles libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -6914,42 +6968,42 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7011,7 +7065,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7032,18 +7086,18 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7064,91 +7118,119 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7169,140 +7251,140 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 359ec2588..66517e0c7 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -288,7 +288,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -304,7 +304,7 @@ 平台 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -320,7 +320,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -432,7 +432,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -468,15 +468,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -508,7 +508,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -544,7 +544,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -704,7 +704,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -768,7 +768,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -864,7 +864,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -880,7 +880,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -896,7 +896,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -916,7 +916,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1428,7 +1428,7 @@ 管理活动 apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1444,7 +1444,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1460,7 +1460,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1680,7 +1680,7 @@ 费用 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1688,7 +1688,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1780,7 +1780,7 @@ 最低价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1788,7 +1788,7 @@ 最高价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1796,7 +1796,7 @@ 数量 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1804,7 +1804,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 @@ -1812,7 +1816,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1976,7 +1980,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1984,7 +1988,7 @@ 年初至今 libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1992,7 +1996,7 @@ 1年 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -2000,7 +2004,7 @@ 5年 libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -2008,7 +2012,7 @@ 最大限度 libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2284,7 +2288,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2296,7 +2300,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2312,7 +2316,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2432,7 +2436,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2520,7 +2524,7 @@ 市场数据 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2844,7 +2848,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2852,7 +2856,7 @@ 持仓 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2948,7 +2952,7 @@ 开源财富管理软件 apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3336,11 +3340,11 @@ 活动 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3356,11 +3360,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3380,7 +3384,7 @@ 您确定要删除这些活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -3460,7 +3464,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -3468,7 +3472,7 @@ 导入活动记录 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3476,7 +3480,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -3484,7 +3488,7 @@ 导入股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3492,7 +3496,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3500,7 +3504,7 @@ 正在导入数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3508,7 +3512,7 @@ 导入已完成 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3516,7 +3520,7 @@ 验证数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3544,7 +3548,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3778,9 +3782,13 @@ Dividend 股息 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3912,7 +3920,7 @@ 货币集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -3920,7 +3928,7 @@ 账户集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -3928,7 +3936,7 @@ 持仓 libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -4176,7 +4184,7 @@ Ghostfolio 使您能够跟踪您的财富。 apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4493,7 +4501,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4605,7 +4613,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4617,7 +4625,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4633,7 +4641,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -4641,7 +4649,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -4649,7 +4657,7 @@ 您确实要删除此活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4743,6 +4751,10 @@ Interest 利息 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4773,7 +4785,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4789,7 +4801,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4801,11 +4813,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4837,7 +4849,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4845,7 +4857,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -4869,7 +4881,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4925,7 +4937,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -4961,7 +4973,7 @@ 日本 libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5045,7 +5057,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5057,7 +5069,7 @@ 标签 libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5101,7 +5113,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5293,7 +5305,7 @@ 极度恐惧 libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5301,7 +5313,7 @@ 极度贪婪 libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5309,7 +5321,7 @@ 中性的 libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5373,7 +5385,7 @@ 日期范围 libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5400,6 +5412,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Restricted view 受限视图 @@ -5445,7 +5465,7 @@ 市场数据延迟 apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5477,7 +5497,7 @@ 投资 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5525,7 +5545,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5533,7 +5553,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5541,7 +5561,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5549,7 +5569,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5557,7 +5577,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5585,7 +5605,7 @@ 重置过滤器 libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5609,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5617,7 +5637,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5625,7 +5645,7 @@ 应用过滤器 libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5722,7 +5742,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5730,7 +5750,7 @@ 活动 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5738,7 +5758,7 @@ 股息收益率 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5768,6 +5788,10 @@ Liquidity 流动性 + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5922,7 +5946,7 @@ 您想 优化 您的 个人投资策略吗? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6098,7 +6122,7 @@ 澳大利亚 libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6106,7 +6130,7 @@ 奥地利 libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6114,7 +6138,7 @@ 比利时 libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6122,7 +6146,7 @@ 保加利亚 libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6130,7 +6154,7 @@ 加拿大 libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6138,7 +6162,7 @@ 捷克共和国 libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6146,7 +6170,7 @@ 芬兰 libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6154,7 +6178,7 @@ 法国 libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6162,7 +6186,7 @@ 德国 libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6170,7 +6194,7 @@ 印度 libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6178,7 +6202,7 @@ 意大利 libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6186,7 +6210,7 @@ 荷兰 libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6194,7 +6218,7 @@ 新西兰 libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6202,7 +6226,7 @@ 波兰 libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6210,7 +6234,7 @@ 罗马尼亚 libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6218,7 +6242,7 @@ 南非 libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6226,7 +6250,7 @@ 泰国 libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6234,7 +6258,7 @@ 美国 libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6266,7 +6290,7 @@ 非活跃 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6278,7 +6302,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6286,11 +6310,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6298,11 +6322,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6310,7 +6334,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6328,10 +6352,34 @@ Close 关闭 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6345,6 +6393,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard 复制链接到剪贴板 @@ -6374,7 +6430,7 @@ 含货币影响的表现 表现 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6574,7 +6630,7 @@ 乌克兰 libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6664,7 +6720,7 @@ 经济市场集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6784,7 +6840,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6792,11 +6848,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6812,15 +6868,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6832,7 +6888,7 @@ 资产类别集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6884,7 +6940,7 @@ 区域市场集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6972,7 +7028,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6992,7 +7048,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7032,7 +7088,7 @@ 英属维尔京群岛 libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7040,7 +7096,7 @@ 新加坡 libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7103,6 +7159,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token 生成安全令牌 @@ -7116,7 +7180,7 @@ 英国 libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7326,7 +7390,7 @@ 应急资金:设置 apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7334,7 +7398,7 @@ 未设置应急资金 apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7342,7 +7406,7 @@ 已设置应急资金 apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7350,7 +7414,7 @@ 费率 apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7358,7 +7422,7 @@ 费用超过了您初始投资的 ${thresholdMax}% (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7366,7 +7430,7 @@ 费用未超过您初始投资的 ${thresholdMax}% (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7377,20 +7441,12 @@ 12 - - Find holding or page... - 查找持仓或页面... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links 快速链接 libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7398,7 +7454,7 @@ 资产概况 libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7640,7 +7696,7 @@ 投资:基础货币 apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7648,7 +7704,7 @@ 您的当前投资的主要部分未以您的基础货币计价 ( ${baseCurrency} 仅占 ${baseCurrencyValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7656,7 +7712,7 @@ 您的当前投资的主要部分以您的基础货币计价(其中 ${baseCurrency} 占比 ${baseCurrencyValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7664,7 +7720,7 @@ 投资 apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7672,7 +7728,7 @@ 超过 ${thresholdMax}% 的当前投资在 ${currency} 中(占比 ${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7680,7 +7736,7 @@ 您的当前投资的主要部分以 ${currency} 计价(占比 ${maxValueRatio}%),并且未超过 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7749,7 +7805,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7773,11 +7829,11 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 @@ -7801,7 +7857,7 @@ 货币集群风险 apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7809,7 +7865,7 @@ 经济市场集群风险 apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7817,7 +7873,7 @@ 应急基金 apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7825,7 +7881,39 @@ 费用 apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7833,7 +7921,7 @@ 区域市场集群风险 apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7841,7 +7929,7 @@ 未找到结果... libs/ui/src/lib/assistant/assistant.html - 49 + 51 @@ -7849,7 +7937,7 @@ 发达市场 apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7857,7 +7945,7 @@ 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7865,7 +7953,7 @@ 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7873,7 +7961,7 @@ 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7881,7 +7969,7 @@ 新兴市场 apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7889,7 +7977,7 @@ 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7897,7 +7985,7 @@ 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7905,7 +7993,7 @@ 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7929,7 +8017,7 @@ 亚太地区 apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7937,7 +8025,7 @@ 亚太地区对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7945,7 +8033,7 @@ 亚太地区对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7953,7 +8041,7 @@ 亚太地区对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7961,7 +8049,7 @@ 新兴市场 apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7969,7 +8057,7 @@ 新兴市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7977,7 +8065,7 @@ 新兴市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7985,7 +8073,7 @@ 新兴市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -7993,7 +8081,7 @@ 欧洲市场 apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8001,7 +8089,7 @@ 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8009,7 +8097,7 @@ 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8017,7 +8105,7 @@ 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8025,7 +8113,7 @@ 日本市场 apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8033,7 +8121,7 @@ 日本市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8041,7 +8129,7 @@ 日本市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8049,7 +8137,7 @@ 日本市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8057,7 +8145,7 @@ 北美市场 apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8065,7 +8153,7 @@ 北美市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8073,7 +8161,7 @@ 北美市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8081,7 +8169,7 @@ 北美市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 02a12cfd1..169ab80c1 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -136,7 +136,9 @@ export const HEADER_KEY_SKIP_INTERCEPTOR = 'X-Skip-Interceptor'; export const MAX_TOP_HOLDINGS = 50; -export const NUMERICAL_PRECISION_THRESHOLD = 100000; +export const NUMERICAL_PRECISION_THRESHOLD_3_FIGURES = 100; +export const NUMERICAL_PRECISION_THRESHOLD_5_FIGURES = 10000; +export const NUMERICAL_PRECISION_THRESHOLD_6_FIGURES = 100000; export const PROPERTY_API_KEY_GHOSTFOLIO = 'API_KEY_GHOSTFOLIO'; export const PROPERTY_API_KEY_OPENROUTER = 'API_KEY_OPENROUTER'; diff --git a/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts new file mode 100644 index 000000000..b4b1060e4 --- /dev/null +++ b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts @@ -0,0 +1,6 @@ +import { AssetClass, AssetSubClass } from '@prisma/client'; + +export interface AssetClassSelectorOption { + id: AssetClass | AssetSubClass; + label: string; +} diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 52ca76b3a..6529fa3ef 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -8,6 +8,7 @@ import type { AdminMarketDataItem } from './admin-market-data.interface'; import type { AdminUsers } from './admin-users.interface'; +import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; import type { BenchmarkMarketDataDetails } from './benchmark-market-data-details.interface'; import type { BenchmarkProperty } from './benchmark-property.interface'; @@ -86,6 +87,7 @@ export { AdminUsers, AiPromptResponse, ApiKeyResponse, + AssetClassSelectorOption, AssetProfileIdentifier, Benchmark, BenchmarkMarketDataDetails, 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 5e03ea34a..0a6af978f 100644 --- a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts @@ -3,6 +3,8 @@ import { AccountWithValue } from '@ghostfolio/common/types'; export interface AccountsResponse { accounts: AccountWithValue[]; totalBalanceInBaseCurrency: number; + totalDividendInBaseCurrency: number; + totalInterestInBaseCurrency: number; totalValueInBaseCurrency: number; transactionCount: number; } diff --git a/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts b/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts index 6994d73f7..21570a459 100644 --- a/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts @@ -8,5 +8,7 @@ export interface WatchlistResponse { marketCondition: Benchmark['marketCondition']; name: string; performances: Benchmark['performances']; + trend50d: Benchmark['trend50d']; + trend200d: Benchmark['trend200d']; })[]; } diff --git a/libs/common/src/lib/interfaces/x-ray-rules-settings.interface.ts b/libs/common/src/lib/interfaces/x-ray-rules-settings.interface.ts index 9ae32d802..bdef3e169 100644 --- a/libs/common/src/lib/interfaces/x-ray-rules-settings.interface.ts +++ b/libs/common/src/lib/interfaces/x-ray-rules-settings.interface.ts @@ -3,6 +3,7 @@ export interface XRayRulesSettings { AccountClusterRiskSingleAccount?: RuleSettings; AssetClassClusterRiskEquity?: RuleSettings; AssetClassClusterRiskFixedIncome?: RuleSettings; + BuyingPower?: RuleSettings; CurrencyClusterRiskBaseCurrencyCurrentInvestment?: RuleSettings; CurrencyClusterRiskCurrentInvestment?: RuleSettings; EconomicMarketClusterRiskDevelopedMarkets?: RuleSettings; diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 51d847300..20adb7a77 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -53,6 +53,13 @@ export const personalFinanceTools: Product[] = [ origin: 'United States', slogan: 'The Intelligent Family Office Suite' }, + { + founded: 2016, + key: 'atominvest', + name: 'Atominvest', + origin: 'United Kingdom', + slogan: 'Portfolio Management' + }, { founded: 2020, hasFreePlan: true, @@ -107,7 +114,7 @@ export const personalFinanceTools: Product[] = [ key: 'capitally', name: 'Capitally', origin: 'Poland', - pricingPerYear: '€50', + pricingPerYear: '€80', slogan: 'Optimize your investments performance' }, { @@ -128,6 +135,13 @@ export const personalFinanceTools: Product[] = [ name: 'CleverBilling', slogan: 'Toma el control total de tus finanzas.' }, + { + founded: 2011, + key: 'cobalt', + name: 'Cobalt', + origin: 'United States', + slogan: 'Next-Level Portfolio Monitoring' + }, { founded: 2017, hasFreePlan: true, @@ -163,7 +177,7 @@ export const personalFinanceTools: Product[] = [ key: 'copilot-money', name: 'Copilot Money', origin: 'United States', - pricingPerYear: '$70', + pricingPerYear: '$95', slogan: 'Do money better with Copilot' }, { @@ -364,6 +378,24 @@ export const personalFinanceTools: Product[] = [ pricingPerYear: '$65', slogan: 'Take control over your investments' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'gasti', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Português' + ], + name: 'Gasti', + origin: 'Argentina', + pricingPerYear: '$60', + regions: ['Global'], + slogan: 'Take control of your finances from WhatsApp' + }, { founded: 2020, hasFreePlan: true, @@ -395,6 +427,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Die All-in-One Lösung für dein Vermögen.', useAnonymously: true }, + { + founded: 2022, + key: 'income-reign', + languages: ['English'], + name: 'Income Reign', + note: 'Income Reign was discontinued in 2025', + origin: 'United States', + pricingPerYear: '$120' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -414,6 +455,18 @@ export const personalFinanceTools: Product[] = [ origin: 'Pakistan', slogan: 'Advanced portfolio tracking and stock market information' }, + { + founded: 2021, + hasFreePlan: true, + hasSelfHostingAbility: true, + key: 'invmon', + name: 'InvMon', + note: 'Originally named as A2PB', + origin: 'Switzerland', + pricingPerYear: '$156', + slogan: 'Track all your assets, investments and portfolios in one place', + useAnonymously: true + }, { founded: 2011, hasFreePlan: true, @@ -450,7 +503,7 @@ export const personalFinanceTools: Product[] = [ key: 'kubera', name: 'Kubera®', origin: 'United States', - pricingPerYear: '$150', + pricingPerYear: '$249', slogan: 'The Time Machine for your Net Worth' }, { @@ -493,7 +546,10 @@ export const personalFinanceTools: Product[] = [ }, { founded: 2021, + hasFreePlan: false, + hasSelfHostingAbility: true, isArchived: true, + isOpenSource: true, key: 'maybe-finance', languages: ['English'], name: 'Maybe Finance', @@ -609,7 +665,7 @@ export const personalFinanceTools: Product[] = [ name: 'Parqet', note: 'Originally named as Tresor One', origin: 'Germany', - pricingPerYear: '€88', + pricingPerYear: '€99.99', regions: ['Austria', 'Germany', 'Switzerland'], slogan: 'Dein Vermögen immer im Blick' }, @@ -649,6 +705,16 @@ export const personalFinanceTools: Product[] = [ origin: 'Italy', slogan: 'Your Personal Finance Hub' }, + { + founded: 2015, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'pocketguard', + name: 'PocketGuard', + origin: 'United States', + pricingPerYear: '$74.99', + slogan: 'Budgeting App & Finance Planner' + }, { founded: 2008, hasFreePlan: true, @@ -929,6 +995,7 @@ export const personalFinanceTools: Product[] = [ founded: 2024, hasSelfHostingAbility: true, isArchived: true, + isOpenSource: true, key: 'wealthfolio', languages: ['English'], name: 'Wealthfolio', @@ -989,7 +1056,7 @@ export const personalFinanceTools: Product[] = [ key: 'ynab', name: 'YNAB (You Need a Budget)', origin: 'United States', - pricingPerYear: '$99', + pricingPerYear: '$109', slogan: 'Change Your Relationship With Money' }, { @@ -999,7 +1066,7 @@ export const personalFinanceTools: Product[] = [ key: 'ziggma', name: 'Ziggma', origin: 'United States', - pricingPerYear: '$90', + pricingPerYear: '$84', slogan: 'Your solution for investing success' } ]; 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 d86a7ca1f..08af86454 100644 --- a/libs/common/src/lib/types/account-with-value.type.ts +++ b/libs/common/src/lib/types/account-with-value.type.ts @@ -3,6 +3,8 @@ import { Account as AccountModel, Platform } from '@prisma/client'; export type AccountWithValue = AccountModel & { allocationInPercentage: number; balanceInBaseCurrency: number; + dividendInBaseCurrency: number; + interestInBaseCurrency: number; platform?: Platform; transactionCount: number; value: number; 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 4ee7c689a..326440774 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -171,7 +171,12 @@
    - {{ element.date | date: defaultDateFormat }} +
    diff --git a/libs/ui/src/lib/activities-table/activities-table.component.ts b/libs/ui/src/lib/activities-table/activities-table.component.ts index c13251771..b38af615e 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -6,7 +6,7 @@ import { DEFAULT_PAGE_SIZE, TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; -import { getDateFormatString, getLocale } from '@ghostfolio/common/helper'; +import { getLocale } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; import { OrderWithAccount } from '@ghostfolio/common/types'; @@ -128,7 +128,6 @@ export class GfActivitiesTableComponent @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; - public defaultDateFormat: string; public displayedColumns = []; public endOfToday = endOfToday(); public hasDrafts = false; @@ -175,8 +174,6 @@ export class GfActivitiesTableComponent } public ngOnChanges() { - this.defaultDateFormat = getDateFormatString(this.locale); - this.displayedColumns = [ 'select', 'importStatus', diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts index 70b466127..1cfcfec6a 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts @@ -50,20 +50,27 @@ export class GfAssistantListItemComponent public constructor(private changeDetectorRef: ChangeDetectorRef) {} public ngOnChanges() { - if (this.item?.mode === SearchMode.ASSET_PROFILE) { + if (this.item?.mode === SearchMode.ACCOUNT) { + this.queryParams = { + accountDetailDialog: true, + accountId: this.item.id + }; + + this.routerLink = internalRoutes.accounts.routerLink; + } else if (this.item?.mode === SearchMode.ASSET_PROFILE) { this.queryParams = { assetProfileDialog: true, - dataSource: this.item?.dataSource, - symbol: this.item?.symbol + dataSource: this.item.dataSource, + symbol: this.item.symbol }; this.routerLink = internalRoutes.adminControl.subRoutes.marketData.routerLink; } else if (this.item?.mode === SearchMode.HOLDING) { this.queryParams = { - dataSource: this.item?.dataSource, + dataSource: this.item.dataSource, holdingDetailDialog: true, - symbol: this.item?.symbol + symbol: this.item.symbol }; this.routerLink = []; diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html index 9c55dac54..fd2c4011d 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html @@ -12,6 +12,9 @@ @if (item?.assetSubClassString) { · {{ item.assetSubClassString }} } + @if (item?.mode === 'assetProfile') { + · {{ item.dataSource }} + } } diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 032b3222d..e5d0dd6da 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -153,14 +153,16 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); public holdings: PortfolioPosition[] = []; public isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false }; public isOpen = false; - public placeholder = $localize`Find holding or page...`; + public placeholder = $localize`Find account, holding or page...`; public searchFormControl = new FormControl(''); public searchResults: ISearchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -199,11 +201,13 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { .pipe( map((searchTerm) => { this.isLoading = { + accounts: true, assetProfiles: true, holdings: true, quickLinks: true }; this.searchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -217,6 +221,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { distinctUntilChanged(), switchMap((searchTerm) => { const results = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -226,6 +231,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { return of(results).pipe( tap(() => { this.isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false @@ -234,6 +240,25 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); } + // Accounts + const accounts$: Observable> = + this.searchAccounts(searchTerm).pipe( + map((accounts) => ({ + accounts: accounts.slice( + 0, + GfAssistantComponent.SEARCH_RESULTS_DEFAULT_LIMIT + ) + })), + catchError((error) => { + console.error('Error fetching accounts for assistant:', error); + return of({ accounts: [] as ISearchResultItem[] }); + }), + tap(() => { + this.isLoading.accounts = false; + this.changeDetectorRef.markForCheck(); + }) + ); + // Asset profiles const assetProfiles$: Observable> = this .hasPermissionToAccessAdminControl @@ -299,13 +324,14 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); // Merge all results - return merge(quickLinks$, assetProfiles$, holdings$).pipe( + return merge(accounts$, assetProfiles$, holdings$, quickLinks$).pipe( scan( (acc: ISearchResults, curr: Partial) => ({ ...acc, ...curr }), { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -323,6 +349,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { error: (error) => { console.error('Assistant search stream error:', error); this.searchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -331,6 +358,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }, complete: () => { this.isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false @@ -451,12 +479,14 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { public initialize() { this.isLoading = { + accounts: true, assetProfiles: true, holdings: true, quickLinks: true }; this.keyManager = new FocusKeyManager(this.assistantListItems).withWrap(); this.searchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -472,6 +502,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); this.isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false @@ -564,6 +595,34 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); } + private searchAccounts(aSearchTerm: string): Observable { + return this.dataService + .fetchAccounts({ + filters: [ + { + id: aSearchTerm, + type: 'SEARCH_QUERY' + } + ] + }) + .pipe( + catchError(() => { + return EMPTY; + }), + map(({ accounts }) => { + return accounts.map(({ id, name }) => { + return { + id, + name, + routerLink: internalRoutes.accounts.routerLink, + mode: SearchMode.ACCOUNT as const + }; + }); + }), + takeUntil(this.unsubscribeSubject) + ); + } + private searchAssetProfiles( aSearchTerm: string ): Observable { diff --git a/libs/ui/src/lib/assistant/assistant.html b/libs/ui/src/lib/assistant/assistant.html index f957d9dcc..5954ce369 100644 --- a/libs/ui/src/lib/assistant/assistant.html +++ b/libs/ui/src/lib/assistant/assistant.html @@ -39,9 +39,11 @@ @if (searchFormControl.value) {
    @if ( + !isLoading.accounts && !isLoading.assetProfiles && !isLoading.holdings && !isLoading.quickLinks && + searchResults.accounts?.length === 0 && searchResults.assetProfiles?.length === 0 && searchResults.holdings?.length === 0 && searchResults.quickLinks?.length === 0 @@ -76,6 +78,32 @@ }
    } + @if (isLoading.accounts || searchResults?.accounts?.length !== 0) { +
    +
    + Accounts +
    + @for ( + searchResultItem of searchResults.accounts; + track searchResultItem + ) { + + } + @if (isLoading.accounts) { + + } +
    + } @if (isLoading.holdings || searchResults?.holdings?.length !== 0) {
    diff --git a/libs/ui/src/lib/assistant/enums/search-mode.ts b/libs/ui/src/lib/assistant/enums/search-mode.ts index f85ad47e9..af9c4dd45 100644 --- a/libs/ui/src/lib/assistant/enums/search-mode.ts +++ b/libs/ui/src/lib/assistant/enums/search-mode.ts @@ -1,4 +1,5 @@ export enum SearchMode { + ACCOUNT = 'account', ASSET_PROFILE = 'assetProfile', HOLDING = 'holding', QUICK_LINK = 'quickLink' diff --git a/libs/ui/src/lib/assistant/interfaces/interfaces.ts b/libs/ui/src/lib/assistant/interfaces/interfaces.ts index ce8b644be..247641094 100644 --- a/libs/ui/src/lib/assistant/interfaces/interfaces.ts +++ b/libs/ui/src/lib/assistant/interfaces/interfaces.ts @@ -1,8 +1,14 @@ import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; -import { DateRange } from '@ghostfolio/common/types'; +import { AccountWithValue, DateRange } from '@ghostfolio/common/types'; import { SearchMode } from '../enums/search-mode'; +export interface IAccountSearchResultItem + extends Pick { + mode: SearchMode.ACCOUNT; + routerLink: string[]; +} + export interface IAssetSearchResultItem extends AssetProfileIdentifier { assetSubClassString: string; currency: string; @@ -22,10 +28,12 @@ export interface IQuickLinkSearchResultItem { } export type ISearchResultItem = + | IAccountSearchResultItem | IAssetSearchResultItem | IQuickLinkSearchResultItem; export interface ISearchResults { + accounts: ISearchResultItem[]; assetProfiles: ISearchResultItem[]; holdings: ISearchResultItem[]; quickLinks: ISearchResultItem[]; diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts index 45f116358..8f7d30847 100644 --- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts @@ -1,5 +1,5 @@ -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { DataService } from '@ghostfolio/client/services/data.service'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { @@ -33,8 +33,8 @@ import { BenchmarkDetailDialogParams } from './interfaces/interfaces'; changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'd-flex flex-column h-100' }, imports: [ - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfLineChartComponent, GfValueComponent, MatDialogModule diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.html b/libs/ui/src/lib/holdings-table/holdings-table.component.html index 2c238b137..d3afe9de9 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.html +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -64,6 +64,30 @@ + + + Quantity + + +
    + +
    + +
    + ; type Story = StoryObj; @@ -31,6 +37,16 @@ export const Currency: Story = { } }; +export const DateValue: Story = { + args: { + deviceType: 'desktop', + isDate: true, + locale: 'en-US', + value: new Date().toISOString() + }, + name: 'Date' +}; + export const Label: Story = { args: { locale: 'en-US', diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts index 55672bacf..e24c00322 100644 --- a/libs/ui/src/lib/value/value.component.ts +++ b/libs/ui/src/lib/value/value.component.ts @@ -22,6 +22,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; }) export class GfValueComponent implements OnChanges { @Input() colorizeSign = false; + @Input() deviceType: string; @Input() icon = ''; @Input() isAbsolute = false; @Input() isCurrency = false; @@ -118,7 +119,7 @@ export class GfValueComponent implements OnChanges { { day: '2-digit', month: '2-digit', - year: 'numeric' + year: this.deviceType === 'mobile' ? '2-digit' : 'numeric' } ); } else { diff --git a/package-lock.json b/package-lock.json index 6585c26ca..1b00e37fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.189.0", + "version": "2.195.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.189.0", + "version": "2.195.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -30,7 +30,7 @@ "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.6.3", - "@ionic/angular": "8.6.3", + "@ionic/angular": "8.7.3", "@keyv/redis": "4.4.0", "@nestjs/bull": "11.0.2", "@nestjs/cache-manager": "3.0.1", @@ -44,7 +44,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.12.0", + "@prisma/client": "6.14.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.6.1", @@ -53,7 +53,7 @@ "big.js": "7.0.1", "bootstrap": "4.6.2", "bull": "4.16.5", - "chart.js": "4.4.9", + "chart.js": "4.5.0", "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-treemap": "3.1.0", "chartjs-plugin-annotation": "3.1.0", @@ -71,7 +71,7 @@ "google-spreadsheet": "3.2.0", "helmet": "7.0.0", "http-status-codes": "2.3.0", - "ionicons": "8.0.10", + "ionicons": "8.0.13", "jsonpath": "1.1.1", "lodash": "4.17.21", "marked": "15.0.4", @@ -93,7 +93,7 @@ "svgmap": "2.12.2", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", - "yahoo-finance2": "3.4.1", + "yahoo-finance2": "3.6.4", "zone.js": "0.15.1" }, "devDependencies": { @@ -136,7 +136,6 @@ "@types/passport-google-oauth20": "2.0.16", "@typescript-eslint/eslint-plugin": "8.29.0", "@typescript-eslint/parser": "8.29.0", - "codelyzer": "6.0.1", "cypress": "6.2.1", "eslint": "9.24.0", "eslint-config-prettier": "10.1.1", @@ -150,7 +149,7 @@ "nx": "21.3.9", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.12.0", + "prisma": "6.14.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", @@ -4702,13 +4701,13 @@ } }, "node_modules/@ionic/angular": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.6.3.tgz", - "integrity": "sha512-Uw8eAcvqVw8mtGqX8kvUGNywSXjXZ3gdERuWC4hUSc63bS1Q+yo/319JLu+yENxOObtAu2dS5FYiqUZ07T8Brg==", + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.7.3.tgz", + "integrity": "sha512-Fd2bsluwsi88d8AEvSVANn3a7xZ7NEmlvgVTLnuF9VTI0TgdkLQptgEolty00axnQdjCaxSXxgFJd/m0gVpKIg==", "license": "MIT", "dependencies": { - "@ionic/core": "8.6.3", - "ionicons": "^7.0.0", + "@ionic/core": "8.7.3", + "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" }, @@ -4720,35 +4719,17 @@ "zone.js": ">=0.13.0" } }, - "node_modules/@ionic/angular/node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.0.3" - } - }, "node_modules/@ionic/core": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.3.tgz", - "integrity": "sha512-N/mkw+sPecLEoO1lrnKDS0uZgl6PWSyFprCkkqoK1nHlfBkgFiHm5M9rvWlnGaFC/5xrhNGHdUtYHDFM+F8gRw==", + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.3.tgz", + "integrity": "sha512-KdyMxpMDQj+uqpztpK6yvN/T96hqcDiGXQ4T+aAZ+LW3wV3+0it6/rbh9C1B/wCl4Isnm4IRltPabgEfNJ50nw==", "license": "MIT", "dependencies": { - "@stencil/core": "4.33.1", - "ionicons": "^7.2.2", + "@stencil/core": "4.36.2", + "ionicons": "^8.0.13", "tslib": "^2.1.0" } }, - "node_modules/@ionic/core/node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.0.3" - } - }, "node_modules/@ioredis/commands": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz", @@ -10513,9 +10494,9 @@ "license": "MIT" }, "node_modules/@prisma/client": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.12.0.tgz", - "integrity": "sha512-wn98bJ3Cj6edlF4jjpgXwbnQIo/fQLqqQHPk2POrZPxTlhY3+n90SSIF3LMRVa8VzRFC/Gec3YKJRxRu+AIGVA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.14.0.tgz", + "integrity": "sha512-8E/Nk3eL5g7RQIg/LUj1ICyDmhD053STjxrPxUtCRybs2s/2sOEcx9NpITuAOPn07HEpWBfhAVe1T/HYWXUPOw==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -10535,73 +10516,66 @@ } }, "node_modules/@prisma/config": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.12.0.tgz", - "integrity": "sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.14.0.tgz", + "integrity": "sha512-IwC7o5KNNGhmblLs23swnfBjADkacBb7wvyDXUWLwuvUQciKJZqyecU0jw0d7JRkswrj+XTL8fdr0y2/VerKQQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "jiti": "2.4.2" - } - }, - "node_modules/@prisma/config/node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "devOptional": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.16.12", + "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz", - "integrity": "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.14.0.tgz", + "integrity": "sha512-j4Lf+y+5QIJgQD4sJWSbkOD7geKx9CakaLp/TyTy/UDu9Wo0awvWCBH/BAxTHUaCpIl9USA5VS/KJhDqKJSwug==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.12.0.tgz", - "integrity": "sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.14.0.tgz", + "integrity": "sha512-LhJjqsALFEcoAtF07nSaOkVguaxw/ZsgfROIYZ8bAZDobe7y8Wy+PkYQaPOK1iLSsFgV2MhCO/eNrI1gdSOj6w==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/fetch-engine": "6.12.0", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "6.14.0", + "@prisma/engines-version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49", + "@prisma/fetch-engine": "6.14.0", + "@prisma/get-platform": "6.14.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc.tgz", - "integrity": "sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ==", + "version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49.tgz", + "integrity": "sha512-EgN9ODJpiX45yvwcngoStp3uQPJ3l+AEVoQ6dMMO2QvmwIlnxfApzKmJQExzdo7/hqQANrz5txHJdGYHzOnGHA==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.12.0.tgz", - "integrity": "sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.14.0.tgz", + "integrity": "sha512-MPzYPOKMENYOaY3AcAbaKrfvXVlvTc6iHmTXsp9RiwCX+bPyfDMqMFVUSVXPYrXnrvEzhGHfyiFy0PRLHPysNg==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "6.14.0", + "@prisma/engines-version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49", + "@prisma/get-platform": "6.14.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.12.0.tgz", - "integrity": "sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.14.0.tgz", + "integrity": "sha512-7VjuxKNwjnBhKfqPpMeWiHEa2sVjYzmHdl1slW6STuUCe9QnOY0OY1ljGSvz6wpG4U8DfbDqkG1yofd/1GINww==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0" + "@prisma/debug": "6.14.0" } }, "node_modules/@redis/client": { @@ -11433,10 +11407,17 @@ "@sinonjs/commons": "^3.0.1" } }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@stencil/core": { - "version": "4.33.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.33.1.tgz", - "integrity": "sha512-12k9xhAJBkpg598it+NRmaYIdEe6TSnsL/v6/KRXDcUyTK11VYwZQej2eHnMWtqot+znJ+GNTqb5YbiXi+5Low==", + "version": "4.36.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", + "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -14674,16 +14655,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -14949,13 +14920,6 @@ "node": ">=4" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true, - "license": "ISC" - }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -15846,17 +15810,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/bull": { "version": "4.16.5", "resolved": "https://registry.npmjs.org/bull/-/bull-4.16.5.tgz", @@ -15920,6 +15873,58 @@ "node": ">= 0.8" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/c12/node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -16230,9 +16235,9 @@ "license": "MIT" }, "node_modules/chart.js": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz", - "integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz", + "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" @@ -16453,6 +16458,16 @@ "dev": true, "license": "MIT" }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/cjs-module-lexer": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", @@ -16729,121 +16744,6 @@ "node": ">=0.10.0" } }, - "node_modules/codelyzer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", - "integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular/compiler": "9.0.0", - "@angular/core": "9.0.0", - "app-root-path": "^3.0.0", - "aria-query": "^3.0.0", - "axobject-query": "2.0.2", - "css-selector-tokenizer": "^0.7.1", - "cssauron": "^1.4.0", - "damerau-levenshtein": "^1.0.4", - "rxjs": "^6.5.3", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.2", - "tslib": "^1.10.0", - "zone.js": "~0.10.3" - }, - "peerDependencies": { - "@angular/compiler": ">=2.3.1 <12.0.0 || ^11.0.0-next || ^11.1.0-next || ^11.2.0-next", - "@angular/core": ">=2.3.1 <12.0.0 || ^11.0.0-next || ^11.1.0-next || ^11.2.0-next", - "tslint": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/compiler": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "tslib": "^1.10.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", - "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "rxjs": "^6.5.3", - "tslib": "^1.10.0", - "zone.js": "~0.10.2" - } - }, - "node_modules/codelyzer/node_modules/aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "node_modules/codelyzer/node_modules/axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ast-types-flow": "0.0.7" - } - }, - "node_modules/codelyzer/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/codelyzer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/codelyzer/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codelyzer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/codelyzer/node_modules/zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", - "dev": true, - "license": "MIT" - }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -17141,8 +17041,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", @@ -18344,17 +18244,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -18388,16 +18277,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "X.X.X" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -19193,13 +19072,6 @@ "lodash-es": "^4.17.21" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -19404,6 +19276,16 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", @@ -19496,6 +19378,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", @@ -19563,6 +19452,13 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -19879,6 +19775,17 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/effect": { + "version": "3.16.12", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.16.12.tgz", + "integrity": "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -19947,6 +19854,16 @@ "node": ">= 4" } }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -21258,8 +21175,8 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", @@ -21351,6 +21268,46 @@ ], "license": "MIT" }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fast-check/node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -21428,13 +21385,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -22476,6 +22426,24 @@ "assert-plus": "^1.0.0" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -23753,12 +23721,35 @@ } }, "node_modules/ionicons": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.10.tgz", - "integrity": "sha512-w+6VmjcRwlAtryXzM+BOlIHKyJYlrfbIIYWW4cU0BM8OECoTn/KF8ecOE5j4401z5/FcmHf/yXol1xinKuPM8g==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "license": "MIT", "dependencies": { - "@stencil/core": "^4.30.0" + "@stencil/core": "^4.35.3" + } + }, + "node_modules/ionicons/node_modules/@stencil/core": { + "version": "4.36.3", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.3.tgz", + "integrity": "sha512-C9DOaAjm+hSYRuVoUuYWG/lrYT8+4DG0AL0m1Ea9+G5v2Y6ApVpNJLbXvFlRZIdDMGecH86s6v0Gp39uockLxg==", + "license": "MIT", + "bin": { + "stencil": "bin/stencil" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.10.0" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" } }, "node_modules/ioredis": { @@ -31679,6 +31670,13 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -32452,6 +32450,26 @@ "node": ">=12" } }, + "node_modules/nypm": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.1.tgz", + "integrity": "sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.2.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/oauth": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.2.tgz", @@ -32570,6 +32588,13 @@ "dev": true, "license": "MIT" }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -33489,8 +33514,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/pathval": { "version": "2.0.1", @@ -33514,6 +33539,13 @@ "dev": true, "license": "MIT" }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -33664,8 +33696,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz", "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", @@ -34505,15 +34537,15 @@ } }, "node_modules/prisma": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.12.0.tgz", - "integrity": "sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.14.0.tgz", + "integrity": "sha512-QEuCwxu+Uq9BffFw7in8In+WfbSUN0ewnaSUKloLkbJd42w6EyFckux4M0f7VwwHlM3A8ssaz4OyniCXlsn0WA==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.12.0", - "@prisma/engines": "6.12.0" + "@prisma/config": "6.14.0", + "@prisma/engines": "6.14.0" }, "bin": { "prisma": "build/index.js" @@ -34798,6 +34830,17 @@ "node": ">= 0.8" } }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -36320,26 +36363,6 @@ "node": ">=10" } }, - "node_modules/semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^5.3.0" - } - }, - "node_modules/semver-dsl/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/send": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", @@ -38123,13 +38146,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -38155,8 +38171,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.14", @@ -38782,207 +38798,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, - "node_modules/tslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/tslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/tslint/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/tslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tslint/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tslint/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/tslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD", - "peer": true - }, "node_modules/tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", @@ -38993,28 +38808,6 @@ "node": ">=0.6.x" } }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD", - "peer": true - }, "node_modules/tuf-js": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", @@ -41030,9 +40823,9 @@ } }, "node_modules/yahoo-finance2": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.4.1.tgz", - "integrity": "sha512-L8Ubmdsn6f+uJEuEDUUHR5n95TFcGkMiMkV0phmvPONFekAn1vWzsEzGfIDG2ODR7aYBB+aURdQg7a3HX2iUHA==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.6.4.tgz", + "integrity": "sha512-IoMU8Hb4BEaNPVnamZjRBuorTGDbaaiV/tM/m3KI8dzwrR6BGmeuT40OX+5IqRiSkMlD8g0kAwGi9E4bY3rLvg==", "license": "MIT", "dependencies": { "@deno/shim-deno": "~0.18.0", diff --git a/package.json b/package.json index e98dcfe76..f0f226555 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.189.0", + "version": "2.195.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -76,7 +76,7 @@ "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.6.3", - "@ionic/angular": "8.6.3", + "@ionic/angular": "8.7.3", "@keyv/redis": "4.4.0", "@nestjs/bull": "11.0.2", "@nestjs/cache-manager": "3.0.1", @@ -90,7 +90,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.12.0", + "@prisma/client": "6.14.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.6.1", @@ -99,7 +99,7 @@ "big.js": "7.0.1", "bootstrap": "4.6.2", "bull": "4.16.5", - "chart.js": "4.4.9", + "chart.js": "4.5.0", "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-treemap": "3.1.0", "chartjs-plugin-annotation": "3.1.0", @@ -117,7 +117,7 @@ "google-spreadsheet": "3.2.0", "helmet": "7.0.0", "http-status-codes": "2.3.0", - "ionicons": "8.0.10", + "ionicons": "8.0.13", "jsonpath": "1.1.1", "lodash": "4.17.21", "marked": "15.0.4", @@ -139,7 +139,7 @@ "svgmap": "2.12.2", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", - "yahoo-finance2": "3.4.1", + "yahoo-finance2": "3.6.4", "zone.js": "0.15.1" }, "devDependencies": { @@ -182,7 +182,6 @@ "@types/passport-google-oauth20": "2.0.16", "@typescript-eslint/eslint-plugin": "8.29.0", "@typescript-eslint/parser": "8.29.0", - "codelyzer": "6.0.1", "cypress": "6.2.1", "eslint": "9.24.0", "eslint-config-prettier": "10.1.1", @@ -196,7 +195,7 @@ "nx": "21.3.9", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.12.0", + "prisma": "6.14.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", @@ -212,6 +211,6 @@ "node": ">=22.18.0" }, "prisma": { - "seed": "node prisma/seed.ts" + "seed": "node prisma/seed.mts" } } diff --git a/prisma/seed.ts b/prisma/seed.mts similarity index 100% rename from prisma/seed.ts rename to prisma/seed.mts diff --git a/test/import/ok/500-activities.json b/test/import/ok/500-activities.json index f2aeab113..b691a6f9f 100644 --- a/test/import/ok/500-activities.json +++ b/test/import/ok/500-activities.json @@ -13,6 +13,8 @@ "platformId": null } ], + "platforms": [], + "tags": [], "activities": [ { "accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", @@ -6014,5 +6016,10 @@ "date": "2022-05-06T03:16:21.371059Z", "symbol": "AAPL" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } diff --git a/test/import/ok/derived-currency.json b/test/import/ok/derived-currency.json index fe5554beb..e740c1ae3 100644 --- a/test/import/ok/derived-currency.json +++ b/test/import/ok/derived-currency.json @@ -13,6 +13,8 @@ "platformId": null } ], + "platforms": [], + "tags": [], "activities": [ { "accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", @@ -26,5 +28,10 @@ "date": "2024-06-28T00:00:00.000Z", "symbol": "JSE.JO" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } diff --git a/test/import/ok/sample.json b/test/import/ok/sample.json index 4ebb323de..21277129f 100644 --- a/test/import/ok/sample.json +++ b/test/import/ok/sample.json @@ -21,7 +21,7 @@ "id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", "isExcluded": false, "name": "My Online Trading Account", - "platformId": null + "platformId": "9da3a8a7-4795-43e3-a6db-ccb914189737" } ], "assetProfiles": [ @@ -70,7 +70,13 @@ "url": null } ], - "platforms": [], + "platforms": [ + { + "id": "9da3a8a7-4795-43e3-a6db-ccb914189737", + "name": "Interactive Brokers", + "url": "https://interactivebrokers.com" + } + ], "tags": [], "activities": [ { diff --git a/test/import/ok/vti-buy-long-history.json b/test/import/ok/vti-buy-long-history.json index 1586cff7b..c8cd25e60 100644 --- a/test/import/ok/vti-buy-long-history.json +++ b/test/import/ok/vti-buy-long-history.json @@ -3,6 +3,9 @@ "date": "2023-04-29T00:00:00.000Z", "version": "dev" }, + "accounts": [], + "platforms": [], + "tags": [], "activities": [ { "fee": 0, @@ -34,5 +37,10 @@ "date": "2010-01-04T00:00:00.000Z", "symbol": "VTI" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } diff --git a/test/import/ok/without-accounts.json b/test/import/ok/without-accounts.json index 3a5320741..8a24f86fc 100644 --- a/test/import/ok/without-accounts.json +++ b/test/import/ok/without-accounts.json @@ -44,5 +44,10 @@ "date": "2021-09-16T00:00:00.000Z", "symbol": "MSFT" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } }