From d16eef5fae70c6da00f5c26de9fb2de002eac44c Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Tue, 18 Nov 2025 12:50:18 -0600 Subject: [PATCH 001/160] Task/integrate OSS Gallery into logo carousel (#5959) * Integrate OSS Gallery * Update changelog --- CHANGELOG.md | 6 ++++++ .../src/assets/images/logo-oss-gallery.svg | 18 ++++++++++++++++++ .../logo-carousel/logo-carousel.component.scss | 4 ++++ .../logo-carousel/logo-carousel.component.ts | 7 +++++++ 4 files changed, 35 insertions(+) create mode 100644 apps/client/src/assets/images/logo-oss-gallery.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 029675b83..1b357dec6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added the _OSS Gallery_ logo to the logo carousel on the landing page + ## 2.217.1 - 2025-11-16 ### Added diff --git a/apps/client/src/assets/images/logo-oss-gallery.svg b/apps/client/src/assets/images/logo-oss-gallery.svg new file mode 100644 index 000000000..e7fc2ffa8 --- /dev/null +++ b/apps/client/src/assets/images/logo-oss-gallery.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss b/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss index 89a837195..352f52ee8 100644 --- a/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss +++ b/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss @@ -113,6 +113,10 @@ mask-image: url('/assets/images/logo-openalternative.svg'); } + &.logo-oss-gallery { + mask-image: url('/assets/images/logo-oss-gallery.svg'); + } + &.logo-privacy-tools { mask-image: url('/assets/images/logo-privacy-tools.svg'); } diff --git a/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts b/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts index ea6344694..9c1a90809 100644 --- a/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts +++ b/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts @@ -48,6 +48,13 @@ export class GfLogoCarouselComponent { title: 'OpenAlternative: Open Source Alternatives to Popular Software', url: 'https://openalternative.co' }, + { + className: 'logo-oss-gallery', + isMask: true, + name: 'OSS Gallery', + title: 'OSS Gallery: Discover the best open-source projects', + url: 'https://oss.gallery' + }, { className: 'logo-privacy-tools', isMask: true, From a2466ebe28508235bfb6fb2bb4aaafa51867fabd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 18 Nov 2025 20:43:43 +0100 Subject: [PATCH 002/160] Task/upgrade yahoo-finance2 to version 3.10.1 (#5956) * Upgrade yahoo-finance2 to version 3.10.1 * Update changelog --- CHANGELOG.md | 4 ++++ package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b357dec6..edcb92bad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the _OSS Gallery_ logo to the logo carousel on the landing page +### Changed + +- Upgraded `yahoo-finance2` from version `3.10.0` to `3.10.1` + ## 2.217.1 - 2025-11-16 ### Added diff --git a/package-lock.json b/package-lock.json index ac4a7c15a..198da4e48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,7 +90,7 @@ "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", "uuid": "11.1.0", - "yahoo-finance2": "3.10.0", + "yahoo-finance2": "3.10.1", "zone.js": "0.15.1" }, "devDependencies": { @@ -42027,9 +42027,9 @@ } }, "node_modules/yahoo-finance2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.10.0.tgz", - "integrity": "sha512-0mnvefEAapMS6M3tnqLmQlyE2W38AQqByaTS09l2dawLaVU7NNc0hJ4qI4F3qi3C7MU+ZWAb8DFVKpW6Zsj0Nw==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.10.1.tgz", + "integrity": "sha512-HATfcK24E8o9gmF/Mh8nL9EYuy45xBXeq7VInkd4ZeK3wBX0AwTQ3ktzjZXKvoGylPrQ3IKMbZl7t3lcbO8fQA==", "license": "MIT", "dependencies": { "@deno/shim-deno": "~0.18.0", diff --git a/package.json b/package.json index d493143ed..9965e4714 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "tablemark": "4.1.0", "twitter-api-v2": "1.27.0", "uuid": "11.1.0", - "yahoo-finance2": "3.10.0", + "yahoo-finance2": "3.10.1", "zone.js": "0.15.1" }, "devDependencies": { From d296e6bd2822a084d0811ec9a4f6f5dd561946a0 Mon Sep 17 00:00:00 2001 From: Johnson Towoju Date: Wed, 19 Nov 2025 17:35:43 +0100 Subject: [PATCH 003/160] Feature/extend menu in accounts table component (#5960) * Extend menu * Update changelog --- CHANGELOG.md | 1 + .../ui/src/lib/accounts-table/accounts-table.component.html | 6 ++++++ libs/ui/src/lib/accounts-table/accounts-table.component.ts | 6 ++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edcb92bad..3e6027a13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Extended the accounts table menu with a _View Details_ item - Added the _OSS Gallery_ logo to the logo carousel on the landing page ### Changed diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index 805ffe77d..c5ebaa657 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -301,6 +301,12 @@ + } diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.html b/apps/client/src/app/components/admin-jobs/admin-jobs.html index 14f1b211b..a82294001 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.html +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -205,14 +205,16 @@
diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.html b/apps/client/src/app/components/admin-tag/admin-tag.component.html index 8b1b510d7..86377c937 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.html +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -64,7 +64,7 @@
diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html index e802e3272..eb63f8aa6 100644 --- a/apps/client/src/app/components/admin-users/admin-users.html +++ b/apps/client/src/app/components/admin-users/admin-users.html @@ -222,7 +222,9 @@ > - View Details + View Details... @if (hasPermissionToImpersonateAllUsers) { diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index c5ebaa657..d127b4bf3 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -7,7 +7,7 @@ (click)="onTransferBalance()" > - Transfer Cash Balance... + Transfer Cash Balance... } @@ -304,13 +304,13 @@
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 e9bebaa16..b8e1882d4 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -6,7 +6,7 @@ (click)="onImport()" > - Import Activities... + Import Activities... @if (hasPermissionToExportActivities) { @if (hasPermissionToExportActivities) { @@ -379,7 +379,9 @@ > - Import Activities... + Import Activities... } @@ -391,7 +393,9 @@ > - Import Dividends... + Import Dividends... } @@ -443,20 +447,20 @@ } - - - - } -
-
-
Membership
-
{{ name }}
+
+ diff --git a/libs/ui/src/lib/membership-card/membership-card.component.scss b/libs/ui/src/lib/membership-card/membership-card.component.scss index 270adc0f1..fcd923f12 100644 --- a/libs/ui/src/lib/membership-card/membership-card.component.scss +++ b/libs/ui/src/lib/membership-card/membership-card.component.scss @@ -1,71 +1,231 @@ :host { --borderRadius: 1rem; --borderWidth: 2px; + --hover3dSpotlightOpacity: 0.2; display: block; max-width: 25rem; padding-top: calc(1 * var(--borderWidth)); width: 100%; - .card-container { - border-radius: var(--borderRadius); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15); + .card-wrapper { + &.hover-3d { + perspective: 1000px; + } - &:after { - animation: animatedborder 7s ease alternate infinite; - background: linear-gradient(60deg, #5073b8, #1098ad, #07b39b, #6fba82); - background-size: 300% 300%; + .card-container { border-radius: var(--borderRadius); - content: ''; - height: calc(100% + var(--borderWidth) * 2); - left: calc(-1 * var(--borderWidth)); - top: calc(-1 * var(--borderWidth)); - position: absolute; - width: calc(100% + var(--borderWidth) * 2); - z-index: -1; - - @keyframes animatedborder { - 0% { - background-position: 0% 50%; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15); + + .card-item { + aspect-ratio: 1.586; + background-color: #1d2124; + border-radius: calc(var(--borderRadius) - var(--borderWidth)); + color: rgba(var(--light-primary-text)); + line-height: 1.2; + + button { + color: rgba(var(--light-primary-text)); + height: 1.5rem; + z-index: 3; } - 50% { - background-position: 100% 50%; + + .heading { + font-size: 13px; } - 100% { - background-position: 0% 50%; + + .value { + font-size: 18px; + } + } + + &:not(.premium) { + &::after { + opacity: 0; + } + + .card-item { + background-color: #ffffff; + color: rgba(var(--dark-primary-text)); } } } - .card-item { - aspect-ratio: 1.586; - background-color: #1d2124; - border-radius: calc(var(--borderRadius) - var(--borderWidth)); - color: rgba(var(--light-primary-text)); - line-height: 1.2; + &.hover-3d { + --hover3d-rotate-x: 0; + --hover3d-rotate-y: 0; + --hover3d-shine: 100% 100%; - button { - color: rgba(var(--light-primary-text)); - height: 1.5rem; + .card-container { + overflow: hidden; + position: relative; + scale: 1; + transform: rotate3d( + var(--hover3d-rotate-x), + var(--hover3d-rotate-y), + 0, + 10deg + ); + transform-style: preserve-3d; + transition: + box-shadow 400ms ease-out, + scale 500ms ease-out, + transform 500ms ease-out; + will-change: transform, scale; + + &::before { + background-image: radial-gradient( + circle at 50%, + rgba(255, 255, 255, var(--hover3dSpotlightOpacity)) 10%, + transparent 50% + ); + content: ''; + filter: blur(0.75rem); + height: 33.333%; + opacity: 0; + pointer-events: none; + position: absolute; + scale: 500%; + translate: var(--hover3d-shine); + transition: + opacity 400ms ease-out, + translate 400ms ease-out; + width: 33.333%; + z-index: 1; + } + + .card-item { + position: relative; + + .hover-zone { + height: 33.333%; + width: 33.333%; + z-index: 2; + + &:nth-child(1) { + left: 0; + top: 0; + } + + &:nth-child(2) { + left: 33.333%; + top: 0; + } + + &:nth-child(3) { + right: 0; + top: 0; + } + + &:nth-child(4) { + left: 0; + top: 33.333%; + } + + &:nth-child(5) { + left: 33.333%; + top: 33.333%; + } + + &:nth-child(6) { + right: 0; + top: 33.333%; + } + + &:nth-child(7) { + bottom: 0; + left: 0; + } + + &:nth-child(8) { + bottom: 0; + left: 33.333%; + } + + &:nth-child(9) { + bottom: 0; + right: 0; + } + } + } } - .heading { - font-size: 13px; + &:has(.hover-zone:hover) .card-container { + box-shadow: 0 18px 40px rgba(15, 23, 42, 0.3); + scale: 1.05; + + &::before { + opacity: 1; + } } - .value { - font-size: 18px; + &:has(.hover-zone:nth-child(1):hover) { + --hover3d-rotate-x: 1; + --hover3d-rotate-y: -1; + --hover3d-shine: 0% 0%; } - } - &:not(.premium) { - &:after { - opacity: 0; + &:has(.hover-zone:nth-child(2):hover) { + --hover3d-rotate-x: 1; + --hover3d-rotate-y: 0; + --hover3d-shine: 100% 0%; } - .card-item { - background-color: #ffffff; - color: rgba(var(--dark-primary-text)); + &:has(.hover-zone:nth-child(3):hover) { + --hover3d-rotate-x: 1; + --hover3d-rotate-y: 1; + --hover3d-shine: 200% 0%; + } + + &:has(.hover-zone:nth-child(4):hover) { + --hover3d-rotate-x: 0; + --hover3d-rotate-y: -1; + --hover3d-shine: 0% 100%; + } + + &:has(.hover-zone:nth-child(5):hover) { + --hover3d-rotate-x: 0; + --hover3d-rotate-y: 0; + --hover3d-shine: 100% 100%; + } + + &:has(.hover-zone:nth-child(6):hover) { + --hover3d-rotate-x: 0; + --hover3d-rotate-y: 1; + --hover3d-shine: 200% 100%; + } + + &:has(.hover-zone:nth-child(7):hover) { + --hover3d-rotate-x: -1; + --hover3d-rotate-y: -1; + --hover3d-shine: 0% 200%; + } + + &:has(.hover-zone:nth-child(8):hover) { + --hover3d-rotate-x: -1; + --hover3d-rotate-y: 0; + --hover3d-shine: 100% 200%; + } + + &:has(.hover-zone:nth-child(9):hover) { + --hover3d-rotate-x: -1; + --hover3d-rotate-y: 1; + --hover3d-shine: 200% 200%; + } + } + } + + @media (prefers-reduced-motion: reduce) { + .card-wrapper.hover-3d { + .card-container { + scale: 1 !important; + transform: none !important; + transition: none !important; + + &::before { + opacity: 0 !important; + transition: none !important; + } } } } diff --git a/libs/ui/src/lib/membership-card/membership-card.component.stories.ts b/libs/ui/src/lib/membership-card/membership-card.component.stories.ts index 6b6fbe038..0d475bda7 100644 --- a/libs/ui/src/lib/membership-card/membership-card.component.stories.ts +++ b/libs/ui/src/lib/membership-card/membership-card.component.stories.ts @@ -26,6 +26,9 @@ export default { }) ], argTypes: { + hover3d: { + control: { type: 'boolean' } + }, name: { control: { type: 'select' }, options: ['Basic', 'Premium'] @@ -37,6 +40,7 @@ type Story = StoryObj; export const Basic: Story = { args: { + hover3d: false, name: 'Basic' } }; @@ -45,6 +49,7 @@ export const Premium: Story = { args: { expiresAt: addYears(new Date(), 1).toLocaleDateString(), hasPermissionToCreateApiKey: true, + hover3d: false, name: 'Premium' } }; diff --git a/libs/ui/src/lib/membership-card/membership-card.component.ts b/libs/ui/src/lib/membership-card/membership-card.component.ts index 175a94f42..be223758d 100644 --- a/libs/ui/src/lib/membership-card/membership-card.component.ts +++ b/libs/ui/src/lib/membership-card/membership-card.component.ts @@ -34,6 +34,7 @@ import { GfLogoComponent } from '../logo'; export class GfMembershipCardComponent { @Input() public expiresAt: string; @Input() public hasPermissionToCreateApiKey: boolean; + @Input() public hover3d = false; @Input() public name: string; @Output() generateApiKeyClicked = new EventEmitter(); From 4cd16c33f884a5a9dc2e98e56b85cf83a4b1e7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Mart=C3=ADn?= Date: Sun, 7 Dec 2025 10:04:20 +0100 Subject: [PATCH 047/160] Feature/OIDC authentication (#5981) * Set up OIDC authentication * Update changelog --- CHANGELOG.md | 5 +- apps/api/src/app/auth/auth.controller.ts | 48 ++++++-- apps/api/src/app/auth/auth.module.ts | 82 ++++++++++++- apps/api/src/app/auth/auth.service.ts | 36 +++--- .../api/src/app/auth/interfaces/interfaces.ts | 19 +++ apps/api/src/app/auth/oidc-state.store.ts | 114 ++++++++++++++++++ apps/api/src/app/auth/oidc.strategy.ts | 69 +++++++++++ apps/api/src/app/info/info.service.ts | 4 + .../configuration/configuration.service.ts | 26 +++- .../interfaces/environment.interface.ts | 9 ++ .../app/components/header/header.component.ts | 7 ++ .../interfaces/interfaces.ts | 1 + .../login-with-access-token-dialog.html | 11 ++ libs/common/src/lib/permissions.ts | 2 + package-lock.json | 43 +++++++ package.json | 2 + .../migration.sql | 2 + prisma/schema.prisma | 1 + 18 files changed, 447 insertions(+), 34 deletions(-) create mode 100644 apps/api/src/app/auth/oidc-state.store.ts create mode 100644 apps/api/src/app/auth/oidc.strategy.ts create mode 100644 prisma/migrations/20251103162035_added_oidc_to_provider/migration.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 878d90326..7b3f93910 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased -#### Added +### Added - Introduced data source transformation support in the import functionality for self-hosted environments +- Added _OpenID Connect_ (`OIDC`) as a new login provider for self-hosted environments (experimental) - Added an optional 3D hover effect to the membership card component -#### Changed +### Changed - Increased the numerical precision for cryptocurrency quantities in the holding detail dialog - Upgraded `envalid` from version `8.1.0` to `8.1.1` diff --git a/apps/api/src/app/auth/auth.controller.ts b/apps/api/src/app/auth/auth.controller.ts index b45e7b97b..388f1dbd3 100644 --- a/apps/api/src/app/auth/auth.controller.ts +++ b/apps/api/src/app/auth/auth.controller.ts @@ -84,7 +84,6 @@ export class AuthController { @Req() request: Request, @Res() response: Response ) { - // Handles the Google OAuth2 callback const jwt: string = (request.user as any).jwt; if (jwt) { @@ -102,6 +101,46 @@ export class AuthController { } } + @Get('oidc') + @UseGuards(AuthGuard('oidc')) + @Version(VERSION_NEUTRAL) + public oidcLogin() { + if (!this.configurationService.get('ENABLE_FEATURE_AUTH_OIDC')) { + throw new HttpException( + getReasonPhrase(StatusCodes.FORBIDDEN), + StatusCodes.FORBIDDEN + ); + } + } + + @Get('oidc/callback') + @UseGuards(AuthGuard('oidc')) + @Version(VERSION_NEUTRAL) + public oidcLoginCallback(@Req() request: Request, @Res() response: Response) { + const jwt: string = (request.user as any).jwt; + + if (jwt) { + response.redirect( + `${this.configurationService.get( + 'ROOT_URL' + )}/${DEFAULT_LANGUAGE_CODE}/auth/${jwt}` + ); + } else { + response.redirect( + `${this.configurationService.get( + 'ROOT_URL' + )}/${DEFAULT_LANGUAGE_CODE}/auth` + ); + } + } + + @Post('webauthn/generate-authentication-options') + public async generateAuthenticationOptions( + @Body() body: { deviceId: string } + ) { + return this.webAuthService.generateAuthenticationOptions(body.deviceId); + } + @Get('webauthn/generate-registration-options') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async generateRegistrationOptions() { @@ -116,13 +155,6 @@ export class AuthController { return this.webAuthService.verifyAttestation(body.credential); } - @Post('webauthn/generate-authentication-options') - public async generateAuthenticationOptions( - @Body() body: { deviceId: string } - ) { - return this.webAuthService.generateAuthenticationOptions(body.deviceId); - } - @Post('webauthn/verify-authentication') public async verifyAuthentication( @Body() body: { deviceId: string; credential: AssertionCredentialJSON } diff --git a/apps/api/src/app/auth/auth.module.ts b/apps/api/src/app/auth/auth.module.ts index 824c432b1..9fc5d0925 100644 --- a/apps/api/src/app/auth/auth.module.ts +++ b/apps/api/src/app/auth/auth.module.ts @@ -4,17 +4,20 @@ import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscriptio import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; -import { Module } from '@nestjs/common'; +import { Logger, Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; +import type { StrategyOptions } from 'passport-openidconnect'; import { ApiKeyStrategy } from './api-key.strategy'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { GoogleStrategy } from './google.strategy'; import { JwtStrategy } from './jwt.strategy'; +import { OidcStrategy } from './oidc.strategy'; @Module({ controllers: [AuthController], @@ -36,6 +39,83 @@ import { JwtStrategy } from './jwt.strategy'; AuthService, GoogleStrategy, JwtStrategy, + { + inject: [AuthService, ConfigurationService], + provide: OidcStrategy, + useFactory: async ( + authService: AuthService, + configurationService: ConfigurationService + ) => { + const isOidcEnabled = configurationService.get( + 'ENABLE_FEATURE_AUTH_OIDC' + ); + + if (!isOidcEnabled) { + return null; + } + + const issuer = configurationService.get('OIDC_ISSUER'); + const scope = configurationService.get('OIDC_SCOPE'); + + const callbackUrl = + configurationService.get('OIDC_CALLBACK_URL') || + `${configurationService.get('ROOT_URL')}/api/auth/oidc/callback`; + + // Check for manual URL overrides + const manualAuthorizationUrl = configurationService.get( + 'OIDC_AUTHORIZATION_URL' + ); + const manualTokenUrl = configurationService.get('OIDC_TOKEN_URL'); + const manualUserInfoUrl = + configurationService.get('OIDC_USER_INFO_URL'); + + let authorizationURL: string; + let tokenURL: string; + let userInfoURL: string; + + if (manualAuthorizationUrl && manualTokenUrl && manualUserInfoUrl) { + // Use manual URLs + authorizationURL = manualAuthorizationUrl; + tokenURL = manualTokenUrl; + userInfoURL = manualUserInfoUrl; + } else { + // Fetch OIDC configuration from discovery endpoint + try { + const response = await fetch( + `${issuer}/.well-known/openid-configuration` + ); + + const config = (await response.json()) as { + authorization_endpoint: string; + token_endpoint: string; + userinfo_endpoint: string; + }; + + // Manual URLs take priority over discovered ones + authorizationURL = + manualAuthorizationUrl || config.authorization_endpoint; + tokenURL = manualTokenUrl || config.token_endpoint; + userInfoURL = manualUserInfoUrl || config.userinfo_endpoint; + } catch (error) { + Logger.error(error, 'OidcStrategy'); + throw new Error('Failed to fetch OIDC configuration from issuer'); + } + } + + const options: StrategyOptions = { + authorizationURL, + issuer, + scope, + tokenURL, + userInfoURL, + callbackURL: callbackUrl, + clientID: configurationService.get('OIDC_CLIENT_ID'), + clientSecret: configurationService.get('OIDC_CLIENT_SECRET') + }; + + return new OidcStrategy(authService, options); + } + }, WebAuthService ] }) diff --git a/apps/api/src/app/auth/auth.service.ts b/apps/api/src/app/auth/auth.service.ts index a6ee5d260..6fe50dce0 100644 --- a/apps/api/src/app/auth/auth.service.ts +++ b/apps/api/src/app/auth/auth.service.ts @@ -17,30 +17,22 @@ export class AuthService { ) {} public async validateAnonymousLogin(accessToken: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const hashedAccessToken = this.userService.createAccessToken({ - password: accessToken, - salt: this.configurationService.get('ACCESS_TOKEN_SALT') - }); + const hashedAccessToken = this.userService.createAccessToken({ + password: accessToken, + salt: this.configurationService.get('ACCESS_TOKEN_SALT') + }); - const [user] = await this.userService.users({ - where: { accessToken: hashedAccessToken } - }); + const [user] = await this.userService.users({ + where: { accessToken: hashedAccessToken } + }); - if (user) { - const jwt = this.jwtService.sign({ - id: user.id - }); + if (user) { + return this.jwtService.sign({ + id: user.id + }); + } - resolve(jwt); - } else { - throw new Error(); - } - } catch { - reject(); - } - }); + throw new Error(); } public async validateOAuthLogin({ @@ -75,7 +67,7 @@ export class AuthService { } catch (error) { throw new InternalServerErrorException( 'validateOAuthLogin', - error.message + error instanceof Error ? error.message : 'Unknown error' ); } } diff --git a/apps/api/src/app/auth/interfaces/interfaces.ts b/apps/api/src/app/auth/interfaces/interfaces.ts index 4fdcc25b5..7ddfe41d2 100644 --- a/apps/api/src/app/auth/interfaces/interfaces.ts +++ b/apps/api/src/app/auth/interfaces/interfaces.ts @@ -6,6 +6,25 @@ export interface AuthDeviceDialogParams { authDevice: AuthDeviceDto; } +export interface OidcContext { + claims?: { + sub?: string; + }; +} + +export interface OidcIdToken { + sub?: string; +} + +export interface OidcParams { + sub?: string; +} + +export interface OidcProfile { + id?: string; + sub?: string; +} + export interface ValidateOAuthLoginParams { provider: Provider; thirdPartyId: string; diff --git a/apps/api/src/app/auth/oidc-state.store.ts b/apps/api/src/app/auth/oidc-state.store.ts new file mode 100644 index 000000000..653451166 --- /dev/null +++ b/apps/api/src/app/auth/oidc-state.store.ts @@ -0,0 +1,114 @@ +import ms from 'ms'; + +/** + * Custom state store for OIDC authentication that doesn't rely on express-session. + * This store manages OAuth2 state parameters in memory with automatic cleanup. + */ +export class OidcStateStore { + private readonly STATE_EXPIRY_MS = ms('10 minutes'); + + private stateMap = new Map< + string, + { + appState?: unknown; + ctx: { issued?: Date; maxAge?: number; nonce?: string }; + meta?: unknown; + timestamp: number; + } + >(); + + /** + * Store request state. + * Signature matches passport-openidconnect SessionStore + */ + public store( + _req: unknown, + _meta: unknown, + appState: unknown, + ctx: { maxAge?: number; nonce?: string; issued?: Date }, + callback: (err: Error | null, handle?: string) => void + ) { + try { + // Generate a unique handle for this state + const handle = this.generateHandle(); + + this.stateMap.set(handle, { + appState, + ctx, + meta: _meta, + timestamp: Date.now() + }); + + // Clean up expired states + this.cleanup(); + + callback(null, handle); + } catch (error) { + callback(error as Error); + } + } + + /** + * Verify request state. + * Signature matches passport-openidconnect SessionStore + */ + public verify( + _req: unknown, + handle: string, + callback: ( + err: Error | null, + appState?: unknown, + ctx?: { maxAge?: number; nonce?: string; issued?: Date } + ) => void + ) { + try { + const data = this.stateMap.get(handle); + + if (!data) { + return callback(null, undefined, undefined); + } + + if (Date.now() - data.timestamp > this.STATE_EXPIRY_MS) { + // State has expired + this.stateMap.delete(handle); + return callback(null, undefined, undefined); + } + + // Remove state after verification (one-time use) + this.stateMap.delete(handle); + + callback(null, data.ctx, data.appState); + } catch (error) { + callback(error as Error); + } + } + + /** + * Clean up expired states + */ + private cleanup() { + const now = Date.now(); + const expiredKeys: string[] = []; + + for (const [key, value] of this.stateMap.entries()) { + if (now - value.timestamp > this.STATE_EXPIRY_MS) { + expiredKeys.push(key); + } + } + + for (const key of expiredKeys) { + this.stateMap.delete(key); + } + } + + /** + * Generate a cryptographically secure random handle + */ + private generateHandle() { + return ( + Math.random().toString(36).substring(2, 15) + + Math.random().toString(36).substring(2, 15) + + Date.now().toString(36) + ); + } +} diff --git a/apps/api/src/app/auth/oidc.strategy.ts b/apps/api/src/app/auth/oidc.strategy.ts new file mode 100644 index 000000000..96b284121 --- /dev/null +++ b/apps/api/src/app/auth/oidc.strategy.ts @@ -0,0 +1,69 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { Provider } from '@prisma/client'; +import { Request } from 'express'; +import { Strategy, type StrategyOptions } from 'passport-openidconnect'; + +import { AuthService } from './auth.service'; +import { + OidcContext, + OidcIdToken, + OidcParams, + OidcProfile +} from './interfaces/interfaces'; +import { OidcStateStore } from './oidc-state.store'; + +@Injectable() +export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { + private static readonly stateStore = new OidcStateStore(); + + public constructor( + private readonly authService: AuthService, + options: StrategyOptions + ) { + super({ + ...options, + passReqToCallback: true, + store: OidcStrategy.stateStore + }); + } + + public async validate( + _request: Request, + issuer: string, + profile: OidcProfile, + context: OidcContext, + idToken: OidcIdToken, + _accessToken: string, + _refreshToken: string, + params: OidcParams + ) { + try { + const thirdPartyId = + profile?.id ?? + profile?.sub ?? + idToken?.sub ?? + params?.sub ?? + context?.claims?.sub; + + const jwt = await this.authService.validateOAuthLogin({ + thirdPartyId, + provider: Provider.OIDC + }); + + if (!thirdPartyId) { + Logger.error( + `Missing subject identifier in OIDC response from ${issuer}`, + 'OidcStrategy' + ); + + throw new Error('Missing subject identifier in OIDC response'); + } + + return { jwt }; + } catch (error) { + Logger.error(error, 'OidcStrategy'); + throw error; + } + } +} diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index 634fc959c..3802e3ef4 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -55,6 +55,10 @@ export class InfoService { globalPermissions.push(permissions.enableAuthGoogle); } + if (this.configurationService.get('ENABLE_FEATURE_AUTH_OIDC')) { + globalPermissions.push(permissions.enableAuthOidc); + } + if (this.configurationService.get('ENABLE_FEATURE_AUTH_TOKEN')) { globalPermissions.push(permissions.enableAuthToken); } diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index f37189569..a91aa6e69 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -41,6 +41,7 @@ export class ConfigurationService { default: [] }), ENABLE_FEATURE_AUTH_GOOGLE: bool({ default: false }), + ENABLE_FEATURE_AUTH_OIDC: bool({ default: false }), ENABLE_FEATURE_AUTH_TOKEN: bool({ default: true }), ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }), ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES: bool({ default: true }), @@ -54,9 +55,32 @@ export class ConfigurationService { GOOGLE_SHEETS_ID: str({ default: '' }), GOOGLE_SHEETS_PRIVATE_KEY: str({ default: '' }), HOST: host({ default: DEFAULT_HOST }), - JWT_SECRET_KEY: str({}), + JWT_SECRET_KEY: str(), MAX_ACTIVITIES_TO_IMPORT: num({ default: Number.MAX_SAFE_INTEGER }), MAX_CHART_ITEMS: num({ default: 365 }), + OIDC_AUTHORIZATION_URL: str({ default: '' }), + OIDC_CALLBACK_URL: str({ default: '' }), + OIDC_CLIENT_ID: str({ + default: undefined, + requiredWhen: (env) => { + return env.ENABLE_FEATURE_AUTH_OIDC === true; + } + }), + OIDC_CLIENT_SECRET: str({ + default: undefined, + requiredWhen: (env) => { + return env.ENABLE_FEATURE_AUTH_OIDC === true; + } + }), + OIDC_ISSUER: str({ + default: undefined, + requiredWhen: (env) => { + return env.ENABLE_FEATURE_AUTH_OIDC === true; + } + }), + OIDC_SCOPE: json({ default: ['openid'] }), + OIDC_TOKEN_URL: str({ default: '' }), + OIDC_USER_INFO_URL: str({ default: '' }), PORT: port({ default: DEFAULT_PORT }), PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY: num({ default: DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY diff --git a/apps/api/src/services/interfaces/environment.interface.ts b/apps/api/src/services/interfaces/environment.interface.ts index 3a2ac687c..3c03744f1 100644 --- a/apps/api/src/services/interfaces/environment.interface.ts +++ b/apps/api/src/services/interfaces/environment.interface.ts @@ -17,6 +17,7 @@ export interface Environment extends CleanedEnvAccessors { DATA_SOURCES: string[]; DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: string[]; ENABLE_FEATURE_AUTH_GOOGLE: boolean; + ENABLE_FEATURE_AUTH_OIDC: boolean; ENABLE_FEATURE_AUTH_TOKEN: boolean; ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean; ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES: boolean; @@ -32,6 +33,14 @@ export interface Environment extends CleanedEnvAccessors { JWT_SECRET_KEY: string; MAX_ACTIVITIES_TO_IMPORT: number; MAX_CHART_ITEMS: number; + OIDC_AUTHORIZATION_URL: string; + OIDC_CALLBACK_URL: string; + OIDC_CLIENT_ID: string; + OIDC_CLIENT_SECRET: string; + OIDC_ISSUER: string; + OIDC_SCOPE: string[]; + OIDC_TOKEN_URL: string; + OIDC_USER_INFO_URL: string; PORT: number; PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY: number; PROCESSOR_GATHER_HISTORICAL_MARKET_DATA_CONCURRENCY: number; diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index 9fb9a8351..80239d56f 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -105,6 +105,7 @@ export class GfHeaderComponent implements OnChanges { public hasFilters: boolean; public hasImpersonationId: boolean; public hasPermissionForAuthGoogle: boolean; + public hasPermissionForAuthOidc: boolean; public hasPermissionForAuthToken: boolean; public hasPermissionForSubscription: boolean; public hasPermissionToAccessAdminControl: boolean; @@ -170,6 +171,11 @@ export class GfHeaderComponent implements OnChanges { permissions.enableAuthGoogle ); + this.hasPermissionForAuthOidc = hasPermission( + this.info?.globalPermissions, + permissions.enableAuthOidc + ); + this.hasPermissionForAuthToken = hasPermission( this.info?.globalPermissions, permissions.enableAuthToken @@ -286,6 +292,7 @@ export class GfHeaderComponent implements OnChanges { data: { accessToken: '', hasPermissionToUseAuthGoogle: this.hasPermissionForAuthGoogle, + hasPermissionToUseAuthOidc: this.hasPermissionForAuthOidc, hasPermissionToUseAuthToken: this.hasPermissionForAuthToken, title: $localize`Sign in` }, diff --git a/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts index c7c4ab3fd..e9222e142 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts @@ -1,6 +1,7 @@ export interface LoginWithAccessTokenDialogParams { accessToken: string; hasPermissionToUseAuthGoogle: boolean; + hasPermissionToUseAuthOidc: boolean; hasPermissionToUseAuthToken: boolean; title: string; } 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 bc232cfb7..cf5611ef7 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 @@ -45,6 +45,17 @@ >
} + + @if (data.hasPermissionToUseAuthOidc) { + + }
diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts index 597c27690..2e244568c 100644 --- a/libs/common/src/lib/permissions.ts +++ b/libs/common/src/lib/permissions.ts @@ -29,6 +29,7 @@ export const permissions = { deleteUser: 'deleteUser', deleteWatchlistItem: 'deleteWatchlistItem', enableAuthGoogle: 'enableAuthGoogle', + enableAuthOidc: 'enableAuthOidc', enableAuthToken: 'enableAuthToken', enableDataProviderGhostfolio: 'enableDataProviderGhostfolio', enableFearAndGreedIndex: 'enableFearAndGreedIndex', @@ -159,6 +160,7 @@ export function filterGlobalPermissions( return globalPermissions.filter((permission) => { return ( permission !== permissions.enableAuthGoogle && + permission !== permissions.enableAuthOidc && permission !== permissions.enableSubscription ); }); diff --git a/package-lock.json b/package-lock.json index 6a3829a1d..faa39e722 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,6 +83,7 @@ "passport-google-oauth20": "2.0.0", "passport-headerapikey": "1.2.2", "passport-jwt": "4.0.1", + "passport-openidconnect": "0.1.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "stripe": "18.5.0", @@ -129,6 +130,7 @@ "@types/node": "22.15.17", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", + "@types/passport-openidconnect": "0.1.3", "@typescript-eslint/eslint-plugin": "8.43.0", "@typescript-eslint/parser": "8.43.0", "eslint": "9.35.0", @@ -14502,6 +14504,30 @@ "@types/passport": "*" } }, + "node_modules/@types/passport-openidconnect": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/passport-openidconnect/-/passport-openidconnect-0.1.3.tgz", + "integrity": "sha512-k1Ni7bG/9OZNo2Qpjg2W6GajL+pww6ZPaNWMXfpteCX4dXf4QgaZLt2hjR5IiPrqwBT9+W8KjCTJ/uhGIoBx/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/oauth": "*", + "@types/passport": "*", + "@types/passport-strategy": "*" + } + }, + "node_modules/@types/passport-strategy": { + "version": "0.2.38", + "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.38.tgz", + "integrity": "sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/passport": "*" + } + }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -34723,6 +34749,23 @@ "url": "https://github.com/sponsors/jaredhanson" } }, + "node_modules/passport-openidconnect": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/passport-openidconnect/-/passport-openidconnect-0.1.2.tgz", + "integrity": "sha512-JX3rTyW+KFZ/E9OF/IpXJPbyLO9vGzcmXB5FgSP2jfL3LGKJPdV7zUE8rWeKeeI/iueQggOeFa3onrCmhxXZTg==", + "license": "MIT", + "dependencies": { + "oauth": "0.10.x", + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, "node_modules/passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", diff --git a/package.json b/package.json index 5dae615b8..843091424 100644 --- a/package.json +++ b/package.json @@ -127,6 +127,7 @@ "passport-google-oauth20": "2.0.0", "passport-headerapikey": "1.2.2", "passport-jwt": "4.0.1", + "passport-openidconnect": "0.1.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "stripe": "18.5.0", @@ -173,6 +174,7 @@ "@types/node": "22.15.17", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", + "@types/passport-openidconnect": "0.1.3", "@typescript-eslint/eslint-plugin": "8.43.0", "@typescript-eslint/parser": "8.43.0", "eslint": "9.35.0", diff --git a/prisma/migrations/20251103162035_added_oidc_to_provider/migration.sql b/prisma/migrations/20251103162035_added_oidc_to_provider/migration.sql new file mode 100644 index 000000000..f71f6eded --- /dev/null +++ b/prisma/migrations/20251103162035_added_oidc_to_provider/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "Provider" ADD VALUE 'OIDC'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 72ec79008..232dde9ca 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -335,6 +335,7 @@ enum Provider { ANONYMOUS GOOGLE INTERNET_IDENTITY + OIDC } enum Role { From e20530d5f041061599f63aa0e24d8bee1dd8980e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Dec 2025 10:04:53 +0100 Subject: [PATCH 048/160] Task/activate 3d hover effect in account membership overview (#6039) * Activate 3d hover effect --- .../user-account-membership/user-account-membership.html | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.html b/apps/client/src/app/components/user-account-membership/user-account-membership.html index 351d5608a..31d239215 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.html +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5,6 +5,7 @@ From 5ccfbc31aef808bdd9d41b855963bc4978293c03 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Dec 2025 10:07:47 +0100 Subject: [PATCH 049/160] Release 2.222.0 (#6041) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b3f93910..cf976e909 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.222.0 - 2025-12-07 ### Added diff --git a/package-lock.json b/package-lock.json index faa39e722..61f38db9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.221.0", + "version": "2.222.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.221.0", + "version": "2.222.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 843091424..d0ee2c084 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.221.0", + "version": "2.222.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 0f7e5a25042ca85b9ade9d993084c1c2139b166f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Dec 2025 21:16:44 +0100 Subject: [PATCH 050/160] Task/improve OIDC login button label (#6043) * Improve label --- .../login-with-access-token-dialog.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cf5611ef7..78604456b 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 @@ -52,7 +52,7 @@ class="px-4 rounded-pill" href="../api/auth/oidc" mat-stroked-button - >Sign in with OIDCSign in with OpenID Connect } From 1cbcb623b505a71afe142b13b208e5c3a4e7db80 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 19:06:37 +0100 Subject: [PATCH 051/160] Feature/update locales (#5993) * Update locales * Update translation * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 6 ++ apps/client/src/locales/messages.ca.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.de.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.es.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.fr.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.it.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.pl.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.pt.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.tr.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.uk.xlf | 78 ++++++++++++++----------- apps/client/src/locales/messages.xlf | 77 +++++++++++++----------- apps/client/src/locales/messages.zh.xlf | 78 ++++++++++++++----------- 13 files changed, 521 insertions(+), 420 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf976e909..f818b9d28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the language localization for German (`de`) + ## 2.222.0 - 2025-12-07 ### Added diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index e2740945e..2944e43fb 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -38,11 +38,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -607,7 +607,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -643,7 +643,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -795,7 +795,7 @@ Veure Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -803,7 +803,7 @@ Executar Procés apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -811,7 +811,7 @@ Suprimir Procés apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -1503,7 +1503,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -1531,7 +1531,7 @@ Actuar com un altre Usuari apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -1539,7 +1539,7 @@ Eliminar Usuari apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -1623,7 +1623,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -1639,7 +1639,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -1671,7 +1671,7 @@ Oooh! El testimoni de seguretat és incorrecte. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -2043,7 +2043,7 @@ Manteniu la sessió iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -2471,7 +2471,7 @@ per any apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -2487,7 +2487,7 @@ Prova Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -2495,7 +2495,7 @@ Bescanviar el cupó apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -4076,7 +4076,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -4092,7 +4092,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -5229,7 +5229,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -5301,7 +5301,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -5313,7 +5313,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -5337,7 +5337,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -5345,7 +5345,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -5929,7 +5929,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5944,6 +5944,14 @@ 33 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Comprar @@ -6061,7 +6069,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -6209,7 +6217,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -6461,7 +6469,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6729,7 +6737,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7167,7 +7175,7 @@ API Key libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7175,7 +7183,7 @@ Generate Ghostfolio Premium Data Provider API key for self-hosted environments... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7531,7 +7539,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Limited Offer! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Get extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 65e71fbd8..02ef33acd 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -254,7 +254,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -290,7 +290,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -418,7 +418,7 @@ Stacktrace anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -426,7 +426,7 @@ Job löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -674,7 +674,7 @@ Keine automatische Erneuerung der Mitgliedschaft. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -758,11 +758,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -778,7 +778,7 @@ Ups! Falsches Sicherheits-Token. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -890,7 +890,7 @@ Eingeloggt bleiben apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1226,7 +1226,7 @@ pro Jahr apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -1242,7 +1242,7 @@ Premium ausprobieren apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -1250,7 +1250,7 @@ Gutschein einlösen apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -2254,7 +2254,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -2266,7 +2266,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -2278,7 +2278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -2286,7 +2286,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -2294,7 +2294,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -2870,7 +2870,7 @@ Authentifizierung apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -3266,7 +3266,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3278,7 +3278,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -3466,7 +3466,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3726,7 +3726,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -3746,7 +3746,7 @@ Benutzer verwenden apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -3754,7 +3754,7 @@ Benutzer löschen apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -4006,7 +4006,7 @@ Details anzeigen apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4385,6 +4385,14 @@ 73 + + Sign in with OpenID Connect + Einloggen mit OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Kauf @@ -5468,7 +5476,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6093,7 +6101,7 @@ Job ausführen apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6485,7 +6493,7 @@ Position ansehen libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6753,7 +6761,7 @@ Rolle apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7191,7 +7199,7 @@ API-Schlüssel libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7199,7 +7207,7 @@ Ghostfolio Premium Datenanbieter API-Schlüssel für selbst gehostete Umgebungen erstellen... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7555,7 +7563,7 @@ Sicherheits-Token generieren apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Begrenztes Angebot! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Erhalte extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registrierungsdatum apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 2703aebb8..4314903be 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -255,7 +255,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -291,7 +291,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -419,7 +419,7 @@ Visualiza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -427,7 +427,7 @@ Elimina el trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -659,7 +659,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -743,11 +743,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -763,7 +763,7 @@ Vaya! Token de seguridad incorrecto. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -875,7 +875,7 @@ Seguir conectado apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1211,7 +1211,7 @@ por año apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -1227,7 +1227,7 @@ Prueba Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -1235,7 +1235,7 @@ Canjea el cupón apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -2239,7 +2239,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -2251,7 +2251,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -2263,7 +2263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -2271,7 +2271,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -2279,7 +2279,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -2855,7 +2855,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -3251,7 +3251,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3263,7 +3263,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -3451,7 +3451,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3703,7 +3703,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -3723,7 +3723,7 @@ Suplantar usuario apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -3731,7 +3731,7 @@ Eliminar usuario apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -3983,7 +3983,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4362,6 +4362,14 @@ 73 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Comprar @@ -5445,7 +5453,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6070,7 +6078,7 @@ Ejecutar Tarea apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6462,7 +6470,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6730,7 +6738,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7168,7 +7176,7 @@ Clave API libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7176,7 +7184,7 @@ Genere la clave API del proveedor de datos premium de Ghostfolio para entornos autohospedados... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7532,7 +7540,7 @@ Generar token de seguridad apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7908,7 +7916,7 @@ ¡Oferta limitada! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7920,7 +7928,7 @@ Obtén extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8593,7 +8601,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 81da3848d..41dc3d391 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -310,7 +310,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -346,7 +346,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -474,7 +474,7 @@ Voir la Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -482,7 +482,7 @@ Supprimer Tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -870,7 +870,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -966,11 +966,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -986,7 +986,7 @@ Oups! Jeton de Sécurité Incorrect. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1146,7 +1146,7 @@ Rester connecté apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1494,7 +1494,7 @@ par an apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -1510,7 +1510,7 @@ Essayer Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -1518,7 +1518,7 @@ Utiliser un Code Promotionnel apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -2710,7 +2710,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -2722,7 +2722,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -2734,7 +2734,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -2742,7 +2742,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -2750,7 +2750,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -3058,7 +3058,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -3250,7 +3250,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3262,7 +3262,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -3450,7 +3450,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3702,7 +3702,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -3722,7 +3722,7 @@ Voir en tant que ... apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -3730,7 +3730,7 @@ Supprimer l’Utilisateur apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -3982,7 +3982,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4361,6 +4361,14 @@ 73 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Achat @@ -5444,7 +5452,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6069,7 +6077,7 @@ Execute la tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6461,7 +6469,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6729,7 +6737,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7167,7 +7175,7 @@ Clé API libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7175,7 +7183,7 @@ Générer la clé API du fournisseur de données Ghostfolio Premium pour les environnements auto-hébergés... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7531,7 +7539,7 @@ Générer un jeton de sécurité apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Offre Limitée ! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Obtenez supplémentaires apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 6618d2463..e5bc9ccc6 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -255,7 +255,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -291,7 +291,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -419,7 +419,7 @@ Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -427,7 +427,7 @@ Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -659,7 +659,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -743,11 +743,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -763,7 +763,7 @@ Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -875,7 +875,7 @@ Rimani connesso apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1211,7 +1211,7 @@ per anno apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -1227,7 +1227,7 @@ Prova Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -1235,7 +1235,7 @@ Riscatta il buono apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -2239,7 +2239,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -2251,7 +2251,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -2263,7 +2263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -2271,7 +2271,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -2279,7 +2279,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -2855,7 +2855,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -3251,7 +3251,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3263,7 +3263,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -3451,7 +3451,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3703,7 +3703,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -3723,7 +3723,7 @@ Imita l’utente apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -3731,7 +3731,7 @@ Elimina l’utente apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -3983,7 +3983,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4362,6 +4362,14 @@ 73 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Compra @@ -5445,7 +5453,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6070,7 +6078,7 @@ Esegui il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6462,7 +6470,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6730,7 +6738,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7168,7 +7176,7 @@ API Key libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7176,7 +7184,7 @@ Genera API key per Ghostfolio Premium Data Provider per ambienti self-hosted... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7532,7 +7540,7 @@ Genera Token di Sicurezza apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7908,7 +7916,7 @@ Offerta limitata! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7920,7 +7928,7 @@ Get extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8593,7 +8601,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 43f22714b..5d1bec1b5 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -254,7 +254,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -290,7 +290,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -418,7 +418,7 @@ Bekijk Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -426,7 +426,7 @@ Taak verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -658,7 +658,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -742,11 +742,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -762,7 +762,7 @@ Oeps! Onjuiste beveiligingstoken. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -874,7 +874,7 @@ Aangemeld blijven apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1210,7 +1210,7 @@ per jaar apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -1226,7 +1226,7 @@ Probeer Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -1234,7 +1234,7 @@ Coupon inwisselen apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -2238,7 +2238,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -2250,7 +2250,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -2262,7 +2262,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -2270,7 +2270,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -2278,7 +2278,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -2854,7 +2854,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -3250,7 +3250,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3262,7 +3262,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -3450,7 +3450,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3702,7 +3702,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -3722,7 +3722,7 @@ Gebruiker immiteren apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -3730,7 +3730,7 @@ Gebruiker verwijderen apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -3982,7 +3982,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4361,6 +4361,14 @@ 73 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Koop @@ -5444,7 +5452,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6069,7 +6077,7 @@ Opdracht Uitvoeren apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6461,7 +6469,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6729,7 +6737,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7167,7 +7175,7 @@ API-sleutel libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7175,7 +7183,7 @@ Genereer een Ghostfolio Premium Gegevensleverancier API-sleutel voor zelfgehoste omgevingen... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7531,7 +7539,7 @@ Beveiligingstoken Aanmaken apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Beperkt aanbod! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Krijg extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 1ae972c8e..6e167a355 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -531,7 +531,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -567,7 +567,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -691,7 +691,7 @@ Wyświetl Stos Wywołań apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -699,7 +699,7 @@ Usuń Zadanie apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -1331,7 +1331,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -1359,7 +1359,7 @@ Wciel się w Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -1367,7 +1367,7 @@ Usuń Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -1459,11 +1459,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -1479,7 +1479,7 @@ Ups! Nieprawidłowy token bezpieczeństwa. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1739,7 +1739,7 @@ Pozostań zalogowany apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -2059,7 +2059,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -2187,7 +2187,7 @@ rocznie apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -2203,7 +2203,7 @@ Wypróbuj Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -2211,7 +2211,7 @@ Wykorzystaj kupon apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -3703,7 +3703,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -3719,7 +3719,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -4339,7 +4339,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -4756,7 +4756,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -4820,7 +4820,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -4832,7 +4832,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -4848,7 +4848,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -4856,7 +4856,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -5296,7 +5296,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5311,6 +5311,14 @@ 33 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Zakup @@ -5420,7 +5428,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -5568,7 +5576,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -6069,7 +6077,7 @@ Wykonaj Zadanie apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6461,7 +6469,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6729,7 +6737,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7167,7 +7175,7 @@ Klucz API libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7175,7 +7183,7 @@ Generowanie klucza API Ghostfolio Premium Data Provider dla środowisk hostowanych samodzielnie... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7531,7 +7539,7 @@ Generowanie Tokena Zabezpieczającego apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Oferta ograniczona czasowo! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Uzyskaj dodatkowo apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 9c928731a..8b63acdf6 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -310,7 +310,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -346,7 +346,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -474,7 +474,7 @@ Ver Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -482,7 +482,7 @@ Apagar Tarefa apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -738,7 +738,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -834,11 +834,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -854,7 +854,7 @@ Oops! Token de Segurança Incorreto. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1022,7 +1022,7 @@ Manter sessão iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1482,7 +1482,7 @@ por ano apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -1498,7 +1498,7 @@ Experimentar Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -1506,7 +1506,7 @@ Resgatar Cupão apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -2610,7 +2610,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -2622,7 +2622,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -2634,7 +2634,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -2642,7 +2642,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -2650,7 +2650,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -2902,7 +2902,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -3250,7 +3250,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3262,7 +3262,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -3450,7 +3450,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3702,7 +3702,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -3722,7 +3722,7 @@ Personificar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -3730,7 +3730,7 @@ Apagar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -3982,7 +3982,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4361,6 +4361,14 @@ 73 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Comprar @@ -5444,7 +5452,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6069,7 +6077,7 @@ Executar trabalho apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6461,7 +6469,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6729,7 +6737,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7167,7 +7175,7 @@ Chave de API libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7175,7 +7183,7 @@ 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 + 29 @@ -7531,7 +7539,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Limited Offer! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Get extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 810f91cfa..bc687b3d4 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -491,7 +491,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -527,7 +527,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -655,7 +655,7 @@ Hata İzini Görüntüle apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -663,7 +663,7 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -1199,7 +1199,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -1227,7 +1227,7 @@ Kullanıcıyı Taklit Et apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -1235,7 +1235,7 @@ Kullanıcıyı Sil apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -1319,11 +1319,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -1339,7 +1339,7 @@ Hay Allah! Güvenlik anahtarı yanlış. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1599,7 +1599,7 @@ Oturumu açık tut apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1919,7 +1919,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -3183,7 +3183,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -3199,7 +3199,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3827,7 +3827,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -4324,7 +4324,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -4332,7 +4332,7 @@ yıllık apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -4348,7 +4348,7 @@ Premium’u Deneyin apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -4356,7 +4356,7 @@ Kupon Kullan apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -4540,7 +4540,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -4552,7 +4552,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -4568,7 +4568,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -4576,7 +4576,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -4988,7 +4988,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5003,6 +5003,14 @@ 33 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Al @@ -5096,7 +5104,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -5444,7 +5452,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6069,7 +6077,7 @@ İşlemi Yürüt apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6461,7 +6469,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6729,7 +6737,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7167,7 +7175,7 @@ API Anahtarı libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7175,7 +7183,7 @@ Kendi barındırılan ortamlar için Ghostfolio Premium Veri Sağlayıcı API anahtarı oluştur... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7531,7 +7539,7 @@ Güvenlik belirteci oluştur apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Sınırlı Teklif! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Get extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 24bc12dd1..166b79a13 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -38,11 +38,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -623,7 +623,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -659,7 +659,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -819,7 +819,7 @@ Переглянути трасування apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -827,7 +827,7 @@ Виконати завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -835,7 +835,7 @@ Видалити завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -1427,7 +1427,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -1567,7 +1567,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -1647,7 +1647,7 @@ Видавати себе за користувача apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -1655,7 +1655,7 @@ Видалити користувача apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -1739,7 +1739,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -1755,7 +1755,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -1779,7 +1779,7 @@ Упс! Неправильний Секретний Токен. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -2135,7 +2135,7 @@ Залишатися в системі apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -2759,7 +2759,7 @@ на рік apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -2775,7 +2775,7 @@ Спробуйте Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -2783,7 +2783,7 @@ Обміняти купон apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -4376,7 +4376,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -4392,7 +4392,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -5947,7 +5947,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -6019,7 +6019,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -6031,7 +6031,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -6055,7 +6055,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -6063,7 +6063,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -6763,7 +6763,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6783,7 +6783,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -6794,6 +6794,14 @@ 34 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy Купити @@ -6911,7 +6919,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -7063,7 +7071,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -7223,7 +7231,7 @@ Ключ API libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7231,7 +7239,7 @@ Згенерувати ключ API для постачальника даних Ghostfolio Premium для self-hosted середовищ... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7531,7 +7539,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7907,7 +7915,7 @@ Limited Offer! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7919,7 +7927,7 @@ Get extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8592,7 +8600,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 800f238ef..92d1c9639 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -509,7 +509,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -544,7 +544,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -656,14 +656,14 @@ View Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 Delete Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -1254,7 +1254,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -1279,14 +1279,14 @@ Impersonate User apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 Delete User apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -1370,11 +1370,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -1389,7 +1389,7 @@ Oops! Incorrect Security Token. apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1627,7 +1627,7 @@ Stay signed in apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -1919,7 +1919,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -2034,7 +2034,7 @@ per year apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -2049,14 +2049,14 @@ Try Premium apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 Redeem Coupon apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -3417,7 +3417,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -3432,7 +3432,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -3989,7 +3989,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -4378,7 +4378,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -4442,7 +4442,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -4453,7 +4453,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -4467,14 +4467,14 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -4888,7 +4888,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4902,6 +4902,13 @@ 33 + + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy @@ -5000,7 +5007,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -5130,7 +5137,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -5541,7 +5548,7 @@ Execute Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -5841,7 +5848,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6058,7 +6065,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -6488,14 +6495,14 @@ Generate Ghostfolio Premium Data Provider API key for self-hosted environments... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 API Key libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -6854,7 +6861,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7168,7 +7175,7 @@ Limited Offer! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7179,7 +7186,7 @@ Get extra apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -7772,7 +7779,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 5c2508f8d..6a9abc040 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -540,7 +540,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 453 + 457 @@ -576,7 +576,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 480 + 484 libs/ui/src/lib/benchmark/benchmark.component.html @@ -700,7 +700,7 @@ 查看堆栈跟踪 apps/client/src/app/components/admin-jobs/admin-jobs.html - 215 + 216 @@ -708,7 +708,7 @@ 删除任务 apps/client/src/app/components/admin-jobs/admin-jobs.html - 222 + 224 @@ -1340,7 +1340,7 @@ No auto-renewal on membership. apps/client/src/app/components/user-account-membership/user-account-membership.html - 73 + 74 @@ -1368,7 +1368,7 @@ 模拟用户 apps/client/src/app/components/admin-users/admin-users.html - 232 + 234 @@ -1376,7 +1376,7 @@ 删除用户 apps/client/src/app/components/admin-users/admin-users.html - 253 + 255 @@ -1468,11 +1468,11 @@ apps/client/src/app/components/header/header.component.ts - 290 + 297 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 79 libs/common/src/lib/routes/routes.ts @@ -1488,7 +1488,7 @@ 哎呀!安全令牌不正确。 apps/client/src/app/components/header/header.component.ts - 305 + 312 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1748,7 +1748,7 @@ 保持登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 55 + 66 @@ -2068,7 +2068,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 20 + 21 apps/client/src/app/pages/pricing/pricing-page.html @@ -2196,7 +2196,7 @@ 每年 apps/client/src/app/components/user-account-membership/user-account-membership.html - 32 + 33 apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -2212,7 +2212,7 @@ 尝试高级版 apps/client/src/app/components/user-account-membership/user-account-membership.html - 52 + 53 @@ -2220,7 +2220,7 @@ 兑换优惠券 apps/client/src/app/components/user-account-membership/user-account-membership.html - 66 + 67 @@ -3712,7 +3712,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 382 + 383 @@ -3728,7 +3728,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 394 + 397 @@ -4348,7 +4348,7 @@ apps/client/src/app/components/user-account-membership/user-account-membership.html - 18 + 19 apps/client/src/app/pages/pricing/pricing-page.html @@ -4777,7 +4777,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 37 + 40 @@ -4849,7 +4849,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 407 + 411 @@ -4861,7 +4861,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 420 + 424 @@ -4877,7 +4877,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 463 @@ -4885,7 +4885,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 469 + 473 @@ -5341,7 +5341,7 @@ 查看详细信息 apps/client/src/app/components/admin-users/admin-users.html - 225 + 226 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5356,6 +5356,14 @@ 33 + + Sign in with OpenID Connect + Sign in with OpenID Connect + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + Buy 买入 @@ -5465,7 +5473,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 32 + 35 @@ -5613,7 +5621,7 @@ libs/ui/src/lib/membership-card/membership-card.component.html - 42 + 45 @@ -6070,7 +6078,7 @@ 执行作业 apps/client/src/app/components/admin-jobs/admin-jobs.html - 218 + 220 @@ -6462,7 +6470,7 @@ 查看持仓 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 450 @@ -6730,7 +6738,7 @@ 角色 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 36 + 14 @@ -7168,7 +7176,7 @@ API 密钥 libs/ui/src/lib/membership-card/membership-card.component.html - 18 + 21 @@ -7176,7 +7184,7 @@ 为自托管环境生成 Ghostfolio Premium 数据提供者 API 密钥... libs/ui/src/lib/membership-card/membership-card.component.html - 26 + 29 @@ -7532,7 +7540,7 @@ 生成安全令牌 apps/client/src/app/components/admin-users/admin-users.html - 242 + 244 @@ -7908,7 +7916,7 @@ 限时优惠! apps/client/src/app/components/user-account-membership/user-account-membership.html - 40 + 41 apps/client/src/app/pages/pricing/pricing-page.html @@ -7920,7 +7928,7 @@ 获取额外 apps/client/src/app/components/user-account-membership/user-account-membership.html - 43 + 44 apps/client/src/app/pages/pricing/pricing-page.html @@ -8593,7 +8601,7 @@ 注册日期 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 20 + 26 From a36f87d59268ae71951a4c6b7c5c9c53536b9e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Mart=C3=ADn?= Date: Mon, 8 Dec 2025 19:43:05 +0100 Subject: [PATCH 052/160] Task/add OpenID Connect (OIDC) configuration details to README (#6044) * Add OpenID Connect (OIDC) configuration details --- README.md | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 1a5cc6e95..822825b57 100644 --- a/README.md +++ b/README.md @@ -85,24 +85,39 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c ### Supported Environment Variables -| Name | Type | Default Value | Description | -| ------------------------ | --------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `ACCESS_TOKEN_SALT` | `string` | | A random string used as salt for access tokens | -| `API_KEY_COINGECKO_DEMO` | `string` (optional) |   | The _CoinGecko_ Demo API key | -| `API_KEY_COINGECKO_PRO` | `string` (optional) | | The _CoinGecko_ Pro API key | -| `DATABASE_URL` | `string` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` | -| `HOST` | `string` (optional) | `0.0.0.0` | The host where the Ghostfolio application will run on | -| `JWT_SECRET_KEY` | `string` | | A random string used for _JSON Web Tokens_ (JWT) | -| `LOG_LEVELS` | `string[]` (optional) | | The logging levels for the Ghostfolio application, e.g. `["debug","error","log","warn"]` | -| `PORT` | `number` (optional) | `3333` | The port where the Ghostfolio application will run on | -| `POSTGRES_DB` | `string` | | The name of the _PostgreSQL_ database | -| `POSTGRES_PASSWORD` | `string` | | The password of the _PostgreSQL_ database | -| `POSTGRES_USER` | `string` | | The user of the _PostgreSQL_ database | -| `REDIS_DB` | `number` (optional) | `0` | The database index of _Redis_ | -| `REDIS_HOST` | `string` | | The host where _Redis_ is running | -| `REDIS_PASSWORD` | `string` | | The password of _Redis_ | -| `REDIS_PORT` | `number` | | The port where _Redis_ is running | -| `REQUEST_TIMEOUT` | `number` (optional) | `2000` | The timeout of network requests to data providers in milliseconds | +| Name | Type | Default Value | Description | +| ------------------------ | --------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `ACCESS_TOKEN_SALT` | `string` | | A random string used as salt for access tokens | +| `API_KEY_COINGECKO_DEMO` | `string` (optional) |   | The _CoinGecko_ Demo API key | +| `API_KEY_COINGECKO_PRO` | `string` (optional) | | The _CoinGecko_ Pro API key | +| `DATABASE_URL` | `string` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` | +| `HOST` | `string` (optional) | `0.0.0.0` | The host where the Ghostfolio application will run on | +| `JWT_SECRET_KEY` | `string` | | A random string used for _JSON Web Tokens_ (JWT) | +| `LOG_LEVELS` | `string[]` (optional) | | The logging levels for the Ghostfolio application, e.g. `["debug","error","log","warn"]` | +| `PORT` | `number` (optional) | `3333` | The port where the Ghostfolio application will run on | +| `POSTGRES_DB` | `string` | | The name of the _PostgreSQL_ database | +| `POSTGRES_PASSWORD` | `string` | | The password of the _PostgreSQL_ database | +| `POSTGRES_USER` | `string` | | The user of the _PostgreSQL_ database | +| `REDIS_DB` | `number` (optional) | `0` | The database index of _Redis_ | +| `REDIS_HOST` | `string` | | The host where _Redis_ is running | +| `REDIS_PASSWORD` | `string` | | The password of _Redis_ | +| `REDIS_PORT` | `number` | | The port where _Redis_ is running | +| `REQUEST_TIMEOUT` | `number` (optional) | `2000` | The timeout of network requests to data providers in milliseconds | +| `ROOT_URL` | `string` (optional) | `http://0.0.0.0:3333` | The root URL of the Ghostfolio application, used for generating callback URLs and external links. | + +#### OpenID Connect OIDC (Experimental) + +| Name | Type | Default Value | Description | +| -------------------------- | --------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------- | +| `ENABLE_FEATURE_AUTH_OIDC` | `boolean` (optional) | `false` | Enables _OpenID Connect_ authentication | +| `OIDC_AUTHORIZATION_URL` | `string` (optional) | | Manual override for the OIDC authorization endpoint (falls back to the discovery from the issuer) | +| `OIDC_CALLBACK_URL` | `string` (optional) | `${ROOT_URL}/api/auth/oidc/callback` | The OIDC callback URL | +| `OIDC_CLIENT_ID` | `string` | | The OIDC client ID | +| `OIDC_CLIENT_SECRET` | `string` | | The OIDC client secret | +| `OIDC_ISSUER` | `string` | | The OIDC issuer URL, used to discover the OIDC configuration via `/.well-known/openid-configuration` | +| `OIDC_SCOPE` | `string[]` (optional) | `["openid"]` | The OIDC scope to request, e.g. `["email","openid","profile"]` | +| `OIDC_TOKEN_URL` | `string` (optional) | | Manual override for the OIDC token endpoint (falls back to the discovery from the issuer) | +| `OIDC_USER_INFO_URL` | `string` (optional) | | Manual override for the OIDC user info endpoint (falls back to the discovery from the issuer) | ### Run with Docker Compose From 76e06ed59f9cd266088c496a806d4f5fcd4fe85a Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Tue, 9 Dec 2025 02:01:22 +0700 Subject: [PATCH 053/160] Task/move notification service to UI library (#6048) * Move notification service to UI library * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app.component.ts | 2 +- .../src/app/components/access-table/access-table.component.ts | 2 +- .../src/app/components/admin-jobs/admin-jobs.component.ts | 2 +- .../components/admin-market-data/admin-market-data.service.ts | 2 +- .../asset-profile-dialog/asset-profile-dialog.component.ts | 2 +- .../app/components/admin-overview/admin-overview.component.ts | 2 +- .../app/components/admin-platform/admin-platform.component.ts | 2 +- .../app/components/admin-settings/admin-settings.component.ts | 2 +- .../src/app/components/admin-tag/admin-tag.component.ts | 2 +- .../src/app/components/admin-users/admin-users.component.ts | 2 +- apps/client/src/app/components/header/header.component.ts | 2 +- .../portfolio-performance/portfolio-performance.component.ts | 2 +- .../portfolio-summary/portfolio-summary.component.ts | 2 +- .../create-or-update-access-dialog.component.ts | 2 +- .../user-account-access/user-account-access.component.ts | 2 +- .../user-account-membership.component.ts | 2 +- .../user-account-settings/user-account-settings.component.ts | 2 +- apps/client/src/app/core/layout.service.ts | 4 ++-- apps/client/src/app/pages/accounts/accounts-page.component.ts | 2 +- apps/client/src/app/pages/demo/demo-page.component.ts | 2 +- apps/client/src/app/pages/pricing/pricing-page.component.ts | 2 +- apps/client/src/main.ts | 2 +- .../ui/src/lib/account-balances/account-balances.component.ts | 3 +-- .../lib/accounts-table/accounts-table.component.stories.ts | 2 +- libs/ui/src/lib/accounts-table/accounts-table.component.ts | 3 +-- .../activities-table/activities-table.component.stories.ts | 2 +- .../ui/src/lib/activities-table/activities-table.component.ts | 3 +-- libs/ui/src/lib/benchmark/benchmark.component.ts | 3 +-- .../lib/notifications}/alert-dialog/alert-dialog.component.ts | 0 .../ui/src/lib/notifications}/alert-dialog/alert-dialog.html | 0 .../ui/src/lib/notifications}/alert-dialog/alert-dialog.scss | 0 .../lib/notifications}/alert-dialog/interfaces/interfaces.ts | 0 .../confirmation-dialog/confirmation-dialog.component.ts | 0 .../confirmation-dialog/confirmation-dialog.html | 0 .../confirmation-dialog/confirmation-dialog.scss | 0 .../confirmation-dialog/interfaces/interfaces.ts | 0 libs/ui/src/lib/notifications/index.ts | 3 +++ .../ui/src/lib/notifications}/interfaces/interfaces.ts | 0 .../ui/src/lib/notifications}/notification.module.ts | 0 .../ui/src/lib/notifications}/notification.service.ts | 0 .../notifications}/prompt-dialog/prompt-dialog.component.ts | 0 .../src/lib/notifications}/prompt-dialog/prompt-dialog.html | 0 43 files changed, 33 insertions(+), 33 deletions(-) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/alert-dialog/alert-dialog.component.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/alert-dialog/alert-dialog.html (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/alert-dialog/alert-dialog.scss (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/alert-dialog/interfaces/interfaces.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/confirmation-dialog/confirmation-dialog.component.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/confirmation-dialog/confirmation-dialog.html (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/confirmation-dialog/confirmation-dialog.scss (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/confirmation-dialog/interfaces/interfaces.ts (100%) create mode 100644 libs/ui/src/lib/notifications/index.ts rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/interfaces/interfaces.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/notification.module.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/notification.service.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/prompt-dialog/prompt-dialog.component.ts (100%) rename {apps/client/src/app/core/notification => libs/ui/src/lib/notifications}/prompt-dialog/prompt-dialog.html (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index f818b9d28..7ceb94a11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Moved the notification module to `@ghostfolio/ui` - Improved the language localization for German (`de`) ## 2.222.0 - 2025-12-07 diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index de82c7d9c..12a7b0de9 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -3,6 +3,7 @@ import { InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; import { ColorScheme } from '@ghostfolio/common/types'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { ChangeDetectionStrategy, @@ -35,7 +36,6 @@ import { GfFooterComponent } from './components/footer/footer.component'; import { GfHeaderComponent } from './components/header/header.component'; import { GfHoldingDetailDialogComponent } from './components/holding-detail-dialog/holding-detail-dialog.component'; import { HoldingDetailDialogParams } from './components/holding-detail-dialog/interfaces/interfaces'; -import { NotificationService } from './core/notification/notification.service'; import { DataService } from './services/data.service'; import { ImpersonationStorageService } from './services/impersonation-storage.service'; import { TokenStorageService } from './services/token-storage.service'; 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 1127e5629..fe2c81199 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 @@ -1,7 +1,7 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { Access, User } from '@ghostfolio/common/interfaces'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts index 8ed72445f..66bac76f5 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts @@ -1,4 +1,3 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -9,6 +8,7 @@ import { } from '@ghostfolio/common/config'; import { getDateWithTimeFormatString } from '@ghostfolio/common/helper'; import { AdminJobs, User } from '@ghostfolio/common/interfaces'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts index 3f60cb8c5..eaad32c0e 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts @@ -1,4 +1,3 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; @@ -11,6 +10,7 @@ import { AssetProfileIdentifier, AdminMarketDataItem } from '@ghostfolio/common/interfaces'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { Injectable } from '@angular/core'; import { EMPTY, catchError, finalize, forkJoin } from 'rxjs'; 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 b2ef4f17b..3fe944a25 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 @@ -1,5 +1,4 @@ import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -24,6 +23,7 @@ import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor'; import { translate } from '@ghostfolio/ui/i18n'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index 0b4b36d06..e4be7b062 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -1,4 +1,3 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { CacheService } from '@ghostfolio/client/services/cache.service'; import { DataService } from '@ghostfolio/client/services/data.service'; @@ -20,6 +19,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index 64e7ff7cf..832a70503 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -1,10 +1,10 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts index ec44b6e65..cabf4e589 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts @@ -1,7 +1,6 @@ import { GfAdminPlatformComponent } from '@ghostfolio/client/components/admin-platform/admin-platform.component'; import { GfAdminTagComponent } from '@ghostfolio/client/components/admin-tag/admin-tag.component'; import { GfDataProviderStatusComponent } from '@ghostfolio/client/components/data-provider-status/data-provider-status.component'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -15,6 +14,7 @@ import { } from '@ghostfolio/common/interfaces'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts index a891baa45..305eb4628 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts @@ -1,8 +1,8 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 6c366a16c..99fbe7901 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -1,6 +1,5 @@ import { UserDetailDialogParams } from '@ghostfolio/client/components/user-detail-dialog/interfaces/interfaces'; import { GfUserDetailDialogComponent } from '@ghostfolio/client/components/user-detail-dialog/user-detail-dialog.component'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; @@ -19,6 +18,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index 80239d56f..b7bf4cb98 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -1,7 +1,6 @@ import { LoginWithAccessTokenDialogParams } from '@ghostfolio/client/components/login-with-access-token-dialog/interfaces/interfaces'; import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component'; import { LayoutService } from '@ghostfolio/client/core/layout.service'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { @@ -17,6 +16,7 @@ import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; import { DateRange } from '@ghostfolio/common/types'; import { GfAssistantComponent } from '@ghostfolio/ui/assistant/assistant.component'; import { GfLogoComponent } from '@ghostfolio/ui/logo'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { CommonModule } from '@angular/common'; 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 c98a26831..04c0f507c 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 @@ -1,4 +1,3 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { getLocale, getNumberFormatDecimal, @@ -8,6 +7,7 @@ import { PortfolioPerformance, ResponseError } from '@ghostfolio/common/interfaces'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts index 7eab9172e..9e9bb13d3 100644 --- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts +++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts @@ -1,8 +1,8 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { getDateFnsLocale, getLocale } from '@ghostfolio/common/helper'; import { PortfolioSummary, User } from '@ghostfolio/common/interfaces'; import { translate } from '@ghostfolio/ui/i18n'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts index 9aa07feee..05c047dc6 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts @@ -1,7 +1,7 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { CreateAccessDto, UpdateAccessDto } from '@ghostfolio/common/dtos'; import { validateObjectForForm } from '@ghostfolio/common/utils'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/user-account-access/user-account-access.component.ts b/apps/client/src/app/components/user-account-access/user-account-access.component.ts index da2e8f508..11960b8aa 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.component.ts +++ b/apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1,5 +1,4 @@ import { GfAccessTableComponent } from '@ghostfolio/client/components/access-table/access-table.component'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -7,6 +6,7 @@ import { CreateAccessDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { Access, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts index ae9183c13..069ea4b0e 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -1,4 +1,3 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; @@ -7,6 +6,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfMembershipCardComponent } from '@ghostfolio/ui/membership-card'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts index 32e3d132e..e17425676 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1,4 +1,3 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { KEY_STAY_SIGNED_IN, @@ -12,6 +11,7 @@ import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { downloadAsFile } from '@ghostfolio/common/helper'; import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/core/layout.service.ts b/apps/client/src/app/core/layout.service.ts index a6fb65006..fd435acdb 100644 --- a/apps/client/src/app/core/layout.service.ts +++ b/apps/client/src/app/core/layout.service.ts @@ -1,9 +1,9 @@ +import { NotificationService } from '@ghostfolio/ui/notifications'; + import { Injectable } from '@angular/core'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Observable, Subject } from 'rxjs'; -import { NotificationService } from './notification/notification.service'; - @Injectable({ providedIn: 'root' }) diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 2bb6457a5..2b496e4fb 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -1,6 +1,5 @@ import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component'; import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -12,6 +11,7 @@ import { import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; diff --git a/apps/client/src/app/pages/demo/demo-page.component.ts b/apps/client/src/app/pages/demo/demo-page.component.ts index 720bb4974..9eba64788 100644 --- a/apps/client/src/app/pages/demo/demo-page.component.ts +++ b/apps/client/src/app/pages/demo/demo-page.component.ts @@ -1,7 +1,7 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { InfoItem } from '@ghostfolio/common/interfaces'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { Component, OnDestroy } from '@angular/core'; import { Router } from '@angular/router'; 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 88958ea0d..6ed8dfd31 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -1,10 +1,10 @@ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; 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 { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/main.ts b/apps/client/src/main.ts index fc8a9ef7a..2a22b7b7b 100644 --- a/apps/client/src/main.ts +++ b/apps/client/src/main.ts @@ -1,6 +1,7 @@ import { locale } from '@ghostfolio/common/config'; import { InfoResponse } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; +import { GfNotificationModule } from '@ghostfolio/ui/notifications'; import { Platform } from '@angular/cdk/platform'; import { @@ -33,7 +34,6 @@ import { authInterceptorProviders } from './app/core/auth.interceptor'; import { httpResponseInterceptorProviders } from './app/core/http-response.interceptor'; import { LanguageService } from './app/core/language.service'; import { ModulePreloadService } from './app/core/module-preload.service'; -import { GfNotificationModule } from './app/core/notification/notification.module'; import { PageTitleStrategy } from './app/services/page-title.strategy'; import { environment } from './environments/environment'; diff --git a/libs/ui/src/lib/account-balances/account-balances.component.ts b/libs/ui/src/lib/account-balances/account-balances.component.ts index 5fe47347e..608ee1c75 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.ts +++ b/libs/ui/src/lib/account-balances/account-balances.component.ts @@ -1,10 +1,9 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { CreateAccountBalanceDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { DATE_FORMAT, getLocale } from '@ghostfolio/common/helper'; import { AccountBalancesResponse } from '@ghostfolio/common/interfaces'; import { validateObjectForForm } from '@ghostfolio/common/utils'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { CUSTOM_ELEMENTS_SCHEMA, diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts index aeda82fd9..53c59a95f 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts @@ -7,10 +7,10 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { moduleMetadata } from '@storybook/angular'; import type { Meta, StoryObj } from '@storybook/angular'; -import { NotificationService } from 'apps/client/src/app/core/notification/notification.service'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { GfEntityLogoComponent } from '../entity-logo'; +import { NotificationService } from '../notifications'; import { GfValueComponent } from '../value'; import { GfAccountsTableComponent } from './accounts-table.component'; diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts index 898231168..699de6d7e 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts @@ -1,8 +1,7 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getLocale } from '@ghostfolio/common/helper'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts index a0ad690d7..e7a2ba819 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts @@ -13,12 +13,12 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { moduleMetadata } from '@storybook/angular'; import type { Meta, StoryObj } from '@storybook/angular'; -import { NotificationService } from 'apps/client/src/app/core/notification/notification.service'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { GfActivityTypeComponent } from '../activity-type/activity-type.component'; import { GfEntityLogoComponent } from '../entity-logo'; import { GfNoTransactionsInfoComponent } from '../no-transactions-info/no-transactions-info.component'; +import { NotificationService } from '../notifications'; import { GfValueComponent } from '../value'; import { GfActivitiesTableComponent } from './activities-table.component'; 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 476fca5fb..e53f37872 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -1,5 +1,3 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DEFAULT_PAGE_SIZE, TAG_ID_EXCLUDE_FROM_ANALYSIS @@ -12,6 +10,7 @@ import { } from '@ghostfolio/common/interfaces'; import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { OrderWithAccount } from '@ghostfolio/common/types'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { SelectionModel } from '@angular/cdk/collections'; import { CommonModule } from '@angular/common'; diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts index 5793300c1..fe53240ed 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark.component.ts @@ -1,5 +1,3 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getLocale, resolveMarketCondition } from '@ghostfolio/common/helper'; import { @@ -7,6 +5,7 @@ import { Benchmark, User } from '@ghostfolio/common/interfaces'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts b/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts similarity index 100% rename from apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts rename to libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.html b/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.html similarity index 100% rename from apps/client/src/app/core/notification/alert-dialog/alert-dialog.html rename to libs/ui/src/lib/notifications/alert-dialog/alert-dialog.html diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.scss b/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.scss similarity index 100% rename from apps/client/src/app/core/notification/alert-dialog/alert-dialog.scss rename to libs/ui/src/lib/notifications/alert-dialog/alert-dialog.scss diff --git a/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/notifications/alert-dialog/interfaces/interfaces.ts similarity index 100% rename from apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts rename to libs/ui/src/lib/notifications/alert-dialog/interfaces/interfaces.ts diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts b/libs/ui/src/lib/notifications/confirmation-dialog/confirmation-dialog.component.ts similarity index 100% rename from apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts rename to libs/ui/src/lib/notifications/confirmation-dialog/confirmation-dialog.component.ts diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.html b/libs/ui/src/lib/notifications/confirmation-dialog/confirmation-dialog.html similarity index 100% rename from apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.html rename to libs/ui/src/lib/notifications/confirmation-dialog/confirmation-dialog.html diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.scss b/libs/ui/src/lib/notifications/confirmation-dialog/confirmation-dialog.scss similarity index 100% rename from apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.scss rename to libs/ui/src/lib/notifications/confirmation-dialog/confirmation-dialog.scss diff --git a/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/notifications/confirmation-dialog/interfaces/interfaces.ts similarity index 100% rename from apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts rename to libs/ui/src/lib/notifications/confirmation-dialog/interfaces/interfaces.ts diff --git a/libs/ui/src/lib/notifications/index.ts b/libs/ui/src/lib/notifications/index.ts new file mode 100644 index 000000000..864083b16 --- /dev/null +++ b/libs/ui/src/lib/notifications/index.ts @@ -0,0 +1,3 @@ +export * from './interfaces/interfaces'; +export * from './notification.module'; +export * from './notification.service'; diff --git a/apps/client/src/app/core/notification/interfaces/interfaces.ts b/libs/ui/src/lib/notifications/interfaces/interfaces.ts similarity index 100% rename from apps/client/src/app/core/notification/interfaces/interfaces.ts rename to libs/ui/src/lib/notifications/interfaces/interfaces.ts diff --git a/apps/client/src/app/core/notification/notification.module.ts b/libs/ui/src/lib/notifications/notification.module.ts similarity index 100% rename from apps/client/src/app/core/notification/notification.module.ts rename to libs/ui/src/lib/notifications/notification.module.ts diff --git a/apps/client/src/app/core/notification/notification.service.ts b/libs/ui/src/lib/notifications/notification.service.ts similarity index 100% rename from apps/client/src/app/core/notification/notification.service.ts rename to libs/ui/src/lib/notifications/notification.service.ts diff --git a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts b/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.component.ts similarity index 100% rename from apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts rename to libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.component.ts diff --git a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html b/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.html similarity index 100% rename from apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html rename to libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.html From 0683c5b69b2512043514bb2d2b50963ed0a2d68a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 9 Dec 2025 17:24:22 +0100 Subject: [PATCH 054/160] Task/update OSS Friends (#6047) * Update OSS Friends --- apps/client/src/assets/oss-friends.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/client/src/assets/oss-friends.json b/apps/client/src/assets/oss-friends.json index 8a64650fe..2d5b994d3 100644 --- a/apps/client/src/assets/oss-friends.json +++ b/apps/client/src/assets/oss-friends.json @@ -1,5 +1,5 @@ { - "createdAt": "2025-11-21T00:00:00.000Z", + "createdAt": "2025-12-08T00:00:00.000Z", "data": [ { "name": "Activepieces", @@ -76,6 +76,11 @@ "description": "Mockoon is the easiest and quickest way to design and run mock REST APIs.", "href": "https://mockoon.com" }, + { + "name": "Onyx", + "description": "Onyx is the open-source AI chat connected to your docs, apps, and people.", + "href": "https://onyx.app" + }, { "name": "OpenBB", "description": "Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.", From 2940e615858da85486a208c3023fc12e83d407ef Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:05:02 +0100 Subject: [PATCH 055/160] Task/update VS Code extension of Prettier (#6010) * Update VS Code extension of Prettier --- .vscode/extensions.json | 4 ++-- .vscode/settings.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 68abade5f..fde9874a2 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,8 +1,8 @@ { "recommendations": [ "angular.ng-template", - "esbenp.prettier-vscode", "firsttris.vscode-jest-runner", - "nrwl.angular-console" + "nrwl.angular-console", + "prettier.prettier-vscode" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 9bf4d12b5..36091af85 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,4 @@ { - "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.defaultFormatter": "prettier.prettier-vscode", "editor.formatOnSave": true } From 646ee7271a27dce5309d3829ed654baefcaf7518 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Fri, 12 Dec 2025 13:22:24 -0600 Subject: [PATCH 056/160] Bugfix/allocate remaining percentage to unknown data in portfolio proportion chart (#6054) * Allocate remaining percentage to unknown data in portfolio proportion chart * Update changelog --- CHANGELOG.md | 4 +++ .../portfolio-proportion-chart.component.ts | 26 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ceb94a11..f86d7c01a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the notification module to `@ghostfolio/ui` - Improved the language localization for German (`de`) +### Fixed + +- Fixed a calculation issue that resulted in the incorrect assignment of unknown data in the portfolio proportion chart component + ## 2.222.0 - 2025-12-07 ### Added diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index 2d8a03ac0..fb11897eb 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -1,6 +1,6 @@ import { getTooltipOptions } from '@ghostfolio/common/chart-helper'; import { UNKNOWN_KEY } from '@ghostfolio/common/config'; -import { getLocale, getTextColor } from '@ghostfolio/common/helper'; +import { getLocale, getSum, getTextColor } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, PortfolioPosition @@ -193,6 +193,30 @@ export class GfPortfolioProportionChartComponent }); } + if (this.isInPercent) { + const totalValueInPercentage = getSum( + Object.values(chartData).map(({ value }) => { + return value; + }) + ); + + const unknownValueInPercentage = new Big(1).minus(totalValueInPercentage); + + if (unknownValueInPercentage.gt(0)) { + // If total is below 100%, allocate the remaining percentage to UNKNOWN_KEY + if (chartData[UNKNOWN_KEY]) { + chartData[UNKNOWN_KEY].value = chartData[UNKNOWN_KEY].value.plus( + unknownValueInPercentage + ); + } else { + chartData[UNKNOWN_KEY] = { + name: UNKNOWN_KEY, + value: unknownValueInPercentage + }; + } + } + } + let chartDataSorted = Object.entries(chartData) .sort((a, b) => { return a[1].value.minus(b[1].value).toNumber(); From de3f0c42079a3b475c463e5d320d7bd70de0e395 Mon Sep 17 00:00:00 2001 From: Johnson Towoju Date: Sat, 13 Dec 2025 19:52:18 +0100 Subject: [PATCH 057/160] Feature/extend FIRE page with projection information at retirement date (#6034) * Extend FIRE page with projection information at retirement date * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 4 + apps/api/src/app/user/user.service.ts | 15 ++ .../portfolio/fire/fire-page.component.ts | 40 +++- .../app/pages/portfolio/fire/fire-page.html | 178 ++++++++++++------ ...re-calculation-complete-event.interface.ts | 4 + libs/common/src/lib/interfaces/index.ts | 2 + .../fire-calculator.component.ts | 21 ++- 7 files changed, 197 insertions(+), 67 deletions(-) create mode 100644 libs/common/src/lib/interfaces/fire-calculation-complete-event.interface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f86d7c01a..dab53a614 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Included wealth projection data calculated for the retirement date in the _FIRE_ section (experimental) + ### Changed - Moved the notification module to `@ghostfolio/ui` diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 65ce92cb2..3280fbfac 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -248,6 +248,11 @@ export class UserService { }; } + // Set default value for annual interest rate + if (!(user.settings.settings as UserSettings)?.annualInterestRate) { + (user.settings.settings as UserSettings).annualInterestRate = 5; + } + // Set default value for base currency if (!(user.settings.settings as UserSettings)?.baseCurrency) { (user.settings.settings as UserSettings).baseCurrency = DEFAULT_CURRENCY; @@ -265,11 +270,21 @@ export class UserService { PerformanceCalculationType.ROAI; } + // Set default value for projected total amount + if (!(user.settings.settings as UserSettings)?.projectedTotalAmount) { + (user.settings.settings as UserSettings).projectedTotalAmount = 0; + } + // Set default value for safe withdrawal rate if (!(user.settings.settings as UserSettings)?.safeWithdrawalRate) { (user.settings.settings as UserSettings).safeWithdrawalRate = 0.04; } + // Set default value for savings rate + if (!(user.settings.settings as UserSettings)?.savingsRate) { + (user.settings.settings as UserSettings).savingsRate = 0; + } + // Set default value for view mode if (!(user.settings.settings as UserSettings).viewMode) { (user.settings.settings as UserSettings).viewMode = 'DEFAULT'; diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index 63187c05c..da1378d22 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -1,7 +1,11 @@ import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { FireWealth, User } from '@ghostfolio/common/interfaces'; +import { + FireCalculationCompleteEvent, + FireWealth, + User +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfFireCalculatorComponent } from '@ghostfolio/ui/fire-calculator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; @@ -38,11 +42,15 @@ export class GfFirePageComponent implements OnDestroy, OnInit { public hasImpersonationId: boolean; public hasPermissionToUpdateUserSettings: boolean; public isLoading = false; + public projectedTotalAmount: number; + public retirementDate: Date; public safeWithdrawalRateControl = new FormControl(undefined); public safeWithdrawalRateOptions = [0.025, 0.03, 0.035, 0.04, 0.045]; public user: User; public withdrawalRatePerMonth: Big; + public withdrawalRatePerMonthProjected: Big; public withdrawalRatePerYear: Big; + public withdrawalRatePerYearProjected: Big; private unsubscribeSubject = new Subject(); @@ -79,8 +87,6 @@ export class GfFirePageComponent implements OnDestroy, OnInit { this.calculateWithdrawalRates(); - this.isLoading = false; - this.changeDetectorRef.markForCheck(); }); @@ -139,6 +145,18 @@ export class GfFirePageComponent implements OnDestroy, OnInit { }); } + public onCalculationComplete({ + projectedTotalAmount, + retirementDate + }: FireCalculationCompleteEvent) { + this.projectedTotalAmount = projectedTotalAmount; + this.retirementDate = retirementDate; + + this.calculateWithdrawalRatesProjected(); + + this.isLoading = false; + } + public onRetirementDateChange(retirementDate: Date) { this.dataService .putUserSetting({ @@ -170,6 +188,7 @@ export class GfFirePageComponent implements OnDestroy, OnInit { this.user = user; this.calculateWithdrawalRates(); + this.calculateWithdrawalRatesProjected(); this.changeDetectorRef.markForCheck(); }); @@ -225,4 +244,19 @@ export class GfFirePageComponent implements OnDestroy, OnInit { this.withdrawalRatePerMonth = this.withdrawalRatePerYear.div(12); } } + + private calculateWithdrawalRatesProjected() { + if ( + this.fireWealth && + this.projectedTotalAmount && + this.user?.settings?.safeWithdrawalRate + ) { + this.withdrawalRatePerYearProjected = new Big( + this.projectedTotalAmount + ).mul(this.user.settings.safeWithdrawalRate); + + this.withdrawalRatePerMonthProjected = + this.withdrawalRatePerYearProjected.div(12); + } + } } diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.html b/apps/client/src/app/pages/portfolio/fire/fire-page.html index ce51717fa..a4a17fa86 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.html +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -28,6 +28,7 @@ [retirementDate]="user?.settings?.retirementDate" [savingsRate]="user?.settings?.savingsRate" (annualInterestRateChanged)="onAnnualInterestRateChange($event)" + (calculationCompleted)="onCalculationComplete($event)" (projectedTotalAmountChanged)="onProjectedTotalAmountChange($event)" (retirementDateChanged)="onRetirementDateChange($event)" (savingsRateChanged)="onSavingsRateChange($event)" @@ -62,74 +63,129 @@ } @else {
- If you retire today, you would be able to withdraw -   - -   - per year -   - or -   - +
+ If you retire today, you would be able to withdraw   - per month, -   - based on your total assets of -   - - -   - and a safe withdrawal rate (SWR) of - @if ( - !hasImpersonationId && - hasPermissionToUpdateUserSettings && - user?.settings?.isExperimentalFeatures - ) { - . - } @else { +   + or   . + [unit]="user?.settings?.baseCurrency" + [value]="withdrawalRatePerMonth?.toNumber()" + /> +   + per month, +   + based on your total assets of +   + + +   + and a safe withdrawal rate (SWR) of + @if ( + !hasImpersonationId && + hasPermissionToUpdateUserSettings && + user?.settings?.isExperimentalFeatures + ) { + . + } @else { +   + . + } +
+ + @if (user?.settings?.isExperimentalFeatures) { +
+ By +   + {{ + user?.settings?.retirementDate ?? retirementDate + | date: 'MMMM yyyy' + }} + , +   + this is projected to increase to +   + +   + per year +   + or +   + +   + per month, +   + assuming a +   + +   + annual interest rate. +
}
} diff --git a/libs/common/src/lib/interfaces/fire-calculation-complete-event.interface.ts b/libs/common/src/lib/interfaces/fire-calculation-complete-event.interface.ts new file mode 100644 index 000000000..1238b0729 --- /dev/null +++ b/libs/common/src/lib/interfaces/fire-calculation-complete-event.interface.ts @@ -0,0 +1,4 @@ +export interface FireCalculationCompleteEvent { + projectedTotalAmount: number; + retirementDate: Date; +} diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 1d7991e40..4b8e8009a 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -18,6 +18,7 @@ import type { DataProviderInfo } from './data-provider-info.interface'; import type { EnhancedSymbolProfile } from './enhanced-symbol-profile.interface'; import type { FilterGroup } from './filter-group.interface'; import type { Filter } from './filter.interface'; +import type { FireCalculationCompleteEvent } from './fire-calculation-complete-event.interface'; import type { FireWealth } from './fire-wealth.interface'; import type { HistoricalDataItem } from './historical-data-item.interface'; import type { HoldingWithParents } from './holding-with-parents.interface'; @@ -140,6 +141,7 @@ export { ExportResponse, Filter, FilterGroup, + FireCalculationCompleteEvent, FireWealth, HistoricalDataItem, HistoricalResponse, diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index 44276ec43..655798b3d 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -4,6 +4,7 @@ import { } from '@ghostfolio/common/chart-helper'; import { primaryColorRgb } from '@ghostfolio/common/config'; import { getLocale } from '@ghostfolio/common/helper'; +import { FireCalculationCompleteEvent } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; import { CommonModule } from '@angular/common'; @@ -88,6 +89,8 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { @Input() savingsRate: number; @Output() annualInterestRateChanged = new EventEmitter(); + @Output() calculationCompleted = + new EventEmitter(); @Output() projectedTotalAmountChanged = new EventEmitter(); @Output() retirementDateChanged = new EventEmitter(); @Output() savingsRateChanged = new EventEmitter(); @@ -131,6 +134,18 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { this.initialize(); }); + this.calculatorForm.valueChanges + .pipe(debounceTime(500), takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + const { projectedTotalAmount, retirementDate } = + this.calculatorForm.getRawValue(); + + this.calculationCompleted.emit({ + projectedTotalAmount, + retirementDate + }); + }); + this.calculatorForm .get('annualInterestRate') .valueChanges.pipe(debounceTime(500), takeUntil(this.unsubscribeSubject)) @@ -161,10 +176,10 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { if (isNumber(this.fireWealth) && this.fireWealth >= 0) { this.calculatorForm.setValue( { - annualInterestRate: this.annualInterestRate ?? 5, - paymentPerPeriod: this.savingsRate ?? 0, + annualInterestRate: this.annualInterestRate, + paymentPerPeriod: this.savingsRate, principalInvestmentAmount: this.fireWealth, - projectedTotalAmount: this.projectedTotalAmount ?? 0, + projectedTotalAmount: this.projectedTotalAmount, retirementDate: this.retirementDate ?? this.DEFAULT_RETIREMENT_DATE }, { From ec3e8520eba1c0687db98b2b394e6c498ad53186 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Dec 2025 19:56:04 +0100 Subject: [PATCH 058/160] Task/update note in personal finance tools (#6053) * Update note --- libs/common/src/lib/personal-finance-tools.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 68d6dfa22..7d1c4434a 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -1021,9 +1021,11 @@ export const personalFinanceTools: Product[] = [ }, { hasSelfHostingAbility: false, + isArchived: true, key: 'wallmine', languages: ['English'], name: 'wallmine', + note: 'wallmine was discontinued in 2024', origin: 'Czech Republic', pricingPerYear: '$600', slogan: 'Make Smarter Investments' From 203ae62b650a552f4c894a5e447c3be6474bb4d6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Dec 2025 21:01:38 +0100 Subject: [PATCH 059/160] Feature/update locales (#6049) * Update locales * Update translations --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- apps/client/src/locales/messages.ca.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.de.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.es.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.fr.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.it.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.nl.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.pl.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.pt.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.tr.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.uk.xlf | 90 +++++++++++++++++++------ apps/client/src/locales/messages.xlf | 86 +++++++++++++++++------ apps/client/src/locales/messages.zh.xlf | 90 +++++++++++++++++++------ 12 files changed, 848 insertions(+), 228 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 2944e43fb..96eba410c 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -655,7 +655,7 @@ Realment vol suprimir aquest compte? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150
@@ -1398,6 +1398,14 @@ 107 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Actualitzar plataforma @@ -2015,7 +2023,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -2475,7 +2487,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2646,6 +2662,14 @@ 203 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Autenticació biomètrica @@ -3884,7 +3908,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -4844,7 +4868,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -5001,7 +5025,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5289,7 +5317,7 @@ Realment voleu eliminar el saldo d’aquest compte? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -5353,7 +5381,7 @@ De veritat vols suprimir aquestes activitats? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -5361,7 +5389,7 @@ Realment vols suprimir aquesta activitat? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -5501,7 +5529,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5576,12 +5612,20 @@ 59 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Dipòsit libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -5597,7 +5641,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -5609,7 +5653,7 @@ Estalvi libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -5849,7 +5893,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -6165,7 +6209,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -6245,11 +6289,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6621,7 +6665,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6876,6 +6920,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7700,7 +7752,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 02ef33acd..040d12901 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -302,7 +302,7 @@ Möchtest du dieses Konto wirklich löschen? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -862,7 +862,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1230,7 +1234,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2146,7 +2154,7 @@ Nachhaltiges Einkommen im Ruhestand apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -2302,7 +2310,7 @@ Möchtest du diese Aktivität wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -2509,12 +2517,20 @@ 90 + + annual interest rate + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Einlage libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -2530,7 +2546,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -2542,7 +2558,7 @@ Ersparnisse libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -2954,7 +2970,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -2974,11 +2990,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3022,7 +3038,7 @@ Wenn du heute in den Ruhestand gehen würdest, könntest du apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -3762,7 +3778,7 @@ Möchtest du diese Aktivitäten wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3773,6 +3789,14 @@ 306 + + By + Bis + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Plattform bearbeiten @@ -4557,6 +4581,14 @@ 52 + + this is projected to increase to + wird ein Anstieg prognostiziert auf + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Biometrische Authentifizierung @@ -5320,7 +5352,7 @@ und einer sicheren Entnahmerate (SWR) von apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5540,7 +5572,15 @@ entnehmen, apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5564,7 +5604,11 @@ pro Monat apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5680,7 +5724,7 @@ Möchtest du diesen Cash-Bestand wirklich löschen? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6645,7 +6689,7 @@ bezogen auf dein Gesamtanlagevermögen von apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6900,6 +6944,14 @@ 163 + + assuming a + bei einem angenommenen Jahreszinssatz von + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year um unseren Empfehlungslink zu verwenden und ein Ghostfolio Premium-Abonnement für ein Jahr zu erhalten @@ -7700,7 +7752,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 4314903be..134f26302 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -303,7 +303,7 @@ ¿Estás seguro de eliminar esta cuenta? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -847,7 +847,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1215,7 +1219,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2131,7 +2139,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -2287,7 +2295,7 @@ ¿Estás seguro de eliminar esta operación? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -2491,7 +2499,7 @@ Ahorros libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -2507,19 +2515,27 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts 40 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Depósito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -2939,7 +2955,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -2959,11 +2975,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3007,7 +3023,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -3739,7 +3755,7 @@ ¿Realmente deseas eliminar estas actividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3750,6 +3766,14 @@ 306 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Actualizar plataforma @@ -4534,6 +4558,14 @@ 52 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Autenticación biométrica @@ -5297,7 +5329,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5517,7 +5549,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5541,7 +5581,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5657,7 +5701,7 @@ ¿Realmente desea eliminar el saldo de esta cuenta? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6622,7 +6666,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6877,6 +6921,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7701,7 +7753,7 @@ ¿Realmente deseas eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 41dc3d391..e9eae06e1 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -358,7 +358,7 @@ Voulez-vous vraiment supprimer ce compte ? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -1118,7 +1118,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1498,7 +1502,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2389,12 +2397,20 @@ 38 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Dépôt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -2514,7 +2530,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -2758,7 +2774,7 @@ Voulez-vous vraiment supprimer cette activité ? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -2814,7 +2830,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -2826,7 +2842,7 @@ Épargne libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -2962,7 +2978,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -3154,7 +3170,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -3198,11 +3214,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3738,7 +3754,7 @@ Voulez-vous vraiment supprimer toutes vos activités ? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3749,6 +3765,14 @@ 306 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Mettre à jour la Plateforme @@ -4533,6 +4557,14 @@ 52 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Authentication biométrique @@ -5296,7 +5328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5516,7 +5548,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5540,7 +5580,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5656,7 +5700,7 @@ Voulez-vous vraiment supprimer ce solde de compte ? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6621,7 +6665,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6876,6 +6920,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7700,7 +7752,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index e5bc9ccc6..d0ae125c6 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -303,7 +303,7 @@ Vuoi davvero eliminare questo account? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -847,7 +847,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1215,7 +1219,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2131,7 +2139,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -2287,7 +2295,7 @@ Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -2491,7 +2499,7 @@ Risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -2507,19 +2515,27 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts 40 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Deposito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -2939,7 +2955,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -2959,11 +2975,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3007,7 +3023,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -3739,7 +3755,7 @@ Vuoi davvero eliminare tutte le tue attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3750,6 +3766,14 @@ 306 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Aggiorna la piattaforma @@ -4534,6 +4558,14 @@ 52 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Autenticazione biometrica @@ -5297,7 +5329,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5517,7 +5549,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5541,7 +5581,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5657,7 +5701,7 @@ Vuoi veramente elimnare il saldo di questo conto? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6622,7 +6666,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6877,6 +6921,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7701,7 +7753,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 5d1bec1b5..9aa33e90a 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -302,7 +302,7 @@ Wil je deze rekening echt verwijderen? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -846,7 +846,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1214,7 +1218,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2130,7 +2138,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -2286,7 +2294,7 @@ Wil je deze activiteit echt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -2490,7 +2498,7 @@ Besparingen libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -2506,19 +2514,27 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts 40 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Storting libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -2938,7 +2954,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -2958,11 +2974,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3006,7 +3022,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -3738,7 +3754,7 @@ Weet je zeker dat je alle activiteiten wilt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3749,6 +3765,14 @@ 306 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Platform bijwerken @@ -4533,6 +4557,14 @@ 52 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Biometrische authenticatie @@ -5296,7 +5328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5516,7 +5548,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5540,7 +5580,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5656,7 +5700,7 @@ Wilt u dit rekeningsaldo echt verwijderen? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6621,7 +6665,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6876,6 +6920,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7700,7 +7752,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 6e167a355..8cee0ce85 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -579,7 +579,7 @@ Czy na pewno chcesz usunąć to konto? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -1226,6 +1226,14 @@ 107 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Aktualizuj platformę @@ -1711,7 +1719,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -2191,7 +2203,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2330,6 +2346,14 @@ 203 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Uwierzytelnianie Biometryczne @@ -3503,7 +3527,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -3607,7 +3631,7 @@ Czy na pewno chcesz usunąć te aktywności? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -4058,12 +4082,20 @@ 38 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Depozyt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -4383,7 +4415,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -4516,7 +4548,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -4864,7 +4900,7 @@ Czy na pewno chcesz usunąć tę działalność? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -4884,7 +4920,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -4972,7 +5016,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -4984,7 +5028,7 @@ Oszczędności libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -5216,7 +5260,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -5524,7 +5568,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -5604,11 +5648,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5656,7 +5700,7 @@ Czy na pewno chcesz usunąć saldo tego konta? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6621,7 +6665,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6876,6 +6920,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7700,7 +7752,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 8b63acdf6..a99c8004d 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -358,7 +358,7 @@ Pretende realmente eliminar esta conta? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -917,12 +917,20 @@ 17 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Depósito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -994,7 +1002,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1486,7 +1498,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2450,7 +2466,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -2658,7 +2674,7 @@ Deseja realmente eliminar esta atividade? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -2714,7 +2730,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -2726,7 +2742,7 @@ Poupanças libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -2806,7 +2822,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -2998,7 +3014,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -3042,11 +3058,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3738,7 +3754,7 @@ Deseja mesmo eliminar estas atividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3749,6 +3765,14 @@ 306 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Atualizar plataforma @@ -4533,6 +4557,14 @@ 52 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Autenticação biométrica @@ -5296,7 +5328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5516,7 +5548,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5540,7 +5580,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5656,7 +5700,7 @@ Você realmente deseja excluir o saldo desta conta? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6621,7 +6665,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6876,6 +6920,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7700,7 +7752,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index bc687b3d4..f928823d1 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -539,7 +539,7 @@ Bu hesabı silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -1142,6 +1142,14 @@ 107 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Platformu Güncelle @@ -1571,7 +1579,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -3111,7 +3123,7 @@ Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3546,12 +3558,20 @@ 38 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Para Yatırma libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -3871,7 +3891,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -4336,7 +4356,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -4443,6 +4467,14 @@ 203 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Biyometrik Kimlik Doğrulama @@ -4584,7 +4616,7 @@ TBu işlemi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -4664,7 +4696,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -4676,7 +4708,7 @@ Tasarruflar libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -4908,7 +4940,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -5200,7 +5232,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -5244,11 +5276,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5304,7 +5336,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -5516,7 +5548,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5540,7 +5580,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5656,7 +5700,7 @@ Bu nakit bakiyesini silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6621,7 +6665,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6876,6 +6920,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -7700,7 +7752,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 166b79a13..b64cde692 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -671,7 +671,7 @@ Ви дійсно хочете видалити цей обліковий запис? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -1386,6 +1386,14 @@ 107 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform Оновити платформу @@ -1527,7 +1535,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -2763,7 +2775,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2934,6 +2950,14 @@ 203 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication Біометрична аутентифікація @@ -4164,7 +4188,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -4968,7 +4992,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -5216,7 +5240,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -5607,7 +5631,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -5762,6 +5790,14 @@ 171 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year to use our referral link and get a Ghostfolio Premium membership for one year @@ -6007,7 +6043,7 @@ Ви дійсно хочете видалити цей рахунок? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -6071,7 +6107,7 @@ Ви дійсно хочете видалити ці дії? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -6079,7 +6115,7 @@ Ви дійсно хочете видалити цю активність? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -6219,7 +6255,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -6294,12 +6338,20 @@ 59 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit Депозит libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -6315,7 +6367,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -6327,7 +6379,7 @@ Заощадження libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -6675,7 +6727,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -7015,7 +7067,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -7267,11 +7319,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7700,7 +7752,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 92d1c9639..5f9f21b27 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -555,7 +555,7 @@ Do you really want to delete this account? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -1161,6 +1161,13 @@ 107 + + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform @@ -1601,7 +1608,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -2038,7 +2049,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2162,6 +2177,13 @@ 203 + + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication @@ -3235,7 +3257,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -3331,7 +3353,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -3737,11 +3759,18 @@ 38 + + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -4028,7 +4057,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -4146,7 +4175,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -4431,7 +4464,7 @@ Do you really want to delete this account balance? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -4481,7 +4514,7 @@ Do you really want to delete this activity? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -4513,7 +4546,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -4591,7 +4632,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -4602,7 +4643,7 @@ Savings libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -4815,7 +4856,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -5091,7 +5132,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -5163,11 +5204,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6079,7 +6120,7 @@ based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6259,6 +6300,13 @@ 10 + + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year @@ -6983,7 +7031,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 6a9abc040..d0fc293c0 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -588,7 +588,7 @@ 您确定要删除此账户吗? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 151 + 150 @@ -1235,6 +1235,14 @@ 107 + + By + By + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 140 + + Update platform 更新平台 @@ -1720,7 +1728,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 81 + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -2200,7 +2212,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 78 + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2339,6 +2355,14 @@ 203 + + this is projected to increase to + this is projected to increase to + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 148 + + Biometric Authentication 生物识别认证 @@ -3512,7 +3536,7 @@ 和安全取款率 (SWR) 为 apps/client/src/app/pages/portfolio/fire/fire-page.html - 107 + 109 @@ -3616,7 +3640,7 @@ 您确定要删除这些活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 279 + 278 @@ -4067,12 +4091,20 @@ 38 + + annual interest rate + annual interest rate + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 187 + + Deposit 存款 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 362 + 377 @@ -4392,7 +4424,7 @@ 可持续的退休收入 apps/client/src/app/pages/portfolio/fire/fire-page.html - 40 + 41 @@ -4525,7 +4557,11 @@ 每月 apps/client/src/app/pages/portfolio/fire/fire-page.html - 92 + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 173 @@ -4837,7 +4873,7 @@ 您确实要删除该帐户余额吗? libs/ui/src/lib/account-balances/account-balances.component.ts - 121 + 120 @@ -4893,7 +4929,7 @@ 您确实要删除此活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 289 + 288 @@ -4929,7 +4965,15 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 93 + 95 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 146 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 @@ -5017,7 +5061,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 372 + 387 libs/ui/src/lib/i18n.ts @@ -5029,7 +5073,7 @@ 储蓄 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 382 + 397 @@ -5261,7 +5305,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 413 + 437 @@ -5569,7 +5613,7 @@ 如果您今天退休,您将能够提取 apps/client/src/app/pages/portfolio/fire/fire-page.html - 66 + 68 @@ -5649,11 +5693,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 415 + 439 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 428 + 452 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6622,7 +6666,7 @@ 基于您总资产的 apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 + 97 @@ -6877,6 +6921,14 @@ 163 + + assuming a + assuming a + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 176 + + to use our referral link and get a Ghostfolio Premium membership for one year 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 @@ -7701,7 +7753,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 140 + 139 From b2c7f8b3adcae09404d2a87235f1ec0233895b60 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Dec 2025 08:54:22 +0100 Subject: [PATCH 060/160] Task/improve language localization for de 20251214 (#6066) * Improve language localization --- .../src/app/pages/portfolio/fire/fire-page.html | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.html b/apps/client/src/app/pages/portfolio/fire/fire-page.html index a4a17fa86..b441b2563 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.html +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -92,9 +92,8 @@ />   per month, -   - based on your total assets of + > + , based on your total assets of   - , + ,   this is projected to increase to   @@ -171,9 +170,8 @@ />   per month, -   - assuming a + > + , assuming a   Date: Sun, 14 Dec 2025 09:12:50 +0100 Subject: [PATCH 061/160] Feature/update locales (#6065) * Update locales * Update translations --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- apps/client/src/locales/messages.ca.xlf | 42 +++++++++------------- apps/client/src/locales/messages.de.xlf | 46 ++++++++++--------------- apps/client/src/locales/messages.es.xlf | 42 +++++++++------------- apps/client/src/locales/messages.fr.xlf | 42 +++++++++------------- apps/client/src/locales/messages.it.xlf | 42 +++++++++------------- apps/client/src/locales/messages.nl.xlf | 42 +++++++++------------- apps/client/src/locales/messages.pl.xlf | 42 +++++++++------------- apps/client/src/locales/messages.pt.xlf | 42 +++++++++------------- apps/client/src/locales/messages.tr.xlf | 42 +++++++++------------- apps/client/src/locales/messages.uk.xlf | 42 +++++++++------------- apps/client/src/locales/messages.xlf | 38 ++++++++------------ apps/client/src/locales/messages.zh.xlf | 42 +++++++++------------- 12 files changed, 204 insertions(+), 300 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 96eba410c..4b86b37ba 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -1403,7 +1403,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -2027,7 +2027,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -2491,7 +2491,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2667,7 +2667,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -3908,7 +3908,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5029,7 +5029,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -5524,20 +5524,12 @@ 61 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5617,7 +5609,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -6660,12 +6652,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6920,12 +6912,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 040d12901..60490492f 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -866,7 +866,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -1238,7 +1238,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2519,10 +2519,10 @@ annual interest rate - + apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -3794,7 +3794,7 @@ Bis apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -4586,7 +4586,7 @@ wird ein Anstieg prognostiziert auf apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5352,7 +5352,7 @@ und einer sicheren Entnahmerate (SWR) von apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5567,20 +5567,12 @@ 5 - + , - entnehmen, - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - + apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5608,7 +5600,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6684,12 +6676,12 @@ 178 - - based on your total assets of - bezogen auf dein Gesamtanlagevermögen von + + , based on your total assets of + entnehmen, bezogen auf dein Gesamtanlagevermögen von apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6944,12 +6936,12 @@ 163 - - assuming a - bei einem angenommenen Jahreszinssatz von + + , assuming a + , bei einem angenommenen Jahreszinssatz von apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 134f26302..c7aef0b07 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -851,7 +851,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -1223,7 +1223,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2527,7 +2527,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -3771,7 +3771,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -4563,7 +4563,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5329,7 +5329,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5544,20 +5544,12 @@ 5 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5585,7 +5577,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6661,12 +6653,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6921,12 +6913,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index e9eae06e1..8f6179681 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -1122,7 +1122,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -1506,7 +1506,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2402,7 +2402,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -3770,7 +3770,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -4562,7 +4562,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5328,7 +5328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5543,20 +5543,12 @@ 5 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5584,7 +5576,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6660,12 +6652,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6920,12 +6912,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index d0ae125c6..a32ed3165 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -851,7 +851,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -1223,7 +1223,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2527,7 +2527,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -3771,7 +3771,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -4563,7 +4563,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5329,7 +5329,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5544,20 +5544,12 @@ 5 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5585,7 +5577,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6661,12 +6653,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6921,12 +6913,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 9aa33e90a..e3a289e20 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -850,7 +850,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -1222,7 +1222,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2526,7 +2526,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -3770,7 +3770,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -4562,7 +4562,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5328,7 +5328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5543,20 +5543,12 @@ 5 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5584,7 +5576,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6660,12 +6652,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6920,12 +6912,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 8cee0ce85..735aab38e 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -1231,7 +1231,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -1723,7 +1723,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -2207,7 +2207,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2351,7 +2351,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -3527,7 +3527,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -4087,7 +4087,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -4552,7 +4552,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -4915,20 +4915,12 @@ 140 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -6660,12 +6652,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6920,12 +6912,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index a99c8004d..999f23c98 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -922,7 +922,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -1006,7 +1006,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -1502,7 +1502,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -3770,7 +3770,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -4562,7 +4562,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5328,7 +5328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5543,20 +5543,12 @@ 5 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5584,7 +5576,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6660,12 +6652,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6920,12 +6912,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index f928823d1..91f695a20 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -1147,7 +1147,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -1583,7 +1583,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -3563,7 +3563,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -4360,7 +4360,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -4472,7 +4472,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -5336,7 +5336,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -5543,20 +5543,12 @@ 5 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -5584,7 +5576,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -6660,12 +6652,12 @@ 178 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6920,12 +6912,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index b64cde692..c7c1b195e 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -1391,7 +1391,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -1539,7 +1539,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -2779,7 +2779,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2955,7 +2955,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -4188,7 +4188,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -4987,12 +4987,12 @@ 58 - - based on your total assets of - based on your total assets of + + , based on your total assets of + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -5635,7 +5635,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -5790,12 +5790,12 @@ 171 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 @@ -6250,20 +6250,12 @@ 61 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -6343,7 +6335,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 5f9f21b27..b1539bb8a 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -1165,7 +1165,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -1612,7 +1612,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -2053,7 +2053,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2181,7 +2181,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -3257,7 +3257,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -3763,7 +3763,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -4179,7 +4179,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -4542,19 +4542,11 @@ 61 - + , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -6116,11 +6108,11 @@ 34 - - based on your total assets of + + , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6300,11 +6292,11 @@ 10 - - assuming a + + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index d0fc293c0..17b7f26ea 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -1240,7 +1240,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 140 + 139 @@ -1732,7 +1732,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -2216,7 +2216,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 159 + 158 apps/client/src/app/pages/pricing/pricing-page.html @@ -2360,7 +2360,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 148 + 147 @@ -3536,7 +3536,7 @@ 和安全取款率 (SWR) 为 apps/client/src/app/pages/portfolio/fire/fire-page.html - 109 + 108 @@ -4096,7 +4096,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 187 + 185 @@ -4561,7 +4561,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 173 + 172 @@ -4960,20 +4960,12 @@ 61 - + , , apps/client/src/app/pages/portfolio/fire/fire-page.html - 95 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 146 - - - apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 145 @@ -6661,12 +6653,12 @@ 178 - - based on your total assets of - 基于您总资产的 + + , based on your total assets of + 基于您总资产的 apps/client/src/app/pages/portfolio/fire/fire-page.html - 97 + 96 @@ -6921,12 +6913,12 @@ 163 - - assuming a - assuming a + + , assuming a + , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 176 + 174 From 388dcd208fa954fb7d630b88007e68659391efd4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Dec 2025 09:14:57 +0100 Subject: [PATCH 062/160] Release 2.223.0 (#6067) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dab53a614..ec2acb0c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.223.0 - 2025-12-14 ### Added diff --git a/package-lock.json b/package-lock.json index 61f38db9f..87db87109 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.222.0", + "version": "2.223.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.222.0", + "version": "2.223.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index d0ee2c084..30989f304 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.222.0", + "version": "2.223.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 2feef3a17ef7cad4cd654e687aee289703fb9af3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 16 Dec 2025 08:23:57 +0100 Subject: [PATCH 063/160] Task/refresh cryptocurrencies list 20251215 (#6073) * Update cryptocurrencies.json * Update changelog --- CHANGELOG.md | 6 + .../cryptocurrencies/cryptocurrencies.json | 182 +++++++++++++++--- 2 files changed, 160 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec2acb0c9..c0970b888 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Refreshed the cryptocurrencies list + ## 2.223.0 - 2025-12-14 ### Added diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 4bd7794ca..80c07fc64 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -119,6 +119,7 @@ "3ULL": "3ULL Coin", "3ULLV1": "Playa3ull Games v1", "3XD": "3DChain", + "401JK": "401jk", "404A": "404Aliens", "404BLOCKS": "404Blocks", "420CHAN": "420chan", @@ -397,7 +398,7 @@ "AGN": "Agnus Ai", "AGNT": "iAgent Protocol", "AGO": "AgoDefi", - "AGON": "Arabian Dragon", + "AGON": "AGON Agent", "AGORK": "@gork", "AGOV": "Answer Governance", "AGPC": "AGPC", @@ -468,6 +469,7 @@ "AII": "Artificial Idiot", "AIINU": "AI INU", "AIKEK": "AlphaKEK.AI", + "AILAYER": "AILayer", "AILINK": "AiLink Token", "AIM": "ModiHost", "AIMAGA": "Presidentexe", @@ -634,6 +636,7 @@ "ALLO": "Allora", "ALM": "Alium Finance", "ALMAN": "Alman", + "ALMANAK": "Almanak", "ALMC": "Awkward Look Monkey Club", "ALME": "Alita", "ALMOND": "Almond", @@ -904,6 +907,7 @@ "AR": "Arweave", "ARA": "Ara Token", "ARABCLUB": "The Arab Club Token", + "ARABIANDRAGON": "Arabian Dragon", "ARACOIN": "Ara", "ARARA": "Araracoin", "ARATA": "Arata", @@ -944,7 +948,8 @@ "ARE": "Aurei", "AREA": "Areon Network", "AREN": "Arenon", - "ARENA": "Arena", + "ARENA": "Alpha Arena", + "ARENAT": "ArenaToken", "AREPA": "Arepacoin", "ARES": "ARES", "ARESP": "Ares Protocol", @@ -958,9 +963,11 @@ "ARIA": "ARIA.AI", "ARIA20": "Arianee", "ARIAIP": "Aria", + "ARIO": "AR.IO Network", "ARIT": "ArithFi", "ARIX": "Arix", "ARK": "ARK", + "ARKDEFAI": "ARK", "ARKEN": "Arken Finance", "ARKER": "Arker", "ARKI": "ArkiTech", @@ -985,6 +992,7 @@ "ARON": "Astronaut Aron", "AROR": "Arora", "AROS": "Aros", + "AROX": "OFFICIAL AROX", "ARPA": "ARPA Chain", "ARPAC": "ArpaCoin", "ARQ": "ArQmA", @@ -1019,6 +1027,7 @@ "ARTP": "ArtPro", "ARTR": "Artery Network", "ARTT": "ARTT Network", + "ARTX": "Ultiland", "ARTY": "Artyfact", "ARV": "Ariva", "ARW": "Arowana Token", @@ -1030,6 +1039,7 @@ "ASAN": "ASAN VERSE", "ASAP": "Asap Sniper Bot", "ASBNB": "Astherus Staked BNB", + "ASC": "All InX SMART CHAIN", "ASCEND": "Ascend", "ASD": "AscendEX Token", "ASDEX": "AstraDEX", @@ -1153,6 +1163,7 @@ "ATS": "Alltoscan", "ATT": "Attila", "ATTR": "Attrace", + "ATTRA": "Attractor", "ATU": "Quantum", "ATX": "ArtexCoin", "AU": "AutoCrypto", @@ -1164,6 +1175,7 @@ "AUDC": "Aussie Digital", "AUDF": "Forte AUD", "AUDIO": "Audius", + "AUDM": "Macropod Stablecoin", "AUDT": "Auditchain", "AUDX": "eToro Australian Dollar", "AUK": "Aukcecoin", @@ -1290,6 +1302,7 @@ "AXT": "AIX", "AXYS": "Axys", "AYA": "Aryacoin", + "AYNI": "Ayni Gold", "AZ": "Azbit", "AZA": "Kaliza", "AZART": "Azart", @@ -1327,7 +1340,6 @@ "BABI": "Babylons", "BABL": "Babylon Finance", "BABY": "Babylon", - "BABY4": "Baby 4", "BABYANDY": "Baby Andy", "BABYASTER": "Baby Aster", "BABYB": "Baby Bali", @@ -1506,6 +1518,7 @@ "BANDO": "Bandot", "BANG": "BANG", "BANGY": "BANGY", + "BANK": "Lorenzo Protocol", "BANKA": "Bank AI", "BANKBRC": "BANK Ordinals", "BANKC": "Bankcoin", @@ -1626,6 +1639,7 @@ "BBYDEV": "The Dev is a Baby", "BC": "Blood Crystal", "BC3M": "Backed GOVIES 0-6 Months Euro Investment Grade", + "BC400": "Bitcoin Cultivator 400", "BCA": "Bitcoin Atom", "BCAC": "Business Credit Alliance Chain", "BCAI": "Bright Crypto Ai", @@ -1673,7 +1687,7 @@ "BCRO": "Bonded Cronos", "BCS": "Business Credit Substitute", "BCSPX": "Backed CSPX Core S&P 500", - "BCT": "Toucan Protocol: Base Carbon Tonne", + "BCT": "Buy Coin Token", "BCUBE": "B-cube.ai", "BCUG": "Blockchain Cuties Universe Governance", "BCUT": "bitsCrunch", @@ -1723,6 +1737,7 @@ "BEATS": "Sol Beats", "BEATTOKEN": "BEAT Token", "BEAVER": "beaver", + "BEB1M": "BeB", "BEBE": "BEBE", "BEBEETH": "BEBE", "BEBEV1": "BEBE v1", @@ -1845,6 +1860,7 @@ "BFX": "BitFinex Tokens", "BG": "BunnyPark Game", "BGB": "Bitget token", + "BGBG": "BigMouthFrog", "BGBP": "Binance GBP Stable Coin", "BGBV1": "Bitget Token v1", "BGC": "Bee Token", @@ -1876,12 +1892,14 @@ "BHO": "Bholdus Token", "BHP": "Blockchain of Hash Power", "BHPC": "BHPCash", + "BIAFRA": "Biafra Coin", "BIAO": "BIAO", "BIAOCOIN": "Biaocoin", "BIB": "BIB Token", "BIB01": "Backed IB01 $ Treasury Bond 0-1yr", - "BIBI": "BIBI", + "BIBI": "Binance bibi", "BIBI2025": "Bibi", + "BIBIBSC": "BIBI", "BIBL": "Biblecoin", "BIBO": "Bible of Memes", "BIBTA": "Backed IBTA $ Treasury Bond 1-3yr", @@ -2012,6 +2030,7 @@ "BITGRIN": "BitGrin", "BITHER": "Bither", "BITL": "BitLux", + "BITLAYER": "Bitlayer", "BITM": "BitMoney", "BITN": "Bitnet", "BITNEW": "BitNewChain", @@ -2146,6 +2165,7 @@ "BLOGGE": "Bloggercube", "BLOK": "Bloktopia", "BLOO": "bloo foster coin", + "BLOOCYS": "BlooCYS", "BLOODY": "Bloody Token", "BLOOM": "BloomBeans", "BLOOMT": "Bloom Token", @@ -2297,7 +2317,8 @@ "BOAM": "BOOK OF AI MEOW", "BOARD": "SurfBoard Finance", "BOAT": "Doubloon", - "BOATKID": "BoatKid", + "BOATKID": "Pacu Jalur", + "BOATKIDSITE": "BoatKid", "BOBA": "Boba Network", "BOBAI": "Bob AI", "BOBAOPPA": "Bobaoppa", @@ -2307,6 +2328,7 @@ "BOBE": "BOOK OF BILLIONAIRES", "BOBER": "BOBER", "BOBFUN": "BOB", + "BOBL2": "BOB", "BOBLS": "Boblles", "BOBMARLEY": "Bob Marley Meme", "BOBO": "BOBO", @@ -2444,6 +2466,7 @@ "BORKIE": "Borkie", "BORPA": "Borpa", "BORUTO": "Boruto Inu", + "BOS": "BitcoinOS Token", "BOSCOIN": "BOScoin", "BOSE": "Bitbose", "BOSHI": "Boshi", @@ -2566,6 +2589,7 @@ "BRIA": "Briacoin", "BRIAN": "Brian Arm Strong", "BRIANWIF": "Brianwifhat", + "BRIBE": "Bribe Protocol", "BRIC": "Redbrick", "BRICK": "Brickchain FInance", "BRICKS": "MyBricks", @@ -2587,6 +2611,8 @@ "BRKBX": "Berkshire Hathaway xStock", "BRKL": "Brokoli Token", "BRL1": "BRL1", + "BRLV": "High Velocity BRLY", + "BRLY": "Yield Bearing BRL", "BRM": "BullRun Meme", "BRMV": "BRMV Token", "BRN": "BRN Metaverse", @@ -2702,6 +2728,7 @@ "BTC": "Bitcoin", "BTC2": "Bitcoin 2", "BTC2XFLI": "BTC 2x Flexible Leverage Index", + "BTC6900": "Bitcoin 6900", "BTC70000": "BTC 70000", "BTCA": "BITCOIN ADDITIONAL", "BTCAB": "Bitcoin Avalanche Bridged", @@ -2860,7 +2887,8 @@ "BULLIEVERSE": "Bullieverse", "BULLINU": "Bull inu", "BULLIONFX": "BullionFX", - "BULLISH": "bullish", + "BULLISH": "Bullish Degen", + "BULLISHCOIN": "bullish", "BULLMOON": "Bull Moon", "BULLPEPE": "Bull Pepe", "BULLPEPEIO": "Bullpepe", @@ -3023,11 +3051,13 @@ "CALLISTO": "Callisto Network", "CALLS": "OnlyCalls by Virtuals", "CALO": "Calo", + "CALVIN": "CALVIN", "CAM": "Consumption Avatar Matrix", "CAMC": "Camcoin", "CAMEL": "The Camel", "CAMINO": "Camino Network", "CAMLY": "Camly Coin", + "CAMP": "Camp Network", "CAMPGLOBAL": "Camp", "CAMT": "CAMELL", "CAN": "Channels", @@ -3246,6 +3276,7 @@ "CDCETH": "Crypto.com Staked ETH", "CDCSOL": "Crypto.com Staked SOL", "CDEX": "Cryptodex", + "CDG": "CDG Project", "CDL": "Creditlink", "CDN": "Canada eCoin", "CDOG": "Corn Dog", @@ -3340,6 +3371,7 @@ "CHAINSOFWAR": "Chains of War", "CHAL": "Chalice Finance", "CHAM": "Champion", + "CHAMP": "Super Champs", "CHAMPZ": "Champz", "CHAN": "ChanCoin", "CHANCE": "Ante Casino", @@ -3351,6 +3383,7 @@ "CHAPZ": "Chappyz", "CHARGED": "GoCharge Tech", "CHARIZARD": "Charizard Inu", + "CHARL": "Charlie", "CHARLIE": "Charlie Kirk", "CHARM": "Charm Coin", "CHARS": "CHARS", @@ -3367,7 +3400,7 @@ "CHBR": "CryptoHub", "CHC": "ChainCoin", "CHD": "CharityDAO", - "CHECK": "Paycheck", + "CHECK": "Checkmate", "CHECKR": "CheckerChain", "CHECOIN": "CheCoin", "CHED": "Giggleched", @@ -3450,6 +3483,7 @@ "CHONK": "Chonk", "CHONKY": "CHONKY", "CHOO": "Chooky", + "CHOOCH": "CHOOCH", "CHOOF": "ChoofCoin", "CHOPPER": "Chopper Inu", "CHOPPY": "Choppy", @@ -3697,6 +3731,7 @@ "COINDEALTOKEN": "CoinDeal Token", "COINDEFI": "Coin", "COINDEPO": "CoinDepo Token", + "COINEDELWEIS": "Coin Edelweis", "COING": "Coingrid", "COINH": "Coinhound", "COINLION": "CoinLion", @@ -3853,6 +3888,7 @@ "CPIGGY": "Vix Finance", "CPL": "CoinPlace Token", "CPLO": "Cpollo", + "CPM": "Crypto Pump Meme", "CPN": "CompuCoin", "CPO": "Cryptopolis", "CPOO": "Cockapoo", @@ -4243,7 +4279,7 @@ "CYPR": "Cypher", "CYRS": "Cyrus Token", "CYRUS": "Cyrus Exchange", - "CYS": "BlooCYS", + "CYS": "Cysic", "CYT": "Cryptokenz", "CZ": "CHANGPENG ZHAO (changpengzhao.club)", "CZBOOK": "CZ BOOK", @@ -4319,6 +4355,7 @@ "DANGEL": "dAngel Fund", "DANJ": "Danjuan Cat", "DANK": "DarkKush", + "DANKDOGE": "Dank Doge", "DANNY": "Degen Danny", "DAO": "DAO Maker", "DAO1": "DAO1", @@ -4560,6 +4597,7 @@ "DEOD": "Decentrawood", "DEOR": "Decentralized Oracle", "DEP": "DEAPCOIN", + "DEPAY": "DePay", "DEPIN": "DEPIN", "DEPINU": "Depression Inu", "DEPO": "Depo", @@ -4710,8 +4748,9 @@ "DIGEX": "Digex", "DIGG": "DIGG", "DIGGAI": "DIGGER AI", - "DIGI": "Digicoin", + "DIGI": "MineD", "DIGIC": "DigiCube", + "DIGICOIN": "Digicoin", "DIGIF": "DigiFel", "DIGIMON": "Digimon", "DIGIMONRABBIT": "Digimon Rabbit", @@ -4875,6 +4914,7 @@ "DOGBOSS": "Dog Boss", "DOGC": "Dogeclub", "DOGCOIN": "Dogcoin", + "DOGCOLLAR": "Dog Collar", "DOGDEFI": "DogDeFiCoin", "DOGE": "Dogecoin", "DOGE1SAT": "DOGE-1SATELLITE", @@ -5036,6 +5076,7 @@ "DOVU": "DOVU", "DOWS": "Shadows", "DOYOUR": "Do Your Own Research", + "DOYR": "DOYR", "DP": "DigitalPrice", "DPAD": "Dpad Finance", "DPAY": "Devour", @@ -5382,7 +5423,7 @@ "EDDA": "EDDASwap", "EDDIE": "Eddie coin", "EDE": "El Dorado Exchange", - "EDEL": "Coin Edelweis", + "EDEL": "Edel", "EDEN": "Eden Token", "EDENA": "EDENA", "EDENNETWORK": "EDEN", @@ -5391,6 +5432,7 @@ "EDG": "Edgeless", "EDGE": "Definitive", "EDGEACTIVITY": "EDGE Activity Token", + "EDGEAI": "EdgeAI", "EDGEN": "LayerEdge", "EDGENET": "EDGE", "EDGESOL": "Edgevana Staked SOL", @@ -5776,6 +5818,7 @@ "ETH": "Ethereum", "ETH2": "Eth 2.0 Staking by Pool-X", "ETH2X-FLI": "ETH 2x Flexible Leverage Index", + "ETH6900": "ETH6900", "ETHA": "ETHA Lend", "ETHAX": "ETHAX", "ETHB": "ETHEREUM ON BASE", @@ -6121,6 +6164,7 @@ "FELIS": "Felis", "FELIX": "FelixCoin", "FELIX2": "Felix 2.0 ETH", + "FELY": "Felysyum", "FEN": "First Ever NFT", "FENE": "Fenerbahçe Token", "FENOMY": "Fenomy", @@ -6350,6 +6394,7 @@ "FLVR": "FlavorCoin", "FLX": "Reflexer Ungovernance Token", "FLY": "Fly.trade", + "FLYBNB": "FlyBNB", "FLYCOIN": "FlyCoin", "FLZ": "Fellaz", "FM": "Full Moon", @@ -6393,7 +6438,8 @@ "FOFAR": "FoFar", "FOFARBASE": "FOFAR", "FOFARIO": "Fofar", - "FOFO": "FOFO Token", + "FOFO": "FOFO", + "FOFOTOKEN": "FOFO Token", "FOGE": "Fat Doge", "FOIN": "Foin", "FOL": "Folder Protocol", @@ -6709,6 +6755,7 @@ "GAINFY": "Gainfy", "GAINS": "Gains", "GAINSV1": "Gains v1", + "GAIX": "GaiAI Token", "GAJ": "Gaj Finance", "GAKH": "GAKHcoin", "GAL": "Galxe", @@ -6751,6 +6798,7 @@ "GAMET": "GAME Token", "GAMETA": "Gameta", "GAMEX": "GameX", + "GAMEXCOIN": "Game X Coin", "GAMI": "GAMI World", "GAMIN": "Gaming Stars", "GAMINGDOGE": "GAMINGDOGE", @@ -6868,10 +6916,12 @@ "GEMI": "Gemini Inu", "GEMINI": "Gemini Ai", "GEMINIT": "Gemini", + "GEMO": "Gemo", "GEMS": "Gems VIP", "GEMSTON": "GEMSTON", "GEMZ": "Gemz Social", "GEN": "DAOstack", + "GENAI": "Gen AI BOT", "GENE": "Genopets", "GENECTO": "Gene", "GENESIS": "Genesis Worlds", @@ -6930,6 +6980,7 @@ "GG": "Reboot", "GGAVAX": "GoGoPool AVAX", "GGB": "GGEBI", + "GGBR": "Goldfish", "GGC": "Global Game Coin", "GGCM": "Gold Guaranteed Coin", "GGEZ1": "GGEZ1", @@ -7054,11 +7105,13 @@ "GLN": "Galion Token", "GLO": "Global Innovation Platform", "GLOBAL": "GlobalCoin", + "GLOBALTOUR": "Global Tour Club", "GLOBE": "Global", "GLORP": "Glorp", "GLORY": "SEKAI GLORY", "GLOS": "GLOS", "GLOWSHA": "GlowShares", + "GLP1": "GLP1", "GLQ": "GraphLinq Protocol", "GLR": "Glory Finance", "GLS": "Glacier", @@ -7090,6 +7143,7 @@ "GMMT": "Giant Mammoth", "GMNG": "Global Gaming", "GMNT": "Gmining", + "GMON": "gMON", "GMPD": "GamesPad", "GMR": "GAMER", "GMRT": "Gamertag Token", @@ -7300,6 +7354,7 @@ "GREG": "greg", "GRELF": "GRELF", "GREMLY": "Gremly", + "GREMLYART": "Gremly", "GREXIT": "GrexitCoin", "GREY": "Grey Token", "GRFT": "Graft Blockchain", @@ -7420,6 +7475,7 @@ "GTY": "G-Agents AI", "GUA": "GUA", "GUAC": "Guacamole", + "GUAMEME": "GUA", "GUAN": "Guanciale by Virtuals", "GUAP": "Guapcoin", "GUAR": "Guarium", @@ -7901,6 +7957,7 @@ "HPN": "HyperonChain", "HPO": "Hippocrat", "HPOWSB10I": "HarryPotterObamaWallStreetBets10Inu", + "HPP": "House Party Protocol", "HPT": "Huobi Pool Token", "HPX": "HUPAYX", "HPY": "Hyper Pay", @@ -8003,6 +8060,7 @@ "HXT": "HextraCoin", "HXX": "HexxCoin", "HXXH": "Pioneering D. UTXO-Based NFT Social Protocol", + "HYB": "Hybrid Block", "HYBN": "Hey Bitcoin", "HYBRID": "Hybrid Bank Cash", "HYBUX": "HYBUX", @@ -8225,6 +8283,7 @@ "INCORGNITO": "Incorgnito", "INCP": "InceptionCoin", "INCREMENTUM": "Incrementum", + "INCX": "INCX Coin", "IND": "Indorse", "INDAY": "Independence Day", "INDEPENDENCEDAY": "Independence Day", @@ -8249,6 +8308,7 @@ "INFC": "Influence Chain", "INFI": "Infinite", "INFINI": "Infinity Economics", + "INFINITUS": "InfinitusTokens", "INFLR": "Inflr", "INFO": "Infomatix", "INFOFI": "WAGMI HUB", @@ -8332,6 +8392,7 @@ "IOP": "Internet of People", "IOSHIB": "IoTexShiba", "IOST": "IOS token", + "IOSTV1": "IOSToken V1", "IOT": "Helium IOT", "IOTAI": "IoTAI", "IOTW": "IOTW", @@ -8379,6 +8440,7 @@ "IRT": "Infinity Rocket", "IRWA": "IncomRWA", "IRYDE": "iRYDE COIN", + "IRYS": "Irys", "ISA": "Islander", "ISDT": "ISTARDUST", "ISEC": "IntelliSecure Systems", @@ -8533,6 +8595,7 @@ "JERRYINU": "JERRYINU", "JERRYINUCOM": "Jerry Inu", "JES": "Jesus", + "JESSE": "jesse", "JEST": "Jester", "JESUS": "Jesus Coin", "JET": "Jet Protocol", @@ -8697,7 +8760,7 @@ "KABOSU": "Kabosu Family", "KABY": "Kaby Arena", "KAC": "KACO Finance", - "KACY": "Kassandra", + "KACY": "markkacy", "KADYROV": "Ramzan", "KAF": "KAIF Platform", "KAG": "Silver", @@ -8758,6 +8821,7 @@ "KASHIN": "KASHIN", "KASPER": "Kasper the ghost of Kaspa", "KASPY": "KASPY", + "KASSANDRA": "Kassandra", "KASSIAHOME": "Kassia Home", "KASTA": "Kasta", "KASTER": "King Aster", @@ -8837,6 +8901,7 @@ "KERMIT": "KermitTheCoin", "KERN": "Kernel", "KERNEL": "KernelDAO", + "KEROSENE": "Kerosene", "KET": "Ket", "KETAMINE": "Ketamine", "KETAN": "Ketan", @@ -9004,6 +9069,7 @@ "KNS": "Kenshi", "KNT": "Knekted", "KNTO": "Kento", + "KNTQ": "Kinetiq Governance Token", "KNU": "Keanu", "KNUT": "Knut From Zoo", "KNUXX": "Knuxx Bully of ETH", @@ -9096,6 +9162,7 @@ "KRT": "TerraKRW", "KRU": "Kingaru", "KRUGERCOIN": "KrugerCoin", + "KRWQ": "KRWQ", "KRX": "RAVN Korrax", "KRY": "Krypdraw", "KRYP": "Krypto Trump", @@ -9315,6 +9382,7 @@ "LEAN": "Lean Management", "LEASH": "Doge Killer", "LED": "LEDGIS", + "LEDGER": "Ledger Ai", "LEDU": "Education Ecosystem", "LEE": "Love Earn Enjoy", "LEET": "LeetSwap", @@ -9460,7 +9528,6 @@ "LINGO": "Lingo", "LINK": "Chainlink", "LINKA": "LINKA", - "LINKC": "LINKCHAIN", "LINKCHAIN": "LINK", "LINKFI": "LinkFi", "LINQ": "LINQ", @@ -9776,10 +9843,11 @@ "LUSH": "Lush AI", "LUT": "Cinemadrom", "LUTETIUM": "Lutetium Coin", - "LUX": "Lux Token", + "LUX": "Luxxcoin", "LUXAI": "Lux Token", "LUXCOIN": "LUXCoin", "LUXO": "Luxo", + "LUXTOKEN": "Lux Token", "LUXU": "Luxury Travel Token", "LUXY": "Luxy", "LVG": "Leverage Coin", @@ -9902,6 +9970,7 @@ "MAJO": "Majo", "MAJOR": "Major", "MAK": "MetaCene", + "MAKA": "MAKA", "MAKE": "MAKE", "MAKEA": "Make America Healthy Again", "MAKEE": "Make Ethereum Great Again", @@ -9938,7 +10007,8 @@ "MANUSAI": "Manus AI Agent", "MANYU": "Manyu", "MANYUDOG": "MANYU", - "MAO": "Mao", + "MAO": "MAO", + "MAOMEME": "Mao", "MAOW": "MAOW", "MAP": "MAP Protocol", "MAPC": "MapCoin", @@ -10400,6 +10470,7 @@ "MIDLE": "Midle", "MIDN": "Midnight", "MIDNIGHT": "Midnight", + "MIDNIGHTVIP": "Midnight", "MIE": "MIE Network", "MIF": "monkeywifhat", "MIG": "Migranet", @@ -10518,6 +10589,7 @@ "MITO": "Mitosis", "MITTENS": "Mittens", "MITX": "Morpheus Infrastructure Token", + "MIU": "MIU", "MIUONSOL": "Miu", "MIV": "MakeItViral", "MIVA": "Minerva Wallet", @@ -10543,6 +10615,7 @@ "MLC": "My Lovely Planet", "MLD": "MonoLend", "MLEO": "LEO Token (Multichain)", + "MLG": "360noscope420blazeit", "MLGC": "Marshal Lion Group Coin", "MLINK": "Chainlink (Multichain)", "MLITE": "MeLite", @@ -10646,6 +10719,7 @@ "MOCA": "Moca Coin", "MOCHI": "Mochiswap", "MOCHICAT": "MochiCat", + "MOCHIINU": "Mochi Inu", "MOCK": "Mock Capital", "MOCO": "MoCo", "MOD": "Modefi", @@ -10698,9 +10772,8 @@ "MOMO": "Momo", "MOMO2": "MOMO 2.0", "MOMO2025": "momo", - "MON": "MON Protocol", + "MON": "Monad", "MONA": "MonaCoin", - "MONAD": "Monad", "MONAI": "MONAI", "MONAIZE": "Monaize", "MONARCH": "TRUEMONARCH", @@ -10735,6 +10808,7 @@ "MONOLITH": "Monolith", "MONONOKEINU": "Mononoke Inu", "MONOPOLY": "Meta Monopoly", + "MONPRO": "MON Protocol", "MONS": "Monsters Clan", "MONST": "Monstock", "MONSTA": "Cake Monster", @@ -10783,6 +10857,7 @@ "MOONSTAR": "MoonStar", "MOONW": "moonwolf.io", "MOOO": "Hashtagger", + "MOOR": "MOOR TOKEN", "MOOV": "dotmoovs", "MOOX": "Moox Protocol", "MOOXV1": "Moox Protocol v1", @@ -10989,6 +11064,7 @@ "MULTIWALLET": "MultiWallet Coin", "MUMU": "Mumu", "MUN": "MUNcoin", + "MUNCAT": "MUNCAT", "MUNCH": "Munch Token", "MUNCHY": "Boys Club Munchy", "MUNDI": "Salvator Mundi", @@ -11536,6 +11612,7 @@ "NPICK": "NPICK BLOCK", "NPLC": "Plus Coin", "NPM": "Neptune Mutual", + "NPRO": "NPRO", "NPT": "Neopin", "NPTX": "NeptuneX", "NPX": "Napoleon X", @@ -11619,6 +11696,7 @@ "NUTC": "Nutcash", "NUTGV2": "NUTGAIN", "NUTS": "Thetanuts Finance", + "NUTSDAO": "NutsDAO", "NUTZ": "NUTZ", "NUUM": "MNet", "NUX": "Peanut", @@ -11754,6 +11832,8 @@ "ODS": "Odesis", "ODX": "ODX Token", "ODYS": "OdysseyWallet", + "OETHER": "Origin Ether", + "OEX": "OEX", "OF": "OFCOIN", "OFBC": "OneFinBank Coin", "OFC": "$OFC Coin", @@ -11937,6 +12017,7 @@ "OPENVC": "OpenVoiceCoin", "OPENW": "OpenWorld", "OPENX": "OpenxAI", + "OPENXSTOCK": "OPEN xStock", "OPEPE": "Optimism PEPE", "OPERATOR": "OpenAI Agent", "OPES": "Opes", @@ -11973,7 +12054,8 @@ "OPV": "OpenLive NFT", "OPXVEVELO": "OpenX Locked Velo", "ORA": "ORA Coin", - "ORACLE": "Oracle AI", + "ORACLE": "oracle", + "ORACLEAI": "Oracle AI", "ORACLECHAIN": "OracleChain", "ORACLER": "Oracler", "ORACOLXOR": "Oracolxor", @@ -12162,6 +12244,7 @@ "PALLA": "Pallapay", "PALM": "PaLM AI", "PALMECO": "Palm Economy", + "PALMO": "ORCIB", "PALMP": "PalmPay", "PALMV1": "PaLM AI v1", "PALMY": "Palmy", @@ -12186,6 +12269,7 @@ "PAO": "South Pao", "PAPA": "Papa Bear", "PAPADOGE": "Papa Doge", + "PAPARAZZI": "Paparazzi Token", "PAPAT": "PAPA Trump", "PAPER": "Dope Wars Paper", "PAPERBASE": "Paper", @@ -12251,6 +12335,7 @@ "PAYAI": "PayAI Network", "PAYB": "Paybswap", "PAYCENT": "Paycent", + "PAYCHECK": "Paycheck", "PAYCON": "Paycon", "PAYD": "PAYD", "PAYN": "PayNet Coin", @@ -12327,6 +12412,7 @@ "PEAR": "Pear Swap", "PEARL": "Pearl Finance", "PEAS": "Peapods Finance", + "PEBBLE": "Etherrock #72", "PEBIRD": "PEPE BIRD", "PEC": "PeaceCoin", "PECH": "PEPE CASH", @@ -12380,6 +12466,7 @@ "PEON": "Peon", "PEOPLE": "ConstitutionDAO", "PEOPLEFB": "PEOPLE", + "PEOS": "EOS (pTokens)", "PEOSONE": "pEOS", "PEP": "Pepechain", "PEPA": "Pepa Inu", @@ -12695,6 +12782,7 @@ "PLEO": "Empleos", "PLERF": "Plerf", "PLEX": "PLEX", + "PLEXCOIN": "PlexCoin", "PLF": "PlayFuel", "PLG": "Pledgecamp", "PLGR": "Pledge Finance", @@ -12731,7 +12819,7 @@ "PLURA": "PluraCoin", "PLUS1": "PlusOneCoin", "PLUTUS": "PlutusDAO", - "PLX": "PlexCoin", + "PLX": "Planet Labs xStock", "PLXY": "Plxyer", "PLY": "Aurigami", "PLYR": "PLYR L1", @@ -12886,6 +12974,7 @@ "PORNROCKET": "PornRocket", "PORT": "Port Finance", "PORT3": "Port3 Network", + "PORT3V2": "Port3 Network v2", "PORTAL": "Portal", "PORTALS": "Portals", "PORTALTOKEN": "Portal", @@ -12994,6 +13083,7 @@ "PROGE": "Protector Roge", "PROJECT89": "Project 89", "PROJECT89V1": "Project89", + "PROJECTARENA": "Arena", "PROJECTPAI": "Project Pai", "PROLIFIC": "Prolific Game Studio", "PROM": "Prometeus", @@ -13371,11 +13461,12 @@ "RAIF": "RAI Finance", "RAIIN": "Raiin", "RAIL": "Railgun", - "RAIN": "Rainmaker Games", + "RAIN": "Rain", "RAINBOW": "Rainbow Token", "RAINC": "RainCheck", "RAINCO": "Rain Coin", "RAINI": "Rainicorn", + "RAINMAKER": "Rainmaker Games", "RAIREFLEX": "Rai Reflex Index", "RAISE": "Raise Token", "RAIT": "Rabbitgame", @@ -13583,6 +13674,7 @@ "REP": "Augur", "REPE": "Resistance Pepe", "REPO": "Repo Coin", + "REPPO": "REPPO", "REPUB": "Republican", "REPUBLICAN": "Republican", "REPUX": "Repux", @@ -13603,6 +13695,7 @@ "RETH2": "rETH2", "RETIK": "Retik Finance", "RETIRE": "Retire Token", + "RETSA": "Retsa Coin", "REU": "REUCOIN", "REUNI": "Reunit Wallet", "REUSDC": "Relend USDC", @@ -13678,6 +13771,7 @@ "RIFA": "Rifampicin", "RIFI": "Rikkei Finance", "RIFT": "RIFT AI", + "RIFTS": "Rifts Finance", "RIGEL": "Rigel Finance", "RIK": "RIKEZA", "RIL": "Rilcoin", @@ -13733,6 +13827,7 @@ "RLM": "MarbleVerse", "RLOOP": "rLoop", "RLP": "Resolv RLP", + "RLS": "Rayls", "RLT": "Runner Land", "RLTM": "RealityToken", "RLUSD": "Ripple USD", @@ -14102,6 +14197,7 @@ "SATOEXCHANGE": "SatoExchange Token", "SATOPAY": "SatoPay", "SATORI": "Satori Network", + "SATOSHI": "SATOSHI•NAKAMOTO", "SATOSHINAKAMOTO": "Satoshi Nakamoto", "SATOTHEDOG": "Sato The Dog", "SATOX": "Satoxcoin", @@ -14263,6 +14359,7 @@ "SEEDS": "SeedShares", "SEEDV": "Seed Venture", "SEEDX": "SEEDx", + "SEEK": "Talisman", "SEELE": "Seele", "SEEN": "SEEN", "SEER": "SEER", @@ -14313,8 +14410,9 @@ "SERO": "Super Zero", "SERP": "Shibarium Perpetuals", "SERSH": "Serenity Shield", - "SERV": "Serve", + "SERV": "OpenServ", "SERVE": "Metavice", + "SERVEIO": "Serve", "SESE": "Simpson Pepe", "SESH": "Session Token", "SESSIA": "SESSIA", @@ -14673,6 +14771,7 @@ "SLAM": "Slam Token", "SLAP": "CatSlap", "SLAPS": "Slap", + "SLATE": "Slate", "SLAVI": "Slavi Coin", "SLAY": "SatLayer", "SLAYER": "ThreatSlayerAI by Virtuals", @@ -14719,7 +14818,7 @@ "SLUMBO": "SLUMBO", "SLVLUSD": "Staked Level USD", "SLVX": "eToro Silver", - "SLX": "Slate", + "SLX": "SLIMEX", "SMA": "Soma Network", "SMAC": "Social Media Coin", "SMAK": "Smartlink", @@ -15209,7 +15308,7 @@ "SSNC": "SatoshiSync", "SSOL": "Solayer SOL", "SSR": "SOL Strategic Reserve", - "SSS": "StarSharks", + "SSS": "Sparkle Token", "SSSSS": "Snake wif Hat", "SST": "SIMBA Storage Token", "SSTC": "SunShotCoin", @@ -15224,12 +15323,14 @@ "ST": "Skippy Token", "STA": "STOA Network", "STAB": "STABLE ASSET", + "STABLE": "Stable", "STABLZ": "Stablz", "STABUL": "Stabull Finance", "STAC": "STAC", "STACK": "StackOS", "STACKS": " STACKS PAY", "STACS": "STACS Token", + "STAFIRETH": "StaFi Staked ETH", "STAGE": "Stage", "STAK": "Jigstack", "STAKE": "xDai Chain", @@ -15253,6 +15354,7 @@ "STARRI": "starri", "STARS": "Stargaze", "STARSH": "StarShip Token", + "STARSHARKS": "StarSharks", "STARSHI": "Starship", "STARSHIP": "STARSHIP", "STARSHIPDOGE": "Starship Doge", @@ -15356,6 +15458,7 @@ "STOP": "LETSTOP", "STOR": "Self Storage Coin", "STORE": "Bit Store", + "STOREFUN": "FUN", "STOREP": "Storepay", "STORJ": "Storj", "STORM": "STORM", @@ -15753,6 +15856,7 @@ "TBILLV1": "OpenEden T-Bills v1", "TBIS": "TBIS token", "TBL": "Tombola", + "TBLLX": "TBLL xStock", "TBR": "Tuebor", "TBRIDGE": "tBridge Token", "TBT": "T-BOT", @@ -15760,6 +15864,7 @@ "TBTCV1": "tBTC v1", "TBULL": "Tron Bull", "TBX": "Tokenbox", + "TBY": "TOBY", "TCANDY": "TripCandy", "TCAP": "Total Crypto Market Cap", "TCAPY": "TonCapy", @@ -15781,6 +15886,7 @@ "TCR": "Tracer DAO", "TCS": "Timechain Swap Token", "TCT": "TokenClub", + "TCU29": "Tempestas Copper", "TCX": "T-Coin", "TCY": "The Crypto You", "TD": "The Big Red", @@ -15919,6 +16025,7 @@ "THEO": "Theopetra", "THEOS": "Theos", "THEP": "The Protocol", + "THEPLAY": "PLAY", "THERESAMAY": "Theresa May Coin", "THES": "The Standard Protocol (USDS)", "THESTANDARD": "Standard Token", @@ -16011,10 +16118,12 @@ "TITC": "TitCoin", "TITCOIN": "titcoin", "TITI": "TiTi Protocol", + "TITN": "Titan", "TITS": "We Love Tits", "TITTY": "TamaKitty", "TIUSD": "TiUSD", "TIX": "Blocktix", + "TJRM": "Tajir Tech Hub", "TKA": "Tokia", "TKAI": "TAIKAI", "TKB": "TokenBot", @@ -16056,6 +16165,7 @@ "TMT": "Tamy Token", "TMTG": "The Midas Touch Gold", "TMWH": "Tom Wif Hat", + "TMX": "TMX", "TN": "TurtleNetwork", "TNB": "Time New Bank", "TNC": "TNC Coin", @@ -16111,11 +16221,13 @@ "TONIC": "Tectonic", "TONK": "Tonk Inu", "TONNEL": "TONNEL Network", + "TONO": "Tonomy Token", "TONS": "TONSniper", "TONST": "Ton Stars", "TONT": "TONKIT", "TONTOKEN": "TONToken", "TONUP": "TonUP", + "TONXX": "TON xStock", "TONY": "TONY THE DUCK", "TOOB": "Toobcoin", "TOOBIGTORIG": "Too Big To Rig", @@ -16160,6 +16272,7 @@ "TOTM": "Totem", "TOTO": "TOTO", "TOTT": "TOTT", + "TOUCANPROTOCOL": "Toucan Protocol: Base Carbon Tonne", "TOUCHFAN": "TouchFan", "TOUCHG": "Touch Grass", "TOUR": "Tour Billion", @@ -16537,7 +16650,7 @@ "UCM": "UCROWDME", "UCN": "UCHAIN", "UCO": "Uniris", - "UCOIN": "Ucoin", + "UCOIN": "UCOIN", "UCON": "YouCoin Metaverse", "UCORE": "UnityCore Protocol", "UCR": "Ultra Clear", @@ -16579,6 +16692,7 @@ "UIS": "Unitus", "UJENNY": "Jenny Metaverse DAO Token", "UKG": "UnikoinGold", + "UKRAINEDAO": "UkraineDAO Flag NFT", "ULD": "Unlighted", "ULT": "Ultiledger", "ULTC": "Umbrella", @@ -16596,6 +16710,7 @@ "UMAMI": "Umami", "UMB": "Umbrella Network", "UMBR": "Umbria Network", + "UMBRA": "Umbra", "UMC": "Umbrella Coin", "UMI": "Universal Money Instrument", "UMID": "Umi Digital", @@ -16720,6 +16835,7 @@ "URS": "URUS", "URUS": "Urus Token", "URX": "URANIUMX", + "US": "Talus Token", "USA": "Based USA", "USACOIN": "American Coin", "USAT": "USAT", @@ -16731,6 +16847,7 @@ "USD0": "Usual", "USD1": "World Liberty Financial USD", "USD3": "Web 3 Dollar", + "USDA": "USDA", "USDACC": "USDA", "USDAI": "USDai", "USDAP": "Bond Appetite USD", @@ -16840,7 +16957,7 @@ "UTMDOGE": "UltramanDoge", "UTNP": "Universa", "UTON": "uTON", - "UTOPIA": "UCOIN", + "UTOPIA": "Utopia", "UTT": "uTrade", "UTU": "UTU Protocol", "UTX": "UTIX", @@ -16871,6 +16988,7 @@ "VAIOTV1": "VAIOT v1", "VAIX": "Vectorspace AI X", "VAL": "Validity", + "VALAN": "Valannium", "VALAS": "Valas Finance", "VALENTINE": "Valentine", "VALI": "VALIMARKET", @@ -16950,7 +17068,8 @@ "VEGASI": "Vegas Inu Token", "VEGASINO": "Vegasino", "VEGE": "Vege Token", - "VEIL": "VEIL", + "VEIL": "DarkVeil", + "VEILPROJECT": "VEIL", "VEKTOR": "VEKTOR", "VELA": "Vela Token", "VELAAI": "velaai", @@ -17001,6 +17120,7 @@ "VFIL": "Venus Filecoin", "VFOX": "VFOX", "VFT": "Value Finance", + "VFX": "ViFoxCoin", "VFY": "zkVerify", "VFYV1": "Verify Token", "VG": "Viu Ganhou", @@ -17354,6 +17474,7 @@ "WBONE": "Shibarium Wrapped BONE", "WBONES": "Wrapped BONES", "WBONK": "BONK (Portal Bridge)", + "WBRLY": "Wrapped BRLY", "WBS": "Websea", "WBT": "WhiteBIT Token", "WBTC": "Wrapped Bitcoin", @@ -17415,6 +17536,7 @@ "WEGLD": "Wrapped EGLD", "WEHMND": "Wrapped eHMND", "WEHODL": "HODL", + "WEIRD": "Weird Coin", "WEIRDO": "Weirdo", "WEL": "Welsh Corgi", "WELA": "Wrapped Elastos", @@ -17782,6 +17904,7 @@ "WWEMIX": "WWEMIX", "WWF": "WWF", "WWMATIC": "Wrapped Polygon (Wormhole)", + "WWROSE": "Wrapped Rose", "WWRY": "WeWillRugYou", "WWY": "WeWay", "WX": "WX Token", @@ -17982,6 +18105,7 @@ "XJEWEL": "xJEWEL", "XJO": "JouleCoin", "XKI": "Ki", + "XL1": "XL1", "XLA": "Scala", "XLAB": "Dexlab", "XLB": "LibertyCoin", @@ -18418,7 +18542,8 @@ "ZEBU": "ZEBU", "ZEC": "ZCash", "ZECD": "ZCashDarkCoin", - "ZED": "ZedCoins", + "ZED": "ZED Token", + "ZEDCOIN": "ZedCoin", "ZEDD": "ZedDex", "ZEDTOKEN": "Zed Token", "ZEDX": "ZEDX Сoin", @@ -18569,6 +18694,7 @@ "ZOOMER": "Zoomer Coin", "ZOON": "CryptoZoon", "ZOOT": "Zoo Token", + "ZOOTOPIA": "Zootopia", "ZORA": "Zora", "ZORACLES": "Zoracles", "ZORKSEES": "Zorksees", From bda4753468c44c280ef62714c443961b3ef14ad4 Mon Sep 17 00:00:00 2001 From: Eshaan Gupta <146680427+Eshaan-byte@users.noreply.github.com> Date: Wed, 17 Dec 2025 05:59:41 +1100 Subject: [PATCH 064/160] Task/remove deprecated Angular CLI decorator (#6071) * Remove deprecated Angular CLI decorator * Update changelog --- CHANGELOG.md | 1 + Dockerfile | 4 --- decorate-angular-cli.js | 79 ----------------------------------------- 3 files changed, 1 insertion(+), 83 deletions(-) delete mode 100644 decorate-angular-cli.js diff --git a/CHANGELOG.md b/CHANGELOG.md index c0970b888..e5e803c65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Removed the deprecated _Angular CLI_ decorator (`decorate-angular-cli.js`) - Refreshed the cryptocurrencies list ## 2.223.0 - 2025-12-14 diff --git a/Dockerfile b/Dockerfile index 5beaf6e03..e73cd73e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,10 +22,6 @@ COPY ./prisma/schema.prisma prisma/ RUN npm install -# See https://github.com/nrwl/nx/issues/6586 for further details -COPY ./decorate-angular-cli.js decorate-angular-cli.js -RUN node decorate-angular-cli.js - COPY ./apps apps/ COPY ./libs libs/ COPY ./jest.config.ts jest.config.ts diff --git a/decorate-angular-cli.js b/decorate-angular-cli.js deleted file mode 100644 index d188492ea..000000000 --- a/decorate-angular-cli.js +++ /dev/null @@ -1,79 +0,0 @@ -/** - * This file decorates the Angular CLI with the Nx CLI to enable features such as computation caching - * and faster execution of tasks. - * - * It does this by: - * - * - Patching the Angular CLI to warn you in case you accidentally use the undecorated ng command. - * - Symlinking the ng to nx command, so all commands run through the Nx CLI - * - Updating the package.json postinstall script to give you control over this script - * - * The Nx CLI decorates the Angular CLI, so the Nx CLI is fully compatible with it. - * Every command you run should work the same when using the Nx CLI, except faster. - * - * Because of symlinking you can still type `ng build/test/lint` in the terminal. The ng command, in this case, - * will point to nx, which will perform optimizations before invoking ng. So the Angular CLI is always invoked. - * The Nx CLI simply does some optimizations before invoking the Angular CLI. - * - * To opt out of this patch: - * - Replace occurrences of nx with ng in your package.json - * - Remove the script from your postinstall script in your package.json - * - Delete and reinstall your node_modules - */ - -const fs = require('fs'); -const os = require('os'); -const cp = require('child_process'); -const isWindows = os.platform() === 'win32'; -let output; -try { - output = require('@nx/workspace').output; -} catch (e) { - console.warn( - 'Angular CLI could not be decorated to enable computation caching. Please ensure @nx/workspace is installed.' - ); - process.exit(0); -} - -/** - * Symlink of ng to nx, so you can keep using `ng build/test/lint` and still - * invoke the Nx CLI and get the benefits of computation caching. - */ -function symlinkNgCLItoNxCLI() { - try { - const ngPath = './node_modules/.bin/ng'; - const nxPath = './node_modules/.bin/nx'; - if (isWindows) { - /** - * This is the most reliable way to create symlink-like behavior on Windows. - * Such that it works in all shells and works with npx. - */ - ['', '.cmd', '.ps1'].forEach((ext) => { - if (fs.existsSync(nxPath + ext)) - fs.writeFileSync(ngPath + ext, fs.readFileSync(nxPath + ext)); - }); - } else { - // If unix-based, symlink - cp.execSync(`ln -sf ./nx ${ngPath}`); - } - } catch (e) { - output.error({ - title: - 'Unable to create a symlink from the Angular CLI to the Nx CLI:' + - e.message - }); - throw e; - } -} - -try { - symlinkNgCLItoNxCLI(); - require('@nrwl/cli/lib/decorate-cli').decorateCli(); - output.log({ - title: 'Angular CLI has been decorated to enable computation caching.' - }); -} catch (e) { - output.error({ - title: 'Decoration of the Angular CLI did not complete successfully' - }); -} From 1fa96536e09f7a5d3b30ee93bd5c1718b1baa7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20G=C3=BCnther?= Date: Tue, 16 Dec 2025 21:09:17 +0100 Subject: [PATCH 065/160] Task/include first and last date of each calendar year in getChartDateMap() (#6069) * Include first and last date of each calendar year in getChartDateMap() * Update changelog --- CHANGELOG.md | 4 ++++ .../calculator/portfolio-calculator.ts | 22 +++++++++++++++++++ .../portfolio-calculator-baln-buy.spec.ts | 10 +++++++++ ...ulator-btceur-in-base-currency-eur.spec.ts | 11 ++++++++++ .../roai/portfolio-calculator-btceur.spec.ts | 11 ++++++++++ .../roai/portfolio-calculator-btcusd.spec.ts | 11 ++++++++++ 6 files changed, 69 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5e803c65..5097993c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Included the calendar year boundaries in the portfolio calculations + ### Changed - Removed the deprecated _Angular CLI_ decorator (`decorate-angular-cli.js`) diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index b3cedb00b..ee4219b58 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -44,11 +44,15 @@ import { plainToClass } from 'class-transformer'; import { differenceInDays, eachDayOfInterval, + eachYearOfInterval, endOfDay, + endOfYear, format, isAfter, isBefore, + isWithinInterval, min, + startOfYear, subDays } from 'date-fns'; import { isNumber, sortBy, sum, uniqBy } from 'lodash'; @@ -889,6 +893,24 @@ export abstract class PortfolioCalculator { } } + // Make sure the first and last date of each calendar year is present + const interval = { start: startDate, end: endDate }; + + for (const date of eachYearOfInterval(interval)) { + const yearStart = startOfYear(date); + const yearEnd = endOfYear(date); + + if (isWithinInterval(yearStart, interval)) { + // Add start of year (YYYY-01-01) + chartDateMap[format(yearStart, DATE_FORMAT)] = true; + } + + if (isWithinInterval(yearEnd, interval)) { + // Add end of year (YYYY-12-31) + chartDateMap[format(yearEnd, DATE_FORMAT)] = true; + } + } + return chartDateMap; } diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index 84cab99e1..bfa4d06f3 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -109,6 +109,12 @@ describe('PortfolioCalculator', () => { const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + const historicalDataDates = portfolioSnapshot.historicalData.map( + ({ date }) => { + return date; + } + ); + const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ @@ -170,8 +176,12 @@ describe('PortfolioCalculator', () => { totalLiabilitiesWithCurrencyEffect: new Big('0') }); + expect(historicalDataDates).not.toContain('2021-01-01'); + expect(historicalDataDates).not.toContain('2021-12-31'); + expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject( expect.objectContaining({ + date: '2021-12-18', netPerformance: 23.05, netPerformanceInPercentage: 0.08437042459736457, netPerformanceInPercentageWithCurrencyEffect: 0.08437042459736457, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts index 1f64684a0..84ea6c251 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts @@ -130,6 +130,17 @@ describe('PortfolioCalculator', () => { const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + const historicalDataDates = portfolioSnapshot.historicalData.map( + ({ date }) => { + return date; + } + ); + + expect(historicalDataDates).not.toContain('2021-01-01'); + expect(historicalDataDates).toContain('2021-12-31'); + expect(historicalDataDates).toContain('2022-01-01'); + expect(historicalDataDates).not.toContain('2022-12-31'); + expect(portfolioSnapshot.positions[0].fee).toEqual(new Big(4.46)); expect( portfolioSnapshot.positions[0].feeInBaseCurrency.toNumber() 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 ce639b564..32b3f05c2 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 @@ -118,6 +118,12 @@ describe('PortfolioCalculator', () => { const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + const historicalDataDates = portfolioSnapshot.historicalData.map( + ({ date }) => { + return date; + } + ); + const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ @@ -225,6 +231,11 @@ describe('PortfolioCalculator', () => { totalLiabilitiesWithCurrencyEffect: new Big('0') }); + expect(historicalDataDates).not.toContain('2021-01-01'); + expect(historicalDataDates).toContain('2021-12-31'); + expect(historicalDataDates).toContain('2022-01-01'); + expect(historicalDataDates).not.toContain('2022-12-31'); + expect(investments).toEqual([ { date: '2021-12-12', investment: new Big('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 a7cbe746c..716ec7a59 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 @@ -118,6 +118,12 @@ describe('PortfolioCalculator', () => { const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + const historicalDataDates = portfolioSnapshot.historicalData.map( + ({ date }) => { + return date; + } + ); + const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ @@ -225,6 +231,11 @@ describe('PortfolioCalculator', () => { totalLiabilitiesWithCurrencyEffect: new Big('0') }); + expect(historicalDataDates).not.toContain('2021-01-01'); + expect(historicalDataDates).toContain('2021-12-31'); + expect(historicalDataDates).toContain('2022-01-01'); + expect(historicalDataDates).not.toContain('2022-12-31'); + expect(investments).toEqual([ { date: '2021-12-12', investment: new Big('44558.42') } ]); From 48952c9bbd39a65948c88d1c6de47482ebf3f8b9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Dec 2025 20:24:05 +0100 Subject: [PATCH 066/160] Task/improve localization of various components (#6074) * Improve localization --- .../admin-platform/admin-platform.component.html | 2 +- .../admin-tag/admin-tag.component.html | 2 +- .../app/components/admin-users/admin-users.html | 3 +-- .../portfolio-summary.component.html | 4 ++-- .../pages/portfolio/analysis/analysis-page.html | 16 ++++++++-------- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.html b/apps/client/src/app/components/admin-platform/admin-platform.component.html index a5a1430d4..367827878 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.html +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -57,7 +57,7 @@ - + - + @if (hasPermissionToImpersonateAllUsers) { - - - - - - } @if (assetProfile?.dataSource === 'MANUAL') {
@@ -588,6 +464,115 @@
+ @if (assetProfile?.dataSource === 'MANUAL') { + + + +
Scraper Configuration
+
+
+
+
+
+ + Default Market Price + + +
+
+ + HTTP Request Headers + + +
+
+ + Locale + + +
+
+ + Mode + + @for (modeValue of modeValues; track modeValue) { + {{ + modeValue.viewValue + }} + } + + +
+
+ + + Selector* + + + +
+
+ + + Url* + + + +
+
+ +
+
+
+
+
+ } From 95cbd01a4c5becac550c69a69f74fa35fcf5502d Mon Sep 17 00:00:00 2001 From: Omkar Gujja <67428719+omkarg01@users.noreply.github.com> Date: Sat, 3 Jan 2026 00:09:18 +0530 Subject: [PATCH 107/160] Task/lazy load platforms via API in create or update account dialog (#6130) * Lazy load platforms via API * Update changelog --- CHANGELOG.md | 1 + ...eate-or-update-account-dialog.component.ts | 44 +++++++++++-------- apps/client/src/app/services/data.service.ts | 5 +++ 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cabbc605..91fc2bc39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Integrated the endpoint to get all platforms (`GET api/v1/platforms`) into the create or update account dialog - Extracted the scraper configuration to a dedicated tab in the asset profile details dialog of the admin control panel ## 2.227.0 - 2026-01-02 diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts index 5e18f25cf..ceb11a011 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts @@ -59,7 +59,7 @@ export class GfCreateOrUpdateAccountDialogComponent implements OnDestroy { public accountForm: FormGroup; public currencies: string[] = []; public filteredPlatforms: Observable; - public platforms: Platform[]; + public platforms: Platform[] = []; private unsubscribeSubject = new Subject(); @@ -71,10 +71,8 @@ export class GfCreateOrUpdateAccountDialogComponent implements OnDestroy { ) {} public ngOnInit() { - const { currencies, platforms } = this.dataService.fetchInfo(); - + const { currencies } = this.dataService.fetchInfo(); this.currencies = currencies; - this.platforms = platforms; this.accountForm = this.formBuilder.group({ accountId: [{ disabled: true, value: this.data.account.id }], @@ -83,23 +81,33 @@ export class GfCreateOrUpdateAccountDialogComponent implements OnDestroy { currency: [this.data.account.currency, Validators.required], isExcluded: [this.data.account.isExcluded], name: [this.data.account.name, Validators.required], - platformId: [ - this.platforms.find(({ id }) => { - return id === this.data.account.platformId; - }), - this.autocompleteObjectValidator() - ] + platformId: [null, this.autocompleteObjectValidator()] }); - this.filteredPlatforms = this.accountForm - .get('platformId') - .valueChanges.pipe( - startWith(''), - map((value) => { - const name = typeof value === 'string' ? value : value?.name; - return name ? this.filter(name as string) : this.platforms.slice(); - }) + this.dataService.fetchPlatforms().subscribe(({ platforms }) => { + this.platforms = platforms; + + const selectedPlatform = this.platforms.find(({ id }) => { + return id === this.data.account.platformId; + }); + + this.accountForm.patchValue( + { + platformId: selectedPlatform + }, + { emitEvent: false } ); + + this.filteredPlatforms = this.accountForm + .get('platformId') + .valueChanges.pipe( + startWith(''), + map((value) => { + const name = typeof value === 'string' ? value : value?.name; + return name ? this.filter(name as string) : this.platforms.slice(); + }) + ); + }); } public autoCompleteCheck() { diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 31b0fef73..21eec06c3 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -42,6 +42,7 @@ import { MarketDataDetailsResponse, MarketDataOfMarketsResponse, OAuthResponse, + PlatformsResponse, PortfolioDetails, PortfolioDividendsResponse, PortfolioHoldingResponse, @@ -521,6 +522,10 @@ export class DataService { ); } + public fetchPlatforms() { + return this.http.get('/api/v1/platforms'); + } + public fetchPortfolioDetails({ filters, withMarkets = false From 113238f86ee73491ea961672c7c9f4885463ecab Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 3 Jan 2026 08:48:20 +0100 Subject: [PATCH 108/160] Task/remove deprecated public Stripe key (part 2) (#6138) * Remove deprecated public Stripe key --- libs/common/src/lib/interfaces/info-item.interface.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libs/common/src/lib/interfaces/info-item.interface.ts b/libs/common/src/lib/interfaces/info-item.interface.ts index c2ee54526..119a94a7c 100644 --- a/libs/common/src/lib/interfaces/info-item.interface.ts +++ b/libs/common/src/lib/interfaces/info-item.interface.ts @@ -18,9 +18,5 @@ export interface InfoItem { platforms: Platform[]; statistics: Statistics; - - /** @deprecated */ - stripePublicKey?: string; - subscriptionOffer?: SubscriptionOffer; } From 61d51ec2074703176c649546aacba039e4375577 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Jan 2026 11:03:57 +0100 Subject: [PATCH 109/160] Feature/update locales (#6083) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.de.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.es.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.fr.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.it.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.nl.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.pl.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.pt.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.tr.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.uk.xlf | 198 +++++++++++++++--------- apps/client/src/locales/messages.xlf | 194 ++++++++++++++--------- apps/client/src/locales/messages.zh.xlf | 198 +++++++++++++++--------- 13 files changed, 1449 insertions(+), 924 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91fc2bc39..d5b26a07a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Integrated the endpoint to get all platforms (`GET api/v1/platforms`) into the create or update account dialog - Extracted the scraper configuration to a dedicated tab in the asset profile details dialog of the admin control panel +- Improved the language localization for German (`de`) ## 2.227.0 - 2026-01-02 diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 1340b5da7..762f8f73a 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -371,7 +371,7 @@ Realment vol revocar aquest accés? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113
@@ -435,7 +435,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -503,11 +503,11 @@ Divisa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -619,7 +619,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -695,7 +695,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -711,7 +711,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -919,7 +919,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1023,7 +1023,7 @@ El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -1055,7 +1055,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1067,7 +1067,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -1087,11 +1087,11 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1107,11 +1107,11 @@ Països apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1123,7 +1123,7 @@ Mapatge de Símbols apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -1139,7 +1139,7 @@ Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -1147,7 +1147,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -1155,11 +1155,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1170,12 +1170,20 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Note Notes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1215,7 +1223,7 @@ Nom, símbol o ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1323,7 +1331,7 @@ Recollida de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1419,7 +1427,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -1491,7 +1499,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -1554,6 +1562,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Comparar amb... @@ -1599,7 +1619,7 @@ Punt de Referència apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1935,7 +1955,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -2183,7 +2203,7 @@ Definiu l’import del vostre fons d’emergència. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -2343,7 +2363,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -2355,7 +2375,7 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -2367,7 +2387,7 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -2379,7 +2399,7 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2455,7 +2475,7 @@ Introduïu el vostre codi de cupó. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2463,7 +2483,7 @@ No s’ha pogut bescanviar el codi de cupó apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2471,7 +2491,7 @@ El codi del cupó s’ha bescanviat apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2479,7 +2499,7 @@ Torna a carregar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2523,7 +2543,7 @@ Automàtic apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2551,7 +2571,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -2607,7 +2627,7 @@ Localització apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2779,7 +2799,7 @@ D’acord apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -3063,7 +3083,7 @@ Visió general apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -3202,6 +3222,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Descobriu les últimes actualitzacions i perspectives de Ghostfolio sobre finances personals @@ -3464,7 +3496,7 @@ Mercats apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3976,7 +4008,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -4819,6 +4851,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. És gratuït. @@ -5393,7 +5437,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5413,7 +5457,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5433,7 +5477,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5453,7 +5497,7 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5701,11 +5745,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5733,11 +5777,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5913,7 +5957,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6613,7 +6657,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6661,11 +6705,11 @@ Cancel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6717,7 +6761,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7175,7 +7219,7 @@ Could not generate an API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7183,7 +7227,7 @@ Set this API key in your self-hosted environment: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7191,7 +7235,7 @@ Ghostfolio Premium Data Provider API Key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7199,7 +7243,7 @@ Do you really want to generate a new API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7239,7 +7283,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7259,7 +7303,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7331,7 +7375,7 @@ Link has been copied to the clipboard apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7339,7 +7383,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 4b405ce30..9a429cfad 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -102,7 +102,7 @@ Möchtest du diese Zugangsberechtigung wirklich widerrufen? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -114,7 +114,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -266,7 +266,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -326,7 +326,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -402,7 +402,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -482,7 +482,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -654,7 +654,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -978,7 +978,7 @@ Bitte setze den Betrag deines Notfallfonds. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -986,11 +986,11 @@ Sektoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1006,11 +1006,11 @@ Länder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1086,7 +1086,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1098,7 +1098,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1110,7 +1110,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1122,7 +1122,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1134,7 +1134,7 @@ Okay apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -1202,7 +1202,7 @@ Bitte gebe deinen Gutscheincode ein. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -1210,7 +1210,7 @@ Gutscheincode konnte nicht eingelöst werden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -1218,7 +1218,7 @@ Gutscheincode wurde eingelöst apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -1226,7 +1226,7 @@ Neu laden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -1294,7 +1294,7 @@ Lokalität apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1430,11 +1430,11 @@ Währung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1674,7 +1674,7 @@ Übersicht apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -1710,7 +1710,7 @@ Märkte apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -1930,7 +1930,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1962,7 +1962,7 @@ Name, Symbol oder ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2014,7 +2014,7 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2038,7 +2038,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2430,7 +2430,7 @@ Sektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2442,7 +2442,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -2657,6 +2657,18 @@ 235 + + Could not validate form + Das Formular konnte nicht validiert werden + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Vergleichen mit... @@ -2670,7 +2682,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2698,7 +2710,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2782,11 +2794,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2818,7 +2830,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -3110,7 +3122,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -3170,11 +3182,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3601,6 +3613,18 @@ 288 + + Could not save asset profile + Das Anlageprofil konnte nicht gespeichert werden + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. Es ist kostenlos. @@ -3822,7 +3846,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -3838,11 +3862,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3853,6 +3877,14 @@ 25 + + Asset profile has been saved + Das Anlageprofil wurde gespeichert + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Möchtest du diese Plattform wirklich löschen? @@ -4210,7 +4242,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -4753,6 +4785,18 @@ 7 + + Could not parse scraper configuration + Die Scraper Konfiguration konnte nicht geparsed werden + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Entdecke die neuesten Ghostfolio Updates und Beiträge zu persönlichen Finanzen @@ -5736,7 +5780,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5744,7 +5788,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5904,7 +5948,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5924,7 +5968,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5972,7 +6016,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5992,7 +6036,7 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6012,7 +6056,7 @@ Finanzmarktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6237,7 +6281,7 @@ Berücksichtigen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6637,7 +6681,7 @@ Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6685,11 +6729,11 @@ Abbrechen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6785,7 @@ Schliessen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7199,7 +7243,7 @@ API-Schlüssel konnte nicht erstellt werden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7207,7 +7251,7 @@ Setze diesen API-Schlüssel in deiner selbst gehosteten Umgebung: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7215,7 +7259,7 @@ API-Schlüssel für den Ghostfolio Premium Datenanbieter apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7223,7 +7267,7 @@ Möchtest du wirklich einen neuen API-Schlüssel erstellen? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7263,7 +7307,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7283,7 +7327,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7355,7 +7399,7 @@ Link wurde in die Zwischenablage kopiert apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7363,7 +7407,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7371,7 +7415,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7379,7 +7423,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7387,7 +7431,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7395,7 +7439,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7403,7 +7447,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7411,7 +7455,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7419,7 +7463,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7567,7 +7611,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7579,7 +7623,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7652,7 +7696,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7660,7 +7704,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7668,7 +7712,7 @@ Übernehmen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 6e5bf1dba..9be8108bd 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -103,7 +103,7 @@ ¿Quieres revocar el acceso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -115,7 +115,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -267,7 +267,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -327,7 +327,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -403,7 +403,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -483,7 +483,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -639,7 +639,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -963,7 +963,7 @@ Por favor, ingresa la cantidad de tu fondo de emergencia: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -971,11 +971,11 @@ Sectores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -991,11 +991,11 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1071,7 +1071,7 @@ Desde principio de año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1083,7 +1083,7 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1095,7 +1095,7 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1107,7 +1107,7 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1119,7 +1119,7 @@ De acuerdo apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -1187,7 +1187,7 @@ Por favor, ingresa tu código de cupón: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -1195,7 +1195,7 @@ No se puede canjear este código de cupón apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -1203,7 +1203,7 @@ El codigo de cupón ha sido canjeado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -1211,7 +1211,7 @@ Refrescar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -1279,7 +1279,7 @@ Ubicación apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1415,11 +1415,11 @@ Divisa base apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1659,7 +1659,7 @@ Visión general apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -1695,7 +1695,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -1915,7 +1915,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1947,7 +1947,7 @@ Nombre, símbolo o ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1999,7 +1999,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2023,7 +2023,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2463,7 +2463,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2475,7 +2475,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -2647,13 +2647,25 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 152 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Comparar con... @@ -2683,7 +2695,7 @@ Automático apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2767,11 +2779,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2803,7 +2815,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -3095,7 +3107,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -3155,11 +3167,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3586,6 +3598,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. Es gratis. @@ -3799,7 +3823,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -3815,11 +3839,11 @@ ¿La URL? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3830,6 +3854,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? ¿Realmente deseas eliminar esta plataforma? @@ -4187,7 +4219,7 @@ Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -4730,6 +4762,18 @@ 7 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Conoce las últimas actualizaciones de Ghostfolio y obtén información sobre finanzas personales @@ -5713,7 +5757,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5721,7 +5765,7 @@ Prueba apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5881,7 +5925,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5901,7 +5945,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5949,7 +5993,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5969,7 +6013,7 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5989,7 +6033,7 @@ Recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6214,7 +6258,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6614,7 +6658,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6662,11 +6706,11 @@ Cancelar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6718,7 +6762,7 @@ Cerca apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7176,7 +7220,7 @@ No se pudo generar una clave API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7184,7 +7228,7 @@ Configure esta clave API en su entorno autohospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7192,7 +7236,7 @@ Clave API del proveedor de datos premium de Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7200,7 +7244,7 @@ ¿Realmente desea generar una nueva clave API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7240,7 +7284,7 @@ Ahorrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7260,7 +7304,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7332,7 +7376,7 @@ El enlace ha sido copiado al portapapeles apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7340,7 +7384,7 @@ Perezoso apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7348,7 +7392,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7356,7 +7400,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7364,7 +7408,7 @@ Modo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7372,7 +7416,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7380,7 +7424,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7388,7 +7432,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7396,7 +7440,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7544,7 +7588,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7556,7 +7600,7 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7629,7 +7673,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7637,7 +7681,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7645,7 +7689,7 @@ Aplicar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7988,7 +8032,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 65c3e54f5..5bb9d6489 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -94,7 +94,7 @@ Voulez-vous vraiment révoquer cet accès ? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -122,7 +122,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -190,11 +190,11 @@ Devise apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -322,7 +322,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -374,7 +374,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -458,7 +458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -546,7 +546,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -618,7 +618,7 @@ Secteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -630,7 +630,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -650,11 +650,11 @@ Secteurs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -670,11 +670,11 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -686,7 +686,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -694,7 +694,7 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -850,7 +850,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -897,6 +897,18 @@ 186 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Comparer avec... @@ -934,7 +946,7 @@ Référence apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1242,7 +1254,7 @@ Veuillez entrer le montant de votre fonds d’urgence : apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1306,7 +1318,7 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1318,7 +1330,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1330,7 +1342,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1342,7 +1354,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1390,7 +1402,7 @@ D’accord apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -1458,7 +1470,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1470,7 +1482,7 @@ Veuillez entrer votre code promotionnel. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -1478,7 +1490,7 @@ Le code promotionnel n’a pas pu être appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -1486,7 +1498,7 @@ Le code promotionnel a été appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -1494,7 +1506,7 @@ Rafraîchir apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -1570,7 +1582,7 @@ Paramètres régionaux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1978,7 +1990,7 @@ Marchés apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -2034,7 +2046,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2082,7 +2094,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -2114,7 +2126,7 @@ Nom, symbole, ou ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2686,7 +2698,7 @@ Aperçu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2914,11 +2926,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2946,11 +2958,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3006,7 +3018,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -3585,6 +3597,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. C’est gratuit. @@ -3798,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -3814,11 +3838,11 @@ Lien apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3829,6 +3853,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Voulez-vous vraiment supprimer cette plateforme ? @@ -4186,7 +4218,7 @@ Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -4729,6 +4761,18 @@ 7 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Découvrez les dernières mises à jour et informations de Ghostfolio sur la gestion de patrimoine @@ -5712,7 +5756,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5720,7 +5764,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5880,7 +5924,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5900,7 +5944,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5948,7 +5992,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5968,7 +6012,7 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5988,7 +6032,7 @@ Collecter les données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6213,7 +6257,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6613,7 +6657,7 @@ Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6661,11 +6705,11 @@ Annuler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6717,7 +6761,7 @@ Fermer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7175,7 +7219,7 @@ Impossible de générer une clé API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7183,7 +7227,7 @@ Définissez cette clé API dans votre environnement auto-hébergé : apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7191,7 +7235,7 @@ Clé API du fournisseur de données Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7199,7 +7243,7 @@ Voulez-vous vraiment générer une nouvelle clé API ? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7239,7 +7283,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7259,7 +7303,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7331,7 +7375,7 @@ Le lien a été copié dans le presse-papiers apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7339,7 +7383,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Selecteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Appliquer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index f92049f9c..2986e8ee4 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -103,7 +103,7 @@ Vuoi davvero revocare l’accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -115,7 +115,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -267,7 +267,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -327,7 +327,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -403,7 +403,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -483,7 +483,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -639,7 +639,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -963,7 +963,7 @@ Inserisci l’importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -971,11 +971,11 @@ Settori apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -991,11 +991,11 @@ Paesi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1071,7 +1071,7 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1083,7 +1083,7 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1095,7 +1095,7 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1107,7 +1107,7 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1119,7 +1119,7 @@ Bene apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -1187,7 +1187,7 @@ Inserisci il tuo codice del buono: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -1195,7 +1195,7 @@ Impossibile riscattare il codice del buono apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -1203,7 +1203,7 @@ Il codice del buono è stato riscattato apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -1211,7 +1211,7 @@ Ricarica apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -1279,7 +1279,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1415,11 +1415,11 @@ Valuta apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1659,7 +1659,7 @@ Panoramica apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -1695,7 +1695,7 @@ Mercati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -1915,7 +1915,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1947,7 +1947,7 @@ Nome, simbolo o ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1999,7 +1999,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2023,7 +2023,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2463,7 +2463,7 @@ Settore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2475,7 +2475,7 @@ Paese apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -2647,13 +2647,25 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 152 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Confronta con... @@ -2683,7 +2695,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2767,11 +2779,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2803,7 +2815,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -3095,7 +3107,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -3155,11 +3167,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3586,6 +3598,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. È gratuito. @@ -3799,7 +3823,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -3815,11 +3839,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3830,6 +3854,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Vuoi davvero eliminare questa piattaforma? @@ -4187,7 +4219,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -4730,6 +4762,18 @@ 7 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Scopri gli ultimi aggiornamenti e approfondimenti di Ghostfolio sulla finanza personale @@ -5713,7 +5757,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5721,7 +5765,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5881,7 +5925,7 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5901,7 +5945,7 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5949,7 +5993,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5969,7 +6013,7 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5989,7 +6033,7 @@ Raccolta Dati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6214,7 +6258,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6614,7 +6658,7 @@ Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6662,11 +6706,11 @@ Annulla apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6718,7 +6762,7 @@ Chiudi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7176,7 +7220,7 @@ Non è stato possibile generare un API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7184,7 +7228,7 @@ Imposta questa API key nel tuo ambiente self-hosted: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7192,7 +7236,7 @@ API Key for Ghostfolio Premium Data Provider apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7200,7 +7244,7 @@ Vuoi davvero generare una nuova API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7240,7 +7284,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7260,7 +7304,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7332,7 +7376,7 @@ Il link è stato copiato negli appunti apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7340,7 +7384,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7348,7 +7392,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7356,7 +7400,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7364,7 +7408,7 @@ Modalità apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7372,7 +7416,7 @@ Selettore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7380,7 +7424,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7388,7 +7432,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7396,7 +7440,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7544,7 +7588,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7556,7 +7600,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7629,7 +7673,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7637,7 +7681,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7645,7 +7689,7 @@ Applica apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7988,7 +8032,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index b3b9d8040..c34f259bc 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -102,7 +102,7 @@ Wil je deze verleende toegang echt intrekken? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -114,7 +114,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -266,7 +266,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -326,7 +326,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -402,7 +402,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -482,7 +482,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -638,7 +638,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -962,7 +962,7 @@ Voer het bedrag van je noodfonds in: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -970,11 +970,11 @@ Sectoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -990,11 +990,11 @@ Landen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1070,7 +1070,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1082,7 +1082,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1094,7 +1094,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1106,7 +1106,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1118,7 +1118,7 @@ Oké apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -1186,7 +1186,7 @@ Voer je couponcode in: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -1194,7 +1194,7 @@ Kon je kortingscode niet inwisselen apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -1202,7 +1202,7 @@ Je couponcode is ingewisseld apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -1210,7 +1210,7 @@ Herladen apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -1278,7 +1278,7 @@ Locatie apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1414,11 +1414,11 @@ Valuta apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1658,7 +1658,7 @@ Overzicht apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -1694,7 +1694,7 @@ Markten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -1914,7 +1914,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1946,7 +1946,7 @@ Naam, symbool of ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1998,7 +1998,7 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2022,7 +2022,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2462,7 +2462,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2474,7 +2474,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -2646,13 +2646,25 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts 152 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Vergelijk met... @@ -2682,7 +2694,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2766,11 +2778,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2802,7 +2814,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -3094,7 +3106,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -3154,11 +3166,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3585,6 +3597,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. Het is gratis. @@ -3798,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -3814,11 +3838,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3829,6 +3853,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Wil je dit platform echt verwijderen? @@ -4186,7 +4218,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -4729,6 +4761,18 @@ 7 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Ontdek de nieuwste Ghostfolio-updates en inzichten in persoonlijke financiën @@ -5712,7 +5756,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5720,7 +5764,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5880,7 +5924,7 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5900,7 +5944,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5948,7 +5992,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5968,7 +6012,7 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5988,7 +6032,7 @@ Data Verzamelen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6213,7 +6257,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6613,7 +6657,7 @@ Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6661,11 +6705,11 @@ Annuleren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6717,7 +6761,7 @@ Sluiten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7175,7 +7219,7 @@ Er kon geen API-sleutel worden gegenereerd apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7183,7 +7227,7 @@ Stel deze API-sleutel in uw zelf-gehoste omgeving in: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7191,7 +7235,7 @@ Ghostfolio Premium Gegevensleverancier API-sleutel apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7199,7 +7243,7 @@ Wilt u echt een nieuwe API-sleutel genereren? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7239,7 +7283,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7259,7 +7303,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7331,7 +7375,7 @@ Link is gekopieerd naar klemboord apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7339,7 +7383,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Kiezer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Toepassen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 28c63f231..2241e6a9a 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -303,7 +303,7 @@ Czy na pewno chcesz cofnąć przyznany dostęp? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -359,7 +359,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -427,11 +427,11 @@ Waluta apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -543,7 +543,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -599,7 +599,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -615,7 +615,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -807,7 +807,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -903,7 +903,7 @@ Sektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -915,7 +915,7 @@ Kraj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -935,11 +935,11 @@ Sektory apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -955,11 +955,11 @@ Kraje apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -971,7 +971,7 @@ Mapowanie Symboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -987,7 +987,7 @@ Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -995,7 +995,7 @@ Notatka apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1035,7 +1035,7 @@ Nazwa, symbol lub ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1203,11 +1203,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1218,6 +1218,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Czy naprawdę chcesz usunąć tę platformę? @@ -1247,7 +1255,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -1319,7 +1327,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -1382,6 +1390,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Porównaj z... @@ -1427,7 +1447,7 @@ Poziom Odniesienia (Benchmark) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1631,7 +1651,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1867,7 +1887,7 @@ Wprowadź wysokość funduszu rezerwowego: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -2099,7 +2119,7 @@ Liczony od początku roku (year-to-date) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -2111,7 +2131,7 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -2123,7 +2143,7 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -2135,7 +2155,7 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2171,7 +2191,7 @@ Wpisz kod kuponu: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2179,7 +2199,7 @@ Nie udało się zrealizować kodu kuponu apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2187,7 +2207,7 @@ Kupon został zrealizowany apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2195,7 +2215,7 @@ Odśwież apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2239,7 +2259,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2291,7 +2311,7 @@ Ustawienia Regionalne apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2455,7 +2475,7 @@ Okej apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2723,7 +2743,7 @@ Przegląd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2862,6 +2882,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Odkryj najnowsze aktualizacje Ghostfolio oraz spostrzeżenia na temat finansów osobistych @@ -3099,7 +3131,7 @@ Rynki apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3595,7 +3627,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -4390,6 +4422,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. Jest bezpłatny. @@ -5092,11 +5136,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5124,11 +5168,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5296,7 +5340,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5712,7 +5756,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5720,7 +5764,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5880,7 +5924,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5900,7 +5944,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5948,7 +5992,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5968,7 +6012,7 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5988,7 +6032,7 @@ Gromadzenie Danych apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6213,7 +6257,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6613,7 +6657,7 @@ Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6661,11 +6705,11 @@ Anuluj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6717,7 +6761,7 @@ Zamknij apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7175,7 +7219,7 @@ Nie udało się wygenerować klucza API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7183,7 +7227,7 @@ Ustaw ten klucz API w samodzielnie hostowanym środowisku: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7191,7 +7235,7 @@ Klucz API dostawcy danych Premium Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7199,7 +7243,7 @@ Czy na pewno chcesz wygenerować nowy klucz API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7239,7 +7283,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7259,7 +7303,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7331,7 +7375,7 @@ Link został skopiowany do schowka apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7339,7 +7383,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Tryb apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Zatwierdź apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 812d24b20..188bda9c8 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -94,7 +94,7 @@ Pretende realmente revogar este acesso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -122,7 +122,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -190,11 +190,11 @@ Moeda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -322,7 +322,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -374,7 +374,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -458,7 +458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -546,7 +546,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -718,7 +718,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -765,6 +765,18 @@ 186 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Comparar com... @@ -802,7 +814,7 @@ Referência apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1126,7 +1138,7 @@ Por favor, insira o valor do seu fundo de emergência: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1170,7 +1182,7 @@ Setor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1182,7 +1194,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -1202,11 +1214,11 @@ Setores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1222,11 +1234,11 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1302,7 +1314,7 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1314,7 +1326,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1326,7 +1338,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1338,7 +1350,7 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1386,7 +1398,7 @@ OK apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -1454,7 +1466,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1466,7 +1478,7 @@ Por favor, insira o seu código de cupão: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -1474,7 +1486,7 @@ Não foi possível resgatar o código de cupão apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -1482,7 +1494,7 @@ Código de cupão foi resgatado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -1490,7 +1502,7 @@ Atualizar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -1574,7 +1586,7 @@ Localidade apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1922,7 +1934,7 @@ Visão geral apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -1958,7 +1970,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -2014,7 +2026,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2062,7 +2074,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -2094,7 +2106,7 @@ Nome, símbolo or ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2126,7 +2138,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2786,11 +2798,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2850,7 +2862,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -3102,7 +3114,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -3218,11 +3230,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3585,6 +3597,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. É gratuito. @@ -3798,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -3814,11 +3838,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3829,6 +3853,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Deseja mesmo eliminar esta plataforma? @@ -4186,7 +4218,7 @@ Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -4729,6 +4761,18 @@ 7 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Descubra as últimas atualizações e insights do Ghostfolio sobre finanças pessoais @@ -5712,7 +5756,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5720,7 +5764,7 @@ Teste apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5880,7 +5924,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5900,7 +5944,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5948,7 +5992,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5968,7 +6012,7 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5988,7 +6032,7 @@ Coleta de dados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6213,7 +6257,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6613,7 +6657,7 @@ Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6661,11 +6705,11 @@ Cancelar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6717,7 +6761,7 @@ Fechar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7175,7 +7219,7 @@ Não foi possível gerar uma chave de API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7183,7 +7227,7 @@ Defina esta chave de API no seu ambiente auto-hospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7191,7 +7235,7 @@ Chave de API do Provedor de Dados do Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7199,7 +7243,7 @@ Você realmente deseja gerar uma nova chave de API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7239,7 +7283,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7259,7 +7303,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7331,7 +7375,7 @@ O link foi copiado para a área de transferência apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7339,7 +7383,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 357fb9f83..cd713e26a 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -275,7 +275,7 @@ Bu erişim iznini geri almayı gerçekten istiyor musunuz? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -319,7 +319,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -387,11 +387,11 @@ Para Birimi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -503,7 +503,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -555,7 +555,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -639,7 +639,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -763,7 +763,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -835,7 +835,7 @@ Sektör apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -847,7 +847,7 @@ Ülke apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -867,11 +867,11 @@ Sektörler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -887,11 +887,11 @@ Ülkeler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -903,7 +903,7 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -919,7 +919,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -927,7 +927,7 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -951,7 +951,7 @@ Ad, sembol ya da ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1119,11 +1119,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1134,6 +1134,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? Bu platformu silmeyi gerçekten istiyor musunuz? @@ -1163,7 +1171,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -1187,7 +1195,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -1250,6 +1258,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Karşılaştır... @@ -1295,7 +1315,7 @@ Karşılaştırma Ölçütü apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1499,7 +1519,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1723,7 +1743,7 @@ Lütfen acil durum yedeği meblağını giriniz: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1967,7 +1987,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1979,7 +1999,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1991,7 +2011,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -2003,7 +2023,7 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2051,7 +2071,7 @@ Tamam apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2287,7 +2307,7 @@ Özet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2426,6 +2446,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Son Ghostfolio güncellemelerini ve kişisel finans hakkındaki en son bilgileri keşfedin. @@ -2675,7 +2707,7 @@ Piyasalar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3095,7 +3127,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3874,6 +3906,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. Ücretsiz. @@ -4300,7 +4344,7 @@ Otomatik apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4312,7 +4356,7 @@ Lütfen kupon kodunuzu girin: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -4320,7 +4364,7 @@ Kupon kodu kullanılamadı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -4328,7 +4372,7 @@ Kupon kodu kullanıldı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -4336,7 +4380,7 @@ Yeniden Yükle apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -4432,7 +4476,7 @@ Yerel Ayarlar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4788,11 +4832,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4820,11 +4864,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4992,7 +5036,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5712,7 +5756,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5720,7 +5764,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5880,7 +5924,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5900,7 +5944,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5948,7 +5992,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5968,7 +6012,7 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5988,7 +6032,7 @@ Veri Toplama apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6213,7 +6257,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6613,7 +6657,7 @@ Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6661,11 +6705,11 @@ İptal Et apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6717,7 +6761,7 @@ Kapat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7175,7 +7219,7 @@ API anahtarı oluşturulamadı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7183,7 +7227,7 @@ Bu API anahtarını kendi barındırılan ortamınıza ayarlayın: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7191,7 +7235,7 @@ Ghostfolio Premium Veri Sağlayıcı API Anahtarı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7199,7 +7243,7 @@ Yeni bir API anahtarı oluşturmak istediğinize emin misiniz? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7239,7 +7283,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7259,7 +7303,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7331,7 +7375,7 @@ Bağlantı panoya kopyalandı apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7339,7 +7383,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Mod apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Seçici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Uygula apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 3375f4e2c..c38c8d417 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -371,7 +371,7 @@ Посилання скопійовано в буфер обміну apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -387,7 +387,7 @@ Ви дійсно хочете відкликати цей наданий доступ? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -451,7 +451,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -519,11 +519,11 @@ Валюта apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -635,7 +635,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -711,7 +711,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -735,7 +735,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -915,7 +915,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1011,7 +1011,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -1019,7 +1019,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -1035,7 +1035,7 @@ Сектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1047,7 +1047,7 @@ Країна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -1067,11 +1067,11 @@ Сектори apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1087,11 +1087,11 @@ Країни apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1103,7 +1103,7 @@ Зіставлення символів apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -1119,7 +1119,7 @@ Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -1127,7 +1127,7 @@ Тест apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -1135,11 +1135,11 @@ URL apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1150,12 +1150,20 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Note Примітка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1203,7 +1211,7 @@ Назва, символ або ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1311,7 +1319,7 @@ Збір даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1407,7 +1415,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -1615,7 +1623,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -1666,6 +1674,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... Порівняти з... @@ -1711,7 +1731,7 @@ Порівняльний показник apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2071,7 +2091,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -2275,7 +2295,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2295,7 +2315,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -2323,7 +2343,7 @@ Будь ласка, встановіть суму вашого резервного фонду. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -2555,7 +2575,7 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -2567,7 +2587,7 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -2579,7 +2599,7 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -2591,7 +2611,7 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2695,7 +2715,7 @@ Не вдалося згенерувати ключ API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -2703,7 +2723,7 @@ ОК apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2719,7 +2739,7 @@ Встановіть цей ключ API у вашому self-hosted середовищі: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -2727,7 +2747,7 @@ Ключ API Ghostfolio Premium Data Provider apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -2735,7 +2755,7 @@ Ви дійсно хочете згенерувати новий ключ API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -2743,7 +2763,7 @@ Не вдалося обміняти код купона apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2751,7 +2771,7 @@ Код купона був обміняний apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2759,7 +2779,7 @@ Перезавантажити apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2767,7 +2787,7 @@ Будь ласка, введіть ваш код купона. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2811,7 +2831,7 @@ Автоматичний apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2839,7 +2859,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -2895,7 +2915,7 @@ Локалізація apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3335,7 +3355,7 @@ Огляд apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -3482,6 +3502,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance Відкрийте для себе останні оновлення Ghostfolio та виявлення особистих фінансів @@ -3744,7 +3776,7 @@ Ринки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -4256,7 +4288,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -5175,6 +5207,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. Це безкоштовно. @@ -6119,7 +6163,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -6139,7 +6183,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -6159,7 +6203,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6179,7 +6223,7 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6443,11 +6487,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6475,11 +6519,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6507,11 +6551,11 @@ Скасувати apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6571,7 +6615,7 @@ Закрити apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6755,7 +6799,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7339,7 +7383,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7347,7 +7391,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7355,7 +7399,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7363,7 +7407,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7371,7 +7415,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7379,7 +7423,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7387,7 +7431,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7395,7 +7439,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7543,7 +7587,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7555,7 +7599,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7628,7 +7672,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7636,7 +7680,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7644,7 +7688,7 @@ Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7987,7 +8031,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 9b0db6cff..6888369ab 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -282,7 +282,7 @@ Do you really want to revoke this granted access? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -341,7 +341,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -407,11 +407,11 @@ Currency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -520,7 +520,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -573,7 +573,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -588,7 +588,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -761,7 +761,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -869,7 +869,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -880,7 +880,7 @@ Country apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -899,11 +899,11 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -918,11 +918,11 @@ Countries apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -933,7 +933,7 @@ Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -947,14 +947,14 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -990,7 +990,7 @@ Name, symbol or ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1139,11 +1139,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1154,6 +1154,13 @@ 25 + + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? @@ -1179,7 +1186,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -1243,7 +1250,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -1300,6 +1307,17 @@ 254 + + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... @@ -1341,7 +1359,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1526,7 +1544,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1742,7 +1760,7 @@ Please set the amount of your emergency fund. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1957,7 +1975,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -1968,7 +1986,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -1979,7 +1997,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -1990,7 +2008,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2022,28 +2040,28 @@ Please enter your coupon code. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 Could not redeem coupon code apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 Coupon code has been redeemed apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 Reload apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2083,7 +2101,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2129,7 +2147,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2276,7 +2294,7 @@ Okay apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2523,7 +2541,7 @@ Overview apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2661,6 +2679,17 @@ 225 + + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance @@ -2877,7 +2906,7 @@ Markets apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3319,7 +3348,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -4037,6 +4066,17 @@ 288 + + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. @@ -4703,11 +4743,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4734,11 +4774,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4889,7 +4929,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5230,14 +5270,14 @@ The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5387,7 +5427,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5398,7 +5438,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5434,7 +5474,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5453,7 +5493,7 @@ years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5494,7 +5534,7 @@ Data Gathering apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -5670,7 +5710,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6027,18 +6067,18 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 Cancel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6117,7 +6157,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6551,28 +6591,28 @@ Could not generate an API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 Do you really want to generate a new API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 Ghostfolio Premium Data Provider API Key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 Set this API key in your self-hosted environment: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -6593,7 +6633,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6613,7 +6653,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -6679,63 +6719,63 @@ Link has been copied to the clipboard apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -6867,7 +6907,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -6881,7 +6921,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -6943,21 +6983,21 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7242,7 +7282,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index afa49fefd..02f90631d 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -304,7 +304,7 @@ 您真的要撤销此访问权限吗? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -368,7 +368,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -436,11 +436,11 @@ 货币 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -552,7 +552,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -624,7 +624,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -816,7 +816,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -912,7 +912,7 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -924,7 +924,7 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -944,11 +944,11 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -964,11 +964,11 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -980,7 +980,7 @@ 代码映射 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -996,7 +996,7 @@ 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -1004,7 +1004,7 @@ 笔记 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1044,7 +1044,7 @@ 名称、代码或 ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1212,11 +1212,11 @@ 网址 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1227,6 +1227,14 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 579 + + Do you really want to delete this platform? 您真的要删除这个平台吗? @@ -1256,7 +1264,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 @@ -1328,7 +1336,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 216 @@ -1391,6 +1399,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 555 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 558 + + Compare with... 与之比较... @@ -1436,7 +1456,7 @@ 基准 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1640,7 +1660,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 @@ -1876,7 +1896,7 @@ 请输入您的应急基金金额。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -2108,7 +2128,7 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 200 libs/ui/src/lib/assistant/assistant.component.ts @@ -2120,7 +2140,7 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -2132,7 +2152,7 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -2144,7 +2164,7 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2180,7 +2200,7 @@ 请输入您的优惠券代码。 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2188,7 +2208,7 @@ 无法兑换优惠券代码 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2196,7 +2216,7 @@ 优惠券代码已被兑换 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2204,7 +2224,7 @@ 重新加载 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2248,7 +2268,7 @@ 自动 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2300,7 +2320,7 @@ 语言环境 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2464,7 +2484,7 @@ 好的 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2732,7 +2752,7 @@ 概述 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2871,6 +2891,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 510 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 513 + + Discover the latest Ghostfolio updates and insights on personal finance 了解最新的 Ghostfolio 更新和个人理财见解 @@ -3108,7 +3140,7 @@ 市场 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3604,7 +3636,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -4399,6 +4431,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 589 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 592 + + It’s free. 免费。 @@ -5137,11 +5181,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5169,11 +5213,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5341,7 +5385,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5721,7 +5765,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 707 @@ -5729,7 +5773,7 @@ 测试 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5897,7 +5941,7 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 libs/ui/src/lib/assistant/assistant.component.ts @@ -5909,7 +5953,7 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 192 libs/ui/src/lib/assistant/assistant.component.ts @@ -5949,7 +5993,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 204 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5969,7 +6013,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6014,7 +6058,7 @@ 数据收集 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6214,7 +6258,7 @@ 包含在 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6614,7 +6658,7 @@ 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 698 @@ -6662,11 +6706,11 @@ 取消 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6718,7 +6762,7 @@ 关闭 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7176,7 +7220,7 @@ 无法生成 API 密钥 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7184,7 +7228,7 @@ 在您的自托管环境中设置此 API 密钥: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7192,7 +7236,7 @@ Ghostfolio Premium 数据提供者 API 密钥 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7200,7 +7244,7 @@ 您确定要生成新的 API 密钥吗? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7240,7 +7284,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7260,7 +7304,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7332,7 +7376,7 @@ 链接已复制到剪贴板 apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7340,7 +7384,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7348,7 +7392,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7356,7 +7400,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7364,7 +7408,7 @@ 模式 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7372,7 +7416,7 @@ 选择器 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7380,7 +7424,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7388,7 +7432,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 226 @@ -7396,7 +7440,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 230 @@ -7544,7 +7588,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 237 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7556,7 +7600,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 242 @@ -7629,7 +7673,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 634 @@ -7637,7 +7681,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 642 @@ -7645,7 +7689,7 @@ 应用 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7988,7 +8032,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 196 From 0b1668dc4b0fe7772699b3d53bfe8004520c1861 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 3 Jan 2026 11:22:45 +0100 Subject: [PATCH 110/160] Task/rename branch and title in extract locales GitHub action (#6142) * Rename branch and title --- .github/workflows/extract-locales.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extract-locales.yml b/.github/workflows/extract-locales.yml index c17eac5b6..b8b79b946 100644 --- a/.github/workflows/extract-locales.yml +++ b/.github/workflows/extract-locales.yml @@ -33,8 +33,8 @@ jobs: uses: peter-evans/create-pull-request@v7 with: author: 'github-actions[bot] ' - branch: 'feature/update-locales' + branch: 'task/update-locales' commit-message: 'Update locales' delete-branch: true - title: 'Feature/update locales' + title: 'Task/update locales' token: ${{ secrets.GITHUB_TOKEN }} From 3943ca9f8818a7329ebd6489d663d8944f14dd12 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 3 Jan 2026 18:03:58 +0700 Subject: [PATCH 111/160] Feature/extend holdings endpoint to include performance with currency effects for cash positions (#5650) * Extend holdings endpoint to include performance with currency effects for cash positions * Update changelog --- CHANGELOG.md | 4 + apps/api/src/app/order/order.service.ts | 139 ++++++++- .../calculator/portfolio-calculator.ts | 23 +- .../roai/portfolio-calculator-cash.spec.ts | 290 ++++++++++++++++++ .../calculator/roai/portfolio-calculator.ts | 13 +- .../interfaces/portfolio-order.interface.ts | 2 +- .../transaction-point-symbol.interface.ts | 3 +- .../src/app/portfolio/portfolio.service.ts | 54 ++-- .../exchange-rate-data.service.mock.ts | 6 +- .../exchange-rate-data.service.ts | 4 +- .../exchange-rate-data.interface.ts | 5 + 11 files changed, 510 insertions(+), 33 deletions(-) create mode 100644 apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts create mode 100644 apps/api/src/services/exchange-rate-data/interfaces/exchange-rate-data.interface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index d5b26a07a..fa9cefbc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Extended the portfolio holdings to include performance with currency effects for cash positions + ### Changed - Integrated the endpoint to get all platforms (`GET api/v1/platforms`) into the create or update account dialog diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index 001d43b7a..57fe5d3b6 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -1,7 +1,10 @@ +import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service'; import { AccountService } from '@ghostfolio/api/app/account/account.service'; +import { CashDetails } from '@ghostfolio/api/app/account/interfaces/cash-details.interface'; import { AssetProfileChangedEvent } from '@ghostfolio/api/events/asset-profile-changed.event'; import { PortfolioChangedEvent } from '@ghostfolio/api/events/portfolio-changed.event'; import { LogPerformance } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.interceptor'; +import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; @@ -16,6 +19,7 @@ import { import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { ActivitiesResponse, + Activity, AssetProfileIdentifier, EnhancedSymbolProfile, Filter @@ -42,8 +46,10 @@ import { randomUUID } from 'node:crypto'; @Injectable() export class OrderService { public constructor( + private readonly accountBalanceService: AccountBalanceService, private readonly accountService: AccountService, private readonly dataGatheringService: DataGatheringService, + private readonly dataProviderService: DataProviderService, private readonly eventEmitter: EventEmitter2, private readonly exchangeRateDataService: ExchangeRateDataService, private readonly prismaService: PrismaService, @@ -317,6 +323,111 @@ export class OrderService { return count; } + /** + * Generates synthetic orders for cash holdings based on account balance history. + * Treat currencies as assets with a fixed unit price of 1.0 (in their own currency) to allow + * performance tracking based on exchange rate fluctuations. + * + * @param cashDetails - The cash balance details. + * @param userCurrency - The base currency of the user. + * @param userId - The ID of the user. + * @returns A response containing the list of synthetic cash activities. + */ + public async getCashOrders({ + cashDetails, + userCurrency, + userId + }: { + cashDetails: CashDetails; + userCurrency: string; + userId: string; + }): Promise { + const activities: Activity[] = []; + + for (const account of cashDetails.accounts) { + const { balances } = await this.accountBalanceService.getAccountBalances({ + userCurrency, + userId, + filters: [{ id: account.id, type: 'ACCOUNT' }] + }); + + let currentBalance = 0; + let currentBalanceInBaseCurrency = 0; + + for (const balanceItem of balances) { + const syntheticActivityTemplate: Activity = { + userId, + accountId: account.id, + accountUserId: account.userId, + comment: account.name, + createdAt: new Date(balanceItem.date), + currency: account.currency, + date: new Date(balanceItem.date), + fee: 0, + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + id: balanceItem.id, + isDraft: false, + quantity: 1, + SymbolProfile: { + activitiesCount: 0, + assetClass: AssetClass.LIQUIDITY, + assetSubClass: AssetSubClass.CASH, + countries: [], + createdAt: new Date(balanceItem.date), + currency: account.currency, + dataSource: + this.dataProviderService.getDataSourceForExchangeRates(), + holdings: [], + id: account.currency, + isActive: true, + name: account.currency, + sectors: [], + symbol: account.currency, + updatedAt: new Date(balanceItem.date) + }, + symbolProfileId: account.currency, + type: ActivityType.BUY, + unitPrice: 1, + unitPriceInAssetProfileCurrency: 1, + updatedAt: new Date(balanceItem.date), + valueInBaseCurrency: 0, + value: 0 + }; + + if (currentBalance < balanceItem.value) { + // BUY + activities.push({ + ...syntheticActivityTemplate, + quantity: balanceItem.value - currentBalance, + type: ActivityType.BUY, + value: balanceItem.value - currentBalance, + valueInBaseCurrency: + balanceItem.valueInBaseCurrency - currentBalanceInBaseCurrency + }); + } else if (currentBalance > balanceItem.value) { + // SELL + activities.push({ + ...syntheticActivityTemplate, + quantity: currentBalance - balanceItem.value, + type: ActivityType.SELL, + value: currentBalance - balanceItem.value, + valueInBaseCurrency: + currentBalanceInBaseCurrency - balanceItem.valueInBaseCurrency + }); + } + + currentBalance = balanceItem.value; + currentBalanceInBaseCurrency = balanceItem.valueInBaseCurrency; + } + } + + return { + activities, + count: activities.length + }; + } + public async getLatestOrder({ dataSource, symbol }: AssetProfileIdentifier) { return this.prismaService.order.findFirst({ orderBy: { @@ -610,6 +721,15 @@ export class OrderService { return { activities, count }; } + /** + * Retrieves all orders required for the portfolio calculator, including both standard asset orders + * and synthetic orders representing cash activities. + * + * @param filters - Optional filters to apply to the orders. + * @param userCurrency - The base currency of the user. + * @param userId - The ID of the user. + * @returns An object containing the combined list of activities and the total count. + */ @LogPerformance public async getOrdersForPortfolioCalculator({ filters, @@ -620,12 +740,29 @@ export class OrderService { userCurrency: string; userId: string; }) { - return this.getOrders({ + const nonCashOrders = await this.getOrders({ filters, userCurrency, userId, withExcludedAccountsAndActivities: false // TODO }); + + const cashDetails = await this.accountService.getCashDetails({ + filters, + userId, + currency: userCurrency + }); + + const cashOrders = await this.getCashOrders({ + cashDetails, + userCurrency, + userId + }); + + return { + activities: [...nonCashOrders.activities, ...cashOrders.activities], + count: nonCashOrders.count + cashOrders.count + }; } public async getStatisticsByCurrency( diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index ee4219b58..d2b3c0625 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -203,13 +203,19 @@ export abstract class PortfolioCalculator { let totalInterestWithCurrencyEffect = new Big(0); let totalLiabilitiesWithCurrencyEffect = new Big(0); - for (const { currency, dataSource, symbol } of transactionPoints[ - firstIndex - 1 - ].items) { - dataGatheringItems.push({ - dataSource, - symbol - }); + for (const { + assetSubClass, + currency, + dataSource, + symbol + } of transactionPoints[firstIndex - 1].items) { + // Gather data for all assets except CASH + if (assetSubClass !== 'CASH') { + dataGatheringItems.push({ + dataSource, + symbol + }); + } currencies[symbol] = currency; } @@ -933,6 +939,7 @@ export abstract class PortfolioCalculator { } of this.activities) { let currentTransactionPointItem: TransactionPointSymbol; + const assetSubClass = SymbolProfile.assetSubClass; const currency = SymbolProfile.currency; const dataSource = SymbolProfile.dataSource; const factor = getFactor(type); @@ -977,6 +984,7 @@ export abstract class PortfolioCalculator { } currentTransactionPointItem = { + assetSubClass, currency, dataSource, investment, @@ -995,6 +1003,7 @@ export abstract class PortfolioCalculator { }; } else { currentTransactionPointItem = { + assetSubClass, currency, dataSource, fee, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts new file mode 100644 index 000000000..db6e08151 --- /dev/null +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -0,0 +1,290 @@ +import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service'; +import { AccountService } from '@ghostfolio/api/app/account/account.service'; +import { OrderService } from '@ghostfolio/api/app/order/order.service'; +import { userDummyData } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; +import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; +import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; +import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock'; +import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; +import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { ExchangeRateDataServiceMock } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service.mock'; +import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; +import { parseDate } from '@ghostfolio/common/helper'; +import { HistoricalDataItem } from '@ghostfolio/common/interfaces'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; + +import { DataSource } from '@prisma/client'; +import { randomUUID } from 'node:crypto'; + +jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { + return { + CurrentRateService: jest.fn().mockImplementation(() => { + return CurrentRateServiceMock; + }) + }; +}); + +jest.mock( + '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', + () => { + return { + ExchangeRateDataService: jest.fn().mockImplementation(() => { + return ExchangeRateDataServiceMock; + }) + }; + } +); + +jest.mock( + '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', + () => { + return { + PortfolioSnapshotService: jest.fn().mockImplementation(() => { + return PortfolioSnapshotServiceMock; + }) + }; + } +); + +jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { + return { + RedisCacheService: jest.fn().mockImplementation(() => { + return RedisCacheServiceMock; + }) + }; +}); + +describe('PortfolioCalculator', () => { + let accountBalanceService: AccountBalanceService; + let accountService: AccountService; + let configurationService: ConfigurationService; + let currentRateService: CurrentRateService; + let dataProviderService: DataProviderService; + let exchangeRateDataService: ExchangeRateDataService; + let orderService: OrderService; + let portfolioCalculatorFactory: PortfolioCalculatorFactory; + let portfolioSnapshotService: PortfolioSnapshotService; + let redisCacheService: RedisCacheService; + + beforeEach(() => { + configurationService = new ConfigurationService(); + + exchangeRateDataService = new ExchangeRateDataService( + null, + null, + null, + null + ); + + accountBalanceService = new AccountBalanceService( + null, + exchangeRateDataService, + null + ); + + accountService = new AccountService( + accountBalanceService, + null, + exchangeRateDataService, + null + ); + + redisCacheService = new RedisCacheService(null, configurationService); + + dataProviderService = new DataProviderService( + configurationService, + null, + null, + null, + null, + redisCacheService + ); + + currentRateService = new CurrentRateService( + dataProviderService, + null, + null, + null + ); + + orderService = new OrderService( + accountBalanceService, + accountService, + null, + dataProviderService, + null, + exchangeRateDataService, + null, + null + ); + + portfolioSnapshotService = new PortfolioSnapshotService(null); + + portfolioCalculatorFactory = new PortfolioCalculatorFactory( + configurationService, + currentRateService, + exchangeRateDataService, + portfolioSnapshotService, + redisCacheService + ); + }); + + describe('Cash Performance', () => { + it('should calculate performance for cash assets in CHF default currency', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2025-01-01').getTime()); + + const accountId = randomUUID(); + + jest + .spyOn(accountBalanceService, 'getAccountBalances') + .mockResolvedValue({ + balances: [ + { + accountId, + id: randomUUID(), + date: parseDate('2023-12-31'), + value: 1000, + valueInBaseCurrency: 850 + }, + { + accountId, + id: randomUUID(), + date: parseDate('2024-12-31'), + value: 2000, + valueInBaseCurrency: 1800 + } + ] + }); + + jest.spyOn(accountService, 'getCashDetails').mockResolvedValue({ + accounts: [ + { + balance: 2000, + comment: null, + createdAt: parseDate('2023-12-31'), + currency: 'USD', + id: accountId, + isExcluded: false, + name: 'USD', + platformId: null, + updatedAt: parseDate('2023-12-31'), + userId: userDummyData.id + } + ], + balanceInBaseCurrency: 1820 + }); + + jest + .spyOn(dataProviderService, 'getDataSourceForExchangeRates') + .mockReturnValue(DataSource.YAHOO); + + jest.spyOn(orderService, 'getOrders').mockResolvedValue({ + activities: [], + count: 0 + }); + + const { activities } = await orderService.getOrdersForPortfolioCalculator( + { + userCurrency: 'CHF', + userId: userDummyData.id + } + ); + + jest.spyOn(currentRateService, 'getValues').mockResolvedValue({ + dataProviderInfos: [], + errors: [], + values: [] + }); + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'CHF', + userId: userDummyData.id + }); + + const { historicalData } = await portfolioCalculator.computeSnapshot(); + + const historicalData20231231 = historicalData.find(({ date }) => { + return date === '2023-12-31'; + }); + const historicalData20240101 = historicalData.find(({ date }) => { + return date === '2024-01-01'; + }); + const historicalData20241231 = historicalData.find(({ date }) => { + return date === '2024-12-31'; + }); + + /** + * Investment value with currency effect: 1000 USD * 0.85 = 850 CHF + * Total investment: 1000 USD * 0.91 = 910 CHF + * Value (current): 1000 USD * 0.91 = 910 CHF + * Value with currency effect: 1000 USD * 0.85 = 850 CHF + */ + expect(historicalData20231231).toMatchObject({ + date: '2023-12-31', + investmentValueWithCurrencyEffect: 850, + netPerformance: 0, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0, + netPerformanceWithCurrencyEffect: 0, + netWorth: 850, + totalAccountBalance: 0, + totalInvestment: 910, + totalInvestmentValueWithCurrencyEffect: 850, + value: 910, + valueWithCurrencyEffect: 850 + }); + + /** + * Net performance with currency effect: (1000 * 0.86) - (1000 * 0.85) = 10 CHF + * Total investment: 1000 USD * 0.91 = 910 CHF + * Total investment value with currency effect: 1000 USD * 0.85 = 850 CHF + * Value (current): 1000 USD * 0.91 = 910 CHF + * Value with currency effect: 1000 USD * 0.86 = 860 CHF + */ + expect(historicalData20240101).toMatchObject({ + date: '2024-01-01', + investmentValueWithCurrencyEffect: 0, + netPerformance: 0, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0.011764705882352941, + netPerformanceWithCurrencyEffect: 10, + netWorth: 860, + totalAccountBalance: 0, + totalInvestment: 910, + totalInvestmentValueWithCurrencyEffect: 850, + value: 910, + valueWithCurrencyEffect: 860 + }); + + /** + * Investment value with currency effect: 1000 USD * 0.90 = 900 CHF + * Net performance: (1000 USD * 1.0) - (1000 USD * 1.0) = 0 CHF + * Net performance with currency effect: (1000 USD * 0.9) - (1000 USD * 0.85) = 50 CHF + * Total investment: 2000 USD * 0.91 = 1820 CHF + * Total investment value with currency effect: (1000 USD * 0.85) + (1000 USD * 0.90) = 1750 CHF + * Value (current): 2000 USD * 0.91 = 1820 CHF + * Value with currency effect: 2000 USD * 0.9 = 1800 CHF + */ + expect(historicalData20241231).toMatchObject({ + date: '2024-12-31', + investmentValueWithCurrencyEffect: 900, + netPerformance: 0, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0.058823529411764705, + netPerformanceWithCurrencyEffect: 50, + netWorth: 1800, + totalAccountBalance: 0, + totalInvestment: 1820, + totalInvestmentValueWithCurrencyEffect: 1750, + value: 1820, + valueWithCurrencyEffect: 1800 + }); + }); + }); +}); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index d4fad7d93..070d7543b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -188,6 +188,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { }) ); + const isCash = orders[0]?.SymbolProfile?.assetSubClass === 'CASH'; + if (orders.length <= 0) { return { currentValues: {}, @@ -244,6 +246,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { // For BUY / SELL activities with a MANUAL data source where no historical market price is available, // the calculation should fall back to using the activity’s unit price. unitPriceAtEndDate = latestActivity.unitPrice; + } else if (isCash) { + unitPriceAtEndDate = new Big(1); } if ( @@ -295,7 +299,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { quantity: new Big(0), SymbolProfile: { dataSource, - symbol + symbol, + assetSubClass: isCash ? 'CASH' : undefined }, type: 'BUY', unitPrice: unitPriceAtStartDate @@ -308,7 +313,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { itemType: 'end', SymbolProfile: { dataSource, - symbol + symbol, + assetSubClass: isCash ? 'CASH' : undefined }, quantity: new Big(0), type: 'BUY', @@ -348,7 +354,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { quantity: new Big(0), SymbolProfile: { dataSource, - symbol + symbol, + assetSubClass: isCash ? 'CASH' : undefined }, type: 'BUY', unitPrice: marketSymbolMap[dateString]?.[symbol] ?? lastUnitPrice, diff --git a/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts b/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts index 9362184c7..fcc8322fc 100644 --- a/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts @@ -6,7 +6,7 @@ export interface PortfolioOrder extends Pick { quantity: Big; SymbolProfile: Pick< Activity['SymbolProfile'], - 'currency' | 'dataSource' | 'name' | 'symbol' | 'userId' + 'assetSubClass' | 'currency' | 'dataSource' | 'name' | 'symbol' | 'userId' >; unitPrice: Big; } diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index f4ceadf3b..14e2e1f37 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -1,7 +1,8 @@ -import { DataSource, Tag } from '@prisma/client'; +import { AssetSubClass, DataSource, Tag } from '@prisma/client'; import { Big } from 'big.js'; export interface TransactionPointSymbol { + assetSubClass: AssetSubClass; averagePrice: Big; currency: string; dataSource: DataSource; diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index faabee79b..5613af9e7 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -522,10 +522,6 @@ export class PortfolioService { return type === 'ACCOUNT'; }) ?? false; - const isFilteredByCash = filters?.some(({ id, type }) => { - return id === AssetClass.LIQUIDITY && type === 'ASSET_CLASS'; - }); - const isFilteredByClosedHoldings = filters?.some(({ id, type }) => { return id === 'CLOSED' && type === 'HOLDING_TYPE'; @@ -557,6 +553,9 @@ export class PortfolioService { assetProfileIdentifiers ); + const cashSymbolProfiles = this.getCashSymbolProfiles(cashDetails); + symbolProfiles.push(...cashSymbolProfiles); + const symbolProfileMap: { [symbol: string]: EnhancedSymbolProfile } = {}; for (const symbolProfile of symbolProfiles) { symbolProfileMap[symbolProfile.symbol] = symbolProfile; @@ -661,18 +660,6 @@ export class PortfolioService { }; } - if (filters?.length === 0 || isFilteredByAccount || isFilteredByCash) { - const cashPositions = this.getCashPositions({ - cashDetails, - userCurrency, - value: filteredValueInBaseCurrency - }); - - for (const symbol of Object.keys(cashPositions)) { - holdings[symbol] = cashPositions[symbol]; - } - } - const { accounts, platforms } = await this.getValueOfAccountsAndPlatforms({ activities, filters, @@ -1548,6 +1535,37 @@ export class PortfolioService { return cashPositions; } + private getCashSymbolProfiles(cashDetails: CashDetails) { + const cashSymbols = [ + ...new Set(cashDetails.accounts.map(({ currency }) => currency)) + ]; + + return cashSymbols.map((currency) => { + const account = cashDetails.accounts.find( + ({ currency: accountCurrency }) => { + return accountCurrency === currency; + } + ); + + return { + currency, + activitiesCount: 0, + assetClass: AssetClass.LIQUIDITY, + assetSubClass: AssetSubClass.CASH, + countries: [], + createdAt: account.createdAt, + dataSource: DataSource.MANUAL, + holdings: [], + id: currency, + isActive: true, + name: currency, + sectors: [], + symbol: currency, + updatedAt: account.updatedAt + }; + }); + } + private getDividendsByGroup({ dividends, groupBy @@ -2158,7 +2176,7 @@ export class PortfolioService { accounts[account?.id || UNKNOWN_KEY] = { balance: 0, currency: account?.currency, - name: account.name, + name: account?.name, valueInBaseCurrency: currentValueOfSymbolInBaseCurrency }; } @@ -2172,7 +2190,7 @@ export class PortfolioService { platforms[account?.platformId || UNKNOWN_KEY] = { balance: 0, currency: account?.currency, - name: account.platform?.name, + name: account?.platform?.name, valueInBaseCurrency: currentValueOfSymbolInBaseCurrency }; } diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts index 076375523..857c1b5a5 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts @@ -14,7 +14,11 @@ export const ExchangeRateDataServiceMock = { '2017-12-31': 0.9787, '2018-01-01': 0.97373, '2023-01-03': 0.9238, - '2023-07-10': 0.8854 + '2023-07-10': 0.8854, + '2023-12-31': 0.85, + '2024-01-01': 0.86, + '2024-12-31': 0.9, + '2025-01-01': 0.91 } }); } else if (targetCurrency === 'EUR') { diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts index 8c1ba5b41..024bdf4e1 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts @@ -26,6 +26,8 @@ import { import { isNumber } from 'lodash'; import ms from 'ms'; +import { ExchangeRatesByCurrency } from './interfaces/exchange-rate-data.interface'; + @Injectable() export class ExchangeRateDataService { private currencies: string[] = []; @@ -59,7 +61,7 @@ export class ExchangeRateDataService { endDate?: Date; startDate: Date; targetCurrency: string; - }) { + }): Promise { if (!startDate) { return {}; } diff --git a/apps/api/src/services/exchange-rate-data/interfaces/exchange-rate-data.interface.ts b/apps/api/src/services/exchange-rate-data/interfaces/exchange-rate-data.interface.ts new file mode 100644 index 000000000..8e0d2c0d4 --- /dev/null +++ b/apps/api/src/services/exchange-rate-data/interfaces/exchange-rate-data.interface.ts @@ -0,0 +1,5 @@ +export interface ExchangeRatesByCurrency { + [currency: string]: { + [dateString: string]: number; + }; +} From 5cb82d59f21c86e69612ab9cc68941ba0b10908c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 3 Jan 2026 14:26:47 +0100 Subject: [PATCH 112/160] Bugfix/header alignment in accounts table on mobile (#6143) * Fix header alignment * Update changelog --- CHANGELOG.md | 4 ++++ libs/ui/src/lib/accounts-table/accounts-table.component.html | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa9cefbc6..75b331d0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extracted the scraper configuration to a dedicated tab in the asset profile details dialog of the admin control panel - Improved the language localization for German (`de`) +### Fixed + +- Improved the table headers’ alignment of the accounts table on mobile + ## 2.227.0 - 2026-01-02 ### Changed diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index d127b4bf3..be17c3684 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -199,7 +199,7 @@ From ec783568f536776961d8b2336ca69b539b342026 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 3 Jan 2026 17:32:28 +0100 Subject: [PATCH 113/160] Task/upgrade @date-fns/utc to version 2.1.1 (#6141) * Upgrade @date-fns/utc to version 2.1.1 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75b331d0f..48155d64a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Integrated the endpoint to get all platforms (`GET api/v1/platforms`) into the create or update account dialog - Extracted the scraper configuration to a dedicated tab in the asset profile details dialog of the admin control panel - Improved the language localization for German (`de`) +- Upgraded `@date-fns/utc` from version `2.1.0` to `2.1.1` ### Fixed diff --git a/package-lock.json b/package-lock.json index 05e735609..5b404e5f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@angular/router": "21.0.6", "@angular/service-worker": "21.0.6", "@codewithdan/observable-store": "2.2.15", - "@date-fns/utc": "2.1.0", + "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.5", "@ionic/angular": "8.7.8", "@keyv/redis": "4.4.0", @@ -3815,9 +3815,9 @@ } }, "node_modules/@date-fns/utc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@date-fns/utc/-/utc-2.1.0.tgz", - "integrity": "sha512-176grgAgU2U303rD2/vcOmNg0kGPbhzckuH1TEP2al7n0AQipZIy9P15usd2TKQCG1g+E1jX/ZVQSzs4sUDwgA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@date-fns/utc/-/utc-2.1.1.tgz", + "integrity": "sha512-SlJDfG6RPeEX8wEVv6ZB3kak4MmbtyiI2qX/5zuKdordbrhB/iaJ58GVMZgJ6P1sJaM1gMgENFYYeg1JWrCFrA==", "license": "MIT" }, "node_modules/@deno/shim-deno": { diff --git a/package.json b/package.json index 1e82ec439..89c51ed99 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@angular/router": "21.0.6", "@angular/service-worker": "21.0.6", "@codewithdan/observable-store": "2.2.15", - "@date-fns/utc": "2.1.0", + "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.5", "@ionic/angular": "8.7.8", "@keyv/redis": "4.4.0", From 2cd23da4e81ce41ad8b4cb659b19654a5c528f1e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 3 Jan 2026 17:37:23 +0100 Subject: [PATCH 114/160] Release 2.228.0 (#6146) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48155d64a..67a756af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.228.0 - 2026-01-03 ### Added diff --git a/package-lock.json b/package-lock.json index 5b404e5f3..95b71adf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.227.0", + "version": "2.228.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.227.0", + "version": "2.228.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 89c51ed99..67eb101e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.227.0", + "version": "2.228.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 3698c76972ba0104bec842901855a99ab780f4ee Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 3 Jan 2026 20:44:14 +0100 Subject: [PATCH 115/160] Task/deprecate activities in portfolio holding response (#6147) * Deprecate activities * Update changelog --- CHANGELOG.md | 6 ++++++ .../responses/portfolio-holding-response.interface.ts | 2 ++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67a756af8..124d03113 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Deprecated `activities` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` + ## 2.228.0 - 2026-01-03 ### Added diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 31f027ee9..4ec42933a 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -9,7 +9,9 @@ import { import { Tag } from '@prisma/client'; export interface PortfolioHoldingResponse { + /** @deprecated */ activities: Activity[]; + activitiesCount: number; averagePrice: number; dataProviderInfo: DataProviderInfo; From 601008e0e682a22ecb33737e1acb857972595fbc Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 4 Jan 2026 14:51:53 +0700 Subject: [PATCH 116/160] Task/move data service to UI library (#6154) * feat(lib): move data service * feat(client): update imports * feat(lib): update imports * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app.component.ts | 2 +- .../account-detail-dialog/account-detail-dialog.component.ts | 2 +- .../admin-market-data/admin-market-data.component.ts | 2 +- .../asset-profile-dialog/asset-profile-dialog.component.ts | 2 +- .../create-asset-profile-dialog.component.ts | 2 +- .../app/components/admin-overview/admin-overview.component.ts | 2 +- .../app/components/admin-platform/admin-platform.component.ts | 2 +- .../app/components/admin-settings/admin-settings.component.ts | 2 +- .../client/src/app/components/admin-tag/admin-tag.component.ts | 2 +- .../src/app/components/admin-users/admin-users.component.ts | 2 +- .../data-provider-status/data-provider-status.component.ts | 2 +- apps/client/src/app/components/header/header.component.ts | 2 +- .../holding-detail-dialog/holding-detail-dialog.component.ts | 2 +- .../app/components/home-holdings/home-holdings.component.ts | 2 +- .../src/app/components/home-market/home-market.component.ts | 2 +- .../app/components/home-overview/home-overview.component.ts | 2 +- .../src/app/components/home-summary/home-summary.component.ts | 2 +- .../app/components/home-watchlist/home-watchlist.component.ts | 2 +- apps/client/src/app/components/markets/markets.component.ts | 2 +- .../create-or-update-access-dialog.component.ts | 2 +- .../user-account-access/user-account-access.component.ts | 2 +- .../user-account-membership.component.ts | 2 +- .../user-account-settings/user-account-settings.component.ts | 2 +- apps/client/src/app/core/auth.guard.ts | 2 +- apps/client/src/app/core/http-response.interceptor.ts | 2 +- apps/client/src/app/pages/about/about-page.component.ts | 2 +- .../app/pages/about/overview/about-overview-page.component.ts | 2 +- apps/client/src/app/pages/accounts/accounts-page.component.ts | 2 +- .../create-or-update-account-dialog.component.ts | 2 +- apps/client/src/app/pages/blog/blog-page.component.ts | 2 +- apps/client/src/app/pages/demo/demo-page.component.ts | 2 +- apps/client/src/app/pages/faq/faq-page.component.ts | 2 +- apps/client/src/app/pages/features/features-page.component.ts | 2 +- apps/client/src/app/pages/landing/landing-page.component.ts | 2 +- apps/client/src/app/pages/open/open-page.component.ts | 2 +- .../pages/portfolio/activities/activities-page.component.ts | 2 +- .../create-or-update-activity-dialog.component.ts | 2 +- .../import-activities-dialog.component.ts | 2 +- .../pages/portfolio/allocations/allocations-page.component.ts | 2 +- .../app/pages/portfolio/analysis/analysis-page.component.ts | 2 +- .../client/src/app/pages/portfolio/fire/fire-page.component.ts | 2 +- .../src/app/pages/portfolio/x-ray/x-ray-page.component.ts | 2 +- apps/client/src/app/pages/pricing/pricing-page.component.ts | 2 +- apps/client/src/app/pages/public/public-page.component.ts | 2 +- apps/client/src/app/pages/register/register-page.component.ts | 2 +- .../user-account-registration-dialog.component.ts | 2 +- .../pages/resources/glossary/resources-glossary.component.ts | 2 +- .../resources/personal-finance-tools/product-page.component.ts | 2 +- apps/client/src/app/services/admin.service.ts | 2 +- libs/ui/src/lib/assistant/assistant.component.ts | 2 +- .../benchmark-detail-dialog.component.ts | 3 +-- .../historical-market-data-editor-dialog.component.ts | 2 +- .../historical-market-data-editor.component.ts | 3 +-- .../src/app => libs/ui/src/lib}/services/data.service.ts | 0 libs/ui/src/lib/services/index.ts | 1 + .../lib/symbol-autocomplete/symbol-autocomplete.component.ts | 3 +-- 57 files changed, 56 insertions(+), 57 deletions(-) rename {apps/client/src/app => libs/ui/src/lib}/services/data.service.ts (100%) create mode 100644 libs/ui/src/lib/services/index.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 124d03113..d70d55644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Deprecated `activities` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +- Moved the data service to `@ghostfolio/ui/services` ## 2.228.0 - 2026-01-03 diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 12a7b0de9..a4af01124 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -4,6 +4,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; import { ColorScheme } from '@ghostfolio/common/types'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, @@ -36,7 +37,6 @@ import { GfFooterComponent } from './components/footer/footer.component'; import { GfHeaderComponent } from './components/header/header.component'; import { GfHoldingDetailDialogComponent } from './components/holding-detail-dialog/holding-detail-dialog.component'; import { HoldingDetailDialogParams } from './components/holding-detail-dialog/interfaces/interfaces'; -import { DataService } from './services/data.service'; import { ImpersonationStorageService } from './services/impersonation-storage.service'; import { TokenStorageService } from './services/token-storage.service'; import { UserService } from './services/user/user.service'; 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 d8f08ecc2..b40043cc8 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 @@ -1,5 +1,4 @@ import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component'; -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 { CreateAccountBalanceDto } from '@ghostfolio/common/dtos'; @@ -19,6 +18,7 @@ import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header'; import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index 4f1b60981..ebe35da3c 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -1,5 +1,4 @@ import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_PAGE_SIZE, @@ -18,6 +17,7 @@ import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; import { translate } from '@ghostfolio/ui/i18n'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { SelectionModel } from '@angular/cdk/collections'; 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 07e060764..67dadc7b5 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 @@ -1,6 +1,5 @@ import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service'; import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { ASSET_CLASS_MAPPING, @@ -25,6 +24,7 @@ import { translate } from '@ghostfolio/ui/i18n'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; +import { DataService } from '@ghostfolio/ui/services'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts index 32e1e3309..1087c11a1 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts @@ -1,10 +1,10 @@ import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { DEFAULT_CURRENCY, ghostfolioPrefix, PROPERTY_CURRENCIES } from '@ghostfolio/common/config'; +import { DataService } from '@ghostfolio/ui/services'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index e4be7b062..101e60ec0 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -1,6 +1,5 @@ import { AdminService } from '@ghostfolio/client/services/admin.service'; import { CacheService } from '@ghostfolio/client/services/cache.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { PROPERTY_COUPONS, @@ -20,6 +19,7 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index 832a70503..2843f059a 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -1,10 +1,10 @@ import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts index cabf4e589..a4da22402 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts @@ -2,7 +2,6 @@ import { GfAdminPlatformComponent } from '@ghostfolio/client/components/admin-pl import { GfAdminTagComponent } from '@ghostfolio/client/components/admin-tag/admin-tag.component'; import { GfDataProviderStatusComponent } from '@ghostfolio/client/components/data-provider-status/data-provider-status.component'; import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { PROPERTY_API_KEY_GHOSTFOLIO } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; @@ -16,6 +15,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts index 305eb4628..ca7950291 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 1722b498f..affd4d61c 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -1,7 +1,6 @@ import { UserDetailDialogParams } from '@ghostfolio/client/components/user-detail-dialog/interfaces/interfaces'; import { GfUserDetailDialogComponent } from '@ghostfolio/client/components/user-detail-dialog/user-detail-dialog.component'; import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -21,6 +20,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts b/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts index 0f638961c..e44e81be9 100644 --- a/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts +++ b/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts @@ -1,4 +1,4 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index b7bf4cb98..9b003a590 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -1,7 +1,6 @@ import { LoginWithAccessTokenDialogParams } from '@ghostfolio/client/components/login-with-access-token-dialog/interfaces/interfaces'; import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component'; import { LayoutService } from '@ghostfolio/client/core/layout.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { KEY_STAY_SIGNED_IN, @@ -18,6 +17,7 @@ import { GfAssistantComponent } from '@ghostfolio/ui/assistant/assistant.compone import { GfLogoComponent } from '@ghostfolio/ui/logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { 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 6a7129fec..95c58d35a 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,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { NUMERICAL_PRECISION_THRESHOLD_3_FIGURES, @@ -26,6 +25,7 @@ import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical import { translate } from '@ghostfolio/ui/i18n'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; +import { DataService } from '@ghostfolio/ui/services'; import { GfTagsSelectorComponent } from '@ghostfolio/ui/tags-selector'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/components/home-holdings/home-holdings.component.ts b/apps/client/src/app/components/home-holdings/home-holdings.component.ts index 33d9139ea..dc444977d 100644 --- a/apps/client/src/app/components/home-holdings/home-holdings.component.ts +++ b/apps/client/src/app/components/home-holdings/home-holdings.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -11,6 +10,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { HoldingType, HoldingsViewMode } from '@ghostfolio/common/types'; import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table'; +import { DataService } from '@ghostfolio/ui/services'; import { GfToggleComponent } from '@ghostfolio/ui/toggle'; import { GfTreemapChartComponent } from '@ghostfolio/ui/treemap-chart'; diff --git a/apps/client/src/app/components/home-market/home-market.component.ts b/apps/client/src/app/components/home-market/home-market.component.ts index 32d89f8e0..841c0818a 100644 --- a/apps/client/src/app/components/home-market/home-market.component.ts +++ b/apps/client/src/app/components/home-market/home-market.component.ts @@ -1,5 +1,4 @@ import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { ghostfolioFearAndGreedIndexSymbol } from '@ghostfolio/common/config'; import { resetHours } from '@ghostfolio/common/helper'; @@ -12,6 +11,7 @@ import { import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectorRef, diff --git a/apps/client/src/app/components/home-overview/home-overview.component.ts b/apps/client/src/app/components/home-overview/home-overview.component.ts index 6c9694a19..0d5020904 100644 --- a/apps/client/src/app/components/home-overview/home-overview.component.ts +++ b/apps/client/src/app/components/home-overview/home-overview.component.ts @@ -1,6 +1,5 @@ import { GfPortfolioPerformanceComponent } from '@ghostfolio/client/components/portfolio-performance/portfolio-performance.component'; import { LayoutService } from '@ghostfolio/client/core/layout.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; @@ -13,6 +12,7 @@ import { import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/components/home-summary/home-summary.component.ts b/apps/client/src/app/components/home-summary/home-summary.component.ts index 845d1b448..454d05689 100644 --- a/apps/client/src/app/components/home-summary/home-summary.component.ts +++ b/apps/client/src/app/components/home-summary/home-summary.component.ts @@ -1,5 +1,4 @@ import { GfPortfolioSummaryComponent } from '@ghostfolio/client/components/portfolio-summary/portfolio-summary.component'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -8,6 +7,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectorRef, 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 ab43e54dd..4adb4e54f 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 @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -9,6 +8,7 @@ import { import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/markets/markets.component.ts b/apps/client/src/app/components/markets/markets.component.ts index a7f83216f..4b83e897f 100644 --- a/apps/client/src/app/components/markets/markets.component.ts +++ b/apps/client/src/app/components/markets/markets.component.ts @@ -1,5 +1,4 @@ import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { resetHours } from '@ghostfolio/common/helper'; import { @@ -12,6 +11,7 @@ import { import { FearAndGreedIndexMode } from '@ghostfolio/common/types'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; +import { DataService } from '@ghostfolio/ui/services'; import { GfToggleComponent } from '@ghostfolio/ui/toggle'; import { diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts index 05c047dc6..5c87b2f63 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts @@ -1,7 +1,7 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { CreateAccessDto, UpdateAccessDto } from '@ghostfolio/common/dtos'; import { validateObjectForForm } from '@ghostfolio/common/utils'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/user-account-access/user-account-access.component.ts b/apps/client/src/app/components/user-account-access/user-account-access.component.ts index 11960b8aa..ef78cccff 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.component.ts +++ b/apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -1,5 +1,4 @@ import { GfAccessTableComponent } from '@ghostfolio/client/components/access-table/access-table.component'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreateAccessDto } from '@ghostfolio/common/dtos'; @@ -8,6 +7,7 @@ import { Access, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts index 8eec9c188..92fd0d590 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getDateFormatString } from '@ghostfolio/common/helper'; @@ -8,6 +7,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfMembershipCardComponent } from '@ghostfolio/ui/membership-card'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts index e0028bb5c..c72c2a52d 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { KEY_STAY_SIGNED_IN, KEY_TOKEN, @@ -13,6 +12,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts index c26419031..123a6169a 100644 --- a/apps/client/src/app/core/auth.guard.ts +++ b/apps/client/src/app/core/auth.guard.ts @@ -1,7 +1,7 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { Injectable } from '@angular/core'; import { diff --git a/apps/client/src/app/core/http-response.interceptor.ts b/apps/client/src/app/core/http-response.interceptor.ts index c2eef4175..ab99b440f 100644 --- a/apps/client/src/app/core/http-response.interceptor.ts +++ b/apps/client/src/app/core/http-response.interceptor.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { InfoItem } from '@ghostfolio/common/interfaces'; import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { HTTP_INTERCEPTORS, diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts index 4fe6a57e3..5ddb6b2e0 100644 --- a/apps/client/src/app/pages/about/about-page.component.ts +++ b/apps/client/src/app/pages/about/about-page.component.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectorRef, diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.component.ts b/apps/client/src/app/pages/about/overview/about-overview-page.component.ts index d315f2cbd..bea19a1b9 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.component.ts +++ b/apps/client/src/app/pages/about/overview/about-overview-page.component.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 2b496e4fb..6c8146f77 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -1,6 +1,5 @@ import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component'; import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -12,6 +11,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts index ceb11a011..f4c68e70f 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos'; import { validateObjectForForm } from '@ghostfolio/common/utils'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule, NgClass } from '@angular/common'; import { diff --git a/apps/client/src/app/pages/blog/blog-page.component.ts b/apps/client/src/app/pages/blog/blog-page.component.ts index 9977e6df4..8a379a7e4 100644 --- a/apps/client/src/app/pages/blog/blog-page.component.ts +++ b/apps/client/src/app/pages/blog/blog-page.component.ts @@ -1,5 +1,5 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DataService } from '@ghostfolio/ui/services'; import { Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core'; import { MatCardModule } from '@angular/material/card'; diff --git a/apps/client/src/app/pages/demo/demo-page.component.ts b/apps/client/src/app/pages/demo/demo-page.component.ts index 9eba64788..5b94fd541 100644 --- a/apps/client/src/app/pages/demo/demo-page.component.ts +++ b/apps/client/src/app/pages/demo/demo-page.component.ts @@ -1,7 +1,7 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { InfoItem } from '@ghostfolio/common/interfaces'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { DataService } from '@ghostfolio/ui/services'; import { Component, OnDestroy } from '@angular/core'; import { Router } from '@angular/router'; diff --git a/apps/client/src/app/pages/faq/faq-page.component.ts b/apps/client/src/app/pages/faq/faq-page.component.ts index cba9e19f1..caf4217ca 100644 --- a/apps/client/src/app/pages/faq/faq-page.component.ts +++ b/apps/client/src/app/pages/faq/faq-page.component.ts @@ -1,7 +1,7 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { TabConfiguration } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { CUSTOM_ELEMENTS_SCHEMA, diff --git a/apps/client/src/app/pages/features/features-page.component.ts b/apps/client/src/app/pages/features/features-page.component.ts index dc2dfaf42..b9eb91fe2 100644 --- a/apps/client/src/app/pages/features/features-page.component.ts +++ b/apps/client/src/app/pages/features/features-page.component.ts @@ -1,9 +1,9 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; 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 55f07a798..25fb2d6e7 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -1,10 +1,10 @@ -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 { GfLogoCarouselComponent } from '@ghostfolio/ui/logo-carousel'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart'; diff --git a/apps/client/src/app/pages/open/open-page.component.ts b/apps/client/src/app/pages/open/open-page.component.ts index 773025769..6284c41f4 100644 --- a/apps/client/src/app/pages/open/open-page.component.ts +++ b/apps/client/src/app/pages/open/open-page.component.ts @@ -1,6 +1,6 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { Statistics, User } from '@ghostfolio/common/interfaces'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index 5b5273b65..cf7a41215 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { IcsService } from '@ghostfolio/client/services/ics/ics.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -12,6 +11,7 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; 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 b44e8ee6b..8695f04ed 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 @@ -10,6 +10,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { validateObjectForForm } from '@ghostfolio/common/utils'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { translate } from '@ghostfolio/ui/i18n'; +import { DataService } from '@ghostfolio/ui/services'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { GfTagsSelectorComponent } from '@ghostfolio/ui/tags-selector'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -48,7 +49,6 @@ import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; import { EMPTY, Subject } from 'rxjs'; import { catchError, delay, takeUntil } from 'rxjs/operators'; -import { DataService } from '../../../../services/data.service'; import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces'; import { ActivityType } from './types/activity-type.type'; 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 582ab8e25..1a84e9f31 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,5 +1,4 @@ import { GfFileDropDirective } from '@ghostfolio/client/directives/file-drop/file-drop.directive'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service'; import { CreateAccountWithBalancesDto, @@ -11,6 +10,7 @@ import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header'; +import { DataService } from '@ghostfolio/ui/services'; import { StepperOrientation, diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index b4de51701..70fa09eb1 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -1,6 +1,5 @@ import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component'; import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config'; @@ -17,6 +16,7 @@ import { Market, MarketAdvanced } from '@ghostfolio/common/types'; import { translate } from '@ghostfolio/ui/i18n'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { GfTopHoldingsComponent } from '@ghostfolio/ui/top-holdings'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart'; diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts index 63ed3569c..ec872c770 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -1,6 +1,5 @@ import { GfBenchmarkComparatorComponent } from '@ghostfolio/client/components/benchmark-comparator/benchmark-comparator.component'; import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -16,6 +15,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import type { AiPromptMode, GroupBy } from '@ghostfolio/common/types'; import { translate } from '@ghostfolio/ui/i18n'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { GfToggleComponent } from '@ghostfolio/ui/toggle'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index da1378d22..27db6c76e 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -9,6 +8,7 @@ import { import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfFireCalculatorComponent } from '@ghostfolio/ui/fire-calculator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule, NgStyle } from '@angular/common'; diff --git a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts index 0bf869238..70b748b10 100644 --- a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts +++ b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts @@ -1,5 +1,4 @@ import { GfRulesComponent } from '@ghostfolio/client/components/rules/rules.component'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UpdateUserSettingDto } from '@ghostfolio/common/dtos'; @@ -10,6 +9,7 @@ import { import { User } from '@ghostfolio/common/interfaces/user.interface'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { NgClass } from '@angular/common'; import { ChangeDetectorRef, Component } from '@angular/core'; 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 aaf0c597b..f818e6b11 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; @@ -6,6 +5,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { translate } from '@ghostfolio/ui/i18n'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts index 55e2a122a..fe4b295db 100644 --- a/apps/client/src/app/pages/public/public-page.component.ts +++ b/apps/client/src/app/pages/public/public-page.component.ts @@ -1,4 +1,3 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { prettifySymbol } from '@ghostfolio/common/helper'; import { @@ -11,6 +10,7 @@ import { Market } from '@ghostfolio/common/types'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table/activities-table.component'; import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table/holdings-table.component'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart/portfolio-proportion-chart.component'; +import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart'; 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 d37a91f8e..21b26944e 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; 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 { DataService } from '@ghostfolio/ui/services'; import { Component, diff --git a/apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts b/apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts index 36e1ce710..a7707ad3b 100644 --- a/apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts +++ b/apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts @@ -1,5 +1,5 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { ClipboardModule } from '@angular/cdk/clipboard'; import { TextFieldModule } from '@angular/cdk/text-field'; diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts index 96958dd70..112619239 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts @@ -1,7 +1,7 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { InfoItem } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { DataService } from '@ghostfolio/ui/services'; import { Component, OnInit } from '@angular/core'; import { RouterModule } from '@angular/router'; diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts index 511cf672d..c8eff35be 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1,8 +1,8 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; import { Product } from '@ghostfolio/common/interfaces'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { translate } from '@ghostfolio/ui/i18n'; +import { DataService } from '@ghostfolio/ui/services'; import { Component, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; diff --git a/apps/client/src/app/services/admin.service.ts b/apps/client/src/app/services/admin.service.ts index 10804aac9..a5f2ca24f 100644 --- a/apps/client/src/app/services/admin.service.ts +++ b/apps/client/src/app/services/admin.service.ts @@ -21,6 +21,7 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; +import { DataService } from '@ghostfolio/ui/services'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; @@ -29,7 +30,6 @@ import { DataSource, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; import { environment } from '../../environments/environment'; -import { DataService } from './data.service'; @Injectable({ providedIn: 'root' diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 7bbc3978c..e3d597990 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -1,11 +1,11 @@ /* eslint-disable @nx/enforce-module-boundaries */ import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { AccountWithPlatform, DateRange } from '@ghostfolio/common/types'; +import { DataService } from '@ghostfolio/ui/services'; import { FocusKeyManager } from '@angular/cdk/a11y'; import { 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 59c1e6e17..2f4c18288 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,3 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { DataService } from '@ghostfolio/client/services/data.service'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { AdminMarketDataDetails, @@ -7,6 +5,7 @@ import { } from '@ghostfolio/common/interfaces'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header'; +import { DataService } from '@ghostfolio/ui/services'; import { CUSTOM_ELEMENTS_SCHEMA, diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts index 21202981d..7383c4c9c 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts @@ -1,6 +1,6 @@ /* eslint-disable @nx/enforce-module-boundaries */ import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/client/services/data.service'; +import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts index f857e6e53..098f4e295 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts @@ -1,5 +1,3 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { DataService } from '@ghostfolio/client/services/data.service'; import { UpdateMarketDataDto } from '@ghostfolio/common/dtos'; import { DATE_FORMAT, @@ -7,6 +5,7 @@ import { getLocale } from '@ghostfolio/common/helper'; import { LineChartItem, User } from '@ghostfolio/common/interfaces'; +import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts similarity index 100% rename from apps/client/src/app/services/data.service.ts rename to libs/ui/src/lib/services/data.service.ts diff --git a/libs/ui/src/lib/services/index.ts b/libs/ui/src/lib/services/index.ts new file mode 100644 index 000000000..2ba773ede --- /dev/null +++ b/libs/ui/src/lib/services/index.ts @@ -0,0 +1 @@ +export * from './data.service'; diff --git a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts index 05a2c06c3..11d6f09dc 100644 --- a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts +++ b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts @@ -1,7 +1,6 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { DataService } from '@ghostfolio/client/services/data.service'; import { LookupItem } from '@ghostfolio/common/interfaces'; import { GfSymbolPipe } from '@ghostfolio/common/pipes'; +import { DataService } from '@ghostfolio/ui/services'; import { FocusMonitor } from '@angular/cdk/a11y'; import { From 5101c406b463c395e1bca72cfadfee37c5b764fe Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 4 Jan 2026 09:12:25 +0100 Subject: [PATCH 117/160] Task/refactor dividend import (#6150) * Refactor dividend import * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/import/import.controller.ts | 1 + apps/api/src/app/import/import.module.ts | 2 + apps/api/src/app/import/import.service.ts | 73 ++++++++++++-------- 4 files changed, 48 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d70d55644..cf81cb29e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Deprecated `activities` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Moved the data service to `@ghostfolio/ui/services` +- Refactored the dividend import ## 2.228.0 - 2026-01-03 diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index 2681444df..81481fd65 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -103,6 +103,7 @@ export class ImportController { const activities = await this.importService.getDividends({ dataSource, symbol, + userCurrency: this.request.user.settings.settings.baseCurrency, userId: this.request.user.id }); diff --git a/apps/api/src/app/import/import.module.ts b/apps/api/src/app/import/import.module.ts index 88990af2e..a4a13f941 100644 --- a/apps/api/src/app/import/import.module.ts +++ b/apps/api/src/app/import/import.module.ts @@ -6,6 +6,7 @@ import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module' import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; +import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; @@ -24,6 +25,7 @@ import { ImportService } from './import.service'; controllers: [ImportController], imports: [ AccountModule, + ApiModule, CacheModule, ConfigurationModule, DataGatheringModule, diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 2deef1c44..3f8bd2cde 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -2,6 +2,7 @@ import { AccountService } from '@ghostfolio/api/app/account/account.service'; import { OrderService } from '@ghostfolio/api/app/order/order.service'; import { PlatformService } from '@ghostfolio/api/app/platform/platform.service'; import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; +import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; @@ -25,7 +26,7 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { - AccountWithPlatform, + AccountWithValue, OrderWithAccount, UserWithSettings } from '@ghostfolio/common/types'; @@ -43,6 +44,7 @@ import { ImportDataDto } from './import-data.dto'; export class ImportService { public constructor( private readonly accountService: AccountService, + private readonly apiService: ApiService, private readonly configurationService: ConfigurationService, private readonly dataGatheringService: DataGatheringService, private readonly dataProviderService: DataProviderService, @@ -57,8 +59,12 @@ export class ImportService { public async getDividends({ dataSource, symbol, + userCurrency, userId - }: AssetProfileIdentifier & { userId: string }): Promise { + }: AssetProfileIdentifier & { + userCurrency: string; + userId: string; + }): Promise { try { const holding = await this.portfolioService.getHolding({ dataSource, @@ -71,36 +77,45 @@ export class ImportService { return []; } - const { activities, firstBuyDate, historicalData } = holding; + const filters = this.apiService.buildFiltersFromQueryParams({ + filterByDataSource: dataSource, + filterBySymbol: symbol + }); - const [[assetProfile], dividends] = await Promise.all([ - this.symbolProfileService.getSymbolProfiles([ - { - dataSource, - symbol - } - ]), - await this.dataProviderService.getDividends({ - dataSource, - symbol, - from: parseDate(firstBuyDate), - granularity: 'day', - to: new Date() - }) - ]); + const { firstBuyDate, historicalData } = holding; - const accounts = activities - .filter(({ account }) => { - return !!account; - }) - .map(({ account }) => { - return account; - }); + const [{ accounts }, { activities }, [assetProfile], dividends] = + await Promise.all([ + this.portfolioService.getAccountsWithAggregations({ + filters, + userId, + withExcludedAccounts: true + }), + this.orderService.getOrders({ + filters, + userCurrency, + userId, + startDate: parseDate(firstBuyDate) + }), + this.symbolProfileService.getSymbolProfiles([ + { + dataSource, + symbol + } + ]), + await this.dataProviderService.getDividends({ + dataSource, + symbol, + from: parseDate(firstBuyDate), + granularity: 'day', + to: new Date() + }) + ]); const account = this.isUniqueAccount(accounts) ? accounts[0] : undefined; return await Promise.all( - Object.entries(dividends).map(async ([dateString, { marketPrice }]) => { + Object.entries(dividends).map(([dateString, { marketPrice }]) => { const quantity = historicalData.find((historicalDataItem) => { return historicalDataItem.date === dateString; @@ -695,11 +710,11 @@ export class ImportService { ); } - private isUniqueAccount(accounts: AccountWithPlatform[]) { + private isUniqueAccount(accounts: AccountWithValue[]) { const uniqueAccountIds = new Set(); - for (const account of accounts) { - uniqueAccountIds.add(account.id); + for (const { id } of accounts) { + uniqueAccountIds.add(id); } return uniqueAccountIds.size === 1; From feb25c9266a066fb6c6a7ae142c49b1daee8389c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 4 Jan 2026 20:40:53 +0100 Subject: [PATCH 118/160] Bugfix/fix filtering by asset class in get holdings endpoint (#6151) * Fix filtering by asset class * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/app/order/order.service.ts | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf81cb29e..4e66bb4ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the data service to `@ghostfolio/ui/services` - Refactored the dividend import +### Fixed + +- Fixed the filtering by asset class in the endpoint `GET api/v1/portfolio/holdings` + ## 2.228.0 - 2026-01-03 ### Added diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index 57fe5d3b6..a939cb476 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -329,19 +329,39 @@ export class OrderService { * performance tracking based on exchange rate fluctuations. * * @param cashDetails - The cash balance details. + * @param filters - Optional filters to apply. * @param userCurrency - The base currency of the user. * @param userId - The ID of the user. * @returns A response containing the list of synthetic cash activities. */ public async getCashOrders({ cashDetails, + filters = [], userCurrency, userId }: { cashDetails: CashDetails; + filters?: Filter[]; userCurrency: string; userId: string; }): Promise { + const filtersByAssetClass = filters.filter(({ type }) => { + return type === 'ASSET_CLASS'; + }); + + if ( + filtersByAssetClass.length > 0 && + !filtersByAssetClass.find(({ id }) => { + return id === AssetClass.LIQUIDITY; + }) + ) { + // If asset class filters are present and none of them is liquidity, return an empty response + return { + activities: [], + count: 0 + }; + } + const activities: Activity[] = []; for (const account of cashDetails.accounts) { @@ -755,6 +775,7 @@ export class OrderService { const cashOrders = await this.getCashOrders({ cashDetails, + filters, userCurrency, userId }); From d4d6ce1d07a49c4b75366a93c42a0a3563f473bc Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Mon, 5 Jan 2026 23:28:18 +0700 Subject: [PATCH 119/160] Task/move admin service to UI library (#6159) * Move admin service to UI library * Update changelog --- CHANGELOG.md | 1 + .../app/components/admin-jobs/admin-jobs.component.ts | 2 +- .../admin-market-data/admin-market-data.component.ts | 3 +-- .../admin-market-data/admin-market-data.service.ts | 2 +- .../asset-profile-dialog.component.ts | 3 +-- .../create-asset-profile-dialog.component.ts | 3 +-- .../admin-overview/admin-overview.component.ts | 3 +-- .../admin-platform/admin-platform.component.ts | 3 +-- .../admin-settings/admin-settings.component.ts | 3 +-- .../components/admin-users/admin-users.component.ts | 3 +-- .../user-detail-dialog/user-detail-dialog.component.ts | 2 +- apps/client/src/environments/environment.prod.ts | 4 +++- apps/client/src/environments/environment.ts | 4 +++- apps/client/src/main.ts | 5 +++++ eslint.config.cjs | 4 +--- libs/ui/src/lib/assistant/assistant.component.ts | 4 +--- libs/ui/src/lib/environment/environment.interface.ts | 5 +++++ libs/ui/src/lib/environment/environment.token.ts | 7 +++++++ libs/ui/src/lib/environment/index.ts | 2 ++ .../historical-market-data-editor-dialog.component.ts | 4 +--- .../app => libs/ui/src/lib}/services/admin.service.ts | 10 +++++----- libs/ui/src/lib/services/index.ts | 1 + 22 files changed, 45 insertions(+), 33 deletions(-) create mode 100644 libs/ui/src/lib/environment/environment.interface.ts create mode 100644 libs/ui/src/lib/environment/environment.token.ts create mode 100644 libs/ui/src/lib/environment/index.ts rename {apps/client/src/app => libs/ui/src/lib}/services/admin.service.ts (94%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e66bb4ec..6fa5ef8b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Deprecated `activities` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +- Moved the admin service to `@ghostfolio/ui/services` - Moved the data service to `@ghostfolio/ui/services` - Refactored the dividend import diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts index 66bac76f5..de70a7b6e 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts @@ -1,4 +1,3 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DATA_GATHERING_QUEUE_PRIORITY_HIGH, @@ -9,6 +8,7 @@ import { import { getDateWithTimeFormatString } from '@ghostfolio/common/helper'; import { AdminJobs, User } from '@ghostfolio/common/interfaces'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { AdminService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; import { diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index ebe35da3c..bc3b0d374 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -1,4 +1,3 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_PAGE_SIZE, @@ -17,7 +16,7 @@ import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; import { translate } from '@ghostfolio/ui/i18n'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { SelectionModel } from '@angular/cdk/collections'; diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts index eaad32c0e..9528687a8 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts @@ -1,4 +1,3 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { @@ -11,6 +10,7 @@ import { AdminMarketDataItem } from '@ghostfolio/common/interfaces'; import { NotificationService } from '@ghostfolio/ui/notifications'; +import { AdminService } from '@ghostfolio/ui/services'; import { Injectable } from '@angular/core'; import { EMPTY, catchError, finalize, forkJoin } from 'rxjs'; 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 67dadc7b5..cbd8deba3 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 @@ -1,5 +1,4 @@ import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service'; -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { ASSET_CLASS_MAPPING, @@ -24,7 +23,7 @@ import { translate } from '@ghostfolio/ui/i18n'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { GfValueComponent } from '@ghostfolio/ui/value'; diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts index 1087c11a1..6c180b034 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts @@ -1,10 +1,9 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DEFAULT_CURRENCY, ghostfolioPrefix, PROPERTY_CURRENCIES } from '@ghostfolio/common/config'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index 101e60ec0..6284f05fd 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -1,4 +1,3 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { CacheService } from '@ghostfolio/client/services/cache.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -19,7 +18,7 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { NotificationService } from '@ghostfolio/ui/notifications'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index 2843f059a..02a2eed64 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -1,10 +1,9 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts index a4da22402..446221058 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts @@ -1,7 +1,6 @@ import { GfAdminPlatformComponent } from '@ghostfolio/client/components/admin-platform/admin-platform.component'; import { GfAdminTagComponent } from '@ghostfolio/client/components/admin-tag/admin-tag.component'; import { GfDataProviderStatusComponent } from '@ghostfolio/client/components/data-provider-status/data-provider-status.component'; -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { PROPERTY_API_KEY_GHOSTFOLIO } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; @@ -15,7 +14,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index affd4d61c..2ae3b1a57 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -1,6 +1,5 @@ import { UserDetailDialogParams } from '@ghostfolio/client/components/user-detail-dialog/interfaces/interfaces'; import { GfUserDetailDialogComponent } from '@ghostfolio/client/components/user-detail-dialog/user-detail-dialog.component'; -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -20,7 +19,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts index 248fd48f3..cdf977058 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts @@ -1,7 +1,7 @@ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { AdminUserResponse } from '@ghostfolio/common/interfaces'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header'; +import { AdminService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { diff --git a/apps/client/src/environments/environment.prod.ts b/apps/client/src/environments/environment.prod.ts index 6f1d6b92d..4ee0d508b 100644 --- a/apps/client/src/environments/environment.prod.ts +++ b/apps/client/src/environments/environment.prod.ts @@ -1,4 +1,6 @@ -export const environment = { +import type { GfEnvironment } from '@ghostfolio/ui/environment'; + +export const environment: GfEnvironment = { lastPublish: '{BUILD_TIMESTAMP}', production: true, stripePublicKey: '' diff --git a/apps/client/src/environments/environment.ts b/apps/client/src/environments/environment.ts index 0a4d51d98..ccedf6738 100644 --- a/apps/client/src/environments/environment.ts +++ b/apps/client/src/environments/environment.ts @@ -1,8 +1,10 @@ +import type { GfEnvironment } from '@ghostfolio/ui/environment'; + // This file can be replaced during build by using the `fileReplacements` array. // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. // The list of file replacements can be found in `angular.json`. -export const environment = { +export const environment: GfEnvironment = { lastPublish: null, production: false, stripePublicKey: '' diff --git a/apps/client/src/main.ts b/apps/client/src/main.ts index c15703645..f596de5f4 100644 --- a/apps/client/src/main.ts +++ b/apps/client/src/main.ts @@ -1,5 +1,6 @@ import { InfoResponse } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; +import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { GfNotificationModule } from '@ghostfolio/ui/notifications'; import { Platform } from '@angular/cdk/platform'; @@ -89,6 +90,10 @@ import { environment } from './environments/environment'; provide: DateAdapter, useClass: CustomDateAdapter }, + { + provide: GF_ENVIRONMENT, + useValue: environment + }, { provide: MAT_DATE_FORMATS, useValue: DateFormats diff --git a/eslint.config.cjs b/eslint.config.cjs index 5962e261d..76d627d18 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -28,9 +28,7 @@ module.exports = [ onlyDependOnLibsWithTags: ['*'] } ], - enforceBuildableLibDependency: true, - // Temporary fix, should be removed eventually - ignoredCircularDependencies: [['client', 'ui']] + enforceBuildableLibDependency: true } ], '@typescript-eslint/no-extra-semi': 'error', diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index e3d597990..2b0216613 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -1,11 +1,9 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { AdminService } from '@ghostfolio/client/services/admin.service'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { AccountWithPlatform, DateRange } from '@ghostfolio/common/types'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { FocusKeyManager } from '@angular/cdk/a11y'; import { diff --git a/libs/ui/src/lib/environment/environment.interface.ts b/libs/ui/src/lib/environment/environment.interface.ts new file mode 100644 index 000000000..9cb279515 --- /dev/null +++ b/libs/ui/src/lib/environment/environment.interface.ts @@ -0,0 +1,5 @@ +export interface GfEnvironment { + lastPublish: string | null; + production: boolean; + stripePublicKey: string; +} diff --git a/libs/ui/src/lib/environment/environment.token.ts b/libs/ui/src/lib/environment/environment.token.ts new file mode 100644 index 000000000..277e9c5e2 --- /dev/null +++ b/libs/ui/src/lib/environment/environment.token.ts @@ -0,0 +1,7 @@ +import { InjectionToken } from '@angular/core'; + +import { GfEnvironment } from './environment.interface'; + +export const GF_ENVIRONMENT = new InjectionToken( + 'GF_ENVIRONMENT' +); diff --git a/libs/ui/src/lib/environment/index.ts b/libs/ui/src/lib/environment/index.ts new file mode 100644 index 000000000..828eea646 --- /dev/null +++ b/libs/ui/src/lib/environment/index.ts @@ -0,0 +1,2 @@ +export * from './environment.interface'; +export * from './environment.token'; diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts index 7383c4c9c..7e7094dd3 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts @@ -1,6 +1,4 @@ -/* eslint-disable @nx/enforce-module-boundaries */ -import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { DataService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, diff --git a/apps/client/src/app/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts similarity index 94% rename from apps/client/src/app/services/admin.service.ts rename to libs/ui/src/lib/services/admin.service.ts index a5f2ca24f..145f134e3 100644 --- a/apps/client/src/app/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -21,22 +21,22 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; +import { GF_ENVIRONMENT, GfEnvironment } from '@ghostfolio/ui/environment'; import { DataService } from '@ghostfolio/ui/services'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { SortDirection } from '@angular/material/sort'; import { DataSource, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; -import { environment } from '../../environments/environment'; - @Injectable({ providedIn: 'root' }) export class AdminService { public constructor( private dataService: DataService, + @Inject(GF_ENVIRONMENT) private environment: GfEnvironment, private http: HttpClient ) {} @@ -124,7 +124,7 @@ export class AdminService { }); return this.http.get( - `${environment.production ? 'https://ghostfol.io' : ''}/api/v2/data-providers/ghostfolio/status`, + `${this.environment.production ? 'https://ghostfol.io' : ''}/api/v2/data-providers/ghostfolio/status`, { headers } ); } @@ -276,7 +276,7 @@ export class AdminService { scraperConfiguration, symbol }: AssetProfileIdentifier & UpdateAssetProfileDto['scraperConfiguration']) { - return this.http.post( + return this.http.post<{ price: number }>( `/api/v1/admin/market-data/${dataSource}/${symbol}/test`, { scraperConfiguration diff --git a/libs/ui/src/lib/services/index.ts b/libs/ui/src/lib/services/index.ts index 2ba773ede..9cedba875 100644 --- a/libs/ui/src/lib/services/index.ts +++ b/libs/ui/src/lib/services/index.ts @@ -1 +1,2 @@ +export * from './admin.service'; export * from './data.service'; From 09e7e6182d97e3d541f00da4360daaf1a83a62ca Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 5 Jan 2026 20:28:44 +0100 Subject: [PATCH 120/160] Task/refactor firstOrderDate to dateOfFirstActivity in portfolio service (#6161) * Refactor firstOrderDate to dateOfFirstActivity --- apps/api/src/app/portfolio/portfolio.service.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 5613af9e7..4bc10bd49 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1872,18 +1872,17 @@ export class PortfolioService { netPerformanceWithCurrencyEffect } = performance; - const dividendInBaseCurrency = - await portfolioCalculator.getDividendInBaseCurrency(); - const totalEmergencyFund = this.getTotalEmergencyFund({ emergencyFundHoldingsValueInBaseCurrency, userSettings: user.settings?.settings as UserSettings }); - const fees = await portfolioCalculator.getFeesInBaseCurrency(); + const dateOfFirstActivity = portfolioCalculator.getStartDate(); - const firstOrderDate = portfolioCalculator.getStartDate(); + const dividendInBaseCurrency = + await portfolioCalculator.getDividendInBaseCurrency(); + const fees = await portfolioCalculator.getFeesInBaseCurrency(); const interest = await portfolioCalculator.getInterestInBaseCurrency(); const liabilities = @@ -1941,7 +1940,7 @@ export class PortfolioService { .minus(liabilities) .toNumber(); - const daysInMarket = differenceInDays(new Date(), firstOrderDate); + const daysInMarket = differenceInDays(new Date(), dateOfFirstActivity); const annualizedPerformancePercent = getAnnualizedPerformancePercent({ daysInMarket, @@ -1960,6 +1959,7 @@ export class PortfolioService { annualizedPerformancePercent, annualizedPerformancePercentWithCurrencyEffect, cash, + dateOfFirstActivity, excludedAccountsAndActivities, netPerformance, netPerformancePercentage, @@ -1972,7 +1972,6 @@ export class PortfolioService { }).length, committedFunds: committedFunds.toNumber(), currentValueInBaseCurrency: currentValueInBaseCurrency.toNumber(), - dateOfFirstActivity: firstOrderDate, dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), emergencyFund: { assets: emergencyFundHoldingsValueInBaseCurrency, From ac67a6e190e505c964d4fbfb891d537ee679c905 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 5 Jan 2026 21:27:48 +0100 Subject: [PATCH 121/160] Task/extend portfolio calculator cash test (#6162) * Extend test --- .../roai/portfolio-calculator-cash.spec.ts | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index db6e08151..e27bb4daa 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -18,6 +18,7 @@ import { HistoricalDataItem } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { DataSource } from '@prisma/client'; +import { Big } from 'big.js'; import { randomUUID } from 'node:crypto'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { @@ -207,17 +208,23 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const { historicalData } = await portfolioCalculator.computeSnapshot(); + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); - const historicalData20231231 = historicalData.find(({ date }) => { - return date === '2023-12-31'; - }); - const historicalData20240101 = historicalData.find(({ date }) => { - return date === '2024-01-01'; - }); - const historicalData20241231 = historicalData.find(({ date }) => { - return date === '2024-12-31'; - }); + const historicalData20231231 = portfolioSnapshot.historicalData.find( + ({ date }) => { + return date === '2023-12-31'; + } + ); + const historicalData20240101 = portfolioSnapshot.historicalData.find( + ({ date }) => { + return date === '2024-01-01'; + } + ); + const historicalData20241231 = portfolioSnapshot.historicalData.find( + ({ date }) => { + return date === '2024-12-31'; + } + ); /** * Investment value with currency effect: 1000 USD * 0.85 = 850 CHF @@ -285,6 +292,13 @@ describe('PortfolioCalculator', () => { value: 1820, valueWithCurrencyEffect: 1800 }); + + expect(portfolioSnapshot).toMatchObject({ + hasErrors: false, + totalFeesWithCurrencyEffect: new Big('0'), + totalInterestWithCurrencyEffect: new Big('0'), + totalLiabilitiesWithCurrencyEffect: new Big('0') + }); }); }); }); From a493afb52656199356b4e20ef66ec2b90b58a245 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 6 Jan 2026 21:00:41 +0100 Subject: [PATCH 122/160] Task/set active sort column in accounts table component (#6175) * Set active sort column * Update changelog --- CHANGELOG.md | 1 + .../src/lib/accounts-table/accounts-table.component.html | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fa5ef8b0..0cb727d58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Set the active sort column in the accounts table component - Deprecated `activities` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Moved the admin service to `@ghostfolio/ui/services` - Moved the data service to `@ghostfolio/ui/services` diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index be17c3684..f76a5d676 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -13,7 +13,14 @@ }
- +
Date: Wed, 7 Jan 2026 17:21:02 +0100 Subject: [PATCH 123/160] Task/upgrade @types/lodash to version 4.17.21 (#6140) * Upgrade @types/lodash to version 4.17.21 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 95b71adf5..9b37e8439 100644 --- a/package-lock.json +++ b/package-lock.json @@ -125,7 +125,7 @@ "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", - "@types/lodash": "4.17.20", + "@types/lodash": "4.17.21", "@types/node": "22.15.17", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", @@ -12455,9 +12455,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 67eb101e1..140e4ce44 100644 --- a/package.json +++ b/package.json @@ -169,7 +169,7 @@ "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", - "@types/lodash": "4.17.20", + "@types/lodash": "4.17.21", "@types/node": "22.15.17", "@types/papaparse": "5.3.7", "@types/passport-google-oauth20": "2.0.16", From 4539367bc5f8e3ee18d303ff44b0ef9c55b41595 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 8 Jan 2026 20:21:21 +0100 Subject: [PATCH 124/160] Task/refresh cryptocurrencies list 20260105 (#6172) * Update cryptocurrencies.json * Update changelog --- CHANGELOG.md | 1 + .../cryptocurrencies/cryptocurrencies.json | 152 +++++++++++++++--- 2 files changed, 132 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cb727d58..b67aeea4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the admin service to `@ghostfolio/ui/services` - Moved the data service to `@ghostfolio/ui/services` - Refactored the dividend import +- Refreshed the cryptocurrencies list ### Fixed diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 80c07fc64..5becbf2f9 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -22,6 +22,7 @@ "2015": "2015 coin", "2024": "2024", "2025": "2025 TOKEN", + "2026": "2026", "2049": "TOKEN 2049", "2192": "LERNITAS", "4444": "4444 Meme", @@ -83,6 +84,7 @@ "1UP": "Uptrennd", "1WO": "1World", "2022M": "2022MOON", + "2026MEMECLUB": "2026", "20EX": "20ex", "21BTC": "21.co Wrapped BTC", "21X": "21X", @@ -177,11 +179,13 @@ "AAI": "AutoAir AI", "AAPLX": "Apple xStock", "AAPX": "AMPnet", + "AARBWBTC": "Aave Arbitrum WBTC", "AARDY": "Baby Aardvark", "AARK": "Aark", "AART": "ALL.ART", "AAST": "AASToken", "AAT": "Agricultural Trade Chain", + "AAVAWBTC": "Aave aWBTC", "AAVE": "Aave", "AAVEE": "AAVE.e (Avalanche Bride)", "AAVEGOTCHIFOMO": "Aavegotchi FOMO", @@ -295,7 +299,8 @@ "ADEL": "Akropolis Delphi", "ADF": "Art de Finance", "ADH": "Adhive", - "ADI": "Aditus", + "ADI": "ADI", + "ADITUS": "Aditus", "ADIX": "Adix Token", "ADK": "Aidos Kuneen", "ADL": "Adel", @@ -412,6 +417,7 @@ "AGVC": "AgaveCoin", "AGVE": "Agave", "AGX": "Agricoin", + "AHARWBTC": "Aave Harmony WBTC", "AHOO": "Ahoolee", "AHT": "AhaToken", "AI": "Sleepless", @@ -626,6 +632,7 @@ "ALITA": "Alita Network", "ALITATOKEN": "Alita Token", "ALIX": "AlinX", + "ALK": "Alkemi Network DAO Token", "ALKI": "Alkimi", "ALKIMI": "ALKIMI", "ALLBI": "ALL BEST ICO", @@ -639,6 +646,7 @@ "ALMANAK": "Almanak", "ALMC": "Awkward Look Monkey Club", "ALME": "Alita", + "ALMEELA": "Almeela", "ALMOND": "Almond", "ALN": "Aluna", "ALNV1": "Aluna v1", @@ -690,6 +698,7 @@ "AMAL": "AMAL", "AMAPT": "Amnis Finance", "AMATEN": "Amaten", + "AMATO": "AMATO", "AMAZINGTEAM": "AmazingTeamDAO", "AMB": "AirDAO", "AMBER": "AmberCoin", @@ -825,6 +834,7 @@ "AOK": "AOK", "AOL": "AOL (America Online)", "AOP": "Ark Of Panda", + "AOPTWBTC": "Aave Optimism WBTC", "AOS": "AOS", "AOT": "Age of Tanks", "AP": "America Party", @@ -861,6 +871,7 @@ "APOL": "Apollo FTW", "APOLL": "Apollon Limassol", "APOLLO": "Apollo Crypto", + "APOLWBTC": "Aave Polygon WBTC", "APP": "Moon App", "APPA": "Dappad", "APPC": "AppCoins", @@ -914,6 +925,7 @@ "ARAW": "Araw", "ARB": "Arbitrum", "ARBI": "Arbipad", + "ARBINU": "ArbInu", "ARBIT": "Arbit Coin", "ARBP": "ARB Protocol", "ARBS": "Arbswap", @@ -1041,6 +1053,7 @@ "ASBNB": "Astherus Staked BNB", "ASC": "All InX SMART CHAIN", "ASCEND": "Ascend", + "ASCN": "AlphaScan", "ASD": "AscendEX Token", "ASDEX": "AstraDEX", "ASEED": "aUSD SEED (Acala)", @@ -1133,6 +1146,7 @@ "ATLA": "Atleta Network", "ATLAS": "Star Atlas", "ATLASD": "Atlas DEX", + "ATLASOFUSA": "Atlas", "ATLX": "Atlantis Loans Polygon", "ATM": "Atletico de Madrid Fan Token", "ATMA": "ATMA", @@ -1173,6 +1187,7 @@ "AUCO": "Advanced United Continent", "AUCTION": "Bounce", "AUDC": "Aussie Digital", + "AUDD": "Australian Digital Dollar", "AUDF": "Forte AUD", "AUDIO": "Audius", "AUDM": "Macropod Stablecoin", @@ -1260,6 +1275,7 @@ "AWARE": "ChainAware.ai", "AWARETOKEN": "AWARE", "AWAX": "AWAX", + "AWBTC": "Aave interest bearing WBTC", "AWC": "Atomic Wallet Coin", "AWE": "AWE Network", "AWK": "Awkward Monkey Base", @@ -1302,6 +1318,7 @@ "AXT": "AIX", "AXYS": "Axys", "AYA": "Aryacoin", + "AYFI": "Aave YFI", "AYNI": "Ayni Gold", "AZ": "Azbit", "AZA": "Kaliza", @@ -1314,6 +1331,7 @@ "AZR": "Azure", "AZU": "Azultec", "AZUKI": "Azuki", + "AZUKI2": "AZUKI 2.0", "AZUKIDAO": "AzukiDAO", "AZUM": "Azuma Coin", "AZUR": "Azuro Protocol", @@ -1535,6 +1553,7 @@ "BAOM": "Battle of Memes", "BAOS": "BaoBaoSol", "BAOV1": "BaoToken v1", + "BAP3X": "bAP3X", "BAR": "FC Barcelona Fan Token", "BARA": "Capybara", "BARAKATUH": "Barakatuh", @@ -1678,6 +1697,7 @@ "BCOINM": "Bomb Crypto (MATIC)", "BCOINSOL": "Bomb Crypto (SOL)", "BCOINTON": "Bomb Crypto (TON)", + "BCONG": "BabyCong", "BCOQ": "BLACK COQINU", "BCP": "BlockChainPeople", "BCPAY": "Bitcashpay", @@ -1735,6 +1755,7 @@ "BEATAI": "eBeat AI", "BEATLES": "JohnLennonC0IN", "BEATS": "Sol Beats", + "BEATSWAP": "BeatSwap", "BEATTOKEN": "BEAT Token", "BEAVER": "beaver", "BEB1M": "BeB", @@ -1851,6 +1872,7 @@ "BFLOKI": "BurnFloki", "BFLY": "Butterfly Protocol", "BFM": "BenefitMine", + "BFR": "Buffer Token", "BFT": "BF Token", "BFTB": "Brazil Fan Token", "BFTC": "BITS FACTOR", @@ -2098,6 +2120,7 @@ "BLACKSALE": "Black Sale", "BLACKST": "Black Stallion", "BLACKSWAN": "BlackSwan AI", + "BLACKWHALE": "The Black Whale", "BLADE": "BladeGames", "BLADEW": "BladeWarrior", "BLAKEBTC": "BlakeBitcoin", @@ -2143,7 +2166,8 @@ "BLOB": "B.O.B the Blob", "BLOBERC20": "Blob", "BLOC": "Blockcloud", - "BLOCK": "Blockasset", + "BLOCK": "Block", + "BLOCKASSET": "Blockasset", "BLOCKB": "Block Browser", "BLOCKBID": "Blockbid", "BLOCKF": "Block Farm Club", @@ -2218,6 +2242,7 @@ "BM": "BitMoon", "BMAGA": "Baby Maga", "BMARS": "Binamars", + "BMAX": "BMAX", "BMB": "Beamable Network Token", "BMBO": "Bamboo Coin", "BMC": "Blackmoon Crypto", @@ -2495,6 +2520,7 @@ "BOWSC": "BowsCoin", "BOWSER": "Bowser", "BOX": "DeBoxToken", + "BOXABL": "BOXABL", "BOXCAT": "BOXCAT", "BOXETH": "Cat-in-a-Box Ether", "BOXT": "BOX Token", @@ -2579,6 +2605,7 @@ "BRETTGOLD": "Brett Gold", "BRETTONETH": "Brett ETH", "BRETTSUI": "Brett (brettsui.com)", + "BREV": "Brevis Token", "BREW": "CafeSwap Token", "BREWERY": "Brewery Consortium Coin", "BREWLABS": "Brewlabs", @@ -2737,6 +2764,7 @@ "BTCAS": "BitcoinAsia", "BTCAT": "Bitcoin Cat", "BTCB": "Bitcoin BEP2", + "BTCBAM": "BitCoin Bam", "BTCBASE": "Bitcoin on Base", "BTCBR": "Bitcoin BR", "BTCBRV1": "Bitcoin BR v1", @@ -3126,7 +3154,8 @@ "CASPER": "Casper DeFi", "CASPERTOKEN": "Casper Token", "CASPUR": "Caspur Zoomies", - "CAST": "Castello Coin", + "CAST": "CAST ORACLES", + "CASTELLOCOIN": "Castello Coin", "CASTLE": "bitCastle", "CAT": "Simon's Cat", "CATA": "CATAMOTO", @@ -3236,6 +3265,7 @@ "CBX": "CropBytes", "CBXRP": "Coinbase Wrapped XRP", "CBY": "Carbify", + "CBYTE": "CBYTE", "CC": "Canton Coin", "CC10": "Cryptocurrency Top 10 Tokens Index", "CCA": "CCA", @@ -3310,6 +3340,7 @@ "CENTRA": "Centra", "CENTS": "Centience", "CENX": "Centcex", + "CEO": "CEO", "CEODOGE": "CEO DOGE", "CERBER": "CERBEROGE", "CERE": "Cere Network", @@ -3695,7 +3726,8 @@ "COC": "Coin of the champions", "COCAINE": "THE GOOD STUFF", "COCK": "Shibacock", - "COCO": "COCO COIN", + "COCO": "coco", + "COCOCOIN": "COCO COIN", "COCONUT": "Coconut", "COCOR": "Cocoro", "COCORO": "Cocoro", @@ -3726,6 +3758,7 @@ "COI": "Coinnec", "COINAI": "Coinbase AI Agent", "COINB": "Coinbidex", + "COINBANK": "CoinBank", "COINBT": "CoinBot", "COINBUCK": "Coinbuck", "COINDEALTOKEN": "CoinDeal Token", @@ -3750,6 +3783,7 @@ "COLA": "Cola", "COLISEUM": "Coliseum", "COLL": "Collateral Pay", + "COLLAB": "Collab.Land", "COLLAR": "PolyPup Finance", "COLLAT": "Collaterize", "COLLE": "Collective Care", @@ -3970,6 +4004,7 @@ "CREPECOIN": "Crepe Coin", "CRES": "Cresio", "CRESV1": "Cresio v1", + "CRETA": "Creta World", "CREV": "CryptoRevolution", "CREVA": "Creva Coin", "CREW": "CREW INU", @@ -4778,8 +4813,10 @@ "DINGER": "Dinger Token", "DINGO": "Dingocoin", "DINNER": "Trump Dinner", - "DINO": "DinoLFG", + "DINO": "DINO", + "DINOLFG": "DinoLFG", "DINOS": "Dinosaur Inu", + "DINOSOL": "DINOSOL", "DINOSWAP": "DinoSwap", "DINT": "DinarTether", "DINU": "Dogey-Inu", @@ -4974,6 +5011,7 @@ "DOGEZILLA": "DogeZilla", "DOGEZILLAV1": "DogeZilla v1", "DOGG": "Doggo", + "DOGGO": "DOGGO", "DOGGS": "Doggensnout", "DOGGY": "Doggy", "DOGGYCOIN": "DOGGY", @@ -5487,6 +5525,7 @@ "EGGC": "EggCoin", "EGGMAN": "Eggman Inu", "EGGP": "Eggplant Finance", + "EGGT": "Egg N Partners", "EGGY": "EGGY", "EGI": "eGame", "EGL": "The Eagle Of Truth", @@ -5711,6 +5750,7 @@ "EPETS": "Etherpets", "EPIC": "Epic Chain", "EPICCASH": "Epic Cash", + "EPICV1": "Ethernity Chain", "EPIK": "EPIK Token", "EPIKO": "Epiko", "EPIX": "Byepix", @@ -6140,6 +6180,7 @@ "FCTC": "FaucetCoin", "FCTR": "FactorDAO", "FDC": "Fidance", + "FDGC": "FINTECH DIGITAL GOLD COIN", "FDLS": "FIDELIS", "FDM": "Fandom", "FDO": "Firdaos", @@ -6440,7 +6481,9 @@ "FOFARIO": "Fofar", "FOFO": "FOFO", "FOFOTOKEN": "FOFO Token", + "FOG": "FOGnet", "FOGE": "Fat Doge", + "FOGV1": "FOGnet v1", "FOIN": "Foin", "FOL": "Folder Protocol", "FOLD": "Manifold Finance", @@ -6709,6 +6752,7 @@ "FWB": "Friends With Benefits Pro", "FWBV1": "Friends With Benefits Pro v1", "FWC": "Qatar 2022", + "FWCL": "Legends", "FWH": "FigureWifHat", "FWOG": "Fwog", "FWT": "Freeway Token", @@ -7042,6 +7086,7 @@ "GIGASWAP": "GigaSwap", "GIGGLE": "Giggle Fund", "GIGGLEACADEMY": "Giggle Academy", + "GIGL": "GIGGLE PANDA", "GIGS": "Climate101", "GIGX": "GigXCoin", "GIKO": "Giko Cat", @@ -7558,6 +7603,7 @@ "HACHIKO": "Hachiko Inu Token", "HACHIONB": "Hachi On Base", "HACK": "HACK", + "HADES": "Hades", "HAEDAL": "Haedal Protocol", "HAGGIS": "New Born Haggis Pygmy Hippo", "HAHA": "Hasaki", @@ -7772,6 +7818,7 @@ "HIENS3": "hiENS3", "HIENS4": "hiENS4", "HIFI": "Hifi Finance", + "HIFIDENZA": "hiFIDENZA", "HIFLUF": "hiFLUF", "HIFRIENDS": "hiFRIENDS", "HIGAZERS": "hiGAZERS", @@ -7811,6 +7858,7 @@ "HITBTC": "HitBTC Token", "HITOP": "Hitop", "HIUNDEAD": "hiUNDEAD", + "HIVALHALLA": "hiVALHALLA", "HIVE": "Hive", "HIVP": "HiveSwap", "HIX": "HELIX Orange", @@ -7984,6 +8032,7 @@ "HSN": "Hyper Speed Network", "HSOL": "Helius Staked SOL", "HSP": "Horse Power", + "HSR": "Hshare", "HSS": "Hashshare", "HST": "Decision Token", "HSUI": "Suicune", @@ -8005,6 +8054,7 @@ "HTN": "Hoosat Network", "HTO": "Heavenland HTO", "HTR": "Hathor", + "HTS": "Home3", "HTT": "Hello Art", "HTX": "HTX", "HTZ": "Hertz Network", @@ -8427,6 +8477,7 @@ "IQN": "IQeon", "IQQ": "Iqoniq", "IQT": "IQ Protocol", + "IR": "Infrared Governance Token", "IRA": "Diligence", "IRC": "IRIS", "IRENA": "Irena Coin Apps", @@ -8558,6 +8609,7 @@ "JAWN": "Long Jawn Silvers", "JAWS": "AutoShark", "JAY": "Jaypeggers", + "JBC": "Japan Brand Coin", "JBO": "JBOX", "JBOT": "JACKBOT", "JBS": "JumBucks Coin", @@ -8596,6 +8648,7 @@ "JERRYINUCOM": "Jerry Inu", "JES": "Jesus", "JESSE": "jesse", + "JESSECOIN": "jesse", "JEST": "Jester", "JESUS": "Jesus Coin", "JET": "Jet Protocol", @@ -8624,6 +8677,7 @@ "JIM": "Jim", "JIN": "JinPeng", "JIND": "JINDO INU", + "JINDO": "JINDOGE", "JINDOGE": "Jindoge", "JIO": "JIO Token", "JITOSOL": "Jito Staked SOL", @@ -8865,6 +8919,7 @@ "KDC": "Klondike Coin", "KDG": "Kingdom Game 4.0", "KDIA": "KDIA COIN", + "KDK": "Kodiak Token", "KDOE": "Kudoe", "KDOGE": "KingDoge", "KDT": "Kenyan Digital Token", @@ -8926,6 +8981,7 @@ "KGC": "Krypton Galaxy Coin", "KGEN": "KGeN", "KGO": "Kiwigo", + "KGST": "KGST", "KGT": "Kaby Gaming Token", "KHAI": "khai", "KHEOWZOO": "khaokheowzoo", @@ -9074,6 +9130,7 @@ "KNUT": "Knut From Zoo", "KNUXX": "Knuxx Bully of ETH", "KNW": "Knowledge", + "KO": "Kyuzo's Friends", "KOAI": "KOI", "KOALA": "KOALA", "KOBAN": "KOBAN", @@ -9089,6 +9146,7 @@ "KOII": "Koii", "KOIN": "Koinos", "KOINB": "KoinBülteni Token", + "KOINDEX": "KOIN", "KOINETWORK": "Koi Network", "KOIP": "KoiPond", "KOJI": "Koji", @@ -9548,8 +9606,9 @@ "LIQUIDIUM": "LIQUIDIUM•TOKEN", "LIR": "Let it Ride", "LIS": "Realis Network", - "LISA": "Lisa Simpson", + "LISA": "LISA Token", "LISAS": "Lisa Simpson", + "LISASIMPSONCLUB": "Lisa Simpson", "LIST": "KList Protocol", "LISTA": "Lista DAO", "LISTEN": "Listen", @@ -9732,6 +9791,7 @@ "LQT": "Lifty", "LQTY": "Liquity", "LRC": "Loopring", + "LRCV1": "Loopring v1", "LRDS": "BLOCKLORDS", "LRG": "Largo Coin", "LRN": "Loopring [NEO]", @@ -9950,6 +10010,7 @@ "MAGICK": "Cosmic Universe Magick", "MAGICV": "Magicverse", "MAGIK": "Magik Finance", + "MAGMA": "MAGMA", "MAGN": "Magnate Finance", "MAGNE": "Magnetix", "MAGNET": "Yield Magnet", @@ -10198,6 +10259,7 @@ "MCU": "MediChain", "MCUSD": "Moola Celo USD", "MCV": "MCV Token", + "MCX": "MachiX Token", "MD": "MetaDeck", "MDA": "Moeda", "MDAI": "MindAI", @@ -10366,6 +10428,7 @@ "METANIAV1": "METANIAGAMES", "METANO": "Metano", "METAPK": "Metapocket", + "METAPLACE": "Metaplace", "METAQ": "MetaQ", "METAS": "Metaseer", "METAT": "MetaTrace", @@ -10510,6 +10573,7 @@ "MIMO": "MIMO Parallel Governance Token", "MIN": "MINDOL", "MINA": "Mina Protocol", + "MINAR": "Miner Arena", "MINC": "MinCoin", "MIND": "Morpheus Labs", "MINDBODY": "Mind Body Soul", @@ -10911,7 +10975,7 @@ "MPAA": "MPAA", "MPAD": "MultiPad", "MPAY": "Menapay", - "MPC": "Metaplace", + "MPC": "Partisia Blockchain", "MPD": "Metapad", "MPG": "Max Property Group", "MPH": "Morpher", @@ -11010,6 +11074,7 @@ "MTHB": "MTHAIBAHT", "MTHD": "Method Finance", "MTHN": "MTH Network", + "MTHT": "MetaHint", "MTIK": "MatikaToken", "MTIX": "Matrix Token", "MTK": "Moya Token", @@ -11175,6 +11240,7 @@ "N3": "Network3", "N3DR": "NeorderDAO ", "N3ON": "N3on", + "N4T": "Nobel For Trump", "N64": "N64", "N7": "Number7", "N8V": "NativeCoin", @@ -11722,6 +11788,7 @@ "NWIF": "neirowifhat", "NWP": "NWPSolution", "NWS": "Nodewaves", + "NXA": "NEXA Agent", "NXC": "Nexium", "NXD": "Nexus Dubai", "NXDT": "NXD Next", @@ -11766,7 +11833,8 @@ "OAS": "Oasis City", "OASC": "Oasis City", "OASI": "Oasis Metaverse", - "OASIS": "Oasis", + "OASIS": "OASIS", + "OASISPLATFORM": "Oasis", "OAT": "OAT Network", "OATH": "OATH Protocol", "OAX": "Oax", @@ -11983,12 +12051,14 @@ "ONUS": "ONUS", "ONX": "OnX.finance", "OOB": "Oobit", + "OOBV1": "Oobit", "OOE": "OpenOcean", "OOFP": "OOFP", "OOGI": "OOGI", "OOKI": "Ooki", "OOKS": "Onooks", "OOM": "OomerBot", + "OOOO": "oooo", "OOPS": "OOPS", "OORC": "Orbit Bridge Klaytn Orbit Chain", "OORT": "OORT", @@ -12838,7 +12908,7 @@ "PMOON": "Pookimoon", "PMPY": "Prometheum Prodigy", "PMR": "Pomerium Utility Token", - "PMT": "POWER MARKET", + "PMT": "Public Masterpiece Token", "PMTN": "Peer Mountain", "PMX": "Phillip Morris xStock", "PNB": "Pink BNB", @@ -13001,7 +13071,9 @@ "POUW": "Pouwifhat", "POW": "PowBlocks", "POWELL": "Jerome Powell", - "POWER": "Powerloom Token", + "POWER": "Power", + "POWERLOOM": "Powerloom Token", + "POWERMARKET": "POWER MARKET", "POWR": "Power Ledger", "POWSCHE": "Powsche", "POX": "Monkey Pox", @@ -13269,6 +13341,7 @@ "PXL": "PIXEL", "PXP": "PointPay", "PXT": "Pixer Eternity", + "PYBOBO": "Capybobo", "PYC": "PayCoin", "PYE": "CreamPYE", "PYI": "PYRIN", @@ -13470,6 +13543,7 @@ "RAIREFLEX": "Rai Reflex Index", "RAISE": "Raise Token", "RAIT": "Rabbitgame", + "RAITOKEN": "RAI", "RAIZER": "RAIZER", "RAK": "Rake Finance", "RAKE": "Rake Coin", @@ -13497,10 +13571,11 @@ "RATOTHERAT": "Rato The Rat", "RATS": "Rats", "RATWIF": "RatWifHat", - "RAVE": "Ravendex", + "RAVE": "RaveDAO", "RAVELOUS": "Ravelous", "RAVEN": "Raven Protocol", "RAVENCOINC": "Ravencoin Classic", + "RAVENDEX": "Ravendex", "RAWDOG": "RawDog", "RAWG": "RAWG", "RAY": "Raydium", @@ -13810,7 +13885,8 @@ "RIVUS": "RivusDAO", "RIYA": "Etheriya", "RIZ": "Rivalz Network", - "RIZE": "Rizespor Token", + "RIZE": "RIZE", + "RIZESPOR": "Rizespor Token", "RIZO": "HahaYes", "RIZOLOL": "Rizo", "RIZZ": "Rizz", @@ -13856,6 +13932,7 @@ "RNT": "REAL NIGGER TATE", "RNTB": "BitRent", "RNX": "ROONEX", + "ROA": "ROA CORE", "ROAD": "ROAD", "ROAM": "Roam Token", "ROAR": "Alpha DEX", @@ -13993,6 +14070,7 @@ "RTM": "Raptoreum", "RTR": "Restore The Republic", "RTT": "Restore Truth Token", + "RTX": "RateX", "RU": "RIFI United", "RUBB": "Rubber Ducky Cult", "RUBCASH": "RUBCASH", @@ -14283,7 +14361,7 @@ "SCOIN": "ShinCoin", "SCONE": "Sportcash One", "SCOOBY": "Scooby coin", - "SCOR": "Scorista", + "SCOR": "Scor", "SCORE": "Scorecoin", "SCOT": "Scotcoin", "SCOTT": "Scottish", @@ -14377,6 +14455,7 @@ "SELFIEC": "Selfie Cat", "SELFT": "SelfToken", "SELLC": "Sell Token", + "SELO": "SELO+", "SEM": "Semux", "SEN": "Sentaro", "SENA": "Ethena Staked ENA", @@ -14482,7 +14561,6 @@ "SHANG": "Shanghai Inu", "SHAR": "Shark Cat", "SHARBI": "SHARBI", - "SHARD": "ShardCoin", "SHARDS": "WorldShards", "SHARE": "Seigniorage Shares", "SHARECHAIN": "ShareChain", @@ -14580,6 +14658,7 @@ "SHIRO": "Shiro Neko", "SHIROSOL": "Shiro Neko (shirosol.online)", "SHIRYOINU": "Shiryo-Inu", + "SHISA": "SHISA", "SHISHA": "Shisha Coin", "SHIT": "I will poop it NFT", "SHITC": "Shitcoin", @@ -14628,9 +14707,11 @@ "SHUFFLE": "SHUFFLE!", "SHVR": "Shivers", "SHX": "Stronghold Token", + "SHXV1": "Stronghold Token v1", "SHY": "Shytoshi Kusama", "SHYTCOIN": "ShytCoin", "SI": "Siren", + "SI14": "Si14", "SIACLASSIC": "SiaClassic", "SIB": "SibCoin", "SIBA": "SibaInu", @@ -14831,6 +14912,7 @@ "SMARTLOX": "SmartLOX", "SMARTM": "SmartMesh", "SMARTMEME": "SmartMEME", + "SMARTMFG": "Smart MFG", "SMARTNFT": "SmartNFT", "SMARTO": "smARTOFGIVING", "SMARTSHARE": "Smartshare", @@ -15040,6 +15122,7 @@ "SOLNAV": "SOLNAV AI", "SOLNIC": "Solnic", "SOLO": "Sologenic", + "SOLOM": "Solomon", "SOLOR": "Solordi", "SOLP": "SolPets", "SOLPAD": "Solpad Finance", @@ -15332,6 +15415,7 @@ "STACS": "STACS Token", "STAFIRETH": "StaFi Staked ETH", "STAGE": "Stage", + "STAI": "StereoAI", "STAK": "Jigstack", "STAKE": "xDai Chain", "STAKEDETH": "StakeHound Staked Ether", @@ -15422,6 +15506,7 @@ "STIMA": "STIMA", "STING": "Sting", "STINJ": "Stride Staked INJ", + "STIPS": "Stips", "STITCH": "Stitch", "STIX": "STIX", "STJUNO": "Stride Staked JUNO", @@ -15597,6 +15682,7 @@ "SUPERBONK": "SUPER BONK", "SUPERC": "SuperCoin", "SUPERCAT": "SUPERCAT", + "SUPERCYCLE": "Crypto SuperCycle", "SUPERDAPP": "SuperDapp", "SUPERF": "SUPER FLOKI", "SUPERGROK": "SuperGrok", @@ -15855,6 +15941,7 @@ "TBILL": "OpenEden T-Bills", "TBILLV1": "OpenEden T-Bills v1", "TBIS": "TBIS token", + "TBK": "TBK Token", "TBL": "Tombola", "TBLLX": "TBLL xStock", "TBR": "Tuebor", @@ -15902,7 +15989,8 @@ "TDROP": "ThetaDrop", "TDS": "TokenDesk", "TDX": "Tidex Token", - "TEA": "TeaDAO", + "TEA": "TeaFi Token", + "TEADAO": "TeaDAO", "TEAM": "TeamUP", "TEARS": "Liberals Tears", "TEC": "TeCoin", @@ -15933,7 +16021,7 @@ "TEMM": "TEM MARKET", "TEMP": "Tempus", "TEMPLE": "TempleDAO", - "TEN": "Tokenomy", + "TEN": "TEN", "TEND": "Tendies", "TENDIE": "TendieSwap", "TENET": "TENET", @@ -15947,8 +16035,8 @@ "TEQ": "Teq Network", "TER": "TerraNovaCoin", "TERA": "TERA", + "TERA2": "Terareum", "TERADYNE": "Teradyne", - "TERAR": "Terareum", "TERAV1": "Terareum v1", "TERAWATT": "Terawatt", "TERM": "Terminal of Simpson", @@ -15975,6 +16063,7 @@ "TETSUO": "Tetsuo Coin", "TETU": "TETU", "TEVA": "Tevaera", + "TEVI": "TEVI Coin", "TEW": "Trump in a memes world", "TEX": "Terrax", "TF47": "Trump Force 47", @@ -15988,7 +16077,7 @@ "TFT": "The Famous Token", "TFUEL": "Theta Fuel", "TGAME": "TrueGame", - "TGC": "TigerCoin", + "TGC": "TG.Casino", "TGCC": "TheGCCcoin", "TGPT": "Trading GPT", "TGRAM": "TG20 TGram", @@ -16026,6 +16115,7 @@ "THEOS": "Theos", "THEP": "The Protocol", "THEPLAY": "PLAY", + "THEREALCHAIN": "REAL", "THERESAMAY": "Theresa May Coin", "THES": "The Standard Protocol (USDS)", "THESTANDARD": "Standard Token", @@ -16051,6 +16141,7 @@ "THOR": "THORSwap", "THOREUM": "Thoreum V3", "THP": "TurboHigh Performance", + "THQ": "Theoriq Token", "THR": "Thorecoin", "THREE": "Three Protocol Token ", "THRT": "ThriveToken", @@ -16078,6 +16169,7 @@ "TIG": "Tigereum", "TIGER": "TIGER", "TIGERC": "TigerCash", + "TIGERCOIN": "TigerCoin", "TIGERCV1": "TigerCash v1", "TIGERMOON": "TigerMoon", "TIGERSHARK": "Tiger Shark", @@ -16154,6 +16246,7 @@ "TME": "Timereum", "TMED": "MDsquare", "TMFT": "Turkish Motorcycle Federation", + "TMG": "T-mac DAO", "TMN": "TranslateMe", "TMNG": "TMN Global", "TMNT": "TMNT", @@ -16193,6 +16286,7 @@ "TOKC": "Tokyo Coin", "TOKE": "Tokemak", "TOKEN": "TokenFi", + "TOKENOMY": "Tokenomy", "TOKENPLACE": "Tokenplace", "TOKENSTARS": "TokenStars", "TOKERO": "TOKERO LevelUP Token", @@ -16312,6 +16406,7 @@ "TRADE": "Polytrade", "TRADEBOT": "TradeBot", "TRADECHAIN": "Trade Chain", + "TRADETIDE": "Trade Tide Token", "TRADEX": "TradeX AI", "TRADOOR": "Tradoor", "TRAI": "Trackgood AI", @@ -16361,6 +16456,7 @@ "TRIAS": "Trias", "TRIBE": "Tribe", "TRIBETOKEN": "TribeToken", + "TRIBEX": "Tribe Token", "TRIBL": "Tribal Token", "TRICK": "TrickyCoin", "TRICKLE": "Trickle", @@ -16882,6 +16978,7 @@ "USDI": "Interest Protocol USDi", "USDJ": "USDJ", "USDK": "USDK", + "USDKG": "USDKG", "USDL": "Lift Dollar", "USDM": "Mountain Protocol", "USDMA": "USD mars", @@ -16946,6 +17043,7 @@ "UT": "Ulord", "UTBAI": "UTB.ai", "UTC": "UltraCoin", + "UTED": "United", "UTG": "UltronGlow", "UTH": "Uther", "UTHR": "Utherverse Xaeon", @@ -16998,6 +17096,7 @@ "VALU": "Value", "VALUE": "Value Liquidity", "VALYR": "Valyr", + "VAM": "Vitalum", "VAMPIRE": "Vampire Inu", "VAN": "Vanspor Token", "VANA": "Vana", @@ -17206,6 +17305,7 @@ "VIZ": "VIZ Token", "VIZION": "ViZion Protocol", "VIZSLASWAP": "VizslaSwap", + "VK": "VK Token", "VKNF": "VKENAF", "VLC": "Volcano Uni", "VLDY": "Validity", @@ -17263,6 +17363,7 @@ "VON": "Vameon", "VONE": "Vone", "VONSPEED": "Andrea Von Speed", + "VOOI": "VOOI", "VOOT": "VootCoin", "VOOZ": "Vooz Coin", "VOPO": "VOPO", @@ -17443,6 +17544,7 @@ "WATCH": "Yieldwatch", "WATER": "Waterfall", "WATERCOIN": "WATER", + "WATLAS": "Wrapped Star Atlas (Portal Bridge)", "WATT": "WATTTON", "WAVAX": "Wrapped AVAX", "WAVES": "Waves", @@ -17524,6 +17626,7 @@ "WEBSIM": "The Css God by Virtuals", "WEBSS": "Websser", "WEC": "Whole Earth Coin", + "WECAN": "Wecan Group", "WECO": "WECOIN", "WED": "Wednesday Inu", "WEEBS": "Weebs", @@ -17561,8 +17664,9 @@ "WEPC": "World Earn & Play Community", "WEPE": "Wall Street Pepe", "WERK": "Werk Family", + "WESHOWTOKEN": "WeShow Token", "WEST": "Waves Enterprise", - "WET": "WeShow Token", + "WET": "HumidiFi Token", "WETH": "WETH", "WETHV1": "WETH v1", "WETHW": "Wrapped EthereumPoW", @@ -17617,6 +17721,7 @@ "WHISKEY": "WHISKEY", "WHITE": "WhiteRock", "WHITEHEART": "Whiteheart", + "WHITEWHALE": "The White Whale", "WHL": "WhaleCoin", "WHO": "Truwho", "WHOLE": "Whole Network", @@ -17827,6 +17932,7 @@ "WPP": "Green Energy Token", "WPR": "WePower", "WQT": "Work Quest", + "WR": "White Rat", "WRC": "Worldcore", "WREACT": "Wrapped REACT", "WRK": "BlockWRK", @@ -18005,6 +18111,7 @@ "XCHF": "CryptoFranc", "XCHNG": "Chainge Finance", "XCI": "Cannabis Industry Coin", + "XCL": "Xcellar", "XCLR": "ClearCoin", "XCM": "CoinMetro", "XCN": "Onyxcoin", @@ -18043,7 +18150,8 @@ "XEC": "eCash", "XED": "Exeedme", "XEDO": "XedoAI", - "XEL": "Xel", + "XEL": "XELIS", + "XELCOIN": "Xel", "XELS": "XELS Coin", "XEM": "NEM", "XEN": "XEN Crypto", @@ -18361,13 +18469,15 @@ "YEAI": "YE AI Agent", "YEARN": "YearnTogether", "YEC": "Ycash", - "YEE": "Yeeco", + "YEE": "Yee Token", + "YEECO": "Yeeco", "YEED": "Yggdrash", "YEEHAW": "YEEHAW", "YEET": "Yeet", "YEETI": "YEETI 液体", "YEFI": "YeFi", "YEL": "Yel.Finance", + "YELLOWWHALE": "The Yellow Whale", "YELP": "Yelpro", "YEON": "Yeon", "YEPE": "Yellow Pepe", From d58e5f73e9162a589283da8c729bd5813f818bb9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:56:19 +0100 Subject: [PATCH 125/160] Bugfix/fix case-insensitive sorting in accounts table (#6178) * Fix case-insensitive sorting by account name * Update changelog --- CHANGELOG.md | 1 + libs/common/src/lib/helper.ts | 11 +++++++++++ .../lib/accounts-table/accounts-table.component.ts | 6 +++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b67aeea4a..b3fdc21fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the filtering by asset class in the endpoint `GET api/v1/portfolio/holdings` +- Fixed the case-insensitive sorting in the accounts table component ## 2.228.0 - 2026-01-03 diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 7452b604c..9c1a0f104 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -12,6 +12,7 @@ import { subDays } from 'date-fns'; import { ca, de, es, fr, it, nl, pl, pt, tr, uk, zhCN } from 'date-fns/locale'; +import { get, isNil, isString } from 'lodash'; import { DEFAULT_CURRENCY, @@ -242,6 +243,16 @@ export function getLocale() { return navigator.language ?? locale; } +export function getLowercase(object: object, path: string) { + const value = get(object, path); + + if (isNil(value)) { + return ''; + } + + return isString(value) ? value.toLocaleLowerCase() : value; +} + export function getNumberFormatDecimal(aLocale?: string) { const formatObject = new Intl.NumberFormat(aLocale).formatToParts(9999.99); diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts index 699de6d7e..fe91e1eda 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts @@ -1,5 +1,5 @@ import { ConfirmationDialogType } from '@ghostfolio/common/enums'; -import { getLocale } from '@ghostfolio/common/helper'; +import { getLocale, getLowercase } from '@ghostfolio/common/helper'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -32,7 +32,6 @@ import { trashOutline, walletOutline } from 'ionicons/icons'; -import { get } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject, Subscription } from 'rxjs'; @@ -133,8 +132,9 @@ export class GfAccountsTableComponent implements OnChanges, OnDestroy { this.isLoading = true; this.dataSource = new MatTableDataSource(this.accounts); + this.dataSource.sortingDataAccessor = getLowercase; + this.dataSource.sort = this.sort; - this.dataSource.sortingDataAccessor = get; if (this.accounts) { this.isLoading = false; From a84eb7ba564f28d056958a5c7eeed632e1181438 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:04:06 +0100 Subject: [PATCH 126/160] Bugfix/fix case-insensitive sorting in benchmark component (#6181) * Fix case-insensitive sorting by name * Update changelog --- CHANGELOG.md | 1 + libs/ui/src/lib/benchmark/benchmark.component.ts | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3fdc21fb..b23f88eff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the filtering by asset class in the endpoint `GET api/v1/portfolio/holdings` - Fixed the case-insensitive sorting in the accounts table component +- Fixed the case-insensitive sorting in the benchmark component ## 2.228.0 - 2026-01-03 diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts index fe53240ed..adef1f41b 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark.component.ts @@ -1,5 +1,9 @@ import { ConfirmationDialogType } from '@ghostfolio/common/enums'; -import { getLocale, resolveMarketCondition } from '@ghostfolio/common/helper'; +import { + getLocale, + getLowercase, + resolveMarketCondition +} from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, Benchmark, @@ -28,7 +32,7 @@ import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { ellipsisHorizontal, trashOutline } from 'ionicons/icons'; -import { get, isNumber } from 'lodash'; +import { isNumber } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject, takeUntil } from 'rxjs'; @@ -111,8 +115,9 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy { public ngOnChanges() { if (this.benchmarks) { this.dataSource.data = this.benchmarks; + this.dataSource.sortingDataAccessor = getLowercase; + this.dataSource.sort = this.sort; - this.dataSource.sortingDataAccessor = get; this.isLoading = false; } From 60a64b768df7e7c7a0b172aa8d9427e6200d5df8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 11 Jan 2026 16:47:50 +0100 Subject: [PATCH 127/160] Bugfix/fix case-insensitive sorting in holdings table component (#6183) * Fix case-insensitive sorting by name * Update changelog --- CHANGELOG.md | 1 + .../src/lib/holdings-table/holdings-table.component.html | 7 +------ libs/ui/src/lib/holdings-table/holdings-table.component.ts | 4 +++- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b23f88eff..5c1fad4db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the filtering by asset class in the endpoint `GET api/v1/portfolio/holdings` - Fixed the case-insensitive sorting in the accounts table component - Fixed the case-insensitive sorting in the benchmark component +- Fixed the case-insensitive sorting in the holdings table component ## 2.228.0 - 2026-01-03 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 d3afe9de9..7c7f6b829 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.html +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -19,12 +19,7 @@ - + Name diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.ts b/libs/ui/src/lib/holdings-table/holdings-table.component.ts index 1c46e18db..f408f7d9b 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.ts +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.ts @@ -1,4 +1,4 @@ -import { getLocale } from '@ghostfolio/common/helper'; +import { getLocale, getLowercase } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, PortfolioPosition @@ -92,6 +92,8 @@ export class GfHoldingsTableComponent implements OnChanges, OnDestroy { this.dataSource = new MatTableDataSource(this.holdings); this.dataSource.paginator = this.paginator; + this.dataSource.sortingDataAccessor = getLowercase; + this.dataSource.sort = this.sort; if (this.holdings) { From 645e8ee30352c3c0825a67a2cd98f4cac93c5c55 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 11 Jan 2026 23:00:48 +0700 Subject: [PATCH 128/160] Bugfix/prevent double counting of cash in net worth (#6171) * Prevent double counting of cash in net worth * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/order/order.service.ts | 49 +++--- .../calculator/portfolio-calculator.ts | 33 ++-- .../roai/portfolio-calculator-cash.spec.ts | 148 ++++++++---------- .../calculator/roai/portfolio-calculator.ts | 6 +- .../exchange-rate-data.service.mock.ts | 6 +- .../portfolio-snapshot.processor.ts | 3 +- .../src/lib/models/timeline-position.ts | 2 + 8 files changed, 127 insertions(+), 121 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c1fad4db..74dcfa882 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed the net worth calculation to prevent the double counting of cash positions - Fixed the filtering by asset class in the endpoint `GET api/v1/portfolio/holdings` - Fixed the case-insensitive sorting in the accounts table component - Fixed the case-insensitive sorting in the benchmark component diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index a939cb476..9a4f1e46b 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -743,47 +743,50 @@ export class OrderService { /** * Retrieves all orders required for the portfolio calculator, including both standard asset orders - * and synthetic orders representing cash activities. - * - * @param filters - Optional filters to apply to the orders. - * @param userCurrency - The base currency of the user. - * @param userId - The ID of the user. - * @returns An object containing the combined list of activities and the total count. + * and optional synthetic orders representing cash activities. */ @LogPerformance public async getOrdersForPortfolioCalculator({ filters, userCurrency, - userId + userId, + withCash = false }: { + /** Optional filters to apply to the orders. */ filters?: Filter[]; + /** The base currency of the user. */ userCurrency: string; + /** The ID of the user. */ userId: string; + /** Whether to include cash activities in the result. */ + withCash?: boolean; }) { - const nonCashOrders = await this.getOrders({ + const orders = await this.getOrders({ filters, userCurrency, userId, withExcludedAccountsAndActivities: false // TODO }); - const cashDetails = await this.accountService.getCashDetails({ - filters, - userId, - currency: userCurrency - }); + if (withCash) { + const cashDetails = await this.accountService.getCashDetails({ + filters, + userId, + currency: userCurrency + }); - const cashOrders = await this.getCashOrders({ - cashDetails, - filters, - userCurrency, - userId - }); + const cashOrders = await this.getCashOrders({ + cashDetails, + filters, + userCurrency, + userId + }); - return { - activities: [...nonCashOrders.activities, ...cashOrders.activities], - count: nonCashOrders.count + cashOrders.count - }; + orders.activities.push(...cashOrders.activities); + orders.count += cashOrders.count; + } + + return orders; } public async getStatisticsByCurrency( diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index d2b3c0625..8f6cb0efc 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -39,6 +39,7 @@ import { GroupBy } from '@ghostfolio/common/types'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Logger } from '@nestjs/common'; +import { AssetSubClass } from '@prisma/client'; import { Big } from 'big.js'; import { plainToClass } from 'class-transformer'; import { @@ -389,27 +390,33 @@ export abstract class PortfolioCalculator { hasAnySymbolMetricsErrors = hasAnySymbolMetricsErrors || hasErrors; - valuesBySymbol[item.symbol] = { - currentValues, - currentValuesWithCurrencyEffect, - investmentValuesAccumulated, - investmentValuesAccumulatedWithCurrencyEffect, - investmentValuesWithCurrencyEffect, - netPerformanceValues, - netPerformanceValuesWithCurrencyEffect, - timeWeightedInvestmentValues, - timeWeightedInvestmentValuesWithCurrencyEffect - }; + const includeInTotalAssetValue = + item.assetSubClass !== AssetSubClass.CASH; + + if (includeInTotalAssetValue) { + valuesBySymbol[item.symbol] = { + currentValues, + currentValuesWithCurrencyEffect, + investmentValuesAccumulated, + investmentValuesAccumulatedWithCurrencyEffect, + investmentValuesWithCurrencyEffect, + netPerformanceValues, + netPerformanceValuesWithCurrencyEffect, + timeWeightedInvestmentValues, + timeWeightedInvestmentValuesWithCurrencyEffect + }; + } positions.push({ feeInBaseCurrency, + includeInTotalAssetValue, timeWeightedInvestment, timeWeightedInvestmentWithCurrencyEffect, - dividend: totalDividend, - dividendInBaseCurrency: totalDividendInBaseCurrency, averagePrice: item.averagePrice, currency: item.currency, dataSource: item.dataSource, + dividend: totalDividend, + dividendInBaseCurrency: totalDividendInBaseCurrency, fee: item.fee, firstBuyDate: item.firstBuyDate, grossPerformance: !hasErrors ? (grossPerformance ?? null) : null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index e27bb4daa..f5a4ca634 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -14,7 +14,7 @@ import { ExchangeRateDataServiceMock } from '@ghostfolio/api/services/exchange-r import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { HistoricalDataItem } from '@ghostfolio/common/interfaces'; +import { TimelinePosition } from '@ghostfolio/common/models'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { DataSource } from '@prisma/client'; @@ -191,7 +191,8 @@ describe('PortfolioCalculator', () => { const { activities } = await orderService.getOrdersForPortfolioCalculator( { userCurrency: 'CHF', - userId: userDummyData.id + userId: userDummyData.id, + withCash: true } ); @@ -201,7 +202,14 @@ describe('PortfolioCalculator', () => { values: [] }); + const accountBalanceItems = + await accountBalanceService.getAccountBalanceItems({ + userCurrency: 'CHF', + userId: userDummyData.id + }); + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + accountBalanceItems, activities, calculationType: PerformanceCalculationType.ROAI, currency: 'CHF', @@ -210,94 +218,72 @@ describe('PortfolioCalculator', () => { const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); - const historicalData20231231 = portfolioSnapshot.historicalData.find( - ({ date }) => { - return date === '2023-12-31'; - } - ); - const historicalData20240101 = portfolioSnapshot.historicalData.find( - ({ date }) => { - return date === '2024-01-01'; - } - ); - const historicalData20241231 = portfolioSnapshot.historicalData.find( - ({ date }) => { - return date === '2024-12-31'; - } - ); - - /** - * Investment value with currency effect: 1000 USD * 0.85 = 850 CHF - * Total investment: 1000 USD * 0.91 = 910 CHF - * Value (current): 1000 USD * 0.91 = 910 CHF - * Value with currency effect: 1000 USD * 0.85 = 850 CHF - */ - expect(historicalData20231231).toMatchObject({ - date: '2023-12-31', - investmentValueWithCurrencyEffect: 850, - netPerformance: 0, - netPerformanceInPercentage: 0, - netPerformanceInPercentageWithCurrencyEffect: 0, - netPerformanceWithCurrencyEffect: 0, - netWorth: 850, - totalAccountBalance: 0, - totalInvestment: 910, - totalInvestmentValueWithCurrencyEffect: 850, - value: 910, - valueWithCurrencyEffect: 850 - }); - - /** - * Net performance with currency effect: (1000 * 0.86) - (1000 * 0.85) = 10 CHF - * Total investment: 1000 USD * 0.91 = 910 CHF - * Total investment value with currency effect: 1000 USD * 0.85 = 850 CHF - * Value (current): 1000 USD * 0.91 = 910 CHF - * Value with currency effect: 1000 USD * 0.86 = 860 CHF - */ - expect(historicalData20240101).toMatchObject({ - date: '2024-01-01', - investmentValueWithCurrencyEffect: 0, - netPerformance: 0, - netPerformanceInPercentage: 0, - netPerformanceInPercentageWithCurrencyEffect: 0.011764705882352941, - netPerformanceWithCurrencyEffect: 10, - netWorth: 860, - totalAccountBalance: 0, - totalInvestment: 910, - totalInvestmentValueWithCurrencyEffect: 850, - value: 910, - valueWithCurrencyEffect: 860 + const position = portfolioSnapshot.positions.find(({ symbol }) => { + return symbol === 'USD'; }); /** - * Investment value with currency effect: 1000 USD * 0.90 = 900 CHF + * Investment: 2000 USD * 0.91 = 1820 CHF + * Investment value with currency effect: (1000 USD * 0.85) + (1000 USD * 0.90) = 1750 CHF * Net performance: (1000 USD * 1.0) - (1000 USD * 1.0) = 0 CHF - * Net performance with currency effect: (1000 USD * 0.9) - (1000 USD * 0.85) = 50 CHF - * Total investment: 2000 USD * 0.91 = 1820 CHF - * Total investment value with currency effect: (1000 USD * 0.85) + (1000 USD * 0.90) = 1750 CHF - * Value (current): 2000 USD * 0.91 = 1820 CHF - * Value with currency effect: 2000 USD * 0.9 = 1800 CHF + * Total account balance: 2000 USD * 0.85 = 1700 CHF (using the exchange rate on 2024-12-31) + * Value in base currency: 2000 USD * 0.91 = 1820 CHF */ - expect(historicalData20241231).toMatchObject({ - date: '2024-12-31', - investmentValueWithCurrencyEffect: 900, - netPerformance: 0, - netPerformanceInPercentage: 0, - netPerformanceInPercentageWithCurrencyEffect: 0.058823529411764705, - netPerformanceWithCurrencyEffect: 50, - netWorth: 1800, - totalAccountBalance: 0, - totalInvestment: 1820, - totalInvestmentValueWithCurrencyEffect: 1750, - value: 1820, - valueWithCurrencyEffect: 1800 + expect(position).toMatchObject({ + averagePrice: new Big(1), + currency: 'USD', + dataSource: DataSource.YAHOO, + dividend: new Big(0), + dividendInBaseCurrency: new Big(0), + fee: new Big(0), + feeInBaseCurrency: new Big(0), + firstBuyDate: '2023-12-31', + grossPerformance: new Big(0), + grossPerformancePercentage: new Big(0), + grossPerformancePercentageWithCurrencyEffect: new Big( + '0.08211603004634809014' + ), + grossPerformanceWithCurrencyEffect: new Big(70), + includeInTotalAssetValue: false, + investment: new Big(1820), + investmentWithCurrencyEffect: new Big(1750), + marketPrice: null, + marketPriceInBaseCurrency: 0.91, + netPerformance: new Big(0), + netPerformancePercentage: new Big(0), + netPerformancePercentageWithCurrencyEffectMap: { + '1d': new Big('0.01111111111111111111'), + '1y': new Big('0.06937181021989792704'), + '5y': new Big('0.0818817546090273363'), + max: new Big('0.0818817546090273363'), + mtd: new Big('0.01111111111111111111'), + wtd: new Big('-0.05517241379310344828'), + ytd: new Big('0.01111111111111111111') + }, + netPerformanceWithCurrencyEffectMap: { + '1d': new Big(20), + '1y': new Big(60), + '5y': new Big(70), + max: new Big(70), + mtd: new Big(20), + wtd: new Big(-80), + ytd: new Big(20) + }, + quantity: new Big(2000), + symbol: 'USD', + timeWeightedInvestment: new Big('912.47956403269754768392'), + timeWeightedInvestmentWithCurrencyEffect: new Big( + '852.45231607629427792916' + ), + transactionCount: 2, + valueInBaseCurrency: new Big(1820) }); expect(portfolioSnapshot).toMatchObject({ hasErrors: false, - totalFeesWithCurrencyEffect: new Big('0'), - totalInterestWithCurrencyEffect: new Big('0'), - totalLiabilitiesWithCurrencyEffect: new Big('0') + totalFeesWithCurrencyEffect: new Big(0), + totalInterestWithCurrencyEffect: new Big(0), + totalLiabilitiesWithCurrencyEffect: new Big(0) }); }); }); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 070d7543b..2ceed015d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -34,7 +34,11 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { let totalTimeWeightedInvestment = new Big(0); let totalTimeWeightedInvestmentWithCurrencyEffect = new Big(0); - for (const currentPosition of positions) { + for (const currentPosition of positions.filter( + ({ includeInTotalAssetValue }) => { + return includeInTotalAssetValue; + } + )) { if (currentPosition.feeInBaseCurrency) { totalFeesWithCurrencyEffect = totalFeesWithCurrencyEffect.plus( currentPosition.feeInBaseCurrency diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts index 857c1b5a5..742be36b4 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts @@ -1,5 +1,7 @@ -export const ExchangeRateDataServiceMock = { - getExchangeRatesByCurrency: ({ targetCurrency }): Promise => { +import { ExchangeRateDataService } from './exchange-rate-data.service'; + +export const ExchangeRateDataServiceMock: Partial = { + getExchangeRatesByCurrency: ({ targetCurrency }) => { if (targetCurrency === 'CHF') { return Promise.resolve({ CHFCHF: { diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts index 75a3a8631..58a0a8f8a 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts @@ -50,7 +50,8 @@ export class PortfolioSnapshotProcessor { await this.orderService.getOrdersForPortfolioCalculator({ filters: job.data.filters, userCurrency: job.data.userCurrency, - userId: job.data.userId + userId: job.data.userId, + withCash: true }); const accountBalanceItems = diff --git a/libs/common/src/lib/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index f683c0951..8eae56cf7 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -50,6 +50,8 @@ export class TimelinePosition { @Type(() => Big) grossPerformanceWithCurrencyEffect: Big; + includeInTotalAssetValue?: boolean; + @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) investment: Big; From c47a4fdc71d43cb6b29dc12ba602ea47f0456ab1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 11 Jan 2026 17:02:48 +0100 Subject: [PATCH 129/160] Release 2.229.0 (#6184) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74dcfa882..4d6e818db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.229.0 - 2026-01-11 ### Changed diff --git a/package-lock.json b/package-lock.json index 9b37e8439..60cf31da5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.228.0", + "version": "2.229.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.228.0", + "version": "2.229.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 140e4ce44..63612d7fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.228.0", + "version": "2.229.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 825a36636790310d4a70f9af06355c1e08ba54b7 Mon Sep 17 00:00:00 2001 From: yaro <43820977+yootaebong@users.noreply.github.com> Date: Tue, 13 Jan 2026 05:48:31 +0900 Subject: [PATCH 130/160] Feature/set up language localization for Korean (ko) (#6136) * Set up language localization for Korean (ko) * Update changelog --- CHANGELOG.md | 6 + apps/client/project.json | 15 + .../components/footer/footer.component.html | 15 +- .../user-account-settings.component.ts | 1 + .../user-account-settings.html | 13 +- .../src/app/pages/features/features-page.html | 5 +- .../product-page.component.ts | 5 +- apps/client/src/locales/messages.ko.xlf | 8665 +++++++++++++++++ libs/common/src/lib/config.ts | 1 + libs/common/src/lib/helper.ts | 17 +- 10 files changed, 8734 insertions(+), 9 deletions(-) create mode 100644 apps/client/src/locales/messages.ko.xlf diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d6e818db..a07743c34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Set up the language localization for Korean (`ko`) + ## 2.229.0 - 2026-01-11 ### Changed diff --git a/apps/client/project.json b/apps/client/project.json index 09968d23f..38887ca8a 100644 --- a/apps/client/project.json +++ b/apps/client/project.json @@ -26,6 +26,10 @@ "baseHref": "/it/", "translation": "apps/client/src/locales/messages.it.xlf" }, + "ko": { + "baseHref": "/ko/", + "translation": "apps/client/src/locales/messages.ko.xlf" + }, "nl": { "baseHref": "/nl/", "translation": "apps/client/src/locales/messages.nl.xlf" @@ -110,6 +114,10 @@ "baseHref": "/it/", "localize": ["it"] }, + "development-ko": { + "baseHref": "/ko/", + "localize": ["ko"] + }, "development-nl": { "baseHref": "/nl/", "localize": ["nl"] @@ -213,6 +221,9 @@ "sslKey": "apps/client/localhost.pem" }, "configurations": { + "development-ca": { + "buildTarget": "client:build:development-ca" + }, "development-de": { "buildTarget": "client:build:development-de" }, @@ -228,6 +239,9 @@ "development-it": { "buildTarget": "client:build:development-it" }, + "development-ko": { + "buildTarget": "client:build:development-ko" + }, "development-nl": { "buildTarget": "client:build:development-nl" }, @@ -264,6 +278,7 @@ "messages.es.xlf", "messages.fr.xlf", "messages.it.xlf", + "messages.ko.xlf", "messages.nl.xlf", "messages.pl.xlf", "messages.pt.xlf", diff --git a/apps/client/src/app/components/footer/footer.component.html b/apps/client/src/app/components/footer/footer.component.html index 155f27f68..45626620e 100644 --- a/apps/client/src/app/components/footer/footer.component.html +++ b/apps/client/src/app/components/footer/footer.component.html @@ -122,7 +122,9 @@ -->
  • - Chinese + Chinese (简体中文)
  • Deutsch @@ -139,6 +141,13 @@
  • Italiano
  • +
  • Nederlands
  • @@ -153,7 +162,9 @@ diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts index c72c2a52d..44be30b9a 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -89,6 +89,7 @@ export class GfUserAccountSettingsComponent implements OnDestroy, OnInit { 'es', 'fr', 'it', + 'ko', 'nl', 'pl', 'pt', diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html index e6ab544c8..93ed614cc 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.html +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -87,7 +87,8 @@ > } Chinese (CommunityChinese / 简体中文 (Community) Italiano (Community) + @if (user?.settings?.isExperimentalFeatures) { + Korean / 한국어 (Community) + } Nederlands (Community) @if (user?.settings?.isExperimentalFeatures) { Українська (CommunityUkrainian / Українська (Community) } diff --git a/apps/client/src/app/pages/features/features-page.html b/apps/client/src/app/pages/features/features-page.html index d172347f7..efe96aec6 100644 --- a/apps/client/src/app/pages/features/features-page.html +++ b/apps/client/src/app/pages/features/features-page.html @@ -260,8 +260,9 @@

    Use Ghostfolio in multiple languages: English, - Chinese, Dutch, French, German, Italian, Polish, Portuguese, - Spanish and Turkish + Chinese, Dutch, French, German, Italian, + + Polish, Portuguese, Spanish and Turkish are currently supported.

    diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts index c8eff35be..14f9554d5 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -43,15 +43,16 @@ export class GfProductPageComponent implements OnInit { isOpenSource: true, key: 'ghostfolio', languages: [ + 'Chinese (简体中文)', 'Deutsch', 'English', 'Español', 'Français', 'Italiano', + 'Korean (한국어)', 'Nederlands', 'Português', - 'Türkçe', - '简体中文' + 'Türkçe' ], name: 'Ghostfolio', origin: $localize`Switzerland`, diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf new file mode 100644 index 000000000..0e0492f24 --- /dev/null +++ b/apps/client/src/locales/messages.ko.xlf @@ -0,0 +1,8665 @@ + + + + + + about + about + kebab-case + + libs/common/src/lib/routes/routes.ts + 176 + + + libs/common/src/lib/routes/routes.ts + 177 + + + libs/common/src/lib/routes/routes.ts + 182 + + + libs/common/src/lib/routes/routes.ts + 190 + + + libs/common/src/lib/routes/routes.ts + 198 + + + libs/common/src/lib/routes/routes.ts + 206 + + + libs/common/src/lib/routes/routes.ts + 214 + + + + faq + faq + kebab-case + + libs/common/src/lib/routes/routes.ts + 234 + + + libs/common/src/lib/routes/routes.ts + 235 + + + libs/common/src/lib/routes/routes.ts + 239 + + + libs/common/src/lib/routes/routes.ts + 245 + + + + features + features + kebab-case + + libs/common/src/lib/routes/routes.ts + 254 + + + libs/common/src/lib/routes/routes.ts + 255 + + + + license + license + kebab-case + + libs/common/src/lib/routes/routes.ts + 188 + + + libs/common/src/lib/routes/routes.ts + 191 + + + + markets + markets + kebab-case + + libs/common/src/lib/routes/routes.ts + 259 + + + libs/common/src/lib/routes/routes.ts + 260 + + + + pricing + pricing + kebab-case + + libs/common/src/lib/routes/routes.ts + 269 + + + libs/common/src/lib/routes/routes.ts + 270 + + + + privacy-policy + privacy-policy + kebab-case + + libs/common/src/lib/routes/routes.ts + 204 + + + libs/common/src/lib/routes/routes.ts + 207 + + + + register + register + kebab-case + + libs/common/src/lib/routes/routes.ts + 279 + + + libs/common/src/lib/routes/routes.ts + 280 + + + + resources + resources + kebab-case + + libs/common/src/lib/routes/routes.ts + 284 + + + libs/common/src/lib/routes/routes.ts + 285 + + + libs/common/src/lib/routes/routes.ts + 290 + + + libs/common/src/lib/routes/routes.ts + 298 + + + libs/common/src/lib/routes/routes.ts + 306 + + + libs/common/src/lib/routes/routes.ts + 314 + + + libs/common/src/lib/routes/routes.ts + 322 + + + + You are using the Live Demo. + 현재 라이브 데모를 사용 중입니다. + + apps/client/src/app/app.component.html + 12 + + + + Create Account + 계정 생성 + + apps/client/src/app/app.component.html + 13 + + + apps/client/src/app/pages/register/register-page.html + 28 + + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 2 + + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 101 + + + + Frequently Asked Questions (FAQ) + 자주 묻는 질문 + + apps/client/src/app/pages/faq/overview/faq-overview-page.html + 5 + + + apps/client/src/app/pages/faq/saas/saas-page.html + 5 + + + apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html + 5 + + + + The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. + 거래에는 상당한 손실 위험이 따를 수 있습니다. 단기적으로 필요할 수 있는 자금의 투자는 권장되지 않습니다. + + apps/client/src/app/components/footer/footer.component.html + 171 + + + + Alias + 별칭 + + apps/client/src/app/components/access-table/access-table.component.html + 4 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + + + + Grantee + 권한 수신자 + + apps/client/src/app/components/access-table/access-table.component.html + 11 + + + + please + 부탁드립니다 + + apps/client/src/app/pages/pricing/pricing-page.html + 336 + + + + Type + 유형 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 48 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 28 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 15 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 163 + + + + Details + 상세 + + apps/client/src/app/components/access-table/access-table.component.html + 33 + + + + Revoke + 회수 + + apps/client/src/app/components/access-table/access-table.component.html + 96 + + + + with + 와(과) + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 87 + + + + plus + 추가로 + + apps/client/src/app/pages/pricing/pricing-page.html + 202 + + + + Do you really want to revoke this granted access? + 이 부여된 접근 권한을 정말로 회수하시겠습니까? + + apps/client/src/app/components/access-table/access-table.component.ts + 115 + + + + Cash Balance + 현금 잔액 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 45 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 34 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 136 + + + + Platform + 플랫폼 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 90 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 48 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 86 + + + + Cash Balances + 현금 잔액 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 148 + + + + Transfer Cash Balance + 현금 잔액 이체 + + apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html + 7 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 10 + + + + Name + 이름 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 88 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 311 + + + apps/client/src/app/components/admin-platform/admin-platform.component.html + 22 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 15 + + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 46 + + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 22 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 15 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 15 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 139 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 43 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 137 + + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 28 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 16 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 88 + + + + Total + 합계 + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 55 + + + + Currency + 통화 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 201 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 318 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 45 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 25 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 145 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 65 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 283 + + + + Value + 평가액 + + apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html + 53 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 205 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 208 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 211 + + + libs/ui/src/lib/account-balances/account-balances.component.html + 34 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 171 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 206 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 264 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 300 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 98 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 25 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 102 + + + + Edit + 편집 + + apps/client/src/app/components/access-table/access-table.component.html + 76 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 267 + + + apps/client/src/app/components/admin-platform/admin-platform.component.html + 74 + + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 67 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 313 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 457 + + + + Delete + 삭제 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 289 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 86 + + + apps/client/src/app/components/admin-overview/admin-overview.html + 131 + + + apps/client/src/app/components/admin-platform/admin-platform.component.html + 85 + + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 78 + + + libs/ui/src/lib/account-balances/account-balances.component.html + 80 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 324 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 484 + + + libs/ui/src/lib/benchmark/benchmark.component.html + 176 + + + + Do you really want to delete this account? + 이 계정을 정말 삭제하시겠습니까? + + libs/ui/src/lib/accounts-table/accounts-table.component.ts + 150 + + + + Asset Profile + 자산 프로필 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 52 + + + + Historical Market Data + 과거 시장 데이터 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 54 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 574 + + + + Data Source + 데이터 소스 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 82 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 105 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 179 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 155 + + + libs/ui/src/lib/i18n.ts + 15 + + + + Attempts + 시도 횟수 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 120 + + + + Created + 생성됨 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 134 + + + + Finished + 완료됨 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 143 + + + + Status + 상태 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 152 + + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 92 + + + + and is driven by the efforts of its contributors + 기여자들의 노력으로 발전하고 있습니다 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 49 + + + + Delete Jobs + 작업 삭제 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 193 + + + + View Data + 데이터 보기 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 208 + + + + View Stacktrace + 스택트레이스 보기 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 216 + + + + Delete Job + 작업 삭제 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 224 + + + + Details for + 에 대한 세부정보 + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html + 2 + + + + Date + 날짜 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 161 + + + libs/ui/src/lib/account-balances/account-balances.component.html + 12 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 172 + + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html + 6 + + + + Market Price + 시장 가격 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 132 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 113 + + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html + 26 + + + + Currencies + 통화 + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 132 + + + apps/client/src/app/pages/public/public-page.html + 96 + + + + Everything in + 다음 통화 기준으로 모두 표시 + + apps/client/src/app/pages/pricing/pricing-page.html + 199 + + + + ETFs without Countries + 국가 정보 없는 ETF + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 137 + + + + ETFs without Sectors + 섹터 정보 없는 ETF + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 142 + + + + Do you really want to delete this asset profile? + 이 자산 프로필을 정말 삭제하시겠습니까? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 37 + + + + Filter by... + 다음 기준으로 필터... + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 386 + + + + First Activity + 첫 활동 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 147 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 219 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 219 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 50 + + + + Activities Count + 활동 수 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 156 + + + + Historical Data + 과거 데이터 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 165 + + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html + 44 + + + + Sectors Count + 섹터 수 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 174 + + + + Countries Count + 국가 수 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 183 + + + + Gather Recent Historical Market Data + 최근 과거 시장 데이터 수집 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 225 + + + + Gather All Historical Market Data + 전체 과거 시장 데이터 수집 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 230 + + + + Gather Profile Data + 프로필 데이터 수집 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 234 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 66 + + + + Oops! Could not parse historical data. + 이런! 과거 데이터를 파싱할 수 없습니다. + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts + 263 + + + + Refresh + 새로고침 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 21 + + + + Gather Historical Market Data + 과거 시장 데이터 수집 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 34 + + + + Import + 가져오기 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 155 + + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 190 + + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html + 71 + + + + Sector + 섹터 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 264 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 268 + + + + Country + 국가 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 275 + + + apps/client/src/app/components/admin-users/admin-users.html + 60 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 278 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 53 + + + + Sectors + 섹터 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 281 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 522 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 284 + + + apps/client/src/app/pages/public/public-page.html + 114 + + + + Countries + 국가 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 291 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 533 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 296 + + + + Symbol Mapping + 심볼 매핑 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 386 + + + + and we share aggregated key metrics of the platform’s performance + 또한 플랫폼 성과에 대한 집계된 핵심 지표를 공유합니다 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 32 + + + + Scraper Configuration + 스크래퍼 설정 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 411 + + + + Note + 메모 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 558 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 78 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 275 + + + + Add Asset Profile + 자산 프로필 추가 + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 7 + + + + Search + 검색 + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + 수동 추가 + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 18 + + + + Name, symbol or ISIN + 이름, 심볼 또는 ISIN + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 132 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 27 + + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 124 + + + + Do you really want to delete this coupon? + 이 쿠폰을 정말 삭제하시겠습니까? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 194 + + + + Do you really want to delete this system message? + 이 시스템 메시지를 정말 삭제하시겠습니까? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 207 + + + + Do you really want to flush the cache? + 정말로 캐시를 플러시하시겠습니까? + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 231 + + + + Please set your system message: + 시스템 메시지를 설정하십시오: + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 251 + + + + Version + 버전 + + apps/client/src/app/components/admin-overview/admin-overview.html + 7 + + + + User Count + 사용자 수 + + apps/client/src/app/components/admin-overview/admin-overview.html + 13 + + + + Activity Count + 활동 수 + + apps/client/src/app/components/admin-overview/admin-overview.html + 19 + + + + per User + 사용자당 + + apps/client/src/app/components/admin-overview/admin-overview.html + 28 + + + + Add Currency + 통화 추가 + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 20 + + + + User Signup + 사용자 가입 + + apps/client/src/app/components/admin-overview/admin-overview.html + 34 + + + + Read-only Mode + 읽기 전용 모드 + + apps/client/src/app/components/admin-overview/admin-overview.html + 48 + + + + System Message + 시스템 메시지 + + apps/client/src/app/components/admin-overview/admin-overview.html + 72 + + + + Set Message + 메시지 설정 + + apps/client/src/app/components/admin-overview/admin-overview.html + 94 + + + + Coupons + 쿠폰 + + apps/client/src/app/components/admin-overview/admin-overview.html + 102 + + + + Add + 추가 + + apps/client/src/app/components/admin-overview/admin-overview.html + 176 + + + libs/ui/src/lib/account-balances/account-balances.component.html + 93 + + + + Housekeeping + 유지 관리 + + apps/client/src/app/components/admin-overview/admin-overview.html + 184 + + + + Flush Cache + 캐시 플러시 + + apps/client/src/app/components/admin-overview/admin-overview.html + 200 + + + + Add Platform + 플랫폼 추가 + + apps/client/src/app/components/admin-platform/admin-platform.component.html + 9 + + + + Url + 링크 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 493 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 545 + + + apps/client/src/app/components/admin-platform/admin-platform.component.html + 38 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 25 + + + + Do you really want to delete this platform? + 정말로 이 플랫폼을 삭제하시겠습니까? + + apps/client/src/app/components/admin-platform/admin-platform.component.ts + 107 + + + + By + 에 의해 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 139 + + + + Update platform + 플랫폼 업데이트 + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 8 + + + + Current year + 올해 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + + + Add platform + 플랫폼 추가 + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 10 + + + + Platforms + 플랫폼 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 195 + + + + Tags + 태그 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 201 + + + libs/ui/src/lib/tags-selector/tags-selector.component.html + 4 + + + libs/ui/src/lib/tags-selector/tags-selector.component.html + 16 + + + + Add Tag + 태그 추가 + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 9 + + + + Do you really want to delete this tag? + 이 태그를 정말로 삭제하시겠습니까? + + apps/client/src/app/components/admin-tag/admin-tag.component.ts + 103 + + + + Update tag + 태그 업데이트 + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 8 + + + + Add tag + 태그 추가 + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 10 + + + + Do you really want to delete this user? + 이 사용자를 정말로 삭제하시겠습니까? + + apps/client/src/app/components/admin-users/admin-users.component.ts + 210 + + + + User + 사용자 + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 31 + + + apps/client/src/app/components/admin-users/admin-users.html + 12 + + + apps/client/src/app/components/header/header.component.html + 231 + + + + No auto-renewal on membership. + 멤버십 자동 갱신은 없습니다. + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 74 + + + + Engagement per Day + 일일 참여 + + apps/client/src/app/components/admin-users/admin-users.html + 140 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 89 + + + + Last Request + 마지막 요청 + + apps/client/src/app/components/admin-users/admin-users.html + 186 + + + + Impersonate User + 사용자 대리 접속 + + apps/client/src/app/components/admin-users/admin-users.html + 233 + + + + Delete User + 사용자 삭제 + + apps/client/src/app/components/admin-users/admin-users.html + 254 + + + + Compare with... + 비교해보세요... + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 18 + + + + Manage Benchmarks + 벤치마크 관리 + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 35 + + + + Portfolio + 포트폴리오 + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts + 140 + + + apps/client/src/app/components/header/header.component.html + 44 + + + apps/client/src/app/components/header/header.component.html + 258 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 94 + + + libs/common/src/lib/routes/routes.ts + 151 + + + + Benchmark + 기준 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 378 + + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts + 152 + + + + Current Market Mood + 현재 시장 분위기 + + apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html + 12 + + + + About Ghostfolio + 고스트폴리오 소개 + + apps/client/src/app/components/header/header.component.html + 326 + + + apps/client/src/app/pages/about/overview/about-overview-page.html + 5 + + + + Sign in + 로그인 + + apps/client/src/app/components/header/header.component.html + 422 + + + apps/client/src/app/components/header/header.component.ts + 297 + + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 79 + + + libs/common/src/lib/routes/routes.ts + 81 + + + libs/common/src/lib/routes/routes.ts + 157 + + + + Oops! Incorrect Security Token. + 이런! 잘못된 보안 토큰. + + apps/client/src/app/components/header/header.component.ts + 312 + + + apps/client/src/app/components/user-account-access/user-account-access.component.ts + 154 + + + apps/client/src/app/components/user-account-settings/user-account-settings.component.ts + 192 + + + + Manage Activities + 활동 관리 + + apps/client/src/app/components/home-holdings/home-holdings.html + 67 + + + + Fear + 두려움 + + apps/client/src/app/components/home-market/home-market.component.ts + 42 + + + apps/client/src/app/components/markets/markets.component.ts + 47 + + + libs/ui/src/lib/i18n.ts + 108 + + + + Greed + 탐욕 + + apps/client/src/app/components/home-market/home-market.component.ts + 43 + + + apps/client/src/app/components/markets/markets.component.ts + 48 + + + libs/ui/src/lib/i18n.ts + 109 + + + + Last Days + 지난 + + apps/client/src/app/components/home-market/home-market.html + 7 + + + apps/client/src/app/components/markets/markets.html + 17 + + + + Welcome to Ghostfolio + Ghostfolio에 오신 것을 환영합니다 + + apps/client/src/app/components/home-overview/home-overview.html + 11 + + + + Ready to take control of your personal finances? + 개인 재정을 관리할 준비가 되셨나요? + + apps/client/src/app/components/home-overview/home-overview.html + 12 + + + + The source code is fully available as open source software (OSS) under the AGPL-3.0 license + 소스 코드는 오픈 소스 소프트웨어로 완전히 공개되어 있으며, AGPL-3.0 라이선스 하에 제공됩니다 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 16 + + + + Setup your accounts + 계정 설정 + + apps/client/src/app/components/home-overview/home-overview.html + 19 + + + + Get a comprehensive financial overview by adding your bank and brokerage accounts. + 은행 및 중개 계좌를 추가하여 포괄적인 재무 개요를 확인하세요. + + apps/client/src/app/components/home-overview/home-overview.html + 21 + + + + Capture your activities + 활동을 캡처하세요 + + apps/client/src/app/components/home-overview/home-overview.html + 28 + + + + Record your investment activities to keep your portfolio up to date. + 투자 활동을 기록하여 포트폴리오를 최신 상태로 유지하세요. + + apps/client/src/app/components/home-overview/home-overview.html + 30 + + + + Monitor and analyze your portfolio + 포트폴리오를 모니터링하고 분석하세요. + + apps/client/src/app/components/home-overview/home-overview.html + 37 + + + + Track your progress in real-time with comprehensive analysis and insights. + 포괄적인 분석과 통찰력을 통해 진행 상황을 실시간으로 추적하세요. + + apps/client/src/app/components/home-overview/home-overview.html + 39 + + + + Setup accounts + 계정 설정 + + apps/client/src/app/components/home-overview/home-overview.html + 52 + + + + Current week + 이번주 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + + + Add activity + 활동 추가 + + apps/client/src/app/components/home-overview/home-overview.html + 60 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 8 + + + + Total Amount + 총액 + + apps/client/src/app/components/investment-chart/investment-chart.component.ts + 143 + + + + Savings Rate + 저축률 + + apps/client/src/app/components/investment-chart/investment-chart.component.ts + 202 + + + + Security Token + 보안 토큰 + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 8 + + + apps/client/src/app/components/user-account-access/user-account-access.html + 3 + + + apps/client/src/app/components/user-account-access/user-account-access.html + 15 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 279 + + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 64 + + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 72 + + + + or + 또는 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 30 + + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 32 + + + apps/client/src/app/pages/landing/landing-page.html + 47 + + + apps/client/src/app/pages/landing/landing-page.html + 348 + + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 97 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 83 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 161 + + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + + apps/client/src/app/pages/register/register-page.html + 33 + + + apps/client/src/app/pages/webauthn/webauthn-page.html + 30 + + + + Sign in with Google + 구글로 로그인 + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 44 + + + + Stay signed in + 로그인 상태 유지 + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 66 + + + + Time in Market + 시장 참여 기간 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 3 + + + + Absolute Gross Performance + 절대 총 성과 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 73 + + + + Fees + 수수료 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 208 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 88 + + + + Absolute Net Performance + 절대 순 성과 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 107 + + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 193 + + + + Net Performance + 순 성과 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 123 + + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 212 + + + + Total Assets + 총자산 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 149 + + + + Assets + 자산 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 226 + + + + Buying Power + 매수 가능 금액 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 241 + + + + Excluded from Analysis + 분석에서 제외됨 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 267 + + + + Liabilities + 부채 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 295 + + + apps/client/src/app/pages/features/features-page.html + 102 + + + + Net Worth + 순자산 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 317 + + + + Annualized Performance + 연환산 성과 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 331 + + + + Please set the amount of your emergency fund. + 비상금 금액을 설정해 주세요. + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts + 108 + + + + Minimum Price + 최저가 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 130 + + + + Maximum Price + 최고가 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 147 + + + + Quantity + 수량 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 157 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 189 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 193 + + + 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 + 451 + + + + Are you an ambitious investor who needs the full picture? + 당신은 전체 그림이 필요한 야심찬 투자자이신가요? + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 15 + + + + Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: + 지금 Ghostfolio 프리미엄으로 업그레이드하고, 투자 경험을 향상시키는 독점 기능을 이용하세요: + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 18 + + + + Portfolio Summary + 포트폴리오 요약 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 24 + + + apps/client/src/app/pages/pricing/pricing-page.html + 47 + + + apps/client/src/app/pages/pricing/pricing-page.html + 207 + + + + Portfolio Allocations + 포트폴리오 자산배분 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 28 + + + apps/client/src/app/pages/features/features-page.html + 161 + + + apps/client/src/app/pages/pricing/pricing-page.html + 51 + + + apps/client/src/app/pages/pricing/pricing-page.html + 211 + + + + Performance Benchmarks + 성과 벤치마크 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 32 + + + apps/client/src/app/pages/pricing/pricing-page.html + 55 + + + apps/client/src/app/pages/pricing/pricing-page.html + 215 + + + + FIRE Calculator + 파이어(FIRE) 계산기 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 36 + + + apps/client/src/app/pages/pricing/pricing-page.html + 59 + + + apps/client/src/app/pages/pricing/pricing-page.html + 219 + + + + Professional Data Provider + 전문 데이터 제공자 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 40 + + + apps/client/src/app/pages/pricing/pricing-page.html + 223 + + + + and more Features... + 그리고 더 많은 기능... + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 44 + + + apps/client/src/app/pages/pricing/pricing-page.html + 75 + + + apps/client/src/app/pages/pricing/pricing-page.html + 246 + + + + Get the tools to effectively manage your finances and refine your personal investment strategy. + 재무를 효율적으로 관리하고 개인 투자 전략을 고도화할 수 있는 도구를 제공합니다. + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 48 + + + + Skip + 건너뛰다 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 99 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 141 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 181 + + + + Upgrade Plan + 업그레이드 계획 + + apps/client/src/app/components/header/header.component.html + 193 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 70 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 110 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 153 + + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 21 + + + apps/client/src/app/pages/pricing/pricing-page.html + 284 + + + + Today + 오늘 + + apps/client/src/app/pages/public/public-page.html + 24 + + + libs/ui/src/lib/assistant/assistant.component.ts + 365 + + + + YTD + 연초 대비 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + + libs/ui/src/lib/assistant/assistant.component.ts + 377 + + + + 1Y + 1년 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + + + libs/ui/src/lib/assistant/assistant.component.ts + 387 + + + + 5Y + 5년 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + + + libs/ui/src/lib/assistant/assistant.component.ts + 411 + + + + Max + 맥스 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + + + libs/ui/src/lib/assistant/assistant.component.ts + 417 + + + + Grant access + 액세스 권한 부여 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 9 + + + + Public + 공공의 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 31 + + + + Granted Access + 액세스 권한 부여 + + apps/client/src/app/components/user-account-access/user-account-access.html + 57 + + + + Please enter your coupon code. + 쿠폰 코드를 입력해주세요. + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 218 + + + + Could not redeem coupon code + 쿠폰 코드를 사용할 수 없습니다. + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 182 + + + + Coupon code has been redeemed + 쿠폰 코드가 사용되었습니다. + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 195 + + + + Reload + 새로고침 + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 196 + + + + per year + 연간 + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 33 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 80 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 158 + + + apps/client/src/app/pages/pricing/pricing-page.html + 268 + + + + Try Premium + 프리미엄을 사용해 보세요 + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 53 + + + + Redeem Coupon + 쿠폰 사용 + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 67 + + + + Auto + 자동 + + apps/client/src/app/components/user-account-settings/user-account-settings.component.ts + 69 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 172 + + + + Do you really want to remove this sign in method? + 이 로그인 방법을 정말로 제거하시겠습니까? + + apps/client/src/app/components/user-account-settings/user-account-settings.component.ts + 281 + + + + Presenter View + 발표자 보기 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 183 + + + + Protection for sensitive information like absolute performances and quantity values + 절대 성과 및 수량 값과 같은 민감한 정보를 보호합니다. + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 185 + + + + Base Currency + 기본 통화 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 9 + + + + Language + 언어 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 56 + + + + Locale + 장소 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 448 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 133 + + + + Date and number format + 날짜 및 숫자 형식 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 135 + + + + Appearance + 테마 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 158 + + + + Light + 라이트 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 173 + + + + Dark + 다크 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 174 + + + + Zen Mode + 프라이버시 모드 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 201 + + + apps/client/src/app/pages/features/features-page.html + 246 + + + + Distraction-free experience for turbulent times + 격동의 시대에 방해받지 않는 경험 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 203 + + + + this is projected to increase to + 이는 다음과 같이 증가할 것으로 예상된다. + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 147 + + + + Biometric Authentication + 생체인증 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 218 + + + + Sign in with fingerprint + 지문으로 로그인 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 219 + + + + Experimental Features + 실험적 기능 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 235 + + + + Sneak peek at upcoming functionality + 곧 출시될 기능 미리보기 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 237 + + + + User ID + 사용자 ID + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 51 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 252 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 11 + + + + Export Data + 데이터 내보내기 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 260 + + + + This feature is currently unavailable. + 이 기능은 현재 사용할 수 없습니다. + + apps/client/src/app/core/http-response.interceptor.ts + 55 + + + + Please try again later. + 나중에 다시 시도해 주세요. + + apps/client/src/app/core/http-response.interceptor.ts + 57 + + + apps/client/src/app/core/http-response.interceptor.ts + 88 + + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 195 + + + + Oops! Something went wrong. + 이런! 문제가 발생했습니다. + + apps/client/src/app/core/http-response.interceptor.ts + 86 + + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 193 + + + + Okay + 좋아요 + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 157 + + + apps/client/src/app/core/http-response.interceptor.ts + 89 + + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 196 + + + + About + 소개 + + apps/client/src/app/components/footer/footer.component.html + 20 + + + apps/client/src/app/components/header/header.component.html + 124 + + + apps/client/src/app/components/header/header.component.html + 375 + + + apps/client/src/app/pages/about/overview/about-overview-page.routes.ts + 12 + + + libs/common/src/lib/routes/routes.ts + 220 + + + + Changelog + 변경 내역 + + apps/client/src/app/components/footer/footer.component.html + 27 + + + apps/client/src/app/pages/about/changelog/changelog-page.html + 4 + + + libs/common/src/lib/routes/routes.ts + 185 + + + + License + 특허 + + apps/client/src/app/components/footer/footer.component.html + 39 + + + apps/client/src/app/pages/about/license/license-page.html + 4 + + + libs/common/src/lib/routes/routes.ts + 193 + + + + Privacy Policy + 개인 정보 보호 정책 + + apps/client/src/app/components/footer/footer.component.html + 55 + + + apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html + 4 + + + libs/common/src/lib/routes/routes.ts + 209 + + + + Our + 우리의 + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 6 + + + + Discover other exciting Open Source Software projects + 다른 흥미로운 오픈 소스 소프트웨어 프로젝트를 찾아보세요 + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Visit + 방문하다 + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 28 + + + + for + ~을 위한 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 128 + + + + Accounts + 계정 + + apps/client/src/app/components/admin-platform/admin-platform.component.html + 52 + + + apps/client/src/app/components/admin-users/admin-users.html + 97 + + + apps/client/src/app/components/header/header.component.html + 58 + + + apps/client/src/app/components/header/header.component.html + 268 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 375 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 66 + + + apps/client/src/app/pages/accounts/accounts-page.html + 4 + + + libs/common/src/lib/routes/routes.ts + 69 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Oops, cash balance transfer has failed. + 죄송합니다. 현금 잔액 이체가 실패했습니다. + + apps/client/src/app/pages/accounts/accounts-page.component.ts + 341 + + + + Update account + 계정 업데이트 + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 8 + + + + Add account + 계정 추가 + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 10 + + + + Account ID + 계정 ID + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 96 + + + + From + 에서 + + apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html + 11 + + + + To + 에게 + + apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html + 32 + + + + Transfer + 옮기다 + + apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html + 72 + + + + Admin Control + 관리자 제어 + + apps/client/src/app/components/header/header.component.html + 74 + + + apps/client/src/app/components/header/header.component.html + 289 + + + libs/common/src/lib/routes/routes.ts + 64 + + + + Market Data + 시장 데이터 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 398 + + + libs/common/src/lib/routes/routes.ts + 51 + + + + Settings + 설정 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 2 + + + libs/common/src/lib/routes/routes.ts + 34 + + + libs/common/src/lib/routes/routes.ts + 56 + + + + Users + 사용자 + + libs/common/src/lib/routes/routes.ts + 61 + + + + Overview + 개요 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 113 + + + apps/client/src/app/components/header/header.component.html + 30 + + + apps/client/src/app/components/header/header.component.html + 248 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 47 + + + apps/client/src/app/pages/admin/admin-page.component.ts + 48 + + + apps/client/src/app/pages/resources/resources-page.component.ts + 30 + + + libs/common/src/lib/routes/routes.ts + 113 + + + libs/common/src/lib/routes/routes.ts + 170 + + + + Blog + 블로그 + + apps/client/src/app/components/footer/footer.component.html + 24 + + + apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html + 205 + + + apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.html + 185 + + + apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.html + 185 + + + apps/client/src/app/pages/blog/2022/07/ghostfolio-meets-internet-identity/ghostfolio-meets-internet-identity-page.html + 185 + + + apps/client/src/app/pages/blog/2022/07/how-do-i-get-my-finances-in-order/how-do-i-get-my-finances-in-order-page.html + 210 + + + apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.html + 197 + + + apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.html + 182 + + + apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.html + 142 + + + apps/client/src/app/pages/blog/2022/12/the-importance-of-tracking-your-personal-finances/the-importance-of-tracking-your-personal-finances-page.html + 169 + + + apps/client/src/app/pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.html + 179 + + + apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.html + 203 + + + apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.html + 254 + + + apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.html + 234 + + + apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.html + 244 + + + apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html + 155 + + + apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html + 274 + + + apps/client/src/app/pages/blog/2023/09/hacktoberfest-2023/hacktoberfest-2023-page.html + 184 + + + apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.html + 149 + + + apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.html + 271 + + + apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.html + 190 + + + apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.html + 168 + + + apps/client/src/app/pages/blog/2025/09/hacktoberfest-2025/hacktoberfest-2025-page.html + 189 + + + apps/client/src/app/pages/blog/2025/11/black-weeks-2025/black-weeks-2025-page.html + 147 + + + apps/client/src/app/pages/blog/blog-page.html + 5 + + + libs/common/src/lib/routes/routes.ts + 225 + + + + Discover the latest Ghostfolio updates and insights on personal finance + 개인 금융에 대한 최신 Ghostfolio 업데이트와 통찰력을 알아보세요 + + apps/client/src/app/pages/blog/blog-page.html + 7 + + + + As you are already logged in, you cannot access the demo account. + 이미 로그인되어 있으므로 데모 계정에 접근할 수 없습니다. + + apps/client/src/app/pages/demo/demo-page.component.ts + 35 + + + + Frequently Asked Questions (FAQ) + 자주 묻는 질문 + + apps/client/src/app/components/footer/footer.component.html + 33 + + + apps/client/src/app/pages/about/overview/about-overview-page.html + 189 + + + apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts + 12 + + + libs/common/src/lib/routes/routes.ts + 251 + + + + Features + 특징 + + apps/client/src/app/components/footer/footer.component.html + 29 + + + apps/client/src/app/components/header/header.component.html + 361 + + + apps/client/src/app/pages/features/features-page.html + 5 + + + libs/common/src/lib/routes/routes.ts + 256 + + + + Check out the numerous features of Ghostfolio to manage your wealth + 자산 관리를 위한 Ghostfolio의 다양한 기능을 확인해보세요 + + apps/client/src/app/pages/features/features-page.html + 7 + + + + ETFs + ETF + + apps/client/src/app/pages/features/features-page.html + 25 + + + + Bonds + 채권 + + apps/client/src/app/pages/features/features-page.html + 38 + + + + Wealth Items + 자산 항목 + + apps/client/src/app/pages/features/features-page.html + 76 + + + + Import and Export + 가져오기 및 내보내기 + + apps/client/src/app/pages/features/features-page.html + 116 + + + + Multi-Accounts + 다중 계정 + + apps/client/src/app/pages/features/features-page.html + 127 + + + + Portfolio Calculations + 포트폴리오 계산 + + apps/client/src/app/pages/features/features-page.html + 141 + + + + Dark Mode + 다크 모드 + + apps/client/src/app/pages/features/features-page.html + 233 + + + + Market Mood + 시장 분위기 + + apps/client/src/app/pages/features/features-page.html + 215 + + + + Static Analysis + 정적 분석 + + apps/client/src/app/pages/features/features-page.html + 179 + + + + Multi-Language + 다국어 + + apps/client/src/app/pages/features/features-page.html + 259 + + + + per week + 주당 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 130 + + + + Open Source Software + 오픈 소스 소프트웨어 + + apps/client/src/app/pages/features/features-page.html + 295 + + + + Get Started + 시작하기 + + apps/client/src/app/components/header/header.component.html + 433 + + + apps/client/src/app/pages/features/features-page.html + 320 + + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 363 + + + apps/client/src/app/pages/public/public-page.html + 242 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + + + + Holdings + 보유 종목 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 102 + + + apps/client/src/app/components/home-holdings/home-holdings.html + 4 + + + apps/client/src/app/pages/public/public-page.html + 70 + + + libs/common/src/lib/routes/routes.ts + 90 + + + libs/common/src/lib/routes/routes.ts + 167 + + + libs/ui/src/lib/assistant/assistant.html + 110 + + + + Summary + 요약 + + apps/client/src/app/components/home-summary/home-summary.html + 2 + + + libs/common/src/lib/routes/routes.ts + 105 + + + + Markets + 시장 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 380 + + + apps/client/src/app/components/footer/footer.component.html + 11 + + + apps/client/src/app/components/header/header.component.html + 408 + + + apps/client/src/app/components/home-market/home-market.html + 2 + + + apps/client/src/app/components/markets/markets.html + 2 + + + apps/client/src/app/pages/resources/markets/resources-markets.component.html + 2 + + + apps/client/src/app/pages/resources/resources-page.component.ts + 40 + + + libs/common/src/lib/routes/routes.ts + 95 + + + libs/common/src/lib/routes/routes.ts + 100 + + + libs/common/src/lib/routes/routes.ts + 261 + + + libs/common/src/lib/routes/routes.ts + 309 + + + + Ghostfolio is a personal finance dashboard to keep track of your net worth including cash, stocks, ETFs and cryptocurrencies across multiple platforms. + Ghostfolio는 여러 플랫폼에 분산된 현금, 주식, ETF, 암호화폐를 포함한 순자산을 추적할 수 있는 개인 재무 대시보드입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 5 + + + + app, asset, cryptocurrency, dashboard, etf, finance, management, performance, portfolio, software, stock, trading, wealth, web3 + 앱, 자산, 암호화폐, 대시보드, ETF, 금융, 관리, 성과, 포트폴리오, 소프트웨어, 주식, 트레이딩, 자산관리, 웹3 + + apps/client/src/app/pages/i18n/i18n-page.html + 10 + + + + Open Source Wealth Management Software + 오픈 소스 자산관리 소프트웨어 + + apps/client/src/app/pages/i18n/i18n-page.html + 237 + + + + Manage your wealth like a boss + 전문가처럼 자산을 관리하세요 + + apps/client/src/app/pages/landing/landing-page.html + 6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio는 프라이버시를 최우선으로 하는 오픈 소스 개인 재무 대시보드입니다. 자산배분을 분석하고 순자산을 파악하여, 데이터 기반의 합리적인 투자 의사결정을 내리세요. + + apps/client/src/app/pages/landing/landing-page.html + 10 + + + + Edit access + 접근 권한 편집 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 11 + + + + Monthly Active Users + 월간 활성 사용자 + + apps/client/src/app/pages/landing/landing-page.html + 69 + + + + Stars on GitHub + 깃허브 스타 + + apps/client/src/app/pages/landing/landing-page.html + 87 + + + apps/client/src/app/pages/open/open-page.html + 103 + + + + Pulls on Docker Hub + 도커 허브에서 가져오기 + + apps/client/src/app/pages/landing/landing-page.html + 105 + + + apps/client/src/app/pages/open/open-page.html + 117 + + + + As seen in + 에서 볼 수 있듯이 + + apps/client/src/app/pages/landing/landing-page.html + 114 + + + + Protect your assets. Refine your personal investment strategy. + 자산을 보호하세요. 개인 투자 전략을 정교화하세요. + + apps/client/src/app/pages/landing/landing-page.html + 124 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio는 바쁜 사람들이 추적당하지 않으면서도 주식, ETF, 암호화폐를 손쉽게 추적할 수 있도록 돕습니다. + + apps/client/src/app/pages/landing/landing-page.html + 128 + + + + 360° View + 360° 보기 + + apps/client/src/app/pages/landing/landing-page.html + 138 + + + + Get the full picture of your personal finances across multiple platforms. + 여러 플랫폼에 걸쳐 개인 재정에 대한 전체 그림을 얻으세요. + + apps/client/src/app/pages/landing/landing-page.html + 141 + + + + Web3 Ready + 웹3 준비 + + apps/client/src/app/pages/landing/landing-page.html + 149 + + + + Use Ghostfolio anonymously and own your financial data. + 익명으로 Ghostfolio를 사용하고 금융 데이터를 소유하세요. + + apps/client/src/app/pages/landing/landing-page.html + 152 + + + + Benefit from continuous improvements through a strong community. + 강력한 커뮤니티를 통해 지속적인 개선의 혜택을 누리세요. + + apps/client/src/app/pages/landing/landing-page.html + 162 + + + + Get access to 80’000+ tickers from over 50 exchanges + 50개 이상의 거래소에서 80,000개 이상의 티커에 접근하세요 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 84 + + + + Why Ghostfolio? + Ghostfolio인가요? + + apps/client/src/app/pages/landing/landing-page.html + 170 + + + + Ghostfolio is for you if you are... + Ghostfolio는 당신을 위한 것입니다... + + apps/client/src/app/pages/landing/landing-page.html + 172 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + 여러 플랫폼에서 주식, ETF 또는 암호화폐 거래 + + apps/client/src/app/pages/landing/landing-page.html + 178 + + + + pursuing a buy & hold strategy + 매수 후 보유 전략을 추구 + + apps/client/src/app/pages/landing/landing-page.html + 184 + + + + interested in getting insights of your portfolio composition + 포트폴리오 구성에 대한 인사이트가 필요하신가요 + + apps/client/src/app/pages/landing/landing-page.html + 189 + + + + valuing privacy and data ownership + 개인 정보 보호 및 데이터 소유권을 소중히 여깁니다. + + apps/client/src/app/pages/landing/landing-page.html + 194 + + + + into minimalism + 미니멀리즘으로 + + apps/client/src/app/pages/landing/landing-page.html + 197 + + + + caring about diversifying your financial resources + 재정 자원을 다양화하는 데 관심을 가짐 + + apps/client/src/app/pages/landing/landing-page.html + 201 + + + + interested in financial independence + 재정적 독립에 관심 + + apps/client/src/app/pages/landing/landing-page.html + 205 + + + + saying no to spreadsheets in + 의 스프레드시트에 거부 의사 표시 + + apps/client/src/app/pages/landing/landing-page.html + 209 + + + + still reading this list + 아직도 이 목록을 읽고 있어요 + + apps/client/src/app/pages/landing/landing-page.html + 212 + + + + Learn more about Ghostfolio + Ghostfolio에 대해 자세히 알아보기 + + apps/client/src/app/pages/landing/landing-page.html + 217 + + + + What our users are saying + 사용자의 이야기 + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Members from around the globe are using Ghostfolio Premium + 전 세계의 사용자들이 Ghostfolio 프리미엄을 사용하고 있습니다 + + apps/client/src/app/pages/landing/landing-page.html + 265 + + + + How does Ghostfolio work? + Ghostfolio는 어떻게 동작하나요? + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + Get started in only 3 steps + 단 3단계만으로 시작하세요 + + apps/client/src/app/pages/landing/landing-page.html + 284 + + + + less than + 미만 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 129 + + + + Sign up anonymously* + 익명으로 가입* + + apps/client/src/app/pages/landing/landing-page.html + 290 + + + + * no e-mail address nor credit card required + * 이메일 주소 및 신용카드 정보가 필요하지 않습니다 + + apps/client/src/app/pages/landing/landing-page.html + 292 + + + + Add any of your historical transactions + 과거 거래를 추가하세요. + + apps/client/src/app/pages/landing/landing-page.html + 304 + + + + Get valuable insights of your portfolio composition + 포트폴리오 구성에 대한 유의미한 인사이트를 확인하세요 + + apps/client/src/app/pages/landing/landing-page.html + 316 + + + + Are you ready? + 준비되셨나요? + + apps/client/src/app/pages/landing/landing-page.html + 330 + + + + At Ghostfolio, transparency is at the core of our values. We publish the source code as open source software (OSS) under the AGPL-3.0 license and we openly share aggregated key metrics of the platform’s operational status. + Ghostfolio는 투명성을 핵심 가치로 삼습니다. 우리는 소스 코드를 오픈 소스 소프트웨어로 공개하며, AGPL-3.0 라이선스 하에 배포합니다. 또한 플랫폼 운영 현황에 대한 집계된 핵심 지표를 공개적으로 공유합니다. + + apps/client/src/app/pages/open/open-page.html + 7 + + + + (Last 24 hours) + (지난 24시간) + + apps/client/src/app/pages/open/open-page.html + 37 + + + + Ghostfolio Status + 고스트폴리오 상태 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 62 + + + + with your university e-mail address + 대학 이메일 주소로 + + apps/client/src/app/pages/pricing/pricing-page.html + 351 + + + + Active Users + 활성 사용자 + + apps/client/src/app/pages/open/open-page.html + 40 + + + apps/client/src/app/pages/open/open-page.html + 62 + + + + (Last 30 days) + (지난 30일) + + apps/client/src/app/pages/open/open-page.html + 48 + + + apps/client/src/app/pages/open/open-page.html + 59 + + + + and a safe withdrawal rate (SWR) of + 안전 인출률(SWR)은 다음과 같습니다. + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 108 + + + + New Users + 신규 사용자 + + apps/client/src/app/pages/open/open-page.html + 51 + + + + Users in Slack community + 슬랙 커뮤니티의 사용자 + + apps/client/src/app/pages/open/open-page.html + 75 + + + + Job ID + 작업 ID + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 34 + + + + Contributors on GitHub + 깃허브의 기여자 + + apps/client/src/app/pages/open/open-page.html + 89 + + + + (Last 90 days) + (지난 90일) + + apps/client/src/app/pages/open/open-page.html + 127 + + + + Uptime + 가동 시간 + + apps/client/src/app/pages/open/open-page.html + 132 + + + + Activities + 활동 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 86 + + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 115 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 228 + + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 45 + + + apps/client/src/app/components/admin-users/admin-users.html + 118 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 231 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 342 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 75 + + + apps/client/src/app/pages/portfolio/activities/activities-page.html + 4 + + + libs/common/src/lib/routes/routes.ts + 128 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 119 + + + + Do you really want to delete these activities? + 정말로 이 활동을 삭제하시겠습니까? + + libs/ui/src/lib/activities-table/activities-table.component.ts + 278 + + + + Update activity + 활동 업데이트 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 10 + + + + Stocks, ETFs, bonds, cryptocurrencies, commodities + 주식, ETF, 채권, 암호화폐, 원자재 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 25 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 65 + + + + One-time fee, annual account fees + 일회성 수수료, 연간 계정 수수료 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 33 + + + + Distribution of corporate earnings + 기업 수익 분배 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 41 + + + + Revenue for lending out money + 이자 수익 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 49 + + + + Mortgages, personal loans, credit cards + 모기지, 개인 대출, 신용카드 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 57 + + + + Luxury items, real estate, private companies + 명품, 부동산, 민간 기업 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 73 + + + + Update Cash Balance + 현금 잔액 업데이트 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 112 + + + + Unit Price + 단가 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 214 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 217 + + + + Import Activities + 활동 가져오기 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 92 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 9 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 383 + + + + Import Dividends + 배당금 가져오기 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 137 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 29 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 397 + + + + Importing data... + 데이터 가져오는 중... + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 175 + + + + Import has been completed + 가져오기가 완료되었습니다. + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 185 + + + + or start a discussion at + 또는 다음에서 토론을 시작하세요. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 94 + + + + Validating data... + 데이터 유효성을 검사하는 중... + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts + 299 + + + + Select Holding + 보유 종목 선택 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 19 + + + + Select File + 파일 선택 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 21 + + + + Holding + 보유 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 32 + + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 + + + + Load Dividends + 배당금 불러오기 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 68 + + + + Choose or drop a file here + 여기에 파일을 선택하거나 드롭하세요. + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 84 + + + + The following file formats are supported: + 다음 파일 형식이 지원됩니다. + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 90 + + + + Select Dividends + 배당금 선택 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 113 + + + + Select Activities + 활동 선택 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 115 + + + + Back + 뒤쪽에 + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 146 + + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 182 + + + + Allocations + 할당 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 4 + + + apps/client/src/app/pages/portfolio/allocations/allocations-page.routes.ts + 12 + + + libs/common/src/lib/routes/routes.ts + 133 + + + + Proportion of Net Worth + 순자산 비율 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 12 + + + + By Platform + 플랫폼별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 44 + + + + By Currency + 통화별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 63 + + + + By Asset Class + 자산 클래스별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 85 + + + + By Holding + 보유 종목별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 107 + + + + By Sector + 부문별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 130 + + + + By Continent + 대륙별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 153 + + + + By Market + 시장별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 175 + + + + Regions + 지역 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 198 + + + apps/client/src/app/pages/public/public-page.html + 151 + + + + Exclude from Analysis + 분석에서 제외 + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 90 + + + libs/ui/src/lib/i18n.ts + 17 + + + + Developed Markets + 선진시장 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 222 + + + apps/client/src/app/pages/public/public-page.html + 168 + + + + Latest activities + 최신 활동 + + apps/client/src/app/pages/public/public-page.html + 211 + + + + Emerging Markets + 신흥시장 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 231 + + + apps/client/src/app/pages/public/public-page.html + 177 + + + + Other Markets + 기타 시장 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 240 + + + apps/client/src/app/pages/public/public-page.html + 186 + + + + By Account + 계정별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 286 + + + + By ETF Provider + ETF 제공자별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 306 + + + + By Country + 국가별 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 264 + + + + Analysis + 분석 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 2 + + + libs/common/src/lib/routes/routes.ts + 138 + + + + Looking for a student discount? + 학생 할인을 찾고 계십니까? + + apps/client/src/app/pages/pricing/pricing-page.html + 345 + + + + Dividend + 배당금 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 81 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 186 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 365 + + + apps/client/src/app/pages/features/features-page.html + 63 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 202 + + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 75 + + + libs/ui/src/lib/i18n.ts + 38 + + + + annual interest rate + 연간 이자율 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 185 + + + + Deposit + 보증금 + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 377 + + + + Monthly + 월간 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 90 + + + + Yearly + 매년 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 91 + + + + Top + 상위 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 239 + + + + Bottom + 하위 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + + + Portfolio Evolution + 포트폴리오 진화 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 341 + + + + Investment Timeline + 투자 일정 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 368 + + + + Current Streak + 현재 연속 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 389 + + + + Longest Streak + 최장 연속 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 398 + + + + Dividend Timeline + 배당 일정 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 425 + + + + FIRE + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 4 + + + + Calculator + 계산자 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 7 + + + + Pricing + 가격 + + apps/client/src/app/components/footer/footer.component.html + 49 + + + apps/client/src/app/components/header/header.component.html + 105 + + + apps/client/src/app/components/header/header.component.html + 313 + + + apps/client/src/app/components/header/header.component.html + 389 + + + apps/client/src/app/pages/pricing/pricing-page.routes.ts + 12 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 287 + + + libs/common/src/lib/routes/routes.ts + 271 + + + + Pricing Plans + 가격 계획 + + apps/client/src/app/pages/pricing/pricing-page.html + 4 + + + + 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. + 공식 Ghostfolio 프리미엄 클라우드 서비스는 시작하는 가장 쉬운 방법입니다. 시간이 절약되므로 이는 대부분의 사람들에게 최선의 선택이 될 것입니다. 수익은 호스팅 인프라 및 전문 데이터 제공업체의 운영 비용을 충당하고 지속적인 개발 자금을 조달하는 데 사용됩니다. + + apps/client/src/app/pages/pricing/pricing-page.html + 7 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + 자체 인프라에서 Ghostfolio를 운영하고 싶다면, 깃허브에서 소스 코드와 추가 안내를 확인하세요. + + apps/client/src/app/pages/pricing/pricing-page.html + 14 + + + + For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. + 자체 인프라에서 Ghostfolio를 실행하기를 선호하는 기술에 정통한 투자자를 위한 것입니다. + + apps/client/src/app/pages/pricing/pricing-page.html + 26 + + + + Unlimited Transactions + 무제한 거래 + + apps/client/src/app/pages/pricing/pricing-page.html + 35 + + + apps/client/src/app/pages/pricing/pricing-page.html + 127 + + + + Unlimited Accounts + 무제한 계정 + + apps/client/src/app/pages/pricing/pricing-page.html + 39 + + + apps/client/src/app/pages/pricing/pricing-page.html + 131 + + + + Portfolio Performance + 포트폴리오 성과 + + apps/client/src/app/pages/pricing/pricing-page.html + 43 + + + apps/client/src/app/pages/pricing/pricing-page.html + 135 + + + + Data Import and Export + 데이터 가져오기 및 내보내기 + + apps/client/src/app/pages/pricing/pricing-page.html + 63 + + + apps/client/src/app/pages/pricing/pricing-page.html + 139 + + + + Community Support + 커뮤니티 지원 + + apps/client/src/app/pages/pricing/pricing-page.html + 80 + + + + Self-hosted, update manually. + 자체 호스팅, 수동으로 업데이트합니다. + + apps/client/src/app/pages/pricing/pricing-page.html + 84 + + + + Free + 무료 + + apps/client/src/app/pages/pricing/pricing-page.html + 86 + + + apps/client/src/app/pages/pricing/pricing-page.html + 152 + + + + For new investors who are just getting started with trading. + 이제 막 거래를 시작한 신규 투자자를 위한 제품입니다. + + apps/client/src/app/pages/pricing/pricing-page.html + 119 + + + + Fully managed Ghostfolio cloud offering. + 완전 관리형 Ghostfolio 클라우드 제품. + + apps/client/src/app/pages/pricing/pricing-page.html + 150 + + + apps/client/src/app/pages/pricing/pricing-page.html + 255 + + + + For ambitious investors who need the full picture of their financial assets. + 자신의 금융 자산에 대한 전체 그림이 필요한 야심찬 투자자를 위한 제품입니다. + + apps/client/src/app/pages/pricing/pricing-page.html + 193 + + + + Email and Chat Support + 이메일 및 채팅 지원 + + apps/client/src/app/pages/pricing/pricing-page.html + 251 + + + + Renew Plan + 플랜 갱신 + + apps/client/src/app/components/header/header.component.html + 191 + + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 19 + + + apps/client/src/app/pages/pricing/pricing-page.html + 282 + + + + One-time payment, no auto-renewal. + 일회성 결제, 자동 갱신 없음. + + apps/client/src/app/pages/pricing/pricing-page.html + 288 + + + + It’s free. + 무료입니다. + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + + + Hello, has shared a Portfolio with you! + 안녕하세요. 님이 포트폴리오를 공유했습니다! + + apps/client/src/app/pages/public/public-page.html + 5 + + + + Continents + 대륙 + + apps/client/src/app/pages/public/public-page.html + 132 + + + + Sustainable retirement income + 지속 가능한 퇴직 소득 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 41 + + + + Ghostfolio empowers you to keep track of your wealth. + Ghostfolio는 귀하의 재산을 추적할 수 있도록 해줍니다. + + apps/client/src/app/pages/public/public-page.html + 238 + + + + Registration + 등록 + + apps/client/src/app/components/admin-users/admin-users.html + 80 + + + libs/common/src/lib/routes/routes.ts + 281 + + + + Continue with Google + 구글로 계속하기 + + apps/client/src/app/pages/register/register-page.html + 43 + + + + Copy to clipboard + 클립보드에 복사 + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 88 + + + + Personal Finance Tools + 개인 금융 도구 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 351 + + + libs/common/src/lib/routes/routes.ts + 329 + + + + open-source-alternative-to + open-source-alternative-to + kebab-case + + libs/common/src/lib/routes/routes.ts + 320 + + + libs/common/src/lib/routes/routes.ts + 324 + + + + Discover Open Source Alternatives for Personal Finance Tools + 개인 금융 도구를 위한 오픈 소스 대안을 찾아보세요 + + apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html + 5 + + + + This overview page features a curated collection of personal finance tools compared to the open source alternative Ghostfolio. If you value transparency, data privacy, and community collaboration, Ghostfolio provides an excellent opportunity to take control of your financial management. + 이 개요 페이지에는 오픈 소스 대안인 Ghostfolio와 비교하여 엄선된 개인 금융 도구 컬렉션이 포함되어 있습니다. 투명성, 데이터 개인 정보 보호 및 커뮤니티 협업을 중요하게 생각한다면 Ghostfolio는 재무 관리를 제어할 수 있는 훌륭한 기회를 제공합니다. + + apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html + 9 + + + + Explore the links below to compare a variety of personal finance tools with Ghostfolio. + Ghostfolio와 다양한 개인 금융 도구를 비교하려면 아래 링크를 탐색하십시오. + + apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html + 17 + + + + Open Source Alternative to + 의 오픈 소스 대안 + + apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html + 42 + + + + The Open Source Alternative to + 오픈 소스 대안 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 8 + + + + Are you looking for an open source alternative to ? Ghostfolio is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a wide range of functionalities to help you make informed decisions and take control of your financial future. + 에 대한 오픈소스 대안을 찾고 계십니까? Ghostfolio는 개인에게 투자를 추적, 분석, 최적화할 수 있는 포괄적인 플랫폼을 제공하는 강력한 포트폴리오 관리 도구입니다. 숙련된 투자자이든 이제 막 시작한 투자자이든 Ghostfolio는 직관적인 사용자 인터페이스와 다양한 기능을 제공하여 정보에 입각한 결정을 내리고 재정적 미래를 관리하는 데 도움을 줍니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 19 + + + + Ghostfolio is an open source software (OSS), providing a cost-effective alternative to making it particularly suitable for individuals on a tight budget, such as those pursuing Financial Independence, Retire Early (FIRE). By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience. + Ghostfolio는 오픈 소스 소프트웨어로, 에 대한 비용 효율적인 대안을 제공하므로 재정적 독립, 조기 퇴직(FIRE)을 추구하는 사람과 같이 예산이 부족한 개인에게 특히 적합합니다. Ghostfolio는 개발자 커뮤니티와 개인 금융 애호가들의 공동 노력을 활용하여 기능, 보안 및 사용자 경험을 지속적으로 향상시킵니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 33 + + + + Let’s dive deeper into the detailed Ghostfolio vs comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to . We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements. + Ghostfolio가 과 관련하여 어떻게 위치하는지 철저하게 이해하기 위해 아래의 자세한 Ghostfolio 대 비교표를 자세히 살펴보겠습니다. 우리는 기능, 데이터 개인 정보 보호, 가격 등과 같은 다양한 측면을 탐색하여 귀하의 개인 요구 사항에 맞는 정보를 바탕으로 선택할 수 있도록 할 것입니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 44 + + + + per month + 매월 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 94 + + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 172 + + + + Ghostfolio vs comparison table + Ghostfolio와 비교표 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 55 + + + + Website of Thomas Kaul + 토마스 카울의 웹사이트 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 44 + + + + Founded + 설립 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 77 + + + + Origin + 기원 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 82 + + + + Region + 지역 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 87 + + + + Available in + 사용 가능 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 109 + + + + ✅ Yes + ✅ 예 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 140 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 157 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 179 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 196 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 218 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 235 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 257 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 274 + + + + ❌ No + ❌ 아니요 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 147 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 164 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 186 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 203 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 225 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 242 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 264 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 281 + + + + Self-Hosting + 셀프 호스팅 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 171 + + + + Use anonymously + 익명으로 사용 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 210 + + + + Free Plan + 무료 플랜 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 249 + + + + Starting from + 에서 시작 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 289 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 294 + + + + Notes + 메모 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 302 + + + + Please note that the information provided in the Ghostfolio vs comparison table is based on our independent research and analysis. This website is not affiliated with or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on GitHub. + Ghostfolio와 비교표에 제공된 정보는 당사의 독립적인 연구 및 분석을 기반으로 한 것입니다. 이 웹사이트는 또는 비교에 언급된 다른 제품과 관련이 없습니다. 개인 금융 도구의 환경이 발전함에 따라 각 제품 페이지에서 직접 특정 세부 정보나 변경 사항을 확인하는 것이 중요합니다. 데이터를 새로 고쳐야 합니까? 깃허브에서 정확한 데이터를 유지할 수 있도록 도와주세요. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 312 + + + + Ready to take your investments to the next level? + 투자다음 단계로 발전시킬 준비가 되셨나요? + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 325 + + + + Effortlessly track, analyze, and visualize your wealth with Ghostfolio. + Ghostfolio를 사용하여 귀하의 재산을 쉽게 추적, 분석 및 시각화하십시오. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 329 + + + + Switzerland + 스위스 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 57 + + + libs/ui/src/lib/i18n.ts + 99 + + + + Global + 글로벌 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 58 + + + libs/ui/src/lib/i18n.ts + 18 + + + + Resources + 리소스 + + apps/client/src/app/components/footer/footer.component.html + 14 + + + apps/client/src/app/components/header/header.component.html + 88 + + + apps/client/src/app/components/header/header.component.html + 301 + + + apps/client/src/app/pages/resources/overview/resources-overview.component.html + 4 + + + libs/common/src/lib/routes/routes.ts + 332 + + + + Membership + 멤버십 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 48 + + + libs/common/src/lib/routes/routes.ts + 31 + + + libs/ui/src/lib/membership-card/membership-card.component.html + 40 + + + + Request it + 요청하세요 + + apps/client/src/app/pages/pricing/pricing-page.html + 347 + + + + Access + 입장 + + libs/common/src/lib/routes/routes.ts + 26 + + + + My Ghostfolio + 나의 고스트폴리오 + + apps/client/src/app/components/header/header.component.html + 277 + + + apps/client/src/app/pages/user-account/user-account-page.routes.ts + 33 + + + + Oops, authentication has failed. + 앗, 인증에 실패했습니다. + + apps/client/src/app/pages/webauthn/webauthn-page.html + 19 + + + + Try again + 다시 시도하세요 + + apps/client/src/app/pages/webauthn/webauthn-page.html + 27 + + + + Go back to Home Page + 홈 페이지로 돌아가기 + + apps/client/src/app/pages/webauthn/webauthn-page.html + 33 + + + + Do you really want to delete this account balance? + 정말로 이 계정 잔액을 삭제하시겠습니까? + + libs/ui/src/lib/account-balances/account-balances.component.ts + 120 + + + + Export Activities + 수출 활동 + + libs/ui/src/lib/activities-table/activities-table.component.html + 41 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 411 + + + + Export Drafts as ICS + 초안을 달력 파일로 내보내기 + + libs/ui/src/lib/activities-table/activities-table.component.html + 54 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 424 + + + + Draft + 초안 + + libs/ui/src/lib/activities-table/activities-table.component.html + 144 + + + + Clone + 클론 + + libs/ui/src/lib/activities-table/activities-table.component.html + 463 + + + + Export Draft as ICS + 초안을 달력 파일로 내보내기 + + libs/ui/src/lib/activities-table/activities-table.component.html + 473 + + + + Do you really want to delete this activity? + 정말로 이 활동을 삭제하시겠습니까? + + libs/ui/src/lib/activities-table/activities-table.component.ts + 288 + + + + Asset Profiles + 자산 프로필 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 106 + + + libs/ui/src/lib/assistant/assistant.html + 140 + + + + 50-Day Trend + 50일 추세 + + libs/ui/src/lib/benchmark/benchmark.component.html + 32 + + + + 200-Day Trend + 200일 추세 + + libs/ui/src/lib/benchmark/benchmark.component.html + 61 + + + + , + , + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 145 + + + + Last All Time High + 마지막 역대 최고치 + + libs/ui/src/lib/benchmark/benchmark.component.html + 90 + + + + Change from All Time High + 역대 최고치에서 변화 + + libs/ui/src/lib/benchmark/benchmark.component.html + 117 + + + + contact us + 저희에게 연락주세요 + + apps/client/src/app/pages/pricing/pricing-page.html + 339 + + + + from ATH + ATH에서 + + libs/ui/src/lib/benchmark/benchmark.component.html + 119 + + + + Market data provided by + 시장 데이터 제공: + + libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html + 2 + + + + Savings Rate per Month + 월별 저축률 + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 10 + + + + Annual Interest Rate + 연이자율 + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 21 + + + + Retirement Date + 퇴직일 + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 32 + + + + Projected Total Amount + 예상총액 + + libs/ui/src/lib/fire-calculator/fire-calculator.component.html + 59 + + + + Interest + 관심 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 69 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 352 + + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 387 + + + libs/ui/src/lib/i18n.ts + 40 + + + + Savings + 저금 + + libs/ui/src/lib/fire-calculator/fire-calculator.component.ts + 397 + + + + Allocation + 배당 + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 241 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 122 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 40 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 116 + + + + Show all + 모두 표시 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 221 + + + + Account + 계정 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 85 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 315 + + + libs/ui/src/lib/i18n.ts + 4 + + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 4 + + + + Asia-Pacific + 아시아·태평양 + + libs/ui/src/lib/i18n.ts + 5 + + + + Asset Class + 자산 클래스 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 114 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 237 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 328 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 242 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 290 + + + libs/ui/src/lib/i18n.ts + 6 + + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + + + + Asset Sub Class + 자산 하위 클래스 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 123 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 246 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 344 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 251 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 309 + + + libs/ui/src/lib/i18n.ts + 7 + + + + Core + 핵심 + + libs/ui/src/lib/i18n.ts + 10 + + + + Switch to Ghostfolio Premium or Ghostfolio Open Source easily + Ghostfolio 프리미엄 또는 Ghostfolio Open Source로 쉽게 전환하세요 + + libs/ui/src/lib/i18n.ts + 12 + + + + Switch to Ghostfolio Premium easily + Ghostfolio 프리미엄으로 쉽게 전환하세요 + + libs/ui/src/lib/i18n.ts + 13 + + + + Switch to Ghostfolio Open Source or Ghostfolio Basic easily + Ghostfolio Open Source 또는 Ghostfolio Basic으로 쉽게 전환하세요 + + libs/ui/src/lib/i18n.ts + 14 + + + + Emergency Fund + 비상자금 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 164 + + + apps/client/src/app/pages/features/features-page.html + 89 + + + libs/ui/src/lib/i18n.ts + 16 + + + + Grant + 승인하다 + + libs/ui/src/lib/i18n.ts + 19 + + + + Higher Risk + 더 높은 위험 + + libs/ui/src/lib/i18n.ts + 20 + + + + This activity already exists. + 이 활동은 이미 존재합니다. + + libs/ui/src/lib/i18n.ts + 21 + + + + Japan + 일본 + + libs/ui/src/lib/i18n.ts + 92 + + + + Lower Risk + 위험 감소 + + libs/ui/src/lib/i18n.ts + 22 + + + + Month + + + libs/ui/src/lib/i18n.ts + 23 + + + + Months + 개월 + + libs/ui/src/lib/i18n.ts + 24 + + + + Other + 다른 + + libs/ui/src/lib/i18n.ts + 25 + + + libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts + 437 + + + + Preset + 프리셋 + + libs/ui/src/lib/i18n.ts + 27 + + + + Retirement Provision + 퇴직금 + + libs/ui/src/lib/i18n.ts + 28 + + + + Satellite + 위성 + + libs/ui/src/lib/i18n.ts + 29 + + + + Symbol + 상징 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 68 + + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 74 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 168 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 37 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 315 + + + libs/ui/src/lib/i18n.ts + 30 + + + + Tag + 꼬리표 + + libs/ui/src/lib/i18n.ts + 31 + + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + + + + Year + 년도 + + libs/ui/src/lib/i18n.ts + 32 + + + + View Details + 세부정보 보기 + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + + libs/ui/src/lib/accounts-table/accounts-table.component.html + 307 + + + + Years + 연령 + + libs/ui/src/lib/i18n.ts + 33 + + + + Sign in with OpenID Connect + OpenID Connect로 로그인 + + apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html + 55 + + + + Buy + 구입하다 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 31 + + + libs/ui/src/lib/i18n.ts + 37 + + + + Fee + 요금 + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 262 + + + libs/ui/src/lib/activities-table/activities-table.component.html + 241 + + + libs/ui/src/lib/i18n.ts + 39 + + + + Valuable + 귀중한 + + libs/ui/src/lib/i18n.ts + 43 + + + + Liability + 책임 + + libs/ui/src/lib/i18n.ts + 41 + + + + Sell + 팔다 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 44 + + + libs/ui/src/lib/i18n.ts + 42 + + + + Cash + 현금 + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 212 + + + libs/ui/src/lib/i18n.ts + 55 + + + + Commodity + 상품 + + libs/ui/src/lib/i18n.ts + 47 + + + + Equity + 주식 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 57 + + + libs/ui/src/lib/i18n.ts + 48 + + + + Fixed Income + 채권 + + libs/ui/src/lib/i18n.ts + 49 + + + + Real Estate + 부동산 + + libs/ui/src/lib/i18n.ts + 51 + + + + Authentication + 입증 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 35 + + + + Bond + 노예 + + libs/ui/src/lib/i18n.ts + 54 + + + + Cryptocurrency + 암호화폐 + + libs/ui/src/lib/i18n.ts + 57 + + + + ETF + ETF + + libs/ui/src/lib/i18n.ts + 58 + + + + Mutual Fund + 뮤추얼 펀드 + + libs/ui/src/lib/i18n.ts + 59 + + + + Precious Metal + 귀금속 + + libs/ui/src/lib/i18n.ts + 60 + + + + Private Equity + 사모펀드 + + libs/ui/src/lib/i18n.ts + 61 + + + + Stock + 재고 + + libs/ui/src/lib/i18n.ts + 62 + + + + Africa + 아프리카 + + libs/ui/src/lib/i18n.ts + 69 + + + + Asia + 아시아 + + libs/ui/src/lib/i18n.ts + 70 + + + + Europe + 유럽 + + libs/ui/src/lib/i18n.ts + 71 + + + + North America + 북미 + + libs/ui/src/lib/i18n.ts + 72 + + + + If you retire today, you would be able to withdraw + 오늘 퇴사하면 탈퇴 가능 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 68 + + + + Oceania + 오세아니아 + + libs/ui/src/lib/i18n.ts + 73 + + + + South America + 남아메리카 + + libs/ui/src/lib/i18n.ts + 74 + + + + Extreme Fear + 극심한 공포 + + libs/ui/src/lib/i18n.ts + 106 + + + + Extreme Greed + 극도의 탐욕 + + libs/ui/src/lib/i18n.ts + 107 + + + + Neutral + 중립적 + + libs/ui/src/lib/i18n.ts + 110 + + + + Valid until + 유효기간 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 74 + + + libs/ui/src/lib/membership-card/membership-card.component.html + 45 + + + + Time to add your first activity. + 첫 번째 활동을 추가할 시간입니다. + + libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html + 12 + + + + No data available + 사용 가능한 데이터가 없습니다. + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 250 + + + apps/client/src/app/pages/public/public-page.html + 196 + + + libs/ui/src/lib/benchmark/benchmark.component.html + 209 + + + libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts + 439 + + + libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts + 452 + + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 181 + + + + If a translation is missing, kindly support us in extending it here. + 번역이 누락된 경우 여기에서 번역을 확장할 수 있도록 지원해 주시기 바랍니다. + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 59 + + + + Date Range + 기간 + + libs/ui/src/lib/assistant/assistant.html + 170 + + + + The current market price is + 현재 시장가격은 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 672 + + + + Test + 시험 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 511 + + + + Oops! Could not grant access. + 이런! 액세스 권한을 부여할 수 없습니다. + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts + 141 + + + + Argentina + 아르헨티나 + + libs/ui/src/lib/i18n.ts + 78 + + + + Restricted view + 제한된 보기 + + apps/client/src/app/components/access-table/access-table.component.html + 26 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 40 + + + + Permission + 허가 + + apps/client/src/app/components/access-table/access-table.component.html + 18 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 38 + + + + Private + 사적인 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 30 + + + + Job Queue + 작업 대기열 + + libs/common/src/lib/routes/routes.ts + 46 + + + + Market data is delayed for + 시장 데이터가 지연됩니다. + + apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts + 95 + + + + Absolute Currency Performance + 절대적인 통화 성과 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 145 + + + + Close Holding + 닫기 보유 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 442 + + + + Absolute Asset Performance + 절대자산성과 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 102 + + + + Investment + 투자 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 171 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 60 + + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 80 + + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 96 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 88 + + + + here + 여기 + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + + + Asset Performance + 자산 성과 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 124 + + + + Currency Performance + 통화 성과 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 170 + + + + Year to date + 연초 현재 + + libs/ui/src/lib/assistant/assistant.component.ts + 377 + + + + Week to date + 이번주 현재까지 + + libs/ui/src/lib/assistant/assistant.component.ts + 369 + + + + Month to date + 월간 누계 + + libs/ui/src/lib/assistant/assistant.component.ts + 373 + + + + MTD + MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + + libs/ui/src/lib/assistant/assistant.component.ts + 373 + + + + WTD + WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + + libs/ui/src/lib/assistant/assistant.component.ts + 369 + + + + Oops! A data provider is experiencing the hiccups. + 이런! 데이터 제공업체에 문제가 발생했습니다. + + apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html + 8 + + + + View + 보다 + + apps/client/src/app/components/access-table/access-table.component.html + 23 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 42 + + + + Reset Filters + 필터 재설정 + + libs/ui/src/lib/assistant/assistant.html + 204 + + + + year + 년도 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 290 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 296 + + + libs/ui/src/lib/assistant/assistant.component.ts + 387 + + + + years + 연령 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + + + libs/ui/src/lib/assistant/assistant.component.ts + 411 + + + + Apply Filters + 필터 적용 + + libs/ui/src/lib/assistant/assistant.html + 217 + + + + self-hosting + self-hosting + kebab-case + + libs/common/src/lib/routes/routes.ts + 243 + + + libs/common/src/lib/routes/routes.ts + 246 + + + + Self-Hosting + 셀프 호스팅 + + apps/client/src/app/pages/faq/faq-page.component.ts + 60 + + + libs/common/src/lib/routes/routes.ts + 248 + + + + Data Gathering + 데이터 수집 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 604 + + + apps/client/src/app/components/admin-overview/admin-overview.html + 60 + + + + General + 일반적인 + + apps/client/src/app/pages/faq/faq-page.component.ts + 49 + + + + Cloud + 구름 + + apps/client/src/app/pages/faq/faq-page.component.ts + 54 + + + libs/common/src/lib/routes/routes.ts + 240 + + + + Oops! It looks like you’re making too many requests. Please slow down a bit. + 이런! 요청을 너무 많이 하시는 것 같습니다. 조금 천천히 해주세요. + + apps/client/src/app/core/http-response.interceptor.ts + 106 + + + + My Account + 내 계정 + + apps/client/src/app/pages/i18n/i18n-page.html + 13 + + + + Closed + 닫은 + + apps/client/src/app/components/home-holdings/home-holdings.component.ts + 65 + + + + Active + 활동적인 + + apps/client/src/app/components/home-holdings/home-holdings.component.ts + 64 + + + + Indonesia + 인도네시아 공화국 + + libs/ui/src/lib/i18n.ts + 90 + + + + Activity + 활동 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 229 + + + + Dividend Yield + 배당수익률 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 196 + + + + Execute Job + 작업 실행 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 220 + + + + This action is not allowed. + 이 작업은 허용되지 않습니다. + + apps/client/src/app/core/http-response.interceptor.ts + 67 + + + + Priority + 우선 사항 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 96 + + + + Liquidity + 유동성 + + libs/ui/src/lib/i18n.ts + 50 + + + + Buy and sell + 구매 및 판매 + + libs/ui/src/lib/i18n.ts + 8 + + + + {VAR_PLURAL, plural, =1 {activity} other {activities}} + {VAR_PLURAL, 복수형, =1 {활동} 기타 {활동}} + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 14 + + + + Delete Activities + 활동 삭제 + + libs/ui/src/lib/activities-table/activities-table.component.html + 69 + + + + Internationalization + 국제화 + + libs/common/src/lib/routes/routes.ts + 119 + + + + Close Account + 계정 폐쇄 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 307 + + + + Do you really want to close your Ghostfolio account? + 정말로 Ghostfolio 계정을 폐쇄하시겠습니까? + + apps/client/src/app/components/user-account-settings/user-account-settings.component.ts + 207 + + + + Danger Zone + 위험지대 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 272 + + + + Approximation based on the top holdings of each ETF + 각 ETF의 상위 보유량을 기준으로 한 근사치 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 340 + + + + By ETF Holding + ETF 홀딩으로 + + apps/client/src/app/pages/portfolio/allocations/allocations-page.html + 333 + + + + Join now or check out the example account + 지금 가입하거나 예시 계정을 확인하세요. + + apps/client/src/app/pages/landing/landing-page.html + 333 + + + + Include in + 포함 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 376 + + + + Oops! There was an error setting up biometric authentication. + 이런! 생체 인증을 설정하는 중에 오류가 발생했습니다. + + apps/client/src/app/components/user-account-settings/user-account-settings.component.ts + 335 + + + + Show more + 더 보기 + + libs/ui/src/lib/top-holdings/top-holdings.component.html + 174 + + + + Do you really want to delete these profiles? + 이 프로필을 정말로 삭제하시겠습니까? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 68 + + + + Delete Profiles + 프로필 삭제 + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 242 + + + + Oops! Could not delete profiles. + 이런! 프로필을 삭제할 수 없습니다. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 56 + + + + Benchmarks + 벤치마크 + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 127 + + + + Chart + 차트 + + apps/client/src/app/components/home-holdings/home-holdings.html + 19 + + + + Table + 테이블 + + apps/client/src/app/components/home-holdings/home-holdings.html + 16 + + + + Would you like to refine your personal investment strategy? + 개인 투자 전략개선하시겠습니까? + + apps/client/src/app/pages/public/public-page.html + 234 + + + + Wealth + 재산 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 98 + + + + Community + 지역 사회 + + apps/client/src/app/components/footer/footer.component.html + 80 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 85 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 90 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 94 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 98 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 102 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 106 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 110 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 114 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 118 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 123 + + + apps/client/src/app/pages/features/features-page.html + 276 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 85 + + + + Thailand + 태국 + + libs/ui/src/lib/i18n.ts + 100 + + + + India + 인도 + + libs/ui/src/lib/i18n.ts + 89 + + + + Austria + 오스트리아 + + libs/ui/src/lib/i18n.ts + 80 + + + + Poland + 폴란드 + + libs/ui/src/lib/i18n.ts + 95 + + + + Italy + 이탈리아 + + libs/ui/src/lib/i18n.ts + 91 + + + + User Experience + 사용자 경험 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 97 + + + + App + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 83 + + + + Tool + 도구 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 96 + + + + Investor + 투자자 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 89 + + + + Wealth Management + 자산관리 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 99 + + + + View Holding + 보유보기 + + libs/ui/src/lib/activities-table/activities-table.component.html + 450 + + + + Canada + 캐나다 + + libs/ui/src/lib/i18n.ts + 84 + + + + New Zealand + 뉴질랜드 + + libs/ui/src/lib/i18n.ts + 94 + + + + Netherlands + 네덜란드 + + libs/ui/src/lib/i18n.ts + 93 + + + + Alternative + 대안 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 82 + + + + Family Office + 패밀리오피스 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 86 + + + + Personal Finance + 개인 금융 + + apps/client/src/app/components/footer/footer.component.html + 7 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 92 + + + + Software + 소프트웨어 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 95 + + + + Romania + 루마니아 + + libs/ui/src/lib/i18n.ts + 96 + + + + Germany + 독일 + + libs/ui/src/lib/i18n.ts + 88 + + + + United States + 미국 + + libs/ui/src/lib/i18n.ts + 103 + + + + Budgeting + 예산 편성 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 84 + + + + Belgium + 벨기에 + + libs/ui/src/lib/i18n.ts + 81 + + + + Open Source + 오픈 소스 + + apps/client/src/app/pages/landing/landing-page.html + 159 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 90 + + + + Czech Republic + 체코 + + libs/ui/src/lib/i18n.ts + 85 + + + + Australia + 호주 + + libs/ui/src/lib/i18n.ts + 79 + + + + South Africa + 남아프리카 + + libs/ui/src/lib/i18n.ts + 98 + + + + Bulgaria + 불가리아 + + libs/ui/src/lib/i18n.ts + 83 + + + + Privacy + 은둔 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts + 93 + + + + Finland + 핀란드 + + libs/ui/src/lib/i18n.ts + 86 + + + + France + 프랑스 + + libs/ui/src/lib/i18n.ts + 87 + + + + Error + 오류 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 663 + + + + Cancel + 취소 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 161 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 609 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 57 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 44 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 27 + + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 17 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 66 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 105 + + + apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html + 65 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 345 + + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 48 + + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html + 46 + + + libs/ui/src/lib/i18n.ts + 9 + + + + Role + 역할 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 14 + + + + Yes + + + libs/ui/src/lib/i18n.ts + 34 + + + + , based on your total assets of + , 귀하의 총 자산을 기준으로 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 96 + + + + Inactive + 비활성 + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 88 + + + + Close + 닫다 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 611 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 59 + + + 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/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 19 + + + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html + 130 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 68 + + + 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 + 347 + + + libs/ui/src/lib/i18n.ts + 11 + + + + Activate + 활성화 + + apps/client/src/app/components/rule/rule.component.html + 83 + + + + Oops! Could not update access. + 이런! 액세스를 업데이트할 수 없습니다. + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts + 178 + + + + Deactivate + 비활성화 + + apps/client/src/app/components/rule/rule.component.html + 78 + + + + Threshold Max + 임계값 최대 + + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html + 93 + + + + send an e-mail to + 에게 이메일을 보내다 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 87 + + + + Customize + 사용자 정의 + + apps/client/src/app/components/rule/rule.component.html + 69 + + + + Portfolio Snapshot + 포트폴리오 스냅샷 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 56 + + + + Threshold Min + 임계값 최소 + + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html + 55 + + + + If you plan to open an account at + 에서 계좌를 개설할 계획이라면 + + apps/client/src/app/pages/pricing/pricing-page.html + 315 + + + + Performance with currency effect Performance + 환율 효과가 있는 실적 실적 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 83 + + + + Copy link to clipboard + 링크를 클립보드에 복사 + + apps/client/src/app/components/access-table/access-table.component.html + 84 + + + + Change with currency effect Change + 통화 효과로 변경 변경 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 63 + + + + From the beginning + 처음부터 + + apps/client/src/app/pages/public/public-page.html + 60 + + + + This year + 올해 + + apps/client/src/app/pages/public/public-page.html + 42 + + + + offers a free plan + 은(는) 무료 요금제를 제공합니다 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 256 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 273 + + + + does not offer a free plan + 은(는) 무료 요금제를 제공하지 않습니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 263 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 280 + + + + Ghostfolio is a lightweight wealth management application for individuals to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. + Ghostfolio는 개인이 주식, ETF 또는 암호화폐를 추적하고 확실한 데이터 기반 투자 결정을 내릴 수 있는 경량 자산 관리 애플리케이션입니다. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 10 + + + + , assuming a + , 가정 + + apps/client/src/app/pages/portfolio/fire/fire-page.html + 174 + + + + to use our referral link and get a Ghostfolio Premium membership for one year + 추천 링크를 사용하고 1년 동안 Ghostfolio 프리미엄 멤버십을 얻으려면 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + + + + can be self-hosted + 은(는) 자체 호스팅 가능 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 178 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 195 + + + + cannot be self-hosted + 은(는) 자체 호스팅할 수 없습니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 185 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 202 + + + + can be used anonymously + 은(는) 익명으로 사용할 수 있습니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 217 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 234 + + + + cannot be used anonymously + 은(는) 익명으로 사용할 수 없습니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 224 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 241 + + + + is not Open Source Software + 은(는) 오픈 소스 소프트웨어가 아닙니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 146 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 163 + + + + is Open Source Software + 은(는) 오픈 소스 소프트웨어입니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 139 + + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 156 + + + + This page has been archived. + 이 페이지는 보관되었습니다. + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 14 + + + + Oops! Invalid currency. + 이런! 통화가 잘못되었습니다. + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 48 + + + + Oops! Could not find any assets. + 이런! 자산을 찾을 수 없습니다. + + libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html + 40 + + + + Ukraine + 우크라이나 + + libs/ui/src/lib/i18n.ts + 101 + + + + Set API key + API 키 설정 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 171 + + + + Get access to 80’000+ tickers from over 50 exchanges + 50개 이상의 거래소에서 80,000개 이상의 티커에 접근하세요 + + libs/ui/src/lib/i18n.ts + 26 + + + + Data Providers + 데이터 제공자 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 4 + + + + Join now + 지금 가입하세요 + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 193 + + + + Glossary + 용어집 + + apps/client/src/app/pages/resources/glossary/resources-glossary.component.html + 4 + + + apps/client/src/app/pages/resources/resources-page.component.ts + 45 + + + libs/common/src/lib/routes/routes.ts + 293 + + + + glossary + glossary + kebab-case + + libs/common/src/lib/routes/routes.ts + 288 + + + libs/common/src/lib/routes/routes.ts + 291 + + + + Guides + 가이드 + + apps/client/src/app/pages/resources/guides/resources-guides.component.html + 4 + + + apps/client/src/app/pages/resources/resources-page.component.ts + 34 + + + libs/common/src/lib/routes/routes.ts + 301 + + + + guides + guides + kebab-case + + libs/common/src/lib/routes/routes.ts + 296 + + + libs/common/src/lib/routes/routes.ts + 299 + + + + Threshold range + 임계값 범위 + + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html + 9 + + + + Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy. + Ghostfolio X-ray는 정적 분석을 사용하여 포트폴리오의 잠재적인 문제와 위험을 찾아냅니다. 아래 규칙을 조정하고 개인 투자 전략에 맞게 맞춤 임계값을 설정하세요. + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 6 + + + + Please enter your Ghostfolio API key: + Ghostfolio API 키를 입력하세요: + + apps/client/src/app/pages/api/api-page.component.ts + 43 + + + + of + ~의 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 135 + + + + Do you really want to delete the API key? + API 키를 정말로 삭제하시겠습니까? + + apps/client/src/app/components/admin-settings/admin-settings.component.ts + 128 + + + + Remove API key + API 키 제거 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 161 + + + + daily requests + 일일 요청 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 137 + + + + Generate Ghostfolio Premium Data Provider API key for self-hosted environments... + 자체 호스팅 환경을 위한 Ghostfolio 프리미엄 데이터 공급자 API 키 생성... + + libs/ui/src/lib/membership-card/membership-card.component.html + 29 + + + + API Key + API 키 + + libs/ui/src/lib/membership-card/membership-card.component.html + 21 + + + + API Requests Today + 오늘의 API 요청 + + apps/client/src/app/components/admin-users/admin-users.html + 161 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 98 + + + + Could not generate an API key + API 키를 생성할 수 없습니다. + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 144 + + + + Do you really want to generate a new API key? + 정말로 새 API 키를 생성하시겠습니까? + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 167 + + + + Ghostfolio Premium Data Provider API Key + Ghostfolio 프리미엄 데이터 공급자 API 키 + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 162 + + + + Set this API key in your self-hosted environment: + 자체 호스팅 환경에서 이 API 키를 설정하세요. + + apps/client/src/app/components/user-account-membership/user-account-membership.component.ts + 159 + + + + rules align with your portfolio. + 규칙은 귀하의 포트폴리오와 일치합니다. + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 58 + + + + out of + 밖으로 + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 56 + + + + Save + 구하다 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 620 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 68 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 55 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 38 + + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 28 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts + 106 + + + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html + 136 + + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 81 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 116 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 356 + + + libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html + 48 + + + + Received Access + 수신된 액세스 + + apps/client/src/app/components/user-account-access/user-account-access.html + 53 + + + + Check the system status at + 시스템 상태를 확인하세요. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 57 + + + + Me + + + apps/client/src/app/components/header/header.component.html + 213 + + + apps/client/src/app/components/user-account-access/user-account-access.component.ts + 260 + + + + Please enter your Ghostfolio API key. + Ghostfolio API 키를 입력하세요. + + apps/client/src/app/components/admin-settings/admin-settings.component.ts + 147 + + + + AI prompt has been copied to the clipboard + AI 프롬프트가 클립보드에 복사되었습니다. + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 199 + + + + Link has been copied to the clipboard + 링크가 클립보드에 복사되었습니다. + + apps/client/src/app/components/access-table/access-table.component.ts + 101 + + + + Mode + 방법 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 461 + + + + Default Market Price + 기본 시장 가격 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 420 + + + + Selector + 선택자 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 477 + + + + Instant + 즉각적인 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 234 + + + + Lazy + 게으른 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 230 + + + + HTTP Request Headers + HTTP 요청 헤더 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 433 + + + + real-time + 실시간 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 234 + + + + end of day + 하루의 끝 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 230 + + + + Open Duck.ai + 오픈 Duck.ai + + apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts + 200 + + + + Create + 만들다 + + libs/ui/src/lib/tags-selector/tags-selector.component.html + 50 + + + + Change + 변화 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 143 + + + libs/ui/src/lib/treemap-chart/treemap-chart.component.ts + 368 + + + + Performance + 성능 + + apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html + 6 + + + apps/client/src/app/components/home-overview/home-overview.component.ts + 55 + + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 166 + + + libs/ui/src/lib/treemap-chart/treemap-chart.component.ts + 368 + + + libs/ui/src/lib/treemap-chart/treemap-chart.component.ts + 381 + + + + The project has been initiated by + 프로젝트는 다음에 의해 시작되었습니다. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 40 + + + + Copy AI prompt to clipboard for analysis + 분석을 위해 AI 프롬프트를 클립보드에 복사 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 67 + + + + Singapore + 싱가포르 + + libs/ui/src/lib/i18n.ts + 97 + + + + Armenia + 아르메니아 + + libs/ui/src/lib/i18n.ts + 77 + + + + British Virgin Islands + 영국령 버진아일랜드 + + libs/ui/src/lib/i18n.ts + 82 + + + + Copy portfolio data to clipboard for AI prompt + AI 프롬프트를 위해 포트폴리오 데이터를 클립보드에 복사 + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 42 + + + + I understand that if I lose my security token, I cannot recover my account + 보안 토큰을 분실하면 계정을 복구할 수 없다는 점을 이해합니다. + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 28 + + + + Please keep your security token safe. If you lose it, you will not be able to recover your account. + 보안 토큰을 안전하게 보관하세요. 분실한 경우 계정을 복구할 수 없습니다. + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 18 + + + + Here is your security token. It is only visible once, please store and keep it in a safe place. + 여기 보안 토큰이 있습니다. 한 번만 볼 수 있으므로 안전한 곳에 보관하여 보관하시기 바랍니다. + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 67 + + + + Continue + 계속하다 + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 57 + + + + Terms and Conditions + 이용약관 + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 15 + + + + Do you really want to generate a new security token for this user? + 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? + + apps/client/src/app/components/admin-users/admin-users.component.ts + 236 + + + + Find account, holding or page... + 계정, 보유 또는 페이지 찾기... + + libs/ui/src/lib/assistant/assistant.component.ts + 153 + + + + Security token + 보안 토큰 + + apps/client/src/app/components/admin-users/admin-users.component.ts + 231 + + + apps/client/src/app/components/user-account-access/user-account-access.component.ts + 170 + + + + Generate Security Token + 보안 토큰 생성 + + apps/client/src/app/components/admin-users/admin-users.html + 243 + + + + United Kingdom + 영국 + + libs/ui/src/lib/i18n.ts + 102 + + + + Terms of Service + 이용약관 + + apps/client/src/app/components/footer/footer.component.html + 62 + + + libs/common/src/lib/routes/routes.ts + 217 + + + + terms-of-service + terms-of-service + kebab-case + + libs/common/src/lib/routes/routes.ts + 212 + + + libs/common/src/lib/routes/routes.ts + 215 + + + + Terms of Service + 이용약관 + + apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.html + 5 + + + + and I agree to the Terms of Service. + 서비스 약관에 동의합니다. + + apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html + 34 + + + + () is already in use. + ()은(는) 이미 사용 중입니다. + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 599 + + + + An error occurred while updating to (). + ()로 업데이트하는 동안 오류가 발생했습니다. + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 607 + + + + Apply + 적용하다 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 153 + + + + with API access for + 다음에 대한 API 액세스 권한이 있는 + + apps/client/src/app/pages/pricing/pricing-page.html + 238 + + + + Data Gathering is off + 데이터 수집이 사용 중지되었습니다. + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 38 + + + + Performance Calculation + 성능 계산 + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 31 + + + + someone + 누구 + + apps/client/src/app/pages/public/public-page.component.ts + 59 + + + + Add asset to watchlist + 관심 목록에 자산 추가 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + 관심 목록 + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + apps/client/src/app/pages/features/features-page.html + 197 + + + libs/common/src/lib/routes/routes.ts + 110 + + + + Do you really want to delete this item? + 이 항목을 정말로 삭제하시겠습니까? + + libs/ui/src/lib/benchmark/benchmark.component.ts + 139 + + + + Log out + 로그아웃 + + apps/client/src/app/components/header/header.component.html + 329 + + + + Calculations are based on delayed market data and may not be displayed in real-time. + 계산은 지연된 시장 데이터를 기반으로 하며 실시간으로 표시되지 않을 수 있습니다. + + apps/client/src/app/components/home-market/home-market.html + 45 + + + apps/client/src/app/components/markets/markets.html + 54 + + + + changelog + changelog + kebab-case + + libs/common/src/lib/routes/routes.ts + 180 + + + libs/common/src/lib/routes/routes.ts + 183 + + + + Sync Demo User Account + 데모 사용자 계정 동기화 + + apps/client/src/app/components/admin-overview/admin-overview.html + 195 + + + + Demo user account has been synced. + 데모 사용자 계정이 동기화되었습니다. + + apps/client/src/app/components/admin-overview/admin-overview.component.ts + 275 + + + + Set up + 설정 + + apps/client/src/app/pages/i18n/i18n-page.html + 145 + + + + No emergency fund has been set up + 비상금은 마련되지 않았습니다 + + apps/client/src/app/pages/i18n/i18n-page.html + 147 + + + + An emergency fund has been set up + 비상금이 마련됐어요 + + apps/client/src/app/pages/i18n/i18n-page.html + 150 + + + + Fee Ratio + 수수료 비율 + + apps/client/src/app/pages/i18n/i18n-page.html + 152 + + + + The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) + 수수료가 초기 투자금(${feeRatio}%)의 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 154 + + + + The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) + 수수료는 초기 투자금의 ${thresholdMax}%(${feeRatio}%)를 초과하지 않습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 158 + + + + Quick Links + 빠른 링크 + + libs/ui/src/lib/assistant/assistant.html + 58 + + + + Live Demo + 라이브 데모 + + apps/client/src/app/pages/landing/landing-page.html + 48 + + + apps/client/src/app/pages/landing/landing-page.html + 349 + + + libs/common/src/lib/routes/routes.ts + 231 + + + + Open Source Alternative to + 오픈 소스 대안 + + libs/common/src/lib/routes/routes.ts + 326 + + + + Single Account + 단일 계정 + + apps/client/src/app/pages/i18n/i18n-page.html + 28 + + + + Your net worth is managed by a single account + 귀하의 순자산은 단일 계정으로 관리됩니다 + + apps/client/src/app/pages/i18n/i18n-page.html + 30 + + + + Your net worth is managed by ${accountsLength} accounts + 귀하의 순자산은 ${accountsLength} 계정에서 관리됩니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 36 + + + + personal-finance-tools + personal-finance-tools + kebab-case + + libs/common/src/lib/routes/routes.ts + 312 + + + libs/common/src/lib/routes/routes.ts + 315 + + + libs/common/src/lib/routes/routes.ts + 323 + + + + markets + markets + kebab-case + + libs/common/src/lib/routes/routes.ts + 304 + + + libs/common/src/lib/routes/routes.ts + 307 + + + + Get Access + 액세스 권한 얻기 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 27 + + + + Fuel your self-hosted Ghostfolio with a powerful data provider to access 80,000+ tickers from over 50 exchanges worldwide. + 자체 호스팅 Ghostfolio강력한 데이터 제공업체와 함께 활용하여 전 세계 50개 이상의 거래소에서 80,000개 이상의 시세에 액세스하세요. + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 16 + + + + Learn more + 자세히 알아보기 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 38 + + + + Limited Offer! + 한정 상품! + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 41 + + + apps/client/src/app/pages/pricing/pricing-page.html + 297 + + + + Get extra + 추가 구매 + + apps/client/src/app/components/user-account-membership/user-account-membership.html + 44 + + + apps/client/src/app/pages/pricing/pricing-page.html + 300 + + + + Unavailable + 없는 + + apps/client/src/app/components/data-provider-status/data-provider-status.component.html + 5 + + + + Available + 사용 가능 + + apps/client/src/app/components/data-provider-status/data-provider-status.component.html + 3 + + + + Current month + 이번 달 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + + + new + 새로운 + + apps/client/src/app/components/admin-settings/admin-settings.component.html + 67 + + + apps/client/src/app/pages/admin/admin-page.component.ts + 56 + + + + Investment + 투자 + + apps/client/src/app/pages/i18n/i18n-page.html + 15 + + + + Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) + 현재 투자의 ${thresholdMax}% 이상이 ${maxAccountName} (${maxInvestmentRatio}%)에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 17 + + + + The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% + 현재 투자의 주요 부분은 ${maxAccountName} (${maxInvestmentRatio}%)이며 ${thresholdMax}%를 초과하지 않습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 24 + + + + Equity + 주식 + + apps/client/src/app/pages/i18n/i18n-page.html + 41 + + + + The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 43 + + + + The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% + 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 47 + + + + The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 51 + + + + Fixed Income + 채권 + + apps/client/src/app/pages/i18n/i18n-page.html + 55 + + + + The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 57 + + + + The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% + 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 61 + + + + The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 66 + + + + Investment: Base Currency + 투자: 기본 통화 + + apps/client/src/app/pages/i18n/i18n-page.html + 85 + + + + The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + 현재 투자의 주요 부분이 기본 통화(${baseCurrency}의 ${baseCurrencyValueRatio}%)로 되어 있지 않습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 88 + + + + The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + 현재 투자의 주요 부분은 기본 통화(${baseCurrency}의 ${baseCurrencyValueRatio}%)입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 92 + + + + Investment + 투자 + + apps/client/src/app/pages/i18n/i18n-page.html + 95 + + + + Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) + 현재 투자의 ${thresholdMax}% 이상이 ${currency}(${maxValueRatio}%)에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 97 + + + + The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% + 현재 투자의 주요 부분은 ${currency} (${maxValueRatio}%)이며 ${thresholdMax}%를 초과하지 않습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 101 + + + + start + start + kebab-case + + libs/common/src/lib/routes/routes.ts + 336 + + + libs/common/src/lib/routes/routes.ts + 337 + + + + Generate + 생성하다 + + apps/client/src/app/components/user-account-access/user-account-access.html + 43 + + + + If you encounter a bug, would like to suggest an improvement or a new feature, please join the Ghostfolio Slack community, post to @ghostfolio_ + 버그가 발생하거나 개선 사항이나 새로운 기능을 제안하고 싶다면 Ghostfolio 슬랙 커뮤니티에 가입하고 @ghostfolio_에 게시하세요. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 69 + + + + Do you really want to generate a new security token? + 정말로 새로운 보안 토큰을 생성하시겠습니까? + + apps/client/src/app/components/user-account-access/user-account-access.component.ts + 175 + + + + Cryptocurrencies + 암호화폐 + + apps/client/src/app/components/markets/markets.component.ts + 53 + + + apps/client/src/app/pages/features/features-page.html + 51 + + + + Stocks + 주식 + + apps/client/src/app/components/markets/markets.component.ts + 52 + + + apps/client/src/app/pages/features/features-page.html + 15 + + + + + + + apps/client/src/app/components/admin-users/admin-users.html + 39 + + + + Manage Asset Profile + 자산 프로필 관리 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 466 + + + + Alternative Investment + 대체투자 + + libs/ui/src/lib/i18n.ts + 46 + + + + Collectible + 소장용 + + libs/ui/src/lib/i18n.ts + 56 + + + + Average Unit Price + 평균단가 + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts + 113 + + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 101 + + + + No results found... + 검색된 결과가 없습니다... + + libs/ui/src/lib/assistant/assistant.html + 51 + + + + Account Cluster Risks + 계정 클러스터 위험 + + apps/client/src/app/pages/i18n/i18n-page.html + 14 + + + + Asset Class Cluster Risks + 자산 클래스 클러스터 위험 + + apps/client/src/app/pages/i18n/i18n-page.html + 39 + + + + Currency Cluster Risks + 통화 클러스터 위험 + + apps/client/src/app/pages/i18n/i18n-page.html + 83 + + + + Economic Market Cluster Risks + 경제 시장 클러스터 위험 + + apps/client/src/app/pages/i18n/i18n-page.html + 106 + + + + Emergency Fund + 비상자금 + + apps/client/src/app/pages/i18n/i18n-page.html + 144 + + + + Fees + 수수료 + + apps/client/src/app/pages/i18n/i18n-page.html + 161 + + + + 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} + 귀하의 구매력은 ${thresholdMin} ${baseCurrency} 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power is 0 ${baseCurrency} + 귀하의 구매력은 0입니다 ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + 매수 가능 금액이 ${thresholdMin} ${baseCurrency}을(를) 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 80 + + + + Regional Market Cluster Risks + 지역 시장 클러스터 위험 + + apps/client/src/app/pages/i18n/i18n-page.html + 163 + + + + Developed Markets + 선진시장 + + apps/client/src/app/pages/i18n/i18n-page.html + 109 + + + + The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 112 + + + + The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% + 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 117 + + + + The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 122 + + + + Emerging Markets + 신흥시장 + + apps/client/src/app/pages/i18n/i18n-page.html + 127 + + + + The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 130 + + + + The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% + 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 135 + + + + The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 140 + + + + No accounts have been set up + 설정된 계정이 없습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 21 + + + + Your net worth is managed by 0 accounts + 귀하의 순자산은 0개의 계정에서 관리됩니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 33 + + + + Asia-Pacific + 아시아·태평양 + + apps/client/src/app/pages/i18n/i18n-page.html + 165 + + + + The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 167 + + + + The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 171 + + + + The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 175 + + + + Emerging Markets + 신흥시장 + + apps/client/src/app/pages/i18n/i18n-page.html + 180 + + + + The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 183 + + + + The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 187 + + + + The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 191 + + + + Europe + 유럽 + + apps/client/src/app/pages/i18n/i18n-page.html + 195 + + + + The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 유럽 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 197 + + + + The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + 현재 투자의 유럽 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 201 + + + + The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 유럽 시장 기여도(${valueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 205 + + + + Japan + 일본 + + apps/client/src/app/pages/i18n/i18n-page.html + 209 + + + + The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 일본 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 211 + + + + The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + 현재 투자의 일본 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 215 + + + + The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 일본 시장 기여도(${valueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 219 + + + + North America + 북미 + + apps/client/src/app/pages/i18n/i18n-page.html + 223 + + + + The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 225 + + + + The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 229 + + + + The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + + apps/client/src/app/pages/i18n/i18n-page.html + 233 + + + + Support Ghostfolio + 고스트폴리오 지원 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 166 + + + + Find Ghostfolio on GitHub + 깃허브에서 Ghostfolio 찾기 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 99 + + + apps/client/src/app/pages/about/overview/about-overview-page.html + 138 + + + + Ghostfolio is an independent & bootstrapped business + Ghostfolio는 독립적이고 부트스트랩된 사업입니다. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 157 + + + + Send an e-mail + 이메일 보내기 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 89 + + + apps/client/src/app/pages/about/overview/about-overview-page.html + 128 + + + + Registration Date + 등록일 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 26 + + + + Join the Ghostfolio Slack community + Ghostfolio 슬랙 커뮤니티에 참여하세요 + + apps/client/src/app/pages/about/overview/about-overview-page.html + 109 + + + + Follow Ghostfolio on LinkedIn + LinkedIn에서 Ghostfolio를 팔로우하세요. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 147 + + + + Follow Ghostfolio on X (formerly Twitter) + X(이전의 Twitter)에서 Ghostfolio를 팔로우하세요. + + apps/client/src/app/pages/about/overview/about-overview-page.html + 118 + + + + + diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 169ab80c1..a10a828e1 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -193,6 +193,7 @@ export const SUPPORTED_LANGUAGE_CODES = [ 'es', 'fr', 'it', + 'ko', 'nl', 'pl', 'pt', diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 9c1a0f104..cb4c0e1b7 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -11,7 +11,20 @@ import { parseISO, subDays } from 'date-fns'; -import { ca, de, es, fr, it, nl, pl, pt, tr, uk, zhCN } from 'date-fns/locale'; +import { + ca, + de, + es, + fr, + it, + ko, + nl, + pl, + pt, + tr, + uk, + zhCN +} from 'date-fns/locale'; import { get, isNil, isString } from 'lodash'; import { @@ -185,6 +198,8 @@ export function getDateFnsLocale(aLanguageCode: string) { return fr; } else if (aLanguageCode === 'it') { return it; + } else if (aLanguageCode === 'ko') { + return ko; } else if (aLanguageCode === 'nl') { return nl; } else if (aLanguageCode === 'pl') { From 72ffef1ab8bc6a8707b451992a66ec8efe7c97bf Mon Sep 17 00:00:00 2001 From: Wolfgang <119065796+wolfgang101@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:20:29 +0100 Subject: [PATCH 131/160] Task/extend documentation by ENABLE_FEATURE_AUTH_TOKEN environment variable (#6189) * Extend documentation --- README.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 35276b232..8b6fe2296 100644 --- a/README.md +++ b/README.md @@ -85,31 +85,32 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c ### Supported Environment Variables -| Name | Type | Default Value | Description | -| ------------------------ | --------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `ACCESS_TOKEN_SALT` | `string` | | A random string used as salt for access tokens | -| `API_KEY_COINGECKO_DEMO` | `string` (optional) |   | The _CoinGecko_ Demo API key | -| `API_KEY_COINGECKO_PRO` | `string` (optional) | | The _CoinGecko_ Pro API key | -| `DATABASE_URL` | `string` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` | -| `HOST` | `string` (optional) | `0.0.0.0` | The host where the Ghostfolio application will run on | -| `JWT_SECRET_KEY` | `string` | | A random string used for _JSON Web Tokens_ (JWT) | -| `LOG_LEVELS` | `string[]` (optional) | | The logging levels for the Ghostfolio application, e.g. `["debug","error","log","warn"]` | -| `PORT` | `number` (optional) | `3333` | The port where the Ghostfolio application will run on | -| `POSTGRES_DB` | `string` | | The name of the _PostgreSQL_ database | -| `POSTGRES_PASSWORD` | `string` | | The password of the _PostgreSQL_ database | -| `POSTGRES_USER` | `string` | | The user of the _PostgreSQL_ database | -| `REDIS_DB` | `number` (optional) | `0` | The database index of _Redis_ | -| `REDIS_HOST` | `string` | | The host where _Redis_ is running | -| `REDIS_PASSWORD` | `string` | | The password of _Redis_ | -| `REDIS_PORT` | `number` | | The port where _Redis_ is running | -| `REQUEST_TIMEOUT` | `number` (optional) | `2000` | The timeout of network requests to data providers in milliseconds | -| `ROOT_URL` | `string` (optional) | `http://0.0.0.0:3333` | The root URL of the Ghostfolio application, used for generating callback URLs and external links. | +| Name | Type | Default Value | Description | +| --------------------------- | --------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `ACCESS_TOKEN_SALT` | `string` | | A random string used as salt for access tokens | +| `API_KEY_COINGECKO_DEMO` | `string` (optional) |   | The _CoinGecko_ Demo API key | +| `API_KEY_COINGECKO_PRO` | `string` (optional) | | The _CoinGecko_ Pro API key | +| `DATABASE_URL` | `string` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` | +| `ENABLE_FEATURE_AUTH_TOKEN` | `boolean` (optional) | `true` | Enables authentication via security token | +| `HOST` | `string` (optional) | `0.0.0.0` | The host where the Ghostfolio application will run on | +| `JWT_SECRET_KEY` | `string` | | A random string used for _JSON Web Tokens_ (JWT) | +| `LOG_LEVELS` | `string[]` (optional) | | The logging levels for the Ghostfolio application, e.g. `["debug","error","log","warn"]` | +| `PORT` | `number` (optional) | `3333` | The port where the Ghostfolio application will run on | +| `POSTGRES_DB` | `string` | | The name of the _PostgreSQL_ database | +| `POSTGRES_PASSWORD` | `string` | | The password of the _PostgreSQL_ database | +| `POSTGRES_USER` | `string` | | The user of the _PostgreSQL_ database | +| `REDIS_DB` | `number` (optional) | `0` | The database index of _Redis_ | +| `REDIS_HOST` | `string` | | The host where _Redis_ is running | +| `REDIS_PASSWORD` | `string` | | The password of _Redis_ | +| `REDIS_PORT` | `number` | | The port where _Redis_ is running | +| `REQUEST_TIMEOUT` | `number` (optional) | `2000` | The timeout of network requests to data providers in milliseconds | +| `ROOT_URL` | `string` (optional) | `http://0.0.0.0:3333` | The root URL of the Ghostfolio application, used for generating callback URLs and external links. | #### OpenID Connect OIDC (Experimental) | Name | Type | Default Value | Description | | -------------------------- | --------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------- | -| `ENABLE_FEATURE_AUTH_OIDC` | `boolean` (optional) | `false` | Enables _OpenID Connect_ authentication | +| `ENABLE_FEATURE_AUTH_OIDC` | `boolean` (optional) | `false` | Enables authentication via _OpenID Connect_ | | `OIDC_AUTHORIZATION_URL` | `string` (optional) | | Manual override for the OIDC authorization endpoint (falls back to the discovery from the issuer) | | `OIDC_CALLBACK_URL` | `string` (optional) | `${ROOT_URL}/api/auth/oidc/callback` | The OIDC callback URL | | `OIDC_CLIENT_ID` | `string` | | The OIDC client ID | From 723e154e65ab2d7bd1076da7cdf92fd2faae9730 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 17:32:23 +0100 Subject: [PATCH 132/160] Feature/restore support for specific calendar year date ranges in holdings (#6186) * Restore specific calendar year date ranges * Update changelog --- CHANGELOG.md | 4 +++ .../calculator/roai/portfolio-calculator.ts | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a07743c34..5063cae44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Set up the language localization for Korean (`ko`) +### Changed + +- Restored the support for specific calendar year date ranges (`2024`, `2023`, `2022`, etc.) in the holdings table (experimental) + ## 2.229.0 - 2026-01-11 ### Changed diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 2ceed015d..fe912510a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -13,7 +13,14 @@ import { PerformanceCalculationType } from '@ghostfolio/common/types/performance import { Logger } from '@nestjs/common'; import { Big } from 'big.js'; -import { addMilliseconds, differenceInDays, format, isBefore } from 'date-fns'; +import { + addMilliseconds, + differenceInDays, + eachYearOfInterval, + format, + isBefore, + isThisYear +} from 'date-fns'; import { cloneDeep, sortBy } from 'lodash'; export class RoaiPortfolioCalculator extends PortfolioCalculator { @@ -837,15 +844,14 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { 'max', 'mtd', 'wtd', - 'ytd' - // TODO: - // ...eachYearOfInterval({ end, start }) - // .filter((date) => { - // return !isThisYear(date); - // }) - // .map((date) => { - // return format(date, 'yyyy'); - // }) + 'ytd', + ...eachYearOfInterval({ end, start }) + .filter((date) => { + return !isThisYear(date); + }) + .map((date) => { + return format(date, 'yyyy'); + }) ] as DateRange[]) { const dateInterval = getIntervalFromDateRange(dateRange); const endDate = dateInterval.endDate; From 9fd7924f2cf886945a3f59f356bb399b056777c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:20:55 +0100 Subject: [PATCH 133/160] Task/update locales (#6156) * Update locales Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 266 +++++++-------- apps/client/src/locales/messages.de.xlf | 266 +++++++-------- apps/client/src/locales/messages.es.xlf | 266 +++++++-------- apps/client/src/locales/messages.fr.xlf | 266 +++++++-------- apps/client/src/locales/messages.it.xlf | 266 +++++++-------- apps/client/src/locales/messages.ko.xlf | 408 +++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 266 +++++++-------- apps/client/src/locales/messages.pl.xlf | 266 +++++++-------- apps/client/src/locales/messages.pt.xlf | 266 +++++++-------- apps/client/src/locales/messages.tr.xlf | 266 +++++++-------- apps/client/src/locales/messages.uk.xlf | 266 +++++++-------- apps/client/src/locales/messages.xlf | 266 +++++++-------- apps/client/src/locales/messages.zh.xlf | 266 +++++++-------- 13 files changed, 1848 insertions(+), 1752 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 762f8f73a..e48a2ad47 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -102,7 +102,7 @@ El risc d’assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -387,7 +387,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -403,7 +403,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -467,7 +467,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -479,7 +479,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -495,7 +495,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -523,7 +523,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -555,11 +555,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -571,7 +571,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -603,7 +603,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -639,7 +639,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -863,7 +863,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -871,7 +871,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -891,7 +891,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -899,7 +899,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -907,7 +907,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -927,7 +927,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -1015,7 +1015,7 @@ Oooh! No s’han pogut recopilar les dades históriques. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1023,7 +1023,7 @@ El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -1175,7 +1175,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1243,7 +1243,7 @@ Està segur qeu vol eliminar aquest cupó? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1251,7 +1251,7 @@ Està segur que vol eliminar aquest missatge del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1259,7 +1259,7 @@ Està segur que vol depurar el cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1267,7 +1267,7 @@ Si us plau, afegeixi el seu missatge del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1403,7 +1403,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1427,7 +1427,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1499,7 +1499,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1567,11 +1567,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1607,7 +1607,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1703,7 +1703,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1739,7 +1739,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1955,7 +1955,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2003,7 +2003,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -2355,7 +2355,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2363,11 +2363,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2375,11 +2375,11 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2387,11 +2387,11 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2399,11 +2399,11 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2455,7 +2455,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2547,7 +2547,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2555,7 +2555,7 @@ De debò vols tancar el teu compte de Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -2563,7 +2563,7 @@ De debò vols eliminar aquest mètode d’inici de sessió? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2579,7 +2579,7 @@ Ups! Hi ha hagut un error en configurar l’autenticació biomètrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -2587,7 +2587,7 @@ Vista del presentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2595,7 +2595,7 @@ Protecció per a informació sensible com ara rendiments absoluts i valors de quantitat apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2631,7 +2631,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2639,7 +2639,7 @@ Format de data i número apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2647,7 +2647,7 @@ Aparença apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2655,7 +2655,7 @@ Llum apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2663,7 +2663,7 @@ Fosc apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2671,7 +2671,7 @@ Mode Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2683,7 +2683,7 @@ Experiència sense distraccions per a temps turbulents apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2699,7 +2699,7 @@ Autenticació biomètrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2707,7 +2707,7 @@ Inicieu la sessió amb l’empremta digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2715,7 +2715,7 @@ Característiques experimentals apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2723,7 +2723,7 @@ Doneu un cop d’ull a les properes funcionalitats apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2731,7 +2731,7 @@ Exporta dades apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2739,7 +2739,7 @@ Zona de perill apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -2747,7 +2747,7 @@ Tanca el compte apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -3227,11 +3227,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3416,7 +3416,7 @@ Programari de codi obert apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3428,7 +3428,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -4040,7 +4040,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4528,7 +4528,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -4856,11 +4856,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -5001,7 +5001,7 @@ Suïssa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5013,7 +5013,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5429,7 +5429,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5437,11 +5437,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5449,7 +5449,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5457,11 +5457,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5469,7 +5469,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5477,7 +5477,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5489,7 +5489,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -5497,11 +5497,11 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -5685,11 +5685,11 @@ Assignació libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5705,7 +5705,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -6001,7 +6001,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -6337,7 +6337,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ Aplicació apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Pressupost apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Oficina familiar apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Wealth apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Wealth Management apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 9a429cfad..d70c2ad1d 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -26,7 +26,7 @@ Das Ausfallrisiko beim Börsenhandel kann erheblich sein. Es ist nicht ratsam, Geld zu investieren, welches du kurzfristig benötigst. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -146,7 +146,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -158,7 +158,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -174,7 +174,7 @@ Gesamt libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -202,11 +202,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -218,7 +218,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -250,7 +250,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -286,7 +286,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -490,7 +490,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -518,7 +518,7 @@ Möchtest du diesen Gutscheincode wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -526,7 +526,7 @@ Möchtest du den Cache wirklich leeren? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -534,7 +534,7 @@ Bitte gebe deine Systemmeldung ein: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -654,7 +654,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -730,7 +730,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -790,7 +790,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -830,7 +830,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1046,11 +1046,11 @@ Allokation libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1066,7 +1066,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1078,7 +1078,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1086,11 +1086,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1098,11 +1098,11 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1110,11 +1110,11 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1122,11 +1122,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1234,7 +1234,7 @@ Möchtest du diese Anmeldemethode wirklich löschen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1278,7 +1278,7 @@ Präsentationsansicht apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1298,7 +1298,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1306,7 +1306,7 @@ Datums- und Zahlenformat apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1314,7 +1314,7 @@ Zen Modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1326,7 +1326,7 @@ Einloggen mit Fingerabdruck apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1338,7 +1338,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1450,7 +1450,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1470,7 +1470,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1486,7 +1486,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1930,7 +1930,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1994,7 +1994,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2070,7 +2070,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2146,7 +2146,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2626,7 +2626,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2654,7 +2654,7 @@ Experimentelle Funktionen apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2662,11 +2662,11 @@ Das Formular konnte nicht validiert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2714,7 +2714,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2722,7 +2722,7 @@ Aussehen apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2730,7 +2730,7 @@ Hell apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2738,7 +2738,7 @@ Dunkel apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3374,7 +3374,7 @@ Ausblenden von sensiblen Informationen wie absoluter Performance und Stückzahl apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3382,7 +3382,7 @@ Unbeschwertes Erlebnis für turbulente Zeiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3390,7 +3390,7 @@ Vorschau auf kommende Funktionalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3618,11 +3618,11 @@ Das Anlageprofil konnte nicht gespeichert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3846,7 +3846,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3882,7 +3882,7 @@ Das Anlageprofil wurde gespeichert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3890,7 +3890,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4078,7 +4078,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4218,7 +4218,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4494,7 +4494,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4502,7 +4502,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4638,7 +4638,7 @@ Biometrische Authentifizierung apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4730,7 +4730,7 @@ Daten exportieren apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4738,7 +4738,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4790,11 +4790,11 @@ Die Scraper Konfiguration konnte nicht geparsed werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5348,7 +5348,7 @@ Schweiz apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5360,7 +5360,7 @@ Weltweit apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5712,7 +5712,7 @@ Ups! Die historischen Daten konnten nicht geparsed werden. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5720,7 +5720,7 @@ Möchtest du diese Systemmeldung wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5780,7 +5780,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5884,7 +5884,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5940,7 +5940,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5948,11 +5948,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5960,7 +5960,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5968,11 +5968,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5980,7 +5980,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -6016,7 +6016,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6028,7 +6028,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6036,11 +6036,11 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6233,7 +6233,7 @@ Möchtest du dieses Ghostfolio Konto wirklich schliessen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6241,7 +6241,7 @@ Gefahrenzone apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6249,7 +6249,7 @@ Konto schliessen apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6289,7 +6289,7 @@ Ups! Beim Einrichten der biometrischen Authentifizierung ist ein Fehler aufgetreten. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6305,7 +6305,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6361,7 +6361,7 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6369,7 +6369,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6377,7 +6377,7 @@ Budgetierung apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6393,47 +6393,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6441,7 +6445,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6449,7 +6453,7 @@ Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6461,7 +6465,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6473,7 +6477,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6481,7 +6485,7 @@ Datenschutz apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6489,7 +6493,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6497,7 +6501,7 @@ Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6505,7 +6509,7 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6513,7 +6517,7 @@ Vermögen apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6521,7 +6525,7 @@ Vermögensverwaltung apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6681,7 +6685,7 @@ Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7215,7 +7219,7 @@ Möchtest du den API-Schlüssel wirklich löschen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7383,7 +7387,7 @@ Bitte gebe deinen Ghostfolio API-Schlüssel ein. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7407,7 +7411,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7415,7 +7419,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7455,7 +7459,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7463,7 +7467,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7487,7 +7491,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7507,7 +7511,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7611,7 +7615,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7623,7 +7627,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7631,7 +7635,7 @@ Konto, Position oder Seite finden... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7696,7 +7700,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7704,7 +7708,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo Benutzerkonto wurde synchronisiert. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 9be8108bd..89e67975f 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -27,7 +27,7 @@ El riesgo de pérdida en trading puede ser sustancial. No es aconsejable invertir dinero que puedas necesitar a corto plazo. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -147,7 +147,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -159,7 +159,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -175,7 +175,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -203,11 +203,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -219,7 +219,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -251,7 +251,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -287,7 +287,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -491,7 +491,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -519,7 +519,7 @@ ¿Estás seguro de eliminar este cupón? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -527,7 +527,7 @@ ¿Estás seguro de limpiar la caché? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -535,7 +535,7 @@ Por favor, establece tu mensaje del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -639,7 +639,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -715,7 +715,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -775,7 +775,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -815,7 +815,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1031,11 +1031,11 @@ Distribución libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1051,7 +1051,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1063,7 +1063,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1071,11 +1071,11 @@ Desde principio de año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1083,11 +1083,11 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1095,11 +1095,11 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1107,11 +1107,11 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1219,7 +1219,7 @@ ¿Estás seguro de eliminar este método de acceso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1263,7 +1263,7 @@ Vista del presentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1283,7 +1283,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1291,7 +1291,7 @@ Formato de fecha y número apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1299,7 +1299,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1311,7 +1311,7 @@ Iniciar sesión con huella digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1323,7 +1323,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1435,7 +1435,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1455,7 +1455,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1471,7 +1471,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1915,7 +1915,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1979,7 +1979,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2055,7 +2055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2131,7 +2131,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2611,7 +2611,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2639,7 +2639,7 @@ Funcionalidades experimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2659,11 +2659,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2699,7 +2699,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2707,7 +2707,7 @@ Apariencia apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2715,7 +2715,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2723,7 +2723,7 @@ Oscuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3359,7 +3359,7 @@ Protección de información confidencial como rendimientos absolutos y valores cuantitativos apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3367,7 +3367,7 @@ Experiencia sin distracciones para tiempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3375,7 +3375,7 @@ Un adelanto de las próximas funciones apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3603,11 +3603,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3823,7 +3823,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3859,7 +3859,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3867,7 +3867,7 @@ ¿Realmente deseas eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4055,7 +4055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4195,7 +4195,7 @@ Software de código abierto apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4471,7 +4471,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4479,7 +4479,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4615,7 +4615,7 @@ Autenticación biométrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4707,7 +4707,7 @@ Exportar datos apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4715,7 +4715,7 @@ Monedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4767,11 +4767,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5325,7 +5325,7 @@ Suiza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5337,7 +5337,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5689,7 +5689,7 @@ ¡Ups! No se pudieron analizar los datos históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5697,7 +5697,7 @@ ¿Realmente deseas eliminar este mensaje del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5757,7 +5757,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5861,7 +5861,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5917,7 +5917,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5925,11 +5925,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5937,7 +5937,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5945,11 +5945,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5957,7 +5957,7 @@ El año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5993,7 +5993,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6005,7 +6005,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6013,11 +6013,11 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6210,7 +6210,7 @@ ¿Estás seguro de querer borrar tu cuenta de Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6218,7 +6218,7 @@ Zona peligrosa apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6226,7 +6226,7 @@ Eliminar cuenta apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6266,7 +6266,7 @@ ¡Ups! Hubo un error al configurar la autenticación biométrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6282,7 +6282,7 @@ Puntos de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6338,7 +6338,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6346,7 +6346,7 @@ Aplicación apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6354,7 +6354,7 @@ Presupuestación apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6370,47 +6370,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6418,7 +6422,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6426,7 +6430,7 @@ Inversor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6438,7 +6442,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6450,7 +6454,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6458,7 +6462,7 @@ Privacidad apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6466,7 +6470,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6474,7 +6478,7 @@ Herramienta apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6482,7 +6486,7 @@ Experiencia del usuario apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6490,7 +6494,7 @@ Riqueza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6498,7 +6502,7 @@ Gestión de patrimonios apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6658,7 +6662,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7192,7 +7196,7 @@ ¿Realmente deseas eliminar la clave API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,7 @@ Por favor, ingresa tu clave API de Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7384,7 +7388,7 @@ Perezoso apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7396,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7436,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7444,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7464,7 +7468,7 @@ Cambiar libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7484,7 +7488,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7588,7 +7592,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7600,7 +7604,7 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7612,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7677,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7685,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7777,7 +7781,7 @@ ¿Realmente deseas eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7822,7 @@ La cuenta de usuario de demostración se ha sincronizado. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8032,7 +8036,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 5bb9d6489..dc25b2c05 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -6,7 +6,7 @@ Le risque de perte en investissant peut être important. Il est déconseillé d’investir de l’argent dont vous pourriez avoir besoin à court terme. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -110,7 +110,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -154,7 +154,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -166,7 +166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -182,7 +182,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -210,7 +210,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -230,7 +230,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -258,11 +258,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -274,7 +274,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -306,7 +306,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -342,7 +342,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -534,7 +534,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -554,7 +554,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -710,7 +710,7 @@ Voulez-vous vraiment supprimer ce code promotionnel ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -718,7 +718,7 @@ Voulez-vous vraiment vider le cache ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -726,7 +726,7 @@ Veuillez définir votre message système : apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -850,7 +850,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -902,11 +902,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -934,7 +934,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1010,7 +1010,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1098,7 +1098,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1290,7 +1290,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1310,7 +1310,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1318,11 +1318,11 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1330,11 +1330,11 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1342,11 +1342,11 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1354,11 +1354,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1474,7 +1474,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -1514,7 +1514,7 @@ Voulez-vous vraiment supprimer cette méthode de connexion ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1558,7 +1558,7 @@ Vue de Présentation apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1586,7 +1586,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1594,7 +1594,7 @@ Format de date et d’heure apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1602,7 +1602,7 @@ Apparence apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -1610,7 +1610,7 @@ Clair apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -1618,7 +1618,7 @@ Sombre apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -1626,7 +1626,7 @@ Mode Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1638,7 +1638,7 @@ Se connecter avec empreinte apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1646,7 +1646,7 @@ Fonctionnalités expérimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -1658,7 +1658,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2078,7 +2078,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2094,7 +2094,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2574,7 +2574,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -2874,11 +2874,11 @@ Part libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -2894,7 +2894,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -3358,7 +3358,7 @@ Protection pour les informations sensibles telles que la performance absolue et les montants apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3366,7 +3366,7 @@ Expérience sans distraction pour les périodes tumultueuses apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3374,7 @@ Avant-première de fonctionnalités futures apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3602,11 +3602,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3822,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3858,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3866,7 +3866,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4054,7 +4054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4194,7 @@ Logiciel Open Source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4470,7 +4470,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4478,7 +4478,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4614,7 +4614,7 @@ Authentication biométrique apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4706,7 +4706,7 @@ Exporter les Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4714,7 +4714,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4766,11 +4766,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5324,7 +5324,7 @@ Suisse apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5336,7 +5336,7 @@ Mondial apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5688,7 +5688,7 @@ Oops! Echec du parsing des données historiques. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Confirmer la suppresion de ce message système? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Confirmer la suppresion de votre compte Ghostfolio ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Zone de danger apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Supprimer le compte apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Oops! Une erreur s’est produite lors de la configuration de l’authentification biométrique. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Budget apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investisseur apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Confidentialité apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Logiciels apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Outils apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Expérience Utilisateur apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Patrimoine apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Gestion de Patrimoine apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Voulez-vous vraiment supprimer la clé API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Veuillez saisir votre clé API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Le compte utilisateur de démonstration a été synchronisé. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 2986e8ee4..c021470ef 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -27,7 +27,7 @@ Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -147,7 +147,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -159,7 +159,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -175,7 +175,7 @@ Totale libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -203,11 +203,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -219,7 +219,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -251,7 +251,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -287,7 +287,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -491,7 +491,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -519,7 +519,7 @@ Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -527,7 +527,7 @@ Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -535,7 +535,7 @@ Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -639,7 +639,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -715,7 +715,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -775,7 +775,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -815,7 +815,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1031,11 +1031,11 @@ Allocazione libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1051,7 +1051,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1063,7 +1063,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1071,11 +1071,11 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1083,11 +1083,11 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1095,11 +1095,11 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1107,11 +1107,11 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1219,7 +1219,7 @@ Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1263,7 +1263,7 @@ Vista presentatore apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1283,7 +1283,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1291,7 +1291,7 @@ Formato data e numero apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1299,7 +1299,7 @@ Modalità Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1311,7 +1311,7 @@ Accesso con impronta digitale apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1323,7 +1323,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1435,7 +1435,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1455,7 +1455,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1471,7 +1471,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1915,7 +1915,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1979,7 +1979,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2055,7 +2055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2131,7 +2131,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2611,7 +2611,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2639,7 +2639,7 @@ Funzionalità sperimentali apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2659,11 +2659,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2699,7 +2699,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2707,7 +2707,7 @@ Aspetto apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2715,7 +2715,7 @@ Chiaro apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2723,7 +2723,7 @@ Scuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3359,7 +3359,7 @@ Protezione delle informazioni sensibili come le prestazioni assolute e i valori quantitativi apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3367,7 +3367,7 @@ Esperienza priva di distrazioni per i periodi più turbolenti apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3375,7 +3375,7 @@ Un’anteprima delle funzionalità in arrivo apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3603,11 +3603,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3823,7 +3823,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3859,7 +3859,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3867,7 +3867,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4055,7 +4055,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4195,7 +4195,7 @@ Software open source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4471,7 +4471,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4479,7 +4479,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4615,7 +4615,7 @@ Autenticazione biometrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4707,7 +4707,7 @@ Esporta dati apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4715,7 +4715,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4767,11 +4767,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5325,7 +5325,7 @@ Svizzera apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5337,7 +5337,7 @@ Globale apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5689,7 +5689,7 @@ Ops! Impossibile elaborare i dati storici. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5697,7 +5697,7 @@ Confermi di voler cancellare questo messaggio di sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5757,7 +5757,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5861,7 +5861,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5917,7 +5917,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5925,11 +5925,11 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5937,7 +5937,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5945,11 +5945,11 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5957,7 +5957,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5993,7 +5993,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6005,7 +6005,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6013,11 +6013,11 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6210,7 +6210,7 @@ Confermi di voler chiudere il tuo account Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6218,7 +6218,7 @@ Zona di Pericolo apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6226,7 +6226,7 @@ Chiudi l’account apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6266,7 +6266,7 @@ Ops! C’è stato un errore impostando l’autenticazione biometrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6282,7 +6282,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6338,7 +6338,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6346,7 +6346,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6354,7 +6354,7 @@ Budgeting apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6370,47 +6370,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6418,7 +6422,7 @@ Ufficio familiare apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6426,7 +6430,7 @@ Investitore apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6438,7 +6442,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6450,7 +6454,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6458,7 +6462,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6466,7 +6470,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6474,7 +6478,7 @@ Strumento apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6482,7 +6486,7 @@ Esperienza Utente apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6490,7 +6494,7 @@ Ricchezza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6498,7 +6502,7 @@ Gestione Patrimoniale apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6658,7 +6662,7 @@ Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7192,7 +7196,7 @@ Vuoi davvero eliminare l’API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,7 @@ Inserisci la tua API key di Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7384,7 +7388,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7396,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7436,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7444,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7464,7 +7468,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7484,7 +7488,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7588,7 +7592,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7600,7 +7604,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7612,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7677,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7685,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7777,7 +7781,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7822,7 @@ L’account utente demo è stato sincronizzato. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8032,7 +8036,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 0e0492f24..133425cab 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -1,6 +1,6 @@ - + about @@ -216,7 +216,7 @@ 거래에는 상당한 손실 위험이 따를 수 있습니다. 단기적으로 필요할 수 있는 자금의 투자는 권장되지 않습니다. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -304,7 +304,7 @@ 이 부여된 접근 권한을 정말로 회수하시겠습니까? apps/client/src/app/components/access-table/access-table.component.ts - 115 + 113 @@ -320,7 +320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -336,7 +336,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -368,7 +368,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 311 + 309 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -400,7 +400,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -412,7 +412,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -428,7 +428,7 @@ 합계 libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -436,11 +436,11 @@ 통화 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 201 + 199 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 318 + 316 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -456,7 +456,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -488,11 +488,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -504,7 +504,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -536,7 +536,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -552,7 +552,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 87 apps/client/src/app/components/admin-overview/admin-overview.html @@ -572,7 +572,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 448 @@ -624,7 +624,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 179 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -760,7 +760,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -788,7 +788,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -804,7 +804,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -816,7 +816,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 219 + 217 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -896,7 +896,7 @@ 이런! 과거 데이터를 파싱할 수 없습니다. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -936,7 +936,7 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 264 + 262 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -948,7 +948,7 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 275 + 273 apps/client/src/app/components/admin-users/admin-users.html @@ -968,11 +968,11 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 281 + 279 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 396 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -988,11 +988,11 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 291 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 533 + 407 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1004,7 +1004,7 @@ 심볼 매핑 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 384 @@ -1020,7 +1020,7 @@ 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 411 + 471 @@ -1028,7 +1028,7 @@ 메모 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 558 + 432 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1068,7 +1068,7 @@ 이름, 심볼 또는 ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 132 + 133 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1088,7 +1088,7 @@ 이 쿠폰을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1096,7 +1096,7 @@ 이 시스템 메시지를 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1104,7 +1104,7 @@ 정말로 캐시를 플러시하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1112,7 +1112,7 @@ 시스템 메시지를 설정하십시오: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1236,11 +1236,11 @@ 링크 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 419 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 550 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1251,12 +1251,20 @@ 25 + + Asset profile has been saved + Asset profile has been saved + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 578 + + Do you really want to delete this platform? 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1280,7 +1288,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 199 @@ -1352,7 +1360,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 210 + 215 @@ -1415,6 +1423,18 @@ 254 + + Could not validate form + Could not validate form + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 554 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 557 + + Compare with... 비교해보세요... @@ -1448,7 +1468,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1460,7 +1480,7 @@ 기준 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 378 + 376 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1524,7 +1544,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1664,7 +1684,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 191 @@ -1712,7 +1732,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1900,7 +1920,7 @@ 비상금 금액을 설정해 주세요. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 108 + 111 @@ -1936,7 +1956,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2124,7 +2144,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2132,11 +2152,11 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2144,11 +2164,11 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2156,11 +2176,11 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2168,11 +2188,11 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2204,7 +2224,7 @@ 쿠폰 코드를 입력해주세요. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 218 + 210 @@ -2212,7 +2232,7 @@ 쿠폰 코드를 사용할 수 없습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 182 + 174 @@ -2220,7 +2240,7 @@ 쿠폰 코드가 사용되었습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 195 + 187 @@ -2228,7 +2248,7 @@ 새로고침 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 196 + 188 @@ -2272,11 +2292,11 @@ 자동 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2284,7 +2304,7 @@ 이 로그인 방법을 정말로 제거하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2292,7 +2312,7 @@ 발표자 보기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2300,7 +2320,7 @@ 절대 성과 및 수량 값과 같은 민감한 정보를 보호합니다. apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2324,11 +2344,11 @@ 장소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 509 apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2336,7 +2356,7 @@ 날짜 및 숫자 형식 apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2344,7 +2364,7 @@ 테마 apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2352,7 +2372,7 @@ 라이트 apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2360,7 +2380,7 @@ 다크 apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2368,7 +2388,7 @@ 프라이버시 모드 apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2380,7 +2400,7 @@ 격동의 시대에 방해받지 않는 경험 apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2396,7 +2416,7 @@ 생체인증 apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2404,7 +2424,7 @@ 지문으로 로그인 apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2412,7 +2432,7 @@ 실험적 기능 apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2420,7 +2440,7 @@ 곧 출시될 기능 미리보기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2432,7 +2452,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2444,7 +2464,7 @@ 데이터 내보내기 apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2488,7 +2508,7 @@ 좋아요 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 157 + 149 apps/client/src/app/core/http-response.interceptor.ts @@ -2756,7 +2776,7 @@ 개요 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 113 + 114 apps/client/src/app/components/header/header.component.html @@ -2895,6 +2915,18 @@ 225 + + Could not parse scraper configuration + Could not parse scraper configuration + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 509 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 512 + + Discover the latest Ghostfolio updates and insights on personal finance 개인 금융에 대한 최신 Ghostfolio 업데이트와 통찰력을 알아보세요 @@ -3052,7 +3084,7 @@ 오픈 소스 소프트웨어 apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3064,7 +3096,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3132,7 +3164,7 @@ 시장 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 380 + 378 apps/client/src/app/components/footer/footer.component.html @@ -3628,7 +3660,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 228 + 226 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3660,7 +3692,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4423,6 +4455,18 @@ 288 + + Could not save asset profile + Could not save asset profile + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 588 + + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 591 + + It’s free. 무료입니다. @@ -4785,7 +4829,7 @@ 스위스 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4797,7 +4841,7 @@ 글로벌 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5101,11 +5145,11 @@ 배당 libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5121,7 +5165,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5161,11 +5205,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 237 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 328 + 326 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5193,11 +5237,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 246 + 244 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 344 + 342 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5365,7 +5409,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 168 + 169 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5409,7 +5453,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5745,7 +5789,7 @@ 현재 시장가격은 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 672 + 706 @@ -5753,7 +5797,7 @@ 시험 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 568 @@ -5865,7 +5909,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5897,7 +5941,7 @@ 연초 현재 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5905,7 +5949,7 @@ 이번주 현재까지 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5913,7 +5957,7 @@ 월간 누계 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5921,11 +5965,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5933,11 +5977,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5973,7 +6017,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5985,7 +6029,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -5993,11 +6037,11 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6038,7 +6082,7 @@ 데이터 수집 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 587 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6190,7 +6234,7 @@ 계정 폐쇄 apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6198,7 +6242,7 @@ 정말로 Ghostfolio 계정을 폐쇄하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6206,7 +6250,7 @@ 위험지대 apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6238,7 +6282,7 @@ 포함 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 376 + 374 @@ -6246,7 +6290,7 @@ 이런! 생체 인증을 설정하는 중에 오류가 발생했습니다. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6286,7 +6330,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6318,7 +6362,7 @@ 재산 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6334,47 +6378,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6422,7 +6470,7 @@ 사용자 경험 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6430,7 +6478,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6438,7 +6486,7 @@ 도구 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6446,7 +6494,7 @@ 투자자 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6454,7 +6502,7 @@ 자산관리 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6494,7 +6542,7 @@ 대안 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6502,7 +6550,7 @@ 패밀리오피스 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6514,7 +6562,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6522,7 +6570,7 @@ 소프트웨어 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6554,7 +6602,7 @@ 예산 편성 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6574,7 +6622,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6614,7 +6662,7 @@ 은둔 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6638,7 +6686,7 @@ 오류 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 663 + 697 @@ -6646,11 +6694,11 @@ 취소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 162 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 592 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6734,7 +6782,7 @@ 닫다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 611 + 594 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7164,7 +7212,7 @@ API 키를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7216,7 +7264,7 @@ API 키를 생성할 수 없습니다. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 144 + 136 @@ -7224,7 +7272,7 @@ 정말로 새 API 키를 생성하시겠습니까? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 167 + 159 @@ -7232,7 +7280,7 @@ Ghostfolio 프리미엄 데이터 공급자 API 키 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 162 + 154 @@ -7240,7 +7288,7 @@ 자체 호스팅 환경에서 이 API 키를 설정하세요. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 151 @@ -7264,7 +7312,7 @@ 구하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 620 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7284,7 +7332,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 106 + 109 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7340,7 +7388,7 @@ Ghostfolio API 키를 입력하세요. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7356,7 +7404,7 @@ 링크가 클립보드에 복사되었습니다. apps/client/src/app/components/access-table/access-table.component.ts - 101 + 99 @@ -7364,7 +7412,7 @@ 방법 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 461 + 518 @@ -7372,7 +7420,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 481 @@ -7380,7 +7428,7 @@ 선택자 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 534 @@ -7388,7 +7436,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 229 @@ -7396,7 +7444,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 225 @@ -7404,7 +7452,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 494 @@ -7412,7 +7460,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 229 @@ -7420,7 +7468,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 225 @@ -7444,7 +7492,7 @@ 변화 libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7464,7 +7512,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7568,7 +7616,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 236 + 241 @@ -7576,7 +7624,7 @@ 계정, 보유 또는 페이지 찾기... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7584,7 +7632,7 @@ 보안 토큰 apps/client/src/app/components/admin-users/admin-users.component.ts - 231 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7653,7 +7701,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 599 + 633 @@ -7661,7 +7709,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 607 + 641 @@ -7669,7 +7717,7 @@ 적용하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 153 + 154 @@ -7733,7 +7781,7 @@ 이 항목을 정말로 삭제하시겠습니까? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7782,7 +7830,7 @@ 데모 사용자 계정이 동기화되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7988,7 +8036,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 195 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index c34f259bc..18e271b0d 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -26,7 +26,7 @@ Het risico op verlies bij handelen kan aanzienlijk zijn. Het is niet aan te raden om geld te investeren dat je misschien op korte termijn nodig heeft. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -146,7 +146,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -158,7 +158,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -174,7 +174,7 @@ Totaal libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -202,11 +202,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -218,7 +218,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -250,7 +250,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -286,7 +286,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -490,7 +490,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -518,7 +518,7 @@ Wil je deze coupon echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -526,7 +526,7 @@ Wil je echt de cache legen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -534,7 +534,7 @@ Stel je systeemboodschap in: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -638,7 +638,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -714,7 +714,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -774,7 +774,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -814,7 +814,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1030,11 +1030,11 @@ Allocatie libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1050,7 +1050,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1062,7 +1062,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1070,11 +1070,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1082,11 +1082,11 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1094,11 +1094,11 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1106,11 +1106,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1218,7 +1218,7 @@ Wil je deze aanmeldingsmethode echt verwijderen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1262,7 +1262,7 @@ Presentatie weergave apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1282,7 +1282,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1290,7 +1290,7 @@ Datum- en getalnotatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1298,7 +1298,7 @@ Zen-modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1310,7 +1310,7 @@ Aanmelden met vingerafdruk apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1322,7 +1322,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1434,7 +1434,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1454,7 +1454,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -1470,7 +1470,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -1914,7 +1914,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1978,7 +1978,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2054,7 +2054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2130,7 +2130,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -2610,7 +2610,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -2638,7 +2638,7 @@ Experimentele functies apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2658,11 +2658,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -2698,7 +2698,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2706,7 +2706,7 @@ Weergave apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2714,7 +2714,7 @@ Licht apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2722,7 +2722,7 @@ Donker apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -3358,7 +3358,7 @@ Bescherming voor gevoelige informatie zoals absoluut rendement en hoeveelheden apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3366,7 +3366,7 @@ Afleidingsvrije ervaring voor roerige tijden apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3374,7 @@ Voorproefje van nieuwe functionaliteit apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3602,11 +3602,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3822,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3858,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3866,7 +3866,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4054,7 +4054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4194,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4470,7 +4470,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4478,7 +4478,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4614,7 +4614,7 @@ Biometrische authenticatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4706,7 +4706,7 @@ Exporteer Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4714,7 +4714,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4766,11 +4766,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5324,7 +5324,7 @@ Zwitserland apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5336,7 +5336,7 @@ Wereldwijd apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5688,7 +5688,7 @@ Oeps! Ophalen van historische data is mislukt. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Wilt u dit systeembericht echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Wilt u uw Ghostfolio account echt sluiten? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Gevarenzone apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Account Sluiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Oeps! Er is een fout opgetreden met het instellen van de biometrische authenticatie. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternatief apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Budgetteren apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Familiekantoor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investeerder apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Hulpmiddel apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Gebruikers Ervaring apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Vermogen apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Vermogensbeheer apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Wilt u de API-sleutel echt verwijderen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Voer uw Ghostfolio API-sleutel in. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo-gebruikersaccount is gesynchroniseerd. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 2241e6a9a..8cb13184b 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -215,7 +215,7 @@ Ryzyko strat na rynku może być znaczne. Nie jest zalecane inwestowanie pieniędzy, które mogą być potrzebne w krótkim okresie. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -319,7 +319,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -335,7 +335,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -391,7 +391,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -403,7 +403,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -419,7 +419,7 @@ Suma libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -447,7 +447,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -479,11 +479,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -495,7 +495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -527,7 +527,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -563,7 +563,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -751,7 +751,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -771,7 +771,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -779,7 +779,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -795,7 +795,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -815,7 +815,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -871,7 +871,7 @@ Ups! Nie udało się sparsować danych historycznych. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1055,7 +1055,7 @@ Czy naprawdę chcesz usunąć ten kupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1063,7 +1063,7 @@ Czy naprawdę chcesz usunąć tę wiadomość systemową? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1071,7 +1071,7 @@ Czy naprawdę chcesz wyczyścić pamięć podręczną? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1079,7 +1079,7 @@ Proszę ustawić swoją wiadomość systemową: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1223,7 +1223,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1231,7 +1231,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1255,7 +1255,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1327,7 +1327,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1395,11 +1395,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1435,7 +1435,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1511,7 +1511,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1651,7 +1651,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1699,7 +1699,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1923,7 +1923,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2111,7 +2111,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2119,11 +2119,11 @@ Liczony od początku roku (year-to-date) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2131,11 +2131,11 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2143,11 +2143,11 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2155,11 +2155,11 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2263,7 +2263,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2271,7 +2271,7 @@ Czy na pewno chcesz usunąć tą metode logowania? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2279,7 +2279,7 @@ Widok Prezentera apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2287,7 +2287,7 @@ Ochrona dla wrażliwych informacji takich jak wyniki i wartości ilościowe apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2315,7 +2315,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2323,7 +2323,7 @@ Format daty i liczb apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2331,7 +2331,7 @@ Wygląd (tryb) apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2339,7 +2339,7 @@ Jasny apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2347,7 +2347,7 @@ Ciemny apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2355,7 +2355,7 @@ Tryb Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2367,7 +2367,7 @@ Doświadczenie bez zakłóceń w niespokojnych czasach apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2383,7 +2383,7 @@ Uwierzytelnianie Biometryczne apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2391,7 +2391,7 @@ Logowanie za pomocą linii papilarnych apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2399,7 +2399,7 @@ Funkcje Eksperymentalne apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2407,7 +2407,7 @@ Podgląd nadchodzących funkcjonalności apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2419,7 +2419,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2431,7 +2431,7 @@ Eksportuj Dane apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2887,11 +2887,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3051,7 +3051,7 @@ Oprogramowanie Open Source apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3063,7 +3063,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3659,7 +3659,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4427,11 +4427,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4784,7 +4784,7 @@ Szwajcaria apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4796,7 +4796,7 @@ Globalny apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5076,11 +5076,11 @@ Podział libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5096,7 +5096,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5384,7 +5384,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5756,7 +5756,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Czy na pewno chcesz zamknąć swoje konto Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Strefa Zagrożenia apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Zamknij Konto apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Ups! Wystąpił błąd podczas konfigurowania uwierzytelniania biometrycznego. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternatywa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ Aplikacja apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Budżetowanie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Biuro Rodzinne apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Inwestor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Prywatność apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Oprogramowanie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Narzędzie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Doświadczenie Użytkownika apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Majątek apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Zarządzanie Majątkiem apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Czy na pewno chcesz usunąć klucz API?? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Wprowadź swój klucz API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Konto użytkownika demonstracyjnego zostało zsynchronizowane. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 188bda9c8..562e5db2a 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -6,7 +6,7 @@ O risco de perda em investimentos pode ser substancial. Não é aconselhável investir dinheiro que possa vir a precisar a curto prazo. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -110,7 +110,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -154,7 +154,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -166,7 +166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -182,7 +182,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -210,7 +210,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -230,7 +230,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -258,11 +258,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -274,7 +274,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -306,7 +306,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -342,7 +342,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -534,7 +534,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -554,7 +554,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -610,7 +610,7 @@ Deseja realmente eliminar este cupão? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -618,7 +618,7 @@ Deseja realmente limpar a cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -626,7 +626,7 @@ Por favor, defina a sua mensagem do sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -718,7 +718,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -770,11 +770,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -802,7 +802,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -878,7 +878,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -982,7 +982,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1174,7 +1174,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1274,11 +1274,11 @@ Alocação libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1294,7 +1294,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -1306,7 +1306,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1314,11 +1314,11 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1326,11 +1326,11 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -1338,11 +1338,11 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -1350,11 +1350,11 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -1470,7 +1470,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -1510,7 +1510,7 @@ Deseja realmente remover este método de início de sessão? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -1554,7 +1554,7 @@ Vista do Apresentador apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -1590,7 +1590,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -1598,7 +1598,7 @@ Formato de números e datas apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -1606,7 +1606,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -1618,7 +1618,7 @@ Aparência apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -1626,7 +1626,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -1634,7 +1634,7 @@ Escuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -1642,7 +1642,7 @@ Iniciar sessão com impressão digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -1650,7 +1650,7 @@ Funcionalidades Experimentais apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -1662,7 +1662,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2058,7 +2058,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -2074,7 +2074,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2510,7 +2510,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3358,7 +3358,7 @@ Proteção para informações sensíveis, como desempenhos absolutos e valores quantitativos apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -3366,7 +3366,7 @@ Experiência sem distrações para tempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -3374,7 +3374,7 @@ Acesso antecipado a funcionalidades futuras apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3602,11 +3602,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -3822,7 +3822,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -3858,7 +3858,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -3866,7 +3866,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -4054,7 +4054,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -4194,7 +4194,7 @@ Software de código aberto apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -4470,7 +4470,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -4478,7 +4478,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -4614,7 +4614,7 @@ Autenticação biométrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4706,7 +4706,7 @@ Exportar dados apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4714,7 +4714,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -4766,11 +4766,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -5324,7 +5324,7 @@ Suíça apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5336,7 +5336,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5688,7 +5688,7 @@ Ops! Não foi possível analisar os dados históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Você realmente deseja excluir esta mensagem do sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Você realmente deseja encerrar sua conta Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Zona de perigo apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Fechar conta apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Ops! Ocorreu um erro ao configurar a autenticação biométrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternativo apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ Aplicativo apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Orçamento apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Escritório Familiar apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Investidor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Privacidade apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Programas apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Ferramenta apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Experiência do usuário apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Fortuna apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Gestão de patrimônio apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ Você realmente deseja excluir a chave de API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index cd713e26a..bd1389a49 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -187,7 +187,7 @@ Alım satımda kayıp riski büyük boyutta olabilir. Kısa vadede ihtiyaç duyabileceğiniz parayla yatırım yapmak tavsiye edilmez. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -291,7 +291,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -307,7 +307,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -351,7 +351,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -363,7 +363,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -379,7 +379,7 @@ Toplam libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -407,7 +407,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -439,11 +439,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -455,7 +455,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -487,7 +487,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -523,7 +523,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -715,7 +715,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -735,7 +735,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -743,7 +743,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -751,7 +751,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -771,7 +771,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -971,7 +971,7 @@ Bu kuponu gerçekten silmek istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -979,7 +979,7 @@ Önbelleği temizlemeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -987,7 +987,7 @@ Lütfen sistem mesajınızı belirleyin: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1139,7 +1139,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1147,7 +1147,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1171,7 +1171,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1195,7 +1195,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1263,11 +1263,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1303,7 +1303,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1379,7 +1379,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1519,7 +1519,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1567,7 +1567,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1779,7 +1779,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1979,7 +1979,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -1987,11 +1987,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -1999,11 +1999,11 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2011,11 +2011,11 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2023,11 +2023,11 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2451,11 +2451,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -2583,7 +2583,7 @@ Zen Modu apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2627,7 +2627,7 @@ Açık Kaynak Yazılım apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -2639,7 +2639,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3159,7 +3159,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -3911,11 +3911,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4268,7 +4268,7 @@ İsviçre apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4280,7 +4280,7 @@ Küresel apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -4348,7 +4348,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -4388,7 +4388,7 @@ Bu giriş yöntemini kaldırmayı gerçekten istiyor musunuz? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -4444,7 +4444,7 @@ Sunum Görünümü apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -4452,7 +4452,7 @@ Gerçek performans ve miktar değerleri gibi hassas bilgilerin saklanması için apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -4480,7 +4480,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -4488,7 +4488,7 @@ Tarih ve Sayı Formatları apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -4496,7 +4496,7 @@ Görünüm apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -4504,7 +4504,7 @@ Açık apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -4512,7 +4512,7 @@ Koyu apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -4520,7 +4520,7 @@ Çalkantılı zamanlar için dikkat dağıtmayan bir deneyim apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -4536,7 +4536,7 @@ Biyometrik Kimlik Doğrulama apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -4544,7 +4544,7 @@ Parmak iziyle oturum aç apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -4552,7 +4552,7 @@ Deneysel Özellikler apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -4560,7 +4560,7 @@ Gelecek özelliklere göz atın apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -4572,7 +4572,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4584,7 +4584,7 @@ Verileri Dışa Aktar apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -4772,11 +4772,11 @@ Dağılım libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4792,7 +4792,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5080,7 +5080,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5688,7 +5688,7 @@ Hay Allah! Geçmiş veriler ayrıştırılamadı. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -5696,7 +5696,7 @@ Bu sistem mesajını silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -5756,7 +5756,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5860,7 +5860,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5916,7 +5916,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5924,11 +5924,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5936,7 +5936,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5944,11 +5944,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5956,7 +5956,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5992,7 +5992,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6004,7 +6004,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6012,11 +6012,11 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6209,7 +6209,7 @@ Ghostfolio hesabınızı kapatmak istediğinize emin misiniz? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6217,7 +6217,7 @@ Tehlikeli Alan apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6225,7 +6225,7 @@ Hesabı Kapat apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6265,7 +6265,7 @@ Oops! Biyometrik kimlik doğrulama ayarlanırken bir hata oluştu. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6281,7 +6281,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6337,7 +6337,7 @@ Alternatif apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6345,7 +6345,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6353,7 +6353,7 @@ Bütçeleme apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6369,47 +6369,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6417,7 +6421,7 @@ Aile Ofisi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6425,7 +6429,7 @@ Yatırımcı apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6437,7 +6441,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6449,7 +6453,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6457,7 +6461,7 @@ Gizlilik apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6465,7 +6469,7 @@ Yazılım apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6473,7 +6477,7 @@ Araç apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6481,7 +6485,7 @@ Kullanıcı Deneyimi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6489,7 +6493,7 @@ Zenginlik apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6497,7 +6501,7 @@ Zenginlik Yönetimi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6657,7 +6661,7 @@ Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7191,7 +7195,7 @@ API anahtarını silmek istediğinize emin misiniz? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7359,7 +7363,7 @@ Lütfen Ghostfolio API anahtarınızı girin. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7383,7 +7387,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo kullanıcı hesabı senkronize edildi. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index c38c8d417..7ad8133b3 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -102,7 +102,7 @@ Ризик втрат у торгівлі може бути суттєвим. Не рекомендується інвестувати гроші, які можуть знадобитися в короткостроковій перспективі. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -403,7 +403,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -419,7 +419,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -483,7 +483,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -495,7 +495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -511,7 +511,7 @@ Загалом libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -539,7 +539,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -571,11 +571,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -587,7 +587,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -619,7 +619,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -655,7 +655,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -843,7 +843,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -851,7 +851,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -871,7 +871,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -879,7 +879,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -887,7 +887,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -923,7 +923,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -1011,7 +1011,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -1019,7 +1019,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -1155,7 +1155,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1239,7 +1239,7 @@ Ви дійсно хочете видалити цей купон? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1247,7 +1247,7 @@ Ви дійсно хочете видалити це системне повідомлення? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1255,7 +1255,7 @@ Ви дійсно хочете очистити кеш? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1263,7 +1263,7 @@ Будь ласка, встановіть ваше системне повідомлення: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1391,7 +1391,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1415,7 +1415,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1507,7 +1507,7 @@ Ви дійсно хочете видалити ключ API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -1515,7 +1515,7 @@ Будь ласка, введіть ваш ключ API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -1623,7 +1623,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1679,11 +1679,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1719,7 +1719,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1815,7 +1815,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1875,7 +1875,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2091,7 +2091,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -2139,7 +2139,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -2567,7 +2567,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2575,11 +2575,11 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2587,11 +2587,11 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2599,11 +2599,11 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2611,11 +2611,11 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2667,7 +2667,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2835,7 +2835,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2843,7 +2843,7 @@ Ви дійсно хочете закрити ваш обліковий запис Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -2851,7 +2851,7 @@ Ви дійсно хочете вилучити цей спосіб входу? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2867,7 +2867,7 @@ Упс! Виникла помилка під час налаштування біометричної автентифікації. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -2875,7 +2875,7 @@ Режим доповідача apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2883,7 +2883,7 @@ Захист конфіденційної інформації, такої як абсолютні показники та кількісні значення apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2919,7 +2919,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2927,7 +2927,7 @@ Формат дати та чисел apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2935,7 +2935,7 @@ Зовнішній вигляд apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2943,7 +2943,7 @@ Світлий apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2951,7 +2951,7 @@ Темний apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2959,7 +2959,7 @@ Режим дзен apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2971,7 +2971,7 @@ Досвід без відволікань для неспокійних часів apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2987,7 +2987,7 @@ Біометрична аутентифікація apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2995,7 +2995,7 @@ Увійти з відбитком пальця apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -3003,7 +3003,7 @@ Експериментальні функції apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -3011,7 +3011,7 @@ Попередній перегляд майбутніх функцій apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -3019,7 +3019,7 @@ Експортувати дані apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -3027,7 +3027,7 @@ Зона небезпеки apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -3035,7 +3035,7 @@ Закрити обліковий запис apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -3507,11 +3507,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3696,7 +3696,7 @@ Програмне забезпечення з відкритим кодом apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3708,7 +3708,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -4320,7 +4320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4844,7 +4844,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5212,11 +5212,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -5431,7 +5431,7 @@ Швейцарія apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -5443,7 +5443,7 @@ Глобальний apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5455,7 +5455,7 @@ Альтернатива apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -5463,7 +5463,7 @@ Додаток apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -5471,7 +5471,7 @@ Бюджетування apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -5487,47 +5487,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -5535,7 +5539,7 @@ Сімейний офіс apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -5543,7 +5547,7 @@ Інвестор apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -5555,7 +5559,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -5567,7 +5571,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -5575,7 +5579,7 @@ Конфіденційність apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -5583,7 +5587,7 @@ Програмне забезпечення apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -5591,7 +5595,7 @@ Інструмент apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -5599,7 +5603,7 @@ Користувацький досвід apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -5607,7 +5611,7 @@ Багатство apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -5615,7 +5619,7 @@ Управління багатством apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6155,7 +6159,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -6163,11 +6167,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -6175,7 +6179,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -6183,11 +6187,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -6195,7 +6199,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -6203,7 +6207,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6215,7 +6219,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6223,11 +6227,11 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6419,7 +6423,7 @@ Упс! Не вдалося отримати історичні дані. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -6427,11 +6431,11 @@ Розподіл libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6447,7 +6451,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -6843,7 +6847,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -7383,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7391,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7431,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7439,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7463,7 +7467,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7483,7 +7487,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7587,7 +7591,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7599,7 +7603,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7607,7 +7611,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7672,7 +7676,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7680,7 +7684,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7776,7 +7780,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7817,7 +7821,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8031,7 +8035,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 6888369ab..d91a8d438 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -203,7 +203,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -297,7 +297,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -312,7 +312,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -373,7 +373,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -385,7 +385,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -400,7 +400,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -427,7 +427,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -458,11 +458,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -474,7 +474,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -505,7 +505,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -540,7 +540,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -711,7 +711,7 @@ Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -729,14 +729,14 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -750,7 +750,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -769,7 +769,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -833,7 +833,7 @@ Oops! Could not parse historical data. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1009,28 +1009,28 @@ Do you really want to delete this coupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 Do you really want to delete this system message? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 Do you really want to flush the cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 Please set your system message: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1158,14 +1158,14 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1186,7 +1186,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1250,7 +1250,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1311,11 +1311,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1348,7 +1348,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1419,7 +1419,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1544,7 +1544,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1588,7 +1588,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1793,7 +1793,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -1968,51 +1968,51 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2105,28 +2105,28 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 Do you really want to remove this sign in method? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 Presenter View apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 Protection for sensitive information like absolute performances and quantity values apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2151,42 +2151,42 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 Date and number format apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 Appearance apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 Light apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 Dark apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 Zen Mode apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2197,7 +2197,7 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2211,28 +2211,28 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 Sign in with fingerprint apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 Experimental Features apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2243,7 +2243,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2254,7 +2254,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2683,11 +2683,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -2830,7 +2830,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -2841,7 +2841,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3380,7 +3380,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4070,11 +4070,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4403,7 +4403,7 @@ Switzerland apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4414,7 +4414,7 @@ Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -4687,11 +4687,11 @@ Allocation libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4706,7 +4706,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -4970,7 +4970,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5270,7 +5270,7 @@ The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5378,7 +5378,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5406,43 +5406,43 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5474,7 +5474,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5486,18 +5486,18 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -5668,21 +5668,21 @@ Close Account apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 Do you really want to close your Ghostfolio account? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 Danger Zone apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -5717,7 +5717,7 @@ Oops! There was an error setting up biometric authentication. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -5752,7 +5752,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -5780,7 +5780,7 @@ Wealth apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -5795,47 +5795,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -5877,35 +5881,35 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 Wealth Management apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -5940,14 +5944,14 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -5958,14 +5962,14 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -5993,7 +5997,7 @@ Budgeting apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6011,7 +6015,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6046,7 +6050,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6067,7 +6071,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -6545,7 +6549,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -6705,7 +6709,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -6747,14 +6751,14 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -6768,14 +6772,14 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -6796,7 +6800,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6815,7 +6819,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6907,21 +6911,21 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -6983,14 +6987,14 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7054,7 +7058,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7098,7 +7102,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -7282,7 +7286,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 02f90631d..f8af582de 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -216,7 +216,7 @@ 交易存在巨大亏损风险,因此不应投入您短期内可能急需的资金。 apps/client/src/app/components/footer/footer.component.html - 171 + 182 @@ -320,7 +320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 136 + 143 @@ -336,7 +336,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 86 + 93 @@ -400,7 +400,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 43 + 50 libs/ui/src/lib/activities-table/activities-table.component.html @@ -412,7 +412,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 28 + 23 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -428,7 +428,7 @@ 总计 libs/ui/src/lib/accounts-table/accounts-table.component.html - 55 + 62 @@ -456,7 +456,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 65 + 72 libs/ui/src/lib/activities-table/activities-table.component.html @@ -488,11 +488,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 171 + 178 libs/ui/src/lib/accounts-table/accounts-table.component.html - 206 + 213 libs/ui/src/lib/activities-table/activities-table.component.html @@ -504,7 +504,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 93 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -536,7 +536,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 313 + 320 libs/ui/src/lib/activities-table/activities-table.component.html @@ -572,7 +572,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 324 + 331 libs/ui/src/lib/activities-table/activities-table.component.html @@ -760,7 +760,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 132 + 131 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 137 + 136 @@ -788,7 +788,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 142 + 141 @@ -804,7 +804,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 385 @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 45 @@ -880,7 +880,7 @@ 哎呀!无法解析历史数据。 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 263 + 262 @@ -1064,7 +1064,7 @@ 您确实要删除此优惠券吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 194 + 193 @@ -1072,7 +1072,7 @@ 您真的要删除这条系统消息吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 207 + 206 @@ -1080,7 +1080,7 @@ 您真的要刷新缓存吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 231 + 230 @@ -1088,7 +1088,7 @@ 请设置您的系统消息: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 251 + 250 @@ -1232,7 +1232,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 579 + 578 @@ -1240,7 +1240,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 106 @@ -1264,7 +1264,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 @@ -1336,7 +1336,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 216 + 215 @@ -1404,11 +1404,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 555 + 554 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 558 + 557 @@ -1444,7 +1444,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 95 libs/common/src/lib/routes/routes.ts @@ -1520,7 +1520,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 192 + 193 @@ -1660,7 +1660,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 @@ -1708,7 +1708,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 279 + 288 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -1932,7 +1932,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 69 @@ -2120,7 +2120,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 365 + 363 @@ -2128,11 +2128,11 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 199 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -2140,11 +2140,11 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -2152,11 +2152,11 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -2164,11 +2164,11 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 211 libs/ui/src/lib/assistant/assistant.component.ts - 417 + 415 @@ -2272,7 +2272,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 172 + 181 @@ -2280,7 +2280,7 @@ 您确实要删除此登录方法吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 281 + 282 @@ -2288,7 +2288,7 @@ 演示者视图 apps/client/src/app/components/user-account-settings/user-account-settings.html - 183 + 192 @@ -2296,7 +2296,7 @@ 保护绝对业绩、金额等敏感信息 apps/client/src/app/components/user-account-settings/user-account-settings.html - 185 + 194 @@ -2324,7 +2324,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 133 + 142 @@ -2332,7 +2332,7 @@ 日期和数字格式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 135 + 144 @@ -2340,7 +2340,7 @@ 外观 apps/client/src/app/components/user-account-settings/user-account-settings.html - 158 + 167 @@ -2348,7 +2348,7 @@ 明亮 apps/client/src/app/components/user-account-settings/user-account-settings.html - 173 + 182 @@ -2356,7 +2356,7 @@ 黑暗 apps/client/src/app/components/user-account-settings/user-account-settings.html - 174 + 183 @@ -2364,7 +2364,7 @@ 极简模式 apps/client/src/app/components/user-account-settings/user-account-settings.html - 201 + 210 apps/client/src/app/pages/features/features-page.html @@ -2376,7 +2376,7 @@ 动荡时期的无干扰体验 apps/client/src/app/components/user-account-settings/user-account-settings.html - 203 + 212 @@ -2392,7 +2392,7 @@ 生物识别认证 apps/client/src/app/components/user-account-settings/user-account-settings.html - 218 + 227 @@ -2400,7 +2400,7 @@ 使用指纹登录 apps/client/src/app/components/user-account-settings/user-account-settings.html - 219 + 228 @@ -2408,7 +2408,7 @@ 实验性功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 235 + 244 @@ -2416,7 +2416,7 @@ 预览即将推出的功能 apps/client/src/app/components/user-account-settings/user-account-settings.html - 237 + 246 @@ -2428,7 +2428,7 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 252 + 261 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2440,7 +2440,7 @@ 导出数据 apps/client/src/app/components/user-account-settings/user-account-settings.html - 260 + 269 @@ -2896,11 +2896,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 510 + 509 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 513 + 512 @@ -3060,7 +3060,7 @@ 开源软件 apps/client/src/app/pages/features/features-page.html - 295 + 296 @@ -3072,7 +3072,7 @@ apps/client/src/app/pages/features/features-page.html - 320 + 321 apps/client/src/app/pages/landing/landing-page.html @@ -3668,7 +3668,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 119 + 126 @@ -4436,11 +4436,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 589 + 588 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 592 + 591 @@ -4805,7 +4805,7 @@ 瑞士 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 57 + 58 libs/ui/src/lib/i18n.ts @@ -4817,7 +4817,7 @@ 全球的 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 + 59 libs/ui/src/lib/i18n.ts @@ -5121,11 +5121,11 @@ 分配 libs/ui/src/lib/accounts-table/accounts-table.component.html - 241 + 248 libs/ui/src/lib/holdings-table/holdings-table.component.html - 122 + 117 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5141,7 +5141,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 221 + 216 @@ -5429,7 +5429,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 307 + 314 @@ -5765,7 +5765,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 707 + 706 @@ -5885,7 +5885,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 88 + 89 @@ -5917,7 +5917,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 375 @@ -5925,7 +5925,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5933,7 +5933,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5941,11 +5941,11 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 libs/ui/src/lib/assistant/assistant.component.ts - 373 + 371 @@ -5953,11 +5953,11 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 192 + 191 libs/ui/src/lib/assistant/assistant.component.ts - 369 + 367 @@ -5993,7 +5993,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 203 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6005,7 +6005,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 385 @@ -6013,11 +6013,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 207 libs/ui/src/lib/assistant/assistant.component.ts - 411 + 409 @@ -6210,7 +6210,7 @@ 您确定要关闭您的 Ghostfolio 账户吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 207 + 208 @@ -6218,7 +6218,7 @@ 危险区域 apps/client/src/app/components/user-account-settings/user-account-settings.html - 272 + 281 @@ -6226,7 +6226,7 @@ 关闭账户 apps/client/src/app/components/user-account-settings/user-account-settings.html - 307 + 316 @@ -6266,7 +6266,7 @@ 哎呀!设置生物识别认证时发生错误。 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 335 + 336 @@ -6282,7 +6282,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 127 + 126 @@ -6338,7 +6338,7 @@ 另类 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 82 + 83 @@ -6346,7 +6346,7 @@ 应用 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 84 @@ -6354,7 +6354,7 @@ 预算管理 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 85 @@ -6370,47 +6370,51 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 apps/client/src/app/components/user-account-settings/user-account-settings.html - 94 + 95 apps/client/src/app/components/user-account-settings/user-account-settings.html - 98 + 99 apps/client/src/app/components/user-account-settings/user-account-settings.html - 102 + 103 apps/client/src/app/components/user-account-settings/user-account-settings.html - 106 + 109 apps/client/src/app/components/user-account-settings/user-account-settings.html - 110 + 114 apps/client/src/app/components/user-account-settings/user-account-settings.html - 114 + 118 apps/client/src/app/components/user-account-settings/user-account-settings.html - 118 + 122 apps/client/src/app/components/user-account-settings/user-account-settings.html - 123 + 126 + + + apps/client/src/app/components/user-account-settings/user-account-settings.html + 132 apps/client/src/app/pages/features/features-page.html - 276 + 277 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 86 @@ -6418,7 +6422,7 @@ 家族办公室 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 87 @@ -6426,7 +6430,7 @@ 投资者 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 90 @@ -6438,7 +6442,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 91 @@ -6450,7 +6454,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 92 + 93 @@ -6458,7 +6462,7 @@ 隐私 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 94 @@ -6466,7 +6470,7 @@ 软件 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 96 @@ -6474,7 +6478,7 @@ 工具 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 97 @@ -6482,7 +6486,7 @@ 用户体验 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 98 @@ -6490,7 +6494,7 @@ 财富 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 99 @@ -6498,7 +6502,7 @@ 财富管理 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 100 @@ -6658,7 +6662,7 @@ 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 698 + 697 @@ -7192,7 +7196,7 @@ 您确定要删除此 API 密钥吗? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 128 + 127 @@ -7360,7 +7364,7 @@ 请输入您的 Ghostfolio API 密钥。 apps/client/src/app/components/admin-settings/admin-settings.component.ts - 147 + 146 @@ -7384,7 +7388,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7392,7 +7396,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7432,7 +7436,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 226 + 225 @@ -7440,7 +7444,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 229 @@ -7464,7 +7468,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 143 + 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7484,7 +7488,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 166 + 161 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7588,7 +7592,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 237 + 236 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7600,7 +7604,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 242 + 241 @@ -7608,7 +7612,7 @@ 查找账户、持仓或页面... libs/ui/src/lib/assistant/assistant.component.ts - 153 + 151 @@ -7673,7 +7677,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 634 + 633 @@ -7681,7 +7685,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 642 + 641 @@ -7777,7 +7781,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 139 + 144 @@ -7818,7 +7822,7 @@ 演示用户账户已同步。 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 275 + 274 @@ -8032,7 +8036,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 195 From 3e8c21aa20052d671e9ae5117457c10cc632c9d0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:25:25 +0100 Subject: [PATCH 134/160] Task/extend referral brokers (#6193) * Add Monefit --- apps/client/src/app/pages/pricing/pricing-page.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index f818e6b11..831f0809c 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -82,6 +82,7 @@ export class GfPricingPageComponent implements OnDestroy, OnInit { 'frankly', 'Interactive Brokers', 'Mintos', + 'Monefit SmartSaver', 'Swissquote', 'VIAC', 'Zak' From 6727fb2b74e9f694445670f4e9c0b5fda27dfe3c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:25:59 +0100 Subject: [PATCH 135/160] Bugfix/total fee calculation related to activities in custom currency (#6191) * Fix total fee calculation related to activities in custom currency * Update changelog --- CHANGELOG.md | 5 +++++ apps/api/src/app/portfolio/portfolio.service.ts | 8 ++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5063cae44..431218b21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Restored the support for specific calendar year date ranges (`2024`, `2023`, `2022`, etc.) in the holdings table (experimental) +### Fixed + +- Fixed the total fee calculation in the holding detail dialog related to activities in a custom currency +- Fixed the total fee calculation in the summary related to activities in a custom currency + ## 2.229.0 - 2026-01-11 ### Changed diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 4bc10bd49..d9783f34c 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -792,7 +792,7 @@ export class PortfolioService { averagePrice, currency, dividendInBaseCurrency, - fee, + feeInBaseCurrency, firstBuyDate, grossPerformance, grossPerformancePercentage, @@ -928,11 +928,7 @@ export class PortfolioService { dividendYieldPercent: dividendYieldPercent.toNumber(), dividendYieldPercentWithCurrencyEffect: dividendYieldPercentWithCurrencyEffect.toNumber(), - feeInBaseCurrency: this.exchangeRateDataService.toCurrency( - fee.toNumber(), - SymbolProfile.currency, - userCurrency - ), + feeInBaseCurrency: feeInBaseCurrency.toNumber(), grossPerformance: grossPerformance?.toNumber(), grossPerformancePercent: grossPerformancePercentage?.toNumber(), grossPerformancePercentWithCurrencyEffect: From e629d1b43bc093e9f3e74b1eaa51281cafff481a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:27:59 +0100 Subject: [PATCH 136/160] Release 2.230.0 (#6194) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 431218b21..f91e423fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.230.0 - 2026-01-14 ### Added diff --git a/package-lock.json b/package-lock.json index 60cf31da5..c1dd937b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.229.0", + "version": "2.230.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.229.0", + "version": "2.230.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 63612d7fa..39c64bbbc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.229.0", + "version": "2.230.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From aa41cb404b24e61eae03acf90a985a96d6bc82ee Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 15 Jan 2026 17:20:55 +0100 Subject: [PATCH 137/160] Task/remove deprecated platforms from info service (#6137) * Remove platforms from info service * Update changelog --- CHANGELOG.md | 6 ++++++ .../src/app/endpoints/platforms/platforms.controller.ts | 4 +++- apps/api/src/app/info/info.service.ts | 7 ------- libs/common/src/lib/interfaces/info-item.interface.ts | 6 +----- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f91e423fe..5bbf0c8d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Removed the deprecated platforms from the info service + ## 2.230.0 - 2026-01-14 ### Added diff --git a/apps/api/src/app/endpoints/platforms/platforms.controller.ts b/apps/api/src/app/endpoints/platforms/platforms.controller.ts index 46303a3f8..92ba77297 100644 --- a/apps/api/src/app/endpoints/platforms/platforms.controller.ts +++ b/apps/api/src/app/endpoints/platforms/platforms.controller.ts @@ -15,7 +15,9 @@ export class PlatformsController { @HasPermission(permissions.readPlatforms) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getPlatforms(): Promise { - const platforms = await this.platformService.getPlatforms(); + const platforms = await this.platformService.getPlatforms({ + orderBy: { name: 'asc' } + }); return { platforms }; } diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index c5152c1a2..9b4a4d597 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -1,4 +1,3 @@ -import { PlatformService } from '@ghostfolio/api/app/platform/platform.service'; import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; import { SubscriptionService } from '@ghostfolio/api/app/subscription/subscription.service'; import { UserService } from '@ghostfolio/api/app/user/user.service'; @@ -38,7 +37,6 @@ export class InfoService { private readonly configurationService: ConfigurationService, private readonly exchangeRateDataService: ExchangeRateDataService, private readonly jwtService: JwtService, - private readonly platformService: PlatformService, private readonly propertyService: PropertyService, private readonly redisCacheService: RedisCacheService, private readonly subscriptionService: SubscriptionService, @@ -103,16 +101,12 @@ export class InfoService { benchmarks, demoAuthToken, isUserSignupEnabled, - platforms, statistics, subscriptionOffer ] = await Promise.all([ this.benchmarkService.getBenchmarkAssetProfiles(), this.getDemoAuthToken(), this.propertyService.isUserSignupEnabled(), - this.platformService.getPlatforms({ - orderBy: { name: 'asc' } - }), this.getStatistics(), this.subscriptionService.getSubscriptionOffer({ key: 'default' }) ]); @@ -127,7 +121,6 @@ export class InfoService { demoAuthToken, globalPermissions, isReadOnlyMode, - platforms, statistics, subscriptionOffer, baseCurrency: DEFAULT_CURRENCY, diff --git a/libs/common/src/lib/interfaces/info-item.interface.ts b/libs/common/src/lib/interfaces/info-item.interface.ts index 119a94a7c..01897c066 100644 --- a/libs/common/src/lib/interfaces/info-item.interface.ts +++ b/libs/common/src/lib/interfaces/info-item.interface.ts @@ -1,4 +1,4 @@ -import { Platform, SymbolProfile } from '@prisma/client'; +import { SymbolProfile } from '@prisma/client'; import { Statistics } from './statistics.interface'; import { SubscriptionOffer } from './subscription-offer.interface'; @@ -13,10 +13,6 @@ export interface InfoItem { globalPermissions: string[]; isDataGatheringEnabled?: string; isReadOnlyMode?: boolean; - - /** @deprecated */ - platforms: Platform[]; - statistics: Statistics; subscriptionOffer?: SubscriptionOffer; } From f19e417068efcd01a0ac63e38391f61c19025f9c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 09:47:22 +0100 Subject: [PATCH 138/160] Task/remove deprecated activities from portfolio holding response (#6157) * Remove deprecated activities * Update changelog --- CHANGELOG.md | 1 + .../src/app/portfolio/portfolio.service.ts | 1 - .../portfolio-holding-response.interface.ts | 4 ---- libs/ui/src/lib/services/data.service.ts | 19 +++---------------- 4 files changed, 4 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bbf0c8d4..779b24981 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Removed the deprecated platforms from the info service +- Removed the deprecated activities from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` ## 2.230.0 - 2026-01-14 diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index d9783f34c..5fc2224eb 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -920,7 +920,6 @@ export class PortfolioService { marketPriceMin, SymbolProfile, tags, - activities: activitiesOfHolding, activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 4ec42933a..95c1c3689 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -1,5 +1,4 @@ import { - Activity, Benchmark, DataProviderInfo, EnhancedSymbolProfile, @@ -9,9 +8,6 @@ import { import { Tag } from '@prisma/client'; export interface PortfolioHoldingResponse { - /** @deprecated */ - activities: Activity[]; - activitiesCount: number; averagePrice: number; dataProviderInfo: DataProviderInfo; diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 21eec06c3..37443cd20 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -424,22 +424,9 @@ export class DataService { dataSource: DataSource; symbol: string; }) { - return this.http - .get( - `/api/v1/portfolio/holding/${dataSource}/${symbol}` - ) - .pipe( - map((data) => { - if (data.activities) { - for (const order of data.activities) { - order.createdAt = parseISO(order.createdAt as unknown as string); - order.date = parseISO(order.date as unknown as string); - } - } - - return data; - }) - ); + return this.http.get( + `/api/v1/portfolio/holding/${dataSource}/${symbol}` + ); } public fetchInfo(): InfoItem { From 3359ea1d2027cab75eeedf72b610e76008074292 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 11:46:41 +0100 Subject: [PATCH 139/160] Bugfix/numeric parsing error in X-ray page (#6198) * Fix numeric parsing error related to cash positions * Update changelog --- CHANGELOG.md | 4 ++++ .../api/src/app/portfolio/calculator/portfolio-calculator.ts | 5 ++--- .../calculator/roai/portfolio-calculator-cash.spec.ts | 2 +- .../calculator/roai/portfolio-calculator-valuable.spec.ts | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 779b24981..c7757c1c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed the deprecated platforms from the info service - Removed the deprecated activities from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +### Fixed + +- Fixed a numeric parsing error related to cash positions on the _X-ray_ page + ## 2.230.0 - 2026-01-14 ### Added diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 8f6cb0efc..dfc39afa5 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -433,9 +433,8 @@ export abstract class PortfolioCalculator { investment: totalInvestment, investmentWithCurrencyEffect: totalInvestmentWithCurrencyEffect, marketPrice: - marketSymbolMap[endDateString]?.[item.symbol]?.toNumber() ?? null, - marketPriceInBaseCurrency: - marketPriceInBaseCurrency?.toNumber() ?? null, + marketSymbolMap[endDateString]?.[item.symbol]?.toNumber() ?? 1, + marketPriceInBaseCurrency: marketPriceInBaseCurrency?.toNumber() ?? 1, netPerformance: !hasErrors ? (netPerformance ?? null) : null, netPerformancePercentage: !hasErrors ? (netPerformancePercentage ?? null) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index f5a4ca634..c9adebc44 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -247,7 +247,7 @@ describe('PortfolioCalculator', () => { includeInTotalAssetValue: false, investment: new Big(1820), investmentWithCurrencyEffect: new Big(1750), - marketPrice: null, + marketPrice: 1, marketPriceInBaseCurrency: 0.91, netPerformance: new Big(0), netPerformancePercentage: new Big(0), diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 3c7c3be4b..1db133288 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -129,7 +129,7 @@ describe('PortfolioCalculator', () => { grossPerformanceWithCurrencyEffect: new Big('0'), investment: new Big('500000'), investmentWithCurrencyEffect: new Big('500000'), - marketPrice: null, + marketPrice: 1, marketPriceInBaseCurrency: 500000, netPerformance: new Big('0'), netPerformancePercentage: new Big('0'), From d9a4d261e4954e55a73196cb7492b68478b348b8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 11:58:28 +0100 Subject: [PATCH 140/160] Bugfix/total fee calculation related to activities in custom currency (part 2) (#6199) * Fix total fee calculation related to activities in custom currency * Update changelog --- CHANGELOG.md | 2 ++ .../portfolio/calculator/portfolio-calculator.ts | 14 +++++++------- .../portfolio-calculator-baln-buy-and-buy.spec.ts | 2 ++ ...tor-baln-buy-and-sell-in-two-activities.spec.ts | 3 +++ .../portfolio-calculator-baln-buy-and-sell.spec.ts | 2 ++ .../roai/portfolio-calculator-baln-buy.spec.ts | 3 +++ ...-calculator-btceur-in-base-currency-eur.spec.ts | 1 + .../roai/portfolio-calculator-btceur.spec.ts | 1 + ...alculator-btcusd-buy-and-sell-partially.spec.ts | 2 ++ .../roai/portfolio-calculator-btcusd-short.spec.ts | 1 + .../roai/portfolio-calculator-btcusd.spec.ts | 1 + .../roai/portfolio-calculator-fee.spec.ts | 1 + .../roai/portfolio-calculator-googl-buy.spec.ts | 1 + .../roai/portfolio-calculator-liability.spec.ts | 1 + .../portfolio-calculator-msft-buy-and-sell.spec.ts | 7 +++++-- ...folio-calculator-msft-buy-with-dividend.spec.ts | 2 ++ ...-calculator-novn-buy-and-sell-partially.spec.ts | 1 + .../portfolio-calculator-novn-buy-and-sell.spec.ts | 1 + .../roai/portfolio-calculator-valuable.spec.ts | 1 + .../interfaces/portfolio-order-item.interface.ts | 1 - .../interfaces/portfolio-order.interface.ts | 1 + .../transaction-point-symbol.interface.ts | 1 + 22 files changed, 40 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7757c1c4..de71fcf0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed a numeric parsing error related to cash positions on the _X-ray_ page +- Fixed the total fee calculation in the holding detail dialog related to activities in a custom currency +- Fixed the total fee calculation in the summary related to activities in a custom currency ## 2.230.0 - 2026-01-14 diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index dfc39afa5..8fee1957c 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -120,6 +120,7 @@ export abstract class PortfolioCalculator { ({ date, feeInAssetProfileCurrency, + feeInBaseCurrency, quantity, SymbolProfile, tags = [], @@ -142,6 +143,7 @@ export abstract class PortfolioCalculator { type, date: format(date, DATE_FORMAT), fee: new Big(feeInAssetProfileCurrency), + feeInBaseCurrency: new Big(feeInBaseCurrency), quantity: new Big(quantity), unitPrice: new Big(unitPriceInAssetProfileCurrency) }; @@ -336,12 +338,6 @@ export abstract class PortfolioCalculator { } = {}; for (const item of lastTransactionPoint.items) { - const feeInBaseCurrency = item.fee.mul( - exchangeRatesByCurrency[`${item.currency}${this.currency}`]?.[ - lastTransactionPoint.date - ] ?? 1 - ); - const marketPriceInBaseCurrency = ( marketSymbolMap[endDateString]?.[item.symbol] ?? item.averagePrice ).mul( @@ -408,7 +404,6 @@ export abstract class PortfolioCalculator { } positions.push({ - feeInBaseCurrency, includeInTotalAssetValue, timeWeightedInvestment, timeWeightedInvestmentWithCurrencyEffect, @@ -418,6 +413,7 @@ export abstract class PortfolioCalculator { dividend: totalDividend, dividendInBaseCurrency: totalDividendInBaseCurrency, fee: item.fee, + feeInBaseCurrency: item.feeInBaseCurrency, firstBuyDate: item.firstBuyDate, grossPerformance: !hasErrors ? (grossPerformance ?? null) : null, grossPerformancePercentage: !hasErrors @@ -937,6 +933,7 @@ export abstract class PortfolioCalculator { for (const { date, fee, + feeInBaseCurrency, quantity, SymbolProfile, tags, @@ -1001,6 +998,8 @@ export abstract class PortfolioCalculator { : investment.div(newQuantity).abs(), dividend: new Big(0), fee: oldAccumulatedSymbol.fee.plus(fee), + feeInBaseCurrency: + oldAccumulatedSymbol.feeInBaseCurrency.plus(feeInBaseCurrency), firstBuyDate: oldAccumulatedSymbol.firstBuyDate, includeInHoldings: oldAccumulatedSymbol.includeInHoldings, quantity: newQuantity, @@ -1013,6 +1012,7 @@ export abstract class PortfolioCalculator { currency, dataSource, fee, + feeInBaseCurrency, skipErrors, symbol, tags, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index f0e2f6488..6b56b39a2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-22'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.65, + feeInBaseCurrency: 1.65, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 10b1fabd3..2aad0cb26 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-22'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.65, + feeInBaseCurrency: 1.65, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -117,6 +119,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 32cd9f7d4..35e4309eb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-22'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.65, + feeInBaseCurrency: 1.65, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index bfa4d06f3..ebce2ac1c 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -208,6 +209,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -247,6 +249,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-30'), feeInAssetProfileCurrency: 1.55, + feeInBaseCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts index 84ea6c251..774c1d2f6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts @@ -110,6 +110,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 3.94, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 32b3f05c2..9ca8b2d36 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 4.46, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 0c111fab2..3648eb84b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -100,6 +100,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2015-01-01'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -115,6 +116,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2017-12-31'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts index 618dc805c..6a45f79c6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 716ec7a59..5179fdaa6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -98,6 +98,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: 4.46, + feeInBaseCurrency: 4.46, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts index aae77c876..59a5531df 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-09-01'), feeInAssetProfileCurrency: 49, + feeInBaseCurrency: 49, quantity: 0, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index 495728e22..fa38d0030 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -99,6 +99,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2023-01-03'), feeInAssetProfileCurrency: 1, + feeInBaseCurrency: 0.9238, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts index 1fd88dacc..acbf6a66b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2023-01-01'), // Date in future feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts index 4c8ccdcf5..baa6ae1ed 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts @@ -80,6 +80,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2024-03-08'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 0.3333333333333333, SymbolProfile: { ...symbolProfileDummyData, @@ -94,8 +95,9 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2024-03-13'), - quantity: 0.6666666666666666, feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 0.6666666666666666, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', @@ -109,8 +111,9 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2024-03-14'), - quantity: 1, feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, SymbolProfile: { ...symbolProfileDummyData, currency: 'USD', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 0331e163e..ab7480bbf 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-09-16'), feeInAssetProfileCurrency: 19, + feeInBaseCurrency: 19, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -102,6 +103,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2021-11-16'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 650944421..32a1b02f3 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -101,6 +101,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index 2e408dc3c..f2903f3cd 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -101,6 +101,7 @@ describe('PortfolioCalculator', () => { ...activity, date: parseDate(activity.date), feeInAssetProfileCurrency: activity.fee, + feeInBaseCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 1db133288..3a00c022c 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -87,6 +87,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, date: new Date('2022-01-01'), feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, diff --git a/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts b/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts index 06e471d67..42759b521 100644 --- a/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/portfolio-order-item.interface.ts @@ -3,7 +3,6 @@ import { Big } from 'big.js'; import { PortfolioOrder } from './portfolio-order.interface'; export interface PortfolioOrderItem extends PortfolioOrder { - feeInBaseCurrency?: Big; feeInBaseCurrencyWithCurrencyEffect?: Big; itemType?: 'end' | 'start'; unitPriceFromMarketData?: Big; diff --git a/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts b/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts index fcc8322fc..2dbd68f12 100644 --- a/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/portfolio-order.interface.ts @@ -3,6 +3,7 @@ import { Activity } from '@ghostfolio/common/interfaces'; export interface PortfolioOrder extends Pick { date: string; fee: Big; + feeInBaseCurrency: Big; quantity: Big; SymbolProfile: Pick< Activity['SymbolProfile'], diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index 14e2e1f37..1c43508dd 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -8,6 +8,7 @@ export interface TransactionPointSymbol { dataSource: DataSource; dividend: Big; fee: Big; + feeInBaseCurrency: Big; firstBuyDate: string; includeInHoldings: boolean; investment: Big; From d42322cfa8b73ec5ef8cadd83620b33ae4ae46fc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 17 Jan 2026 12:00:59 +0100 Subject: [PATCH 141/160] Release 2.231.0 (#6200) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de71fcf0d..311b3c36b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.231.0 - 2026-01-17 ### Changed diff --git a/package-lock.json b/package-lock.json index c1dd937b9..fb86f76be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.230.0", + "version": "2.231.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.230.0", + "version": "2.231.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 39c64bbbc..a45df0d61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.230.0", + "version": "2.231.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 47b8494efa2f5619f106c1c94ab27167fd029d62 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:32:18 +0100 Subject: [PATCH 142/160] Task/upgrade countries-list to version 3.2.2 (#6209) * Upgrade countries-list to version 3.2.2 * Update changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 311b3c36b..28d3b6ea0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `countries-list` from version `3.2.0` to `3.2.2` + ## 2.231.0 - 2026-01-17 ### Changed diff --git a/package-lock.json b/package-lock.json index fb86f76be..b8e9295ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,7 @@ "class-validator": "0.14.3", "color": "5.0.3", "countries-and-timezones": "3.8.0", - "countries-list": "3.2.0", + "countries-list": "3.2.2", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", @@ -16319,9 +16319,9 @@ } }, "node_modules/countries-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.0.tgz", - "integrity": "sha512-HYHAo2fwEsG3TmbsNdVmIQPHizRlqeYMTtLEAl0IANG/3jRYX7p3NR6VapDqKP0n60TmsRy1dyRjVN5JbywDbA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.2.tgz", + "integrity": "sha512-ABJ/RWQBrPWy+hRuZoW+0ooK8p65Eo3WmUZwHm6v4wmfSPznNAKzjy3+UUYrJK2v3182BVsgWxdB6ROidj39kw==", "license": "MIT" }, "node_modules/countup.js": { diff --git a/package.json b/package.json index a45df0d61..0b5a28deb 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "class-validator": "0.14.3", "color": "5.0.3", "countries-and-timezones": "3.8.0", - "countries-list": "3.2.0", + "countries-list": "3.2.2", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", From 4cfb785499538ca3bde4b4f04db75986aa947cab Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:42:58 +0100 Subject: [PATCH 143/160] Task/deprecate firstBuyDate in portfolio holding response (#6208) * Deprecate firstBuyDate * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/import/import.service.ts | 6 +++--- apps/api/src/app/portfolio/portfolio.service.ts | 1 + .../holding-detail-dialog.component.ts | 14 +++++++------- .../holding-detail-dialog.html | 4 ++-- .../portfolio-holding-response.interface.ts | 4 ++++ 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28d3b6ea0..8c66c9c07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Upgraded `countries-list` from version `3.2.0` to `3.2.2` ## 2.231.0 - 2026-01-17 diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 3f8bd2cde..7e8e333b9 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -82,7 +82,7 @@ export class ImportService { filterBySymbol: symbol }); - const { firstBuyDate, historicalData } = holding; + const { dateOfFirstActivity, historicalData } = holding; const [{ accounts }, { activities }, [assetProfile], dividends] = await Promise.all([ @@ -95,7 +95,7 @@ export class ImportService { filters, userCurrency, userId, - startDate: parseDate(firstBuyDate) + startDate: parseDate(dateOfFirstActivity) }), this.symbolProfileService.getSymbolProfiles([ { @@ -106,7 +106,7 @@ export class ImportService { await this.dataProviderService.getDividends({ dataSource, symbol, - from: parseDate(firstBuyDate), + from: parseDate(dateOfFirstActivity), granularity: 'day', to: new Date() }) diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 5fc2224eb..9a6f6af62 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -923,6 +923,7 @@ export class PortfolioService { activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], + dateOfFirstActivity: firstBuyDate, dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), dividendYieldPercent: dividendYieldPercent.toNumber(), dividendYieldPercentWithCurrencyEffect: diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 95c58d35a..427386796 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -116,11 +116,11 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { }; public dataProviderInfo: DataProviderInfo; public dataSource: MatTableDataSource; + public dateOfFirstActivity: string; public dividendInBaseCurrency: number; public dividendInBaseCurrencyPrecision = 2; public dividendYieldPercentWithCurrencyEffect: number; public feeInBaseCurrency: number; - public firstBuyDate: string; public hasPermissionToCreateOwnTag: boolean; public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; public historicalDataItems: LineChartItem[]; @@ -267,10 +267,10 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { activitiesCount, averagePrice, dataProviderInfo, + dateOfFirstActivity, dividendInBaseCurrency, dividendYieldPercentWithCurrencyEffect, feeInBaseCurrency, - firstBuyDate, historicalData, investmentInBaseCurrencyWithCurrencyEffect, marketPrice, @@ -298,6 +298,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.benchmarkDataItems = []; this.countries = {}; this.dataProviderInfo = dataProviderInfo; + this.dateOfFirstActivity = dateOfFirstActivity; this.dividendInBaseCurrency = dividendInBaseCurrency; if ( @@ -312,7 +313,6 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { dividendYieldPercentWithCurrencyEffect; this.feeInBaseCurrency = feeInBaseCurrency; - this.firstBuyDate = firstBuyDate; this.hasPermissionToReadMarketDataOfOwnAssetProfile = hasPermission( @@ -461,16 +461,16 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { } } - if (isToday(parseISO(this.firstBuyDate))) { + if (isToday(parseISO(this.dateOfFirstActivity))) { // Add average price this.historicalDataItems.push({ - date: this.firstBuyDate, + date: this.dateOfFirstActivity, value: this.averagePrice }); // Add benchmark 1 this.benchmarkDataItems.push({ - date: this.firstBuyDate, + date: this.dateOfFirstActivity, value: averagePrice }); @@ -501,7 +501,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if ( this.benchmarkDataItems[0]?.value === undefined && - isSameMonth(parseISO(this.firstBuyDate), new Date()) + isSameMonth(parseISO(this.dateOfFirstActivity), new Date()) ) { this.benchmarkDataItems[0].value = this.averagePrice; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index f52286160..f9329dbfb 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -215,7 +215,7 @@ [deviceType]="data.deviceType" [isDate]="true" [locale]="data.locale" - [value]="firstBuyDate" + [value]="dateOfFirstActivity" >First Activity @@ -400,7 +400,7 @@ Date: Sun, 18 Jan 2026 16:54:23 +0100 Subject: [PATCH 144/160] Feature/extend analysis page by values (#6210) * Extend analysis page by values * Update changelog --- CHANGELOG.md | 4 ++ .../analysis/analysis-page.component.ts | 11 ++++ .../portfolio/analysis/analysis-page.html | 64 +++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c66c9c07..c200f9d62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Extended the analysis page to include the total amount, change and performance with currency effects + ### Changed - Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts index ec872c770..5cd24777c 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -2,6 +2,7 @@ import { GfBenchmarkComparatorComponent } from '@ghostfolio/client/components/be import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { HistoricalDataItem, InvestmentItem, @@ -94,6 +95,7 @@ export class GfAnalysisPageComponent implements OnDestroy, OnInit { public performanceDataItems: HistoricalDataItem[]; public performanceDataItemsInPercentage: HistoricalDataItem[]; public portfolioEvolutionDataLabel = $localize`Investment`; + public precision = 2; public streaks: PortfolioInvestmentsResponse['streaks']; public top3: PortfolioPosition[]; public unitCurrentStreak: string; @@ -317,12 +319,21 @@ export class GfAnalysisPageComponent implements OnDestroy, OnInit { : valueInPercentage }); } + this.performanceDataItemsInPercentage.push({ date, value: netPerformanceInPercentageWithCurrencyEffect }); } + if ( + this.deviceType === 'mobile' && + this.performance.currentValueInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.precision = 0; + } + this.isLoadingInvestmentChart = false; this.updateBenchmarkDataItems(); diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html index 150caa7d8..b4170c2c5 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -74,6 +74,70 @@ } + +
    +
    + + + Total amount + + +
    +
    + + + Change with currency effect + + +
    +
    + + + Performance with currency effect + + +
    +
    +
    Date: Mon, 19 Jan 2026 08:03:39 +0100 Subject: [PATCH 145/160] Task/update locales (#6212) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.de.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.es.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.fr.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.it.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.ko.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.nl.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.pl.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.pt.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.tr.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.uk.xlf | 64 +++++++++++++++++-------- apps/client/src/locales/messages.xlf | 61 +++++++++++++++-------- apps/client/src/locales/messages.zh.xlf | 64 +++++++++++++++++-------- 14 files changed, 570 insertions(+), 260 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c200f9d62..05c1c2162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Deprecated `firstBuyDate` in favor of `dateOfFirstActivity` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` +- Improved the language localization for German (`de`) - Upgraded `countries-list` from version `3.2.0` to `3.2.2` ## 2.231.0 - 2026-01-17 diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index e48a2ad47..fc8a326c3 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -2123,7 +2123,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -2135,7 +2135,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2394,6 +2394,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Màx @@ -4500,7 +4508,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4520,11 +4528,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4544,7 +4552,7 @@ Mensualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4552,7 +4560,7 @@ Anualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4568,7 +4576,7 @@ Rendiment absolut dels actius apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -4576,7 +4584,7 @@ Rendiment de l’actiu apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -4584,7 +4592,7 @@ Rendiment absolut de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -4592,7 +4600,7 @@ Rendiment de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -4600,7 +4608,7 @@ A dalt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4608,7 +4616,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4616,7 +4624,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4624,7 +4632,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4632,7 +4640,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4640,7 +4648,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4648,7 +4656,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index d70c2ad1d..6c2bd7900 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -926,7 +926,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -938,7 +938,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1117,6 +1117,14 @@ 409 + + Performance with currency effect + Performance mit Währungseffekt + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Max @@ -1854,7 +1862,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1862,7 +1870,7 @@ Gewinner apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1870,7 +1878,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2526,7 +2534,7 @@ Monatlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2754,7 +2762,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3130,7 +3138,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3166,7 +3174,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3290,7 +3298,7 @@ Jährlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4026,7 +4034,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4034,7 +4042,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5876,11 +5884,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5908,7 +5916,7 @@ Absolute Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5916,7 +5924,7 @@ Anlage Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5924,7 +5932,7 @@ Absolute Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5932,7 +5940,7 @@ Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7390,12 +7398,20 @@ 146 + + Change with currency effect + Änderung mit Währungseffekt + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7475,7 +7491,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7546,6 +7562,14 @@ 67 + + Total amount + Gesamtbetrag + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenien diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 89e67975f..a1b6e45e4 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -911,7 +911,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -923,7 +923,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1102,6 +1102,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Máximo @@ -1839,7 +1847,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1847,7 +1855,7 @@ Lo mejor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1855,7 +1863,7 @@ Lo peor apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2555,7 +2563,7 @@ Mensual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2739,7 +2747,7 @@ Evolución cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3143,7 +3151,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3155,7 +3163,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3275,7 +3283,7 @@ Anual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4003,7 +4011,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4011,7 +4019,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5853,11 +5861,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5885,7 +5893,7 @@ Rendimiento absoluto de los activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5893,7 +5901,7 @@ Rendimiento de activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5901,7 +5909,7 @@ Rendimiento absoluto de divisas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5909,7 +5917,7 @@ Rendimiento de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7367,12 +7375,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard El aviso de IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7452,7 +7468,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7523,6 +7539,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index dc25b2c05..05dc0f7e3 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -1194,7 +1194,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1206,7 +1206,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1349,6 +1349,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Max @@ -2414,7 +2422,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -2442,7 +2450,7 @@ Mensuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2450,7 +2458,7 @@ Haut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -2458,7 +2466,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2466,7 +2474,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -2474,7 +2482,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -2482,7 +2490,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3274,7 +3282,7 @@ Annuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4002,7 +4010,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4010,7 +4018,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Performance des Actifs en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Performance des Actifs apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Performance des devises en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Performance des devises apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Arménie diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index c021470ef..26545f435 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -911,7 +911,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -923,7 +923,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1102,6 +1102,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Massimo @@ -1839,7 +1847,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1847,7 +1855,7 @@ In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1855,7 +1863,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2555,7 +2563,7 @@ Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2739,7 +2747,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3143,7 +3151,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3155,7 +3163,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3275,7 +3283,7 @@ Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4003,7 +4011,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4011,7 +4019,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5853,11 +5861,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5885,7 +5893,7 @@ Rendimento assoluto dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5893,7 +5901,7 @@ Rendimento dell’Asset apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5901,7 +5909,7 @@ Rendimento assoluto della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5909,7 +5917,7 @@ Rendimento della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7367,12 +7375,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7452,7 +7468,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7523,6 +7539,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 133425cab..05f02c87b 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -1840,7 +1840,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1852,7 +1852,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2183,6 +2183,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max 맥스 @@ -4144,7 +4152,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4172,7 +4180,7 @@ 월간 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4180,7 +4188,7 @@ 매년 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4188,7 +4196,7 @@ 상위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4196,7 +4204,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4204,7 +4212,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4212,7 +4220,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4220,7 +4228,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4228,7 +4236,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4236,7 +4244,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5869,7 +5877,7 @@ 절대적인 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5885,7 +5893,7 @@ 절대자산성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5901,11 +5909,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5925,7 +5933,7 @@ 자산 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5933,7 +5941,7 @@ 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7391,12 +7399,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7476,7 +7492,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7547,6 +7563,14 @@ 97 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia 아르메니아 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 18e271b0d..773937956 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -910,7 +910,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -922,7 +922,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1101,6 +1101,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Max @@ -1838,7 +1846,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -1846,7 +1854,7 @@ Winnaars apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -1854,7 +1862,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2554,7 +2562,7 @@ Maandelijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2738,7 +2746,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3142,7 +3150,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3154,7 +3162,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3274,7 +3282,7 @@ Jaarlijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4002,7 +4010,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4010,7 +4018,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Absolute Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Activaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Absolute Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenië diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 8cb13184b..f4d14b81e 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -1807,7 +1807,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1819,7 +1819,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2150,6 +2150,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Maksimum @@ -4111,7 +4119,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4139,7 +4147,7 @@ Miesięcznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4147,7 +4155,7 @@ Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4155,7 +4163,7 @@ Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4163,7 +4171,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4171,7 +4179,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4179,7 +4187,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4187,7 +4195,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4195,7 +4203,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4203,7 +4211,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Łączny wynik aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Wyniki aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Łączny wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 562e5db2a..1e92933dc 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1078,7 +1078,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1090,7 +1090,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -1345,6 +1345,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Máx @@ -2358,7 +2366,7 @@ Mensalmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -2366,7 +2374,7 @@ Topo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -2374,7 +2382,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -2382,7 +2390,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -2390,7 +2398,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -3206,7 +3214,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3218,7 +3226,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -3274,7 +3282,7 @@ Anualmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4002,7 +4010,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4010,7 +4018,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Desempenho absoluto de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Desempenho de ativos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Desempenho absoluto da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Desempenho da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index bd1389a49..cdbfaec8f 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -1663,7 +1663,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1675,7 +1675,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2018,6 +2018,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Maks. @@ -3595,7 +3603,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3623,7 +3631,7 @@ Aylık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -3631,7 +3639,7 @@ Yıllık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -3639,7 +3647,7 @@ Üst apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -3647,7 +3655,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -3655,7 +3663,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -3663,7 +3671,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -3671,7 +3679,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -3679,7 +3687,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -3687,7 +3695,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5852,11 +5860,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5884,7 +5892,7 @@ Mutlak Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5892,7 +5900,7 @@ Varlık Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5900,7 +5908,7 @@ Mutlak Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5908,7 +5916,7 @@ Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7366,12 +7374,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Ermenistan diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 7ad8133b3..a7d0d1ca3 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -2215,7 +2215,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -2227,7 +2227,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2606,6 +2606,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max Максимум @@ -4816,7 +4824,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4836,11 +4844,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4860,7 +4868,7 @@ Щомісячно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4868,7 +4876,7 @@ Щорічно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4884,7 +4892,7 @@ Абсолютна прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -4892,7 +4900,7 @@ Прибутковість активів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -4900,7 +4908,7 @@ Абсолютна прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -4908,7 +4916,7 @@ Прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -4916,7 +4924,7 @@ Топ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4924,7 +4932,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4932,7 +4940,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4940,7 +4948,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4948,7 +4956,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4956,7 +4964,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4964,7 +4972,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -7374,12 +7382,20 @@ 174 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7451,7 +7467,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7522,6 +7538,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia Armenia diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d91a8d438..f339f807e 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -1689,7 +1689,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1700,7 +1700,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2004,6 +2004,13 @@ 409 + + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max @@ -3786,7 +3793,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -3811,63 +3818,63 @@ Monthly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 Yearly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 Top apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5341,7 +5348,7 @@ Absolute Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5355,7 +5362,7 @@ Absolute Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5370,11 +5377,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5392,14 +5399,14 @@ Asset Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -6712,11 +6719,18 @@ 146 + + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -6786,7 +6800,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -6851,6 +6865,13 @@ 97 + + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index f8af582de..c941fa2f2 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -1816,7 +1816,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 193 + 257 @@ -1828,7 +1828,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 212 + 276 @@ -2159,6 +2159,14 @@ 409 + + Performance with currency effect + Performance with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 134 + + Max 最大限度 @@ -4120,7 +4128,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 76 libs/ui/src/lib/i18n.ts @@ -4148,7 +4156,7 @@ 每月 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 91 @@ -4156,7 +4164,7 @@ 每年 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 92 @@ -4164,7 +4172,7 @@ 顶部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 239 + 303 @@ -4172,7 +4180,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 352 @@ -4180,7 +4188,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 341 + 405 @@ -4188,7 +4196,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 368 + 432 @@ -4196,7 +4204,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 389 + 453 @@ -4204,7 +4212,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 462 @@ -4212,7 +4220,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 489 @@ -5845,7 +5853,7 @@ 绝对货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 145 + 209 @@ -5861,7 +5869,7 @@ 绝对资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 102 + 166 @@ -5877,11 +5885,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 81 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 97 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5901,7 +5909,7 @@ 资产回报 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 124 + 188 @@ -5909,7 +5917,7 @@ 货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 170 + 234 @@ -7367,12 +7375,20 @@ 146 + + Change with currency effect + Change with currency effect + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 115 + + AI prompt has been copied to the clipboard AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 201 @@ -7452,7 +7468,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 202 @@ -7523,6 +7539,14 @@ 67 + + Total amount + Total amount + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 94 + + Armenia 亚美尼亚 From 32f56cb3f65e62ed9e57407daddcc467b04babaa Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:46:56 +0100 Subject: [PATCH 146/160] Task/remove deprecated public Stripe key (part 3) (#6160) * Remove deprecated public Stripe key --- apps/client/src/environments/environment.prod.ts | 3 +-- apps/client/src/environments/environment.ts | 3 +-- libs/ui/src/lib/environment/environment.interface.ts | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/client/src/environments/environment.prod.ts b/apps/client/src/environments/environment.prod.ts index 4ee0d508b..f3ded619e 100644 --- a/apps/client/src/environments/environment.prod.ts +++ b/apps/client/src/environments/environment.prod.ts @@ -2,6 +2,5 @@ import type { GfEnvironment } from '@ghostfolio/ui/environment'; export const environment: GfEnvironment = { lastPublish: '{BUILD_TIMESTAMP}', - production: true, - stripePublicKey: '' + production: true }; diff --git a/apps/client/src/environments/environment.ts b/apps/client/src/environments/environment.ts index ccedf6738..1b9efe2be 100644 --- a/apps/client/src/environments/environment.ts +++ b/apps/client/src/environments/environment.ts @@ -6,8 +6,7 @@ import type { GfEnvironment } from '@ghostfolio/ui/environment'; export const environment: GfEnvironment = { lastPublish: null, - production: false, - stripePublicKey: '' + production: false }; /* diff --git a/libs/ui/src/lib/environment/environment.interface.ts b/libs/ui/src/lib/environment/environment.interface.ts index 9cb279515..bdd867324 100644 --- a/libs/ui/src/lib/environment/environment.interface.ts +++ b/libs/ui/src/lib/environment/environment.interface.ts @@ -1,5 +1,4 @@ export interface GfEnvironment { lastPublish: string | null; production: boolean; - stripePublicKey: string; } From fcae50968bb05c8d7a4c08cb7565297c614b2b6e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:56:22 +0100 Subject: [PATCH 147/160] Task/set analysis page values as experimental (#6217) * Set values as experimental * Update changelog --- CHANGELOG.md | 2 +- .../portfolio/analysis/analysis-page.html | 124 +++++++++--------- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05c1c2162..183bf0f6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Extended the analysis page to include the total amount, change and performance with currency effects +- Extended the analysis page to include the total amount, change and performance with currency effects (experimental) ### Changed diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html index b4170c2c5..517ad7101 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -75,68 +75,70 @@
    } -
    -
    - - - Total amount - - -
    -
    - - - Change with currency effect - - -
    -
    - - - Performance with currency effect - - + @if (user?.settings?.isExperimentalFeatures) { +
    +
    + + + Total amount + + +
    +
    + + + Change with currency effect + + +
    +
    + + + Performance with currency effect + + +
    -
    + }
    From 48fda7d41a672cd5544960360b245cf7c389670d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:57:55 +0100 Subject: [PATCH 148/160] Release 2.232.0 (#6218) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 183bf0f6e..5a5846c95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.232.0 - 2026-01-19 ### Added diff --git a/package-lock.json b/package-lock.json index b8e9295ed..7dbf3dd51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.231.0", + "version": "2.232.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.231.0", + "version": "2.232.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 0b5a28deb..8dcad6a4f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.231.0", + "version": "2.232.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 18f09e88d91417174489b9ffdd80a2803be99de8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 20 Jan 2026 18:01:40 +0100 Subject: [PATCH 149/160] Task/remove deprecated firstBuyDate from portfolio holding response (#6220) * Remove deprecated firstBuyDate * Update changelog --- CHANGELOG.md | 6 ++++++ apps/api/src/app/portfolio/portfolio.service.ts | 1 - .../responses/portfolio-holding-response.interface.ts | 4 ---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a5846c95..98e4a9380 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` + ## 2.232.0 - 2026-01-19 ### Added diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 9a6f6af62..6ffd9fe0b 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -914,7 +914,6 @@ export class PortfolioService { ); return { - firstBuyDate, marketPrice, marketPriceMax, marketPriceMin, diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 1d1ac1b11..76bc7dc02 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -16,10 +16,6 @@ export interface PortfolioHoldingResponse { dividendYieldPercent: number; dividendYieldPercentWithCurrencyEffect: number; feeInBaseCurrency: number; - - /** @deprecated use dateOfFirstActivity */ - firstBuyDate: string; - grossPerformance: number; grossPerformancePercent: number; grossPerformancePercentWithCurrencyEffect: number; From 71902e39d1e90f88000031e2fb1f90b924582fe4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:49:20 +0100 Subject: [PATCH 150/160] Task/deprecate transactionCount in portfolio calculator and service (#6228) * Deprecate transactionCount in favor of activitiesCount * Update changelog --- CHANGELOG.md | 1 + .../calculator/portfolio-calculator.ts | 3 +++ ...tfolio-calculator-baln-buy-and-buy.spec.ts | 1 + ...aln-buy-and-sell-in-two-activities.spec.ts | 1 + ...folio-calculator-baln-buy-and-sell.spec.ts | 1 + .../portfolio-calculator-baln-buy.spec.ts | 1 + .../roai/portfolio-calculator-btceur.spec.ts | 1 + ...ator-btcusd-buy-and-sell-partially.spec.ts | 1 + .../roai/portfolio-calculator-btcusd.spec.ts | 1 + .../roai/portfolio-calculator-cash.spec.ts | 1 + .../portfolio-calculator-googl-buy.spec.ts | 1 + ...-calculator-msft-buy-with-dividend.spec.ts | 1 + ...ulator-novn-buy-and-sell-partially.spec.ts | 1 + ...folio-calculator-novn-buy-and-sell.spec.ts | 1 + .../portfolio-calculator-valuable.spec.ts | 1 + .../transaction-point-symbol.interface.ts | 3 +++ .../src/app/portfolio/portfolio.service.ts | 22 ++++++++++++++----- .../portfolio-position.interface.ts | 4 ++++ .../responses/accounts-response.interface.ts | 3 +++ .../src/lib/models/timeline-position.ts | 3 +++ .../src/lib/types/account-with-value.type.ts | 4 ++++ libs/ui/src/lib/mocks/holdings.ts | 7 ++++++ 22 files changed, 57 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98e4a9380..1c06b0e64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Deprecated `transactionCount` in favor of `activitiesCount` in the portfolio calculator and service - Removed the deprecated `firstBuyDate` from the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` ## 2.232.0 - 2026-01-19 diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 8fee1957c..22d9e09ae 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -407,6 +407,7 @@ export abstract class PortfolioCalculator { includeInTotalAssetValue, timeWeightedInvestment, timeWeightedInvestmentWithCurrencyEffect, + activitiesCount: item.activitiesCount, averagePrice: item.averagePrice, currency: item.currency, dataSource: item.dataSource, @@ -993,6 +994,7 @@ export abstract class PortfolioCalculator { investment, skipErrors, symbol, + activitiesCount: oldAccumulatedSymbol.activitiesCount + 1, averagePrice: newQuantity.eq(0) ? new Big(0) : investment.div(newQuantity).abs(), @@ -1016,6 +1018,7 @@ export abstract class PortfolioCalculator { skipErrors, symbol, tags, + activitiesCount: 1, averagePrice: unitPrice, dividend: new Big(0), firstBuyDate: date, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index 6b56b39a2..b715d0437 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -139,6 +139,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('139.75'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 2aad0cb26..5e1593fbb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -155,6 +155,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 3, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 35e4309eb..65d2a93a6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -139,6 +139,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index ebce2ac1c..ed002317b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -129,6 +129,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('136.6'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 9ca8b2d36..af4f17611 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -190,6 +190,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('44558.42'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 3648eb84b..5dd99dbf4 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -153,6 +153,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('320.43'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 5179fdaa6..929ebc76d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -190,6 +190,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('44558.42'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index c9adebc44..ba22c565d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -230,6 +230,7 @@ describe('PortfolioCalculator', () => { * Value in base currency: 2000 USD * 0.91 = 1820 CHF */ expect(position).toMatchObject({ + activitiesCount: 2, averagePrice: new Big(1), currency: 'USD', dataSource: DataSource.YAHOO, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index fa38d0030..a14e28dff 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -135,6 +135,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('89.12'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index ab7480bbf..4b2698ccb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -131,6 +131,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('298.58'), currency: 'USD', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 32a1b02f3..852c3c13a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -135,6 +135,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('75.80'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index f2903f3cd..8764da3ee 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -188,6 +188,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 2, averagePrice: new Big('0'), currency: 'CHF', dataSource: 'YAHOO', diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 3a00c022c..554f74046 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -116,6 +116,7 @@ describe('PortfolioCalculator', () => { hasErrors: false, positions: [ { + activitiesCount: 1, averagePrice: new Big('500000'), currency: 'USD', dataSource: 'MANUAL', diff --git a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts index 1c43508dd..6e0bb4ac3 100644 --- a/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/transaction-point-symbol.interface.ts @@ -2,6 +2,7 @@ import { AssetSubClass, DataSource, Tag } from '@prisma/client'; import { Big } from 'big.js'; export interface TransactionPointSymbol { + activitiesCount: number; assetSubClass: AssetSubClass; averagePrice: Big; currency: string; @@ -16,5 +17,7 @@ export interface TransactionPointSymbol { skipErrors: boolean; symbol: string; tags?: Tag[]; + + /** @deprecated use activitiesCount instead */ transactionCount: number; } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 6ffd9fe0b..20016e67f 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -179,9 +179,9 @@ export class PortfolioService { return Promise.all( accounts.map(async (account) => { + let activitiesCount = 0; let dividendInBaseCurrency = 0; let interestInBaseCurrency = 0; - let transactionCount = 0; for (const { currency, @@ -214,7 +214,7 @@ export class PortfolioService { } if (!isDraft) { - transactionCount += 1; + activitiesCount += 1; } } @@ -223,9 +223,9 @@ export class PortfolioService { const result = { ...account, + activitiesCount, dividendInBaseCurrency, interestInBaseCurrency, - transactionCount, valueInBaseCurrency, allocationInPercentage: 0, balanceInBaseCurrency: this.exchangeRateDataService.toCurrency( @@ -233,6 +233,7 @@ export class PortfolioService { account.currency, userCurrency ), + transactionCount: activitiesCount, value: this.exchangeRateDataService.toCurrency( valueInBaseCurrency, userCurrency, @@ -262,6 +263,8 @@ export class PortfolioService { withExcludedAccounts }); + let activitiesCount = 0; + const searchQuery = filters.find(({ type }) => { return type === 'SEARCH_QUERY'; })?.id; @@ -284,6 +287,8 @@ export class PortfolioService { let transactionCount = 0; for (const account of accounts) { + activitiesCount += account.activitiesCount; + totalBalanceInBaseCurrency = totalBalanceInBaseCurrency.plus( account.balanceInBaseCurrency ); @@ -296,6 +301,7 @@ export class PortfolioService { totalValueInBaseCurrency = totalValueInBaseCurrency.plus( account.valueInBaseCurrency ); + transactionCount += account.transactionCount; } @@ -310,6 +316,7 @@ export class PortfolioService { return { accounts, + activitiesCount, transactionCount, totalBalanceInBaseCurrency: totalBalanceInBaseCurrency.toNumber(), totalDividendInBaseCurrency: totalDividendInBaseCurrency.toNumber(), @@ -567,6 +574,7 @@ export class PortfolioService { } for (const { + activitiesCount, currency, dividend, firstBuyDate, @@ -610,6 +618,7 @@ export class PortfolioService { } holdings[symbol] = { + activitiesCount, currency, markets, marketsAdvanced, @@ -789,6 +798,7 @@ export class PortfolioService { } const { + activitiesCount, averagePrice, currency, dividendInBaseCurrency, @@ -807,8 +817,7 @@ export class PortfolioService { quantity, tags, timeWeightedInvestment, - timeWeightedInvestmentWithCurrencyEffect, - transactionCount + timeWeightedInvestmentWithCurrencyEffect } = holding; const activitiesOfHolding = activities.filter(({ SymbolProfile }) => { @@ -914,12 +923,12 @@ export class PortfolioService { ); return { + activitiesCount, marketPrice, marketPriceMax, marketPriceMin, SymbolProfile, tags, - activitiesCount: transactionCount, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], dateOfFirstActivity: firstBuyDate, @@ -1657,6 +1666,7 @@ export class PortfolioService { }): PortfolioPosition { return { currency, + activitiesCount: 0, allocationInPercentage: 0, assetClass: AssetClass.LIQUIDITY, assetSubClass: AssetSubClass.CASH, diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts index e277ba468..67a2f3e77 100644 --- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts @@ -7,6 +7,7 @@ import { Holding } from './holding.interface'; import { Sector } from './sector.interface'; export interface PortfolioPosition { + activitiesCount: number; allocationInPercentage: number; assetClass?: AssetClass; assetClassLabel?: string; @@ -38,7 +39,10 @@ export interface PortfolioPosition { sectors: Sector[]; symbol: string; tags?: Tag[]; + + /** @deprecated use activitiesCount instead */ transactionCount: number; + type?: string; url?: string; valueInBaseCurrency?: number; diff --git a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts index 0a6af978f..1891b9cbb 100644 --- a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts @@ -2,9 +2,12 @@ import { AccountWithValue } from '@ghostfolio/common/types'; export interface AccountsResponse { accounts: AccountWithValue[]; + activitiesCount: number; totalBalanceInBaseCurrency: number; totalDividendInBaseCurrency: number; totalInterestInBaseCurrency: number; totalValueInBaseCurrency: number; + + /** @deprecated use activitiesCount instead */ transactionCount: number; } diff --git a/libs/common/src/lib/models/timeline-position.ts b/libs/common/src/lib/models/timeline-position.ts index 8eae56cf7..4144f349d 100644 --- a/libs/common/src/lib/models/timeline-position.ts +++ b/libs/common/src/lib/models/timeline-position.ts @@ -9,6 +9,8 @@ import { Big } from 'big.js'; import { Transform, Type } from 'class-transformer'; export class TimelinePosition { + activitiesCount: number; + @Transform(transformToBig, { toClassOnly: true }) @Type(() => Big) averagePrice: Big; @@ -92,6 +94,7 @@ export class TimelinePosition { @Type(() => Big) timeWeightedInvestmentWithCurrencyEffect: Big; + /** @deprecated use activitiesCount instead */ transactionCount: number; @Transform(transformToBig, { toClassOnly: true }) diff --git a/libs/common/src/lib/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts index 08af86454..7f5fe79ba 100644 --- a/libs/common/src/lib/types/account-with-value.type.ts +++ b/libs/common/src/lib/types/account-with-value.type.ts @@ -1,12 +1,16 @@ import { Account as AccountModel, Platform } from '@prisma/client'; export type AccountWithValue = AccountModel & { + activitiesCount: number; allocationInPercentage: number; balanceInBaseCurrency: number; dividendInBaseCurrency: number; interestInBaseCurrency: number; platform?: Platform; + + /** @deprecated use activitiesCount instead */ transactionCount: number; + value: number; valueInBaseCurrency: number; }; diff --git a/libs/ui/src/lib/mocks/holdings.ts b/libs/ui/src/lib/mocks/holdings.ts index 6e8485c82..0f30b3e6f 100644 --- a/libs/ui/src/lib/mocks/holdings.ts +++ b/libs/ui/src/lib/mocks/holdings.ts @@ -2,6 +2,7 @@ import { PortfolioPosition } from '@ghostfolio/common/interfaces'; export const holdings: PortfolioPosition[] = [ { + activitiesCount: 1, allocationInPercentage: 0.042990776363386086, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -45,6 +46,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 12230 }, { + activitiesCount: 2, allocationInPercentage: 0.02377401948293552, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -88,6 +90,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 6763.224181360202 }, { + activitiesCount: 1, allocationInPercentage: 0.08038536990007467, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -131,6 +134,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 22868 }, { + activitiesCount: 1, allocationInPercentage: 0.19216416482928922, assetClass: 'LIQUIDITY' as any, assetClassLabel: 'Liquidity', @@ -162,6 +166,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 54666.7898248 }, { + activitiesCount: 1, allocationInPercentage: 0.04307127421937313, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -205,6 +210,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 12252.9 }, { + activitiesCount: 1, allocationInPercentage: 0.18762679306394897, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', @@ -248,6 +254,7 @@ export const holdings: PortfolioPosition[] = [ valueInBaseCurrency: 53376 }, { + activitiesCount: 5, allocationInPercentage: 0.053051250766657634, assetClass: 'EQUITY' as any, assetClassLabel: 'Equity', From 50d7671d4f24bfa30fe6048ff1c71dcf707cfacf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 22 Jan 2026 08:06:25 +0100 Subject: [PATCH 151/160] Task/change LambdaTest to TestMu AI (#6232) * Change LambdaTest to TestMu AI --- README.md | 4 +-- .../about/overview/about-overview-page.html | 18 +++++----- .../images/sponsors/logo-lambdatest.png | Bin 3448 -> 0 bytes .../images/sponsors/logo-testmu-dark.svg | 33 ++++++++++++++++++ .../images/sponsors/logo-testmu-light.svg | 33 ++++++++++++++++++ 5 files changed, 78 insertions(+), 10 deletions(-) delete mode 100644 apps/client/src/assets/images/sponsors/logo-lambdatest.png create mode 100644 apps/client/src/assets/images/sponsors/logo-testmu-dark.svg create mode 100644 apps/client/src/assets/images/sponsors/logo-testmu-light.svg diff --git a/README.md b/README.md index 8b6fe2296..c96bc308e 100644 --- a/README.md +++ b/README.md @@ -320,8 +320,8 @@ If you like to support this project, become a [**Sponsor**](https://github.com/s

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

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

    Sponsors

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

    Browser testing via
    - TestMu AI Logo + TestMu AI Logo

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

    - Browser testing via
    - - TestMu AI Logo - -

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