diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e2cdec28..407767cac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,17 +7,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added support for a copy-to-clipboard functionality in the value component +- Extended the holding detail dialog by adding a copy-to-clipboard button for the ISIN number (experimental) +- Extended the holding detail dialog by adding a copy-to-clipboard button for the symbol (experimental) +- Extended the user detail dialog of the admin control panel’s users section by adding a copy-to-clipboard button for the user id + +### Changed + +- Improved the language localization for German (`de`) +- Improved the language localization for Spanish (`es`) +- Upgraded `countries-list` from version `3.2.2` to `3.3.0` +- Upgraded `ng-extract-i18n-merge` from `3.2.1` to `3.3.0` +- Upgraded `stripe` from version `20.3.0` to `20.4.1` + +## 2.251.0 - 2026-03-24 + +### Added + +- Added the quantity column to the holdings table of the portfolio holdings page + +### Changed + +- Hardened the endpoint `DELETE /api/v1/auth-device/:id` by improving the user validation +- Improved the allocations by ETF holding on the allocations page by refining the grouping of the same assets with diverging names (experimental) +- Improved the language localization for Polish (`pl`) +- Upgraded `@trivago/prettier-plugin-sort-imports` from version `5.2.2` to `6.0.2` + +### Fixed + +- Fixed an issue by adding a missing guard in the public access for portfolio sharing + +## 2.250.0 - 2026-03-17 + +### Added + +- Added support for specific calendar year date ranges (`2025`, `2024`, `2023`, etc.) on the portfolio activities page + ### Changed - Consolidated the sign-out logic within the user service to unify cookie, state and token clearance - Improved the language localization for Polish (`pl`) - Upgraded `@ionic/angular` from version `8.7.3` to `8.8.1` +- Upgraded `replace-in-file` from version `8.3.0` to `8.4.0` - Upgraded `svgmap` from version `2.14.0` to `2.19.2` - Pinned the _Node.js_ version in the _Build code_ _GitHub Action_ to ensure environment consistency for tests ### Fixed - Fixed an issue with the detection of the thousand separator for the `de-CH` locale +- Fixed an issue in the _Storybook_ stories of the symbol autocomplete component caused by a circular dependency ## 2.249.0 - 2026-03-10 diff --git a/apps/api/src/app/activities/activities.controller.ts b/apps/api/src/app/activities/activities.controller.ts index 49c8885a1..141fd4c82 100644 --- a/apps/api/src/app/activities/activities.controller.ts +++ b/apps/api/src/app/activities/activities.controller.ts @@ -126,7 +126,7 @@ export class ActivitiesController { let startDate: Date; if (dateRange) { - ({ endDate, startDate } = getIntervalFromDateRange(dateRange)); + ({ endDate, startDate } = getIntervalFromDateRange({ dateRange })); } const filters = this.apiService.buildFiltersFromQueryParams({ diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 8a202a926..69b619625 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -172,7 +172,7 @@ export class AdminController { let date: Date; if (dateRange) { - const { startDate } = getIntervalFromDateRange(dateRange); + const { startDate } = getIntervalFromDateRange({ dateRange }); date = startDate; } diff --git a/apps/api/src/app/auth-device/auth-device.controller.ts b/apps/api/src/app/auth-device/auth-device.controller.ts index 15e853465..c46589d74 100644 --- a/apps/api/src/app/auth-device/auth-device.controller.ts +++ b/apps/api/src/app/auth-device/auth-device.controller.ts @@ -2,18 +2,43 @@ import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.s import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { permissions } from '@ghostfolio/common/permissions'; +import { RequestWithUser } from '@ghostfolio/common/types'; -import { Controller, Delete, Param, UseGuards } from '@nestjs/common'; +import { + Controller, + Delete, + HttpException, + Inject, + Param, + UseGuards +} from '@nestjs/common'; +import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; +import { getReasonPhrase, StatusCodes } from 'http-status-codes'; @Controller('auth-device') export class AuthDeviceController { - public constructor(private readonly authDeviceService: AuthDeviceService) {} + public constructor( + private readonly authDeviceService: AuthDeviceService, + @Inject(REQUEST) private readonly request: RequestWithUser + ) {} @Delete(':id') @HasPermission(permissions.deleteAuthDevice) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async deleteAuthDevice(@Param('id') id: string): Promise { + const originalAuthDevice = await this.authDeviceService.authDevice({ + id, + userId: this.request.user.id + }); + + if (!originalAuthDevice) { + throw new HttpException( + getReasonPhrase(StatusCodes.FORBIDDEN), + StatusCodes.FORBIDDEN + ); + } + await this.authDeviceService.deleteAuthDevice({ id }); } } diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts index 629d90928..970925777 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts @@ -126,10 +126,10 @@ export class BenchmarksController { @Query('tags') filterByTags?: string, @Query('withExcludedAccounts') withExcludedAccountsParam = 'false' ): Promise { - const { endDate, startDate } = getIntervalFromDateRange( + const { endDate, startDate } = getIntervalFromDateRange({ dateRange, - new Date(startDateString) - ); + startDate: new Date(startDateString) + }); const filters = this.apiService.buildFiltersFromQueryParams({ filterByAccounts, diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index bf5ac055d..6dcc6857d 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -153,10 +153,10 @@ export abstract class PortfolioCalculator { this.redisCacheService = redisCacheService; this.userId = userId; - const { endDate, startDate } = getIntervalFromDateRange( - 'max', - subDays(dateOfFirstActivity, 1) - ); + const { endDate, startDate } = getIntervalFromDateRange({ + dateRange: 'max', + startDate: subDays(dateOfFirstActivity, 1) + }); this.endDate = endOfDay(endDate); this.startDate = startOfDay(startDate); @@ -901,7 +901,7 @@ export abstract class PortfolioCalculator { // Make sure some key dates are present for (const dateRange of ['1d', '1y', '5y', 'max', 'mtd', 'wtd', 'ytd']) { const { endDate: dateRangeEnd, startDate: dateRangeStart } = - getIntervalFromDateRange(dateRange); + getIntervalFromDateRange({ dateRange }); if ( !isBefore(dateRangeStart, startDate) && 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 be69048df..2841e9975 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -860,7 +860,7 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { return format(date, 'yyyy'); }) ] as DateRange[]) { - const dateInterval = getIntervalFromDateRange(dateRange); + const dateInterval = getIntervalFromDateRange({ dateRange }); const endDate = dateInterval.endDate; let startDate = dateInterval.startDate; diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index f9758d0b9..9daa56069 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -320,7 +320,7 @@ export class PortfolioController { await this.impersonationService.validateImpersonationId(impersonationId); const userCurrency = this.request.user.settings.settings.baseCurrency; - const { endDate, startDate } = getIntervalFromDateRange(dateRange); + const { endDate, startDate } = getIntervalFromDateRange({ dateRange }); const { activities } = await this.activitiesService.getActivities({ endDate, diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 103d95a7a..a64fc9c27 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -403,7 +403,7 @@ export class PortfolioService { const user = await this.userService.user({ id: userId }); const userCurrency = this.getUserCurrency(user); - const { endDate, startDate } = getIntervalFromDateRange(dateRange); + const { endDate, startDate } = getIntervalFromDateRange({ dateRange }); const { activities } = await this.activitiesService.getActivitiesForPortfolioCalculator({ diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 689ee3e6a..877ea0ee4 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -35,7 +35,7 @@ export class SubscriptionService { this.stripe = new Stripe( this.configurationService.get('STRIPE_SECRET_KEY'), { - apiVersion: '2026-01-28.clover' + apiVersion: '2026-02-25.clover' } ); } diff --git a/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts b/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts index 6030e62d4..40b45a115 100644 --- a/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts +++ b/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts @@ -16,7 +16,7 @@ import { LookupResponse } from '@ghostfolio/common/interfaces'; -import { Injectable } from '@nestjs/common'; +import { Injectable, OnModuleInit } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; import Alphavantage from 'alphavantage'; import { format, isAfter, isBefore, parse } from 'date-fns'; @@ -24,12 +24,16 @@ import { format, isAfter, isBefore, parse } from 'date-fns'; import { AlphaVantageHistoricalResponse } from './interfaces/interfaces'; @Injectable() -export class AlphaVantageService implements DataProviderInterface { +export class AlphaVantageService + implements DataProviderInterface, OnModuleInit +{ public alphaVantage; public constructor( private readonly configurationService: ConfigurationService - ) { + ) {} + + public onModuleInit() { this.alphaVantage = Alphavantage({ key: this.configurationService.get('API_KEY_ALPHA_VANTAGE') }); diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index d0d96acac..d5ed69d06 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -17,7 +17,7 @@ import { LookupResponse } from '@ghostfolio/common/interfaces'; -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { AssetClass, AssetSubClass, @@ -27,13 +27,15 @@ import { import { format, fromUnixTime, getUnixTime } from 'date-fns'; @Injectable() -export class CoinGeckoService implements DataProviderInterface { - private readonly apiUrl: string; - private readonly headers: HeadersInit = {}; +export class CoinGeckoService implements DataProviderInterface, OnModuleInit { + private apiUrl: string; + private headers: HeadersInit = {}; public constructor( private readonly configurationService: ConfigurationService - ) { + ) {} + + public onModuleInit() { const apiKeyDemo = this.configurationService.get('API_KEY_COINGECKO_DEMO'); const apiKeyPro = this.configurationService.get('API_KEY_COINGECKO_PRO'); diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index cd20fca44..8c718108c 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -22,7 +22,7 @@ import { } from '@ghostfolio/common/interfaces'; import { MarketState } from '@ghostfolio/common/types'; -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { AssetClass, AssetSubClass, @@ -33,14 +33,18 @@ import { addDays, format, isSameDay, isToday } from 'date-fns'; import { isNumber } from 'lodash'; @Injectable() -export class EodHistoricalDataService implements DataProviderInterface { +export class EodHistoricalDataService + implements DataProviderInterface, OnModuleInit +{ private apiKey: string; private readonly URL = 'https://eodhistoricaldata.com/api'; public constructor( private readonly configurationService: ConfigurationService, private readonly symbolProfileService: SymbolProfileService - ) { + ) {} + + public onModuleInit() { this.apiKey = this.configurationService.get('API_KEY_EOD_HISTORICAL_DATA'); } diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 2b4193af5..27391130e 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -23,7 +23,7 @@ import { } from '@ghostfolio/common/interfaces'; import { MarketState } from '@ghostfolio/common/types'; -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { AssetClass, AssetSubClass, @@ -44,7 +44,9 @@ import { import { uniqBy } from 'lodash'; @Injectable() -export class FinancialModelingPrepService implements DataProviderInterface { +export class FinancialModelingPrepService + implements DataProviderInterface, OnModuleInit +{ private static countriesMapping = { 'Korea (the Republic of)': 'South Korea', 'Russian Federation': 'Russia', @@ -57,7 +59,9 @@ export class FinancialModelingPrepService implements DataProviderInterface { private readonly configurationService: ConfigurationService, private readonly cryptocurrencyService: CryptocurrencyService, private readonly prismaService: PrismaService - ) { + ) {} + + public onModuleInit() { this.apiKey = this.configurationService.get( 'API_KEY_FINANCIAL_MODELING_PREP' ); diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 96d248f57..201c2f994 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -13,7 +13,7 @@ import { DestroyRef, DOCUMENT, HostBinding, - Inject, + inject, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; @@ -36,7 +36,7 @@ import { filter } from 'rxjs/operators'; 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 { GfAppQueryParams } from './interfaces/interfaces'; import { ImpersonationStorageService } from './services/impersonation-storage.service'; import { UserService } from './services/user/user.service'; @@ -48,10 +48,6 @@ import { UserService } from './services/user/user.service'; templateUrl: './app.component.html' }) export class GfAppComponent implements OnInit { - @HostBinding('class.has-info-message') get getHasMessage() { - return this.hasInfoMessage; - } - public canCreateAccount: boolean; public currentRoute: string; public currentSubRoute: string; @@ -66,43 +62,47 @@ export class GfAppComponent implements OnInit { public pageTitle: string; public routerLinkRegister = publicRoutes.register.routerLink; public showFooter = false; - public user: User; - - public constructor( - private changeDetectorRef: ChangeDetectorRef, - private dataService: DataService, - private destroyRef: DestroyRef, - private deviceService: DeviceDetectorService, - private dialog: MatDialog, - @Inject(DOCUMENT) private document: Document, - private impersonationStorageService: ImpersonationStorageService, - private notificationService: NotificationService, - private route: ActivatedRoute, - private router: Router, - private title: Title, - private userService: UserService - ) { + public user: User | undefined; + + private readonly changeDetectorRef = inject(ChangeDetectorRef); + private readonly dataService = inject(DataService); + private readonly destroyRef = inject(DestroyRef); + private readonly deviceService = inject(DeviceDetectorService); + private readonly dialog = inject(MatDialog); + private readonly document = inject(DOCUMENT); + private readonly impersonationStorageService = inject( + ImpersonationStorageService + ); + private readonly notificationService = inject(NotificationService); + private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); + private readonly title = inject(Title); + private readonly userService = inject(UserService); + + public constructor() { this.initializeTheme(); this.user = undefined; this.route.queryParams .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((params) => { - if ( - params['dataSource'] && - params['holdingDetailDialog'] && - params['symbol'] - ) { - this.openHoldingDetailDialog({ - dataSource: params['dataSource'], - symbol: params['symbol'] - }); + .subscribe( + ({ dataSource, holdingDetailDialog, symbol }: GfAppQueryParams) => { + if (dataSource && holdingDetailDialog && symbol) { + this.openHoldingDetailDialog({ + dataSource, + symbol + }); + } } - }); + ); addIcons({ openOutline }); } + @HostBinding('class.has-info-message') get getHasMessage() { + return this.hasInfoMessage; + } + public ngOnInit() { this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.info = this.dataService.fetchInfo(); @@ -128,7 +128,7 @@ export class GfAppComponent implements OnInit { !this.currentSubRoute) || (this.currentRoute === internalRoutes.home.path && this.currentSubRoute === - internalRoutes.home.subRoutes.holdings.path) || + internalRoutes.home.subRoutes?.holdings.path) || (this.currentRoute === internalRoutes.portfolio.path && !this.currentSubRoute)) && this.user?.settings?.viewMode !== 'ZEN' @@ -141,18 +141,18 @@ export class GfAppComponent implements OnInit { if ( (this.currentRoute === internalRoutes.home.path && this.currentSubRoute === - internalRoutes.home.subRoutes.holdings.path) || + internalRoutes.home.subRoutes?.holdings.path) || (this.currentRoute === internalRoutes.portfolio.path && !this.currentSubRoute) || (this.currentRoute === internalRoutes.portfolio.path && this.currentSubRoute === - internalRoutes.portfolio.subRoutes.activities.path) || + internalRoutes.portfolio.subRoutes?.activities.path) || (this.currentRoute === internalRoutes.portfolio.path && this.currentSubRoute === - internalRoutes.portfolio.subRoutes.allocations.path) || + internalRoutes.portfolio.subRoutes?.allocations.path) || (this.currentRoute === internalRoutes.zen.path && this.currentSubRoute === - internalRoutes.home.subRoutes.holdings.path) + internalRoutes.home.subRoutes?.holdings.path) ) { this.hasPermissionToChangeFilters = true; } else { @@ -223,11 +223,17 @@ export class GfAppComponent implements OnInit { } public onClickSystemMessage() { - if (this.user.systemMessage.routerLink) { - this.router.navigate(this.user.systemMessage.routerLink); + const systemMessage = this.user?.systemMessage; + + if (!systemMessage) { + return; + } + + if (systemMessage.routerLink) { + void this.router.navigate(systemMessage.routerLink); } else { this.notificationService.alert({ - title: this.user.systemMessage.message + title: systemMessage.message }); } } @@ -269,10 +275,7 @@ export class GfAppComponent implements OnInit { .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open< - GfHoldingDetailDialogComponent, - HoldingDetailDialogParams - >(GfHoldingDetailDialogComponent, { + const dialogRef = this.dialog.open(GfHoldingDetailDialogComponent, { autoFocus: false, data: { dataSource, @@ -313,7 +316,7 @@ export class GfAppComponent implements OnInit { .afterClosed() .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { - this.router.navigate([], { + void this.router.navigate([], { queryParams: { dataSource: null, holdingDetailDialog: null, @@ -339,6 +342,6 @@ export class GfAppComponent implements OnInit { this.document .querySelector('meta[name="theme-color"]') - .setAttribute('content', themeColor); + ?.setAttribute('content', themeColor); } } diff --git a/apps/client/src/app/components/access-table/access-table.component.html b/apps/client/src/app/components/access-table/access-table.component.html index cb41904d3..4283d7860 100644 --- a/apps/client/src/app/components/access-table/access-table.component.html +++ b/apps/client/src/app/components/access-table/access-table.component.html @@ -39,7 +39,7 @@ getPublicUrl(element.id) }} - @if (user?.settings?.isExperimentalFeatures) { + @if (user()?.settings?.isExperimentalFeatures) {
GET {{ baseUrl }}/api/v1/public/{{ @@ -69,7 +69,7 @@ class="no-max-width" xPosition="before" > - @if (user?.settings?.isExperimentalFeatures) { + @if (user()?.settings?.isExperimentalFeatures) { } @if ( - user?.settings?.isExperimentalFeatures || element.type === 'PUBLIC' + user()?.settings?.isExperimentalFeatures || + element.type === 'PUBLIC' ) {
} @@ -100,7 +101,7 @@ - - + +
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 76548c45d..122b4f88b 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 @@ -7,11 +7,12 @@ import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard'; import { ChangeDetectionStrategy, Component, + computed, CUSTOM_ELEMENTS_SCHEMA, - EventEmitter, - Input, - OnChanges, - Output + effect, + inject, + input, + output } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatMenuModule } from '@angular/material/menu'; @@ -46,23 +47,32 @@ import ms from 'ms'; templateUrl: './access-table.component.html', styleUrls: ['./access-table.component.scss'] }) -export class GfAccessTableComponent implements OnChanges { - @Input() accesses: Access[]; - @Input() showActions: boolean; - @Input() user: User; - - @Output() accessDeleted = new EventEmitter(); - @Output() accessToUpdate = new EventEmitter(); - - public baseUrl = window.location.origin; - public dataSource: MatTableDataSource; - public displayedColumns = []; - - public constructor( - private clipboard: Clipboard, - private notificationService: NotificationService, - private snackBar: MatSnackBar - ) { +export class GfAccessTableComponent { + public readonly accesses = input.required(); + public readonly showActions = input(false); + public readonly user = input.required(); + + public readonly accessDeleted = output(); + public readonly accessToUpdate = output(); + + protected readonly baseUrl = window.location.origin; + protected readonly dataSource = new MatTableDataSource(); + + protected readonly displayedColumns = computed(() => { + const columns = ['alias', 'grantee', 'type', 'details']; + + if (this.showActions()) { + columns.push('actions'); + } + + return columns; + }); + + private readonly clipboard = inject(Clipboard); + private readonly notificationService = inject(NotificationService); + private readonly snackBar = inject(MatSnackBar); + + public constructor() { addIcons({ copyOutline, createOutline, @@ -72,27 +82,19 @@ export class GfAccessTableComponent implements OnChanges { lockOpenOutline, removeCircleOutline }); - } - public ngOnChanges() { - this.displayedColumns = ['alias', 'grantee', 'type', 'details']; - - if (this.showActions) { - this.displayedColumns.push('actions'); - } - - if (this.accesses) { - this.dataSource = new MatTableDataSource(this.accesses); - } + effect(() => { + this.dataSource.data = this.accesses() ?? []; + }); } - public getPublicUrl(aId: string): string { - const languageCode = this.user.settings.language; + protected getPublicUrl(aId: string) { + const languageCode = this.user().settings.language; return `${this.baseUrl}/${languageCode}/${publicRoutes.public.path}/${aId}`; } - public onCopyUrlToClipboard(aId: string): void { + protected onCopyUrlToClipboard(aId: string) { this.clipboard.copy(this.getPublicUrl(aId)); this.snackBar.open( @@ -104,7 +106,7 @@ export class GfAccessTableComponent implements OnChanges { ); } - public onDeleteAccess(aId: string) { + protected onDeleteAccess(aId: string) { this.notificationService.confirm({ confirmFn: () => { this.accessDeleted.emit(aId); @@ -114,7 +116,7 @@ export class GfAccessTableComponent implements OnChanges { }); } - public onUpdateAccess(aId: string) { + protected onUpdateAccess(aId: string) { this.accessToUpdate.emit(aId); } } 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 380fb69cb..7a3040391 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 @@ -26,11 +26,12 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + DestroyRef, Inject, - OnDestroy, OnInit } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatButtonModule } from '@angular/material/button'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MatDialogModule } from '@angular/material/dialog'; @@ -49,8 +50,7 @@ import { } from 'ionicons/icons'; import { isNumber } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; -import { forkJoin, Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { forkJoin } from 'rxjs'; import { AccountDetailDialogParams } from './interfaces/interfaces'; @@ -77,7 +77,7 @@ import { AccountDetailDialogParams } from './interfaces/interfaces'; styleUrls: ['./account-detail-dialog.component.scss'], templateUrl: 'account-detail-dialog.html' }) -export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { +export class GfAccountDetailDialogComponent implements OnInit { public accountBalances: AccountBalancesResponse['balances']; public activities: OrderWithAccount[]; public activitiesCount: number; @@ -104,18 +104,17 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { public user: User; public valueInBaseCurrency: number; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: AccountDetailDialogParams, private dataService: DataService, + private destroyRef: DestroyRef, public dialogRef: MatDialogRef, private router: Router, private userService: UserService ) { this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((state) => { if (state?.user) { this.user = state.user; @@ -154,7 +153,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { public onAddAccountBalance(accountBalance: CreateAccountBalanceDto) { this.dataService .postAccountBalance(accountBalance) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.initialize(); }); @@ -163,7 +162,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { public onDeleteAccountBalance(aId: string) { this.dataService .deleteAccountBalance(aId) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.initialize(); }); @@ -176,7 +175,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { this.dataService .fetchExport({ activityIds }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { downloadAsFile({ content: data, @@ -212,7 +211,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { private fetchAccount() { this.dataService .fetchAccount(this.data.accountId) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe( ({ activitiesCount, @@ -287,7 +286,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { sortColumn: this.sortColumn, sortDirection: this.sortDirection }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ activities, count }) => { this.dataSource = new MatTableDataSource(activities); this.totalItems = count; @@ -304,7 +303,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { forkJoin({ accountBalances: this.dataService .fetchAccountBalances(this.data.accountId) - .pipe(takeUntil(this.unsubscribeSubject)), + .pipe(takeUntilDestroyed(this.destroyRef)), portfolioPerformance: this.dataService .fetchPortfolioPerformance({ filters: [ @@ -317,7 +316,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { withExcludedAccounts: true, withItems: true }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) }).subscribe({ error: () => { this.isLoadingChart = false; @@ -360,7 +359,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { } ] }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ holdings }) => { this.holdings = holdings; @@ -374,9 +373,4 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { this.fetchChart(); this.fetchPortfolioHoldings(); } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } 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 c0ccb0f64..5d4e5268e 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 @@ -22,7 +22,13 @@ import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { CommonModule } from '@angular/common'; -import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { + ChangeDetectorRef, + Component, + DestroyRef, + OnInit +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; @@ -50,8 +56,6 @@ import { trashOutline } from 'ionicons/icons'; import ms, { StringValue } from 'ms'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; @Component({ imports: [ @@ -72,7 +76,7 @@ import { takeUntil } from 'rxjs/operators'; styleUrls: ['./admin-overview.scss'], templateUrl: './admin-overview.html' }) -export class GfAdminOverviewComponent implements OnDestroy, OnInit { +export class GfAdminOverviewComponent implements OnInit { public activitiesCount: number; public couponDuration: StringValue = '14 days'; public coupons: Coupon[]; @@ -88,13 +92,12 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { public user: User; public version: string; - private unsubscribeSubject = new Subject(); - public constructor( private adminService: AdminService, private cacheService: CacheService, private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private destroyRef: DestroyRef, private notificationService: NotificationService, private snackBar: MatSnackBar, private userService: UserService @@ -102,7 +105,7 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { this.info = this.dataService.fetchInfo(); this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((state) => { if (state?.user) { this.user = state.user; @@ -219,7 +222,7 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { confirmFn: () => { this.cacheService .flush() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { setTimeout(() => { window.location.reload(); @@ -268,7 +271,7 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { public onSyncDemoUserAccount() { this.adminService .syncDemoUserAccount() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.snackBar.open( '✅ ' + $localize`Demo user account has been synced.`, @@ -280,15 +283,10 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { }); } - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } - private fetchAdminData() { this.adminService .fetchAdminData() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ activitiesCount, settings, userCount, version }) => { this.activitiesCount = activitiesCount; this.coupons = (settings[PROPERTY_COUPONS] as Coupon[]) ?? []; @@ -320,7 +318,7 @@ export class GfAdminOverviewComponent implements OnDestroy, OnInit { .putAdminSetting(key, { value: value || value === false ? JSON.stringify(value) : undefined }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { setTimeout(() => { window.location.reload(); 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 874bbc1db..3b57ba1c8 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 @@ -89,7 +89,7 @@ export class GfAdminUsersComponent implements OnInit { public isLoading = false; public pageSize = DEFAULT_PAGE_SIZE; public routerLinkAdminControlUsers = - internalRoutes.adminControl.subRoutes.users.routerLink; + internalRoutes.adminControl.subRoutes?.users.routerLink; public totalItems = 0; public user: User; diff --git a/apps/client/src/app/components/footer/footer.component.ts b/apps/client/src/app/components/footer/footer.component.ts index 48f010565..d06e711b9 100644 --- a/apps/client/src/app/components/footer/footer.component.ts +++ b/apps/client/src/app/components/footer/footer.component.ts @@ -33,13 +33,13 @@ export class GfFooterComponent implements OnChanges { public hasPermissionToAccessFearAndGreedIndex: boolean; public routerLinkAbout = publicRoutes.about.routerLink; public routerLinkAboutChangelog = - publicRoutes.about.subRoutes.changelog.routerLink; + publicRoutes.about.subRoutes?.changelog.routerLink; public routerLinkAboutLicense = - publicRoutes.about.subRoutes.license.routerLink; + publicRoutes.about.subRoutes?.license.routerLink; public routerLinkAboutPrivacyPolicy = - publicRoutes.about.subRoutes.privacyPolicy.routerLink; + publicRoutes.about.subRoutes?.privacyPolicy.routerLink; public routerLinkAboutTermsOfService = - publicRoutes.about.subRoutes.termsOfService.routerLink; + publicRoutes.about.subRoutes?.termsOfService.routerLink; public routerLinkBlog = publicRoutes.blog.routerLink; public routerLinkFaq = publicRoutes.faq.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink; 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 4d89cfbe1..13ded73eb 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 @@ -35,10 +35,11 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + DestroyRef, Inject, - OnDestroy, OnInit } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatChipsModule } from '@angular/material/chips'; @@ -67,8 +68,7 @@ import { walletOutline } from 'ionicons/icons'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; -import { Subject } from 'rxjs'; -import { switchMap, takeUntil } from 'rxjs/operators'; +import { switchMap } from 'rxjs/operators'; import { HoldingDetailDialogParams } from './interfaces/interfaces'; @@ -102,7 +102,7 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; styleUrls: ['./holding-detail-dialog.component.scss'], templateUrl: 'holding-detail-dialog.html' }) -export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { +export class GfHoldingDetailDialogComponent implements OnInit { public activitiesCount: number; public accounts: Account[]; public assetClass: string; @@ -158,11 +158,10 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public user: User; public value: number; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private destroyRef: DestroyRef, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: HoldingDetailDialogParams, private formBuilder: FormBuilder, @@ -192,7 +191,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.holdingForm .get('tags') - .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) + .valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((tags: Tag[]) => { const newTag = tags.find(({ id }) => { return id === undefined; @@ -217,7 +216,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { switchMap(() => { return this.userService.get(true); }), - takeUntil(this.unsubscribeSubject) + takeUntilDestroyed(this.destroyRef) ) .subscribe(); } else { @@ -227,7 +226,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { dataSource: this.data.dataSource, symbol: this.data.symbol }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); } }); @@ -236,7 +235,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { .fetchAccounts({ filters }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ accounts }) => { this.accounts = accounts; @@ -249,7 +248,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { sortColumn: this.sortColumn, sortDirection: this.sortDirection }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ activities }) => { this.dataSource = new MatTableDataSource(activities); @@ -261,7 +260,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { dataSource: this.data.dataSource, symbol: this.data.symbol }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe( ({ activitiesCount, @@ -524,7 +523,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { ); this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((state) => { if (state?.user) { this.user = state.user; @@ -582,7 +581,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.dataService .postActivity(activity) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.router.navigate( internalRoutes.portfolio.subRoutes.activities.routerLink @@ -599,7 +598,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.dataService .fetchExport({ activityIds }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { downloadAsFile({ content: data, @@ -629,18 +628,13 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.dialogRef.close(); } - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } - private fetchMarketData() { this.dataService .fetchMarketDataBySymbol({ dataSource: this.data.dataSource, symbol: this.data.symbol }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ marketData }) => { this.marketDataItems = marketData; 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 15415e413..b8cb8dda2 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 @@ -310,6 +310,9 @@ Symbol ISIN (); - public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private destroyRef: DestroyRef, private deviceService: DeviceDetectorService, private userService: UserService ) { this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((state) => { if (state?.user) { this.user = state.user; @@ -79,7 +77,7 @@ export class GfMarketsComponent implements OnDestroy, OnInit { public ngOnInit() { this.dataService .fetchMarketDataOfMarkets({ includeHistoricalData: this.numberOfDays }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ fearAndGreedIndex }) => { this.fearAndGreedIndexData = fearAndGreedIndex; @@ -90,7 +88,7 @@ export class GfMarketsComponent implements OnDestroy, OnInit { this.dataService .fetchBenchmarks() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ benchmarks }) => { this.benchmarks = benchmarks; @@ -119,9 +117,4 @@ export class GfMarketsComponent implements OnDestroy, OnInit { this.initialize(); } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index e2ffc1cf6..23f870ff3 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -9,11 +9,13 @@ import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, + DestroyRef, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; import { MatMenuModule } from '@angular/material/menu'; @@ -29,7 +31,6 @@ import { } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; -import { Subject, takeUntil } from 'rxjs'; import { RuleSettingsDialogParams } from './rule-settings-dialog/interfaces/interfaces'; import { GfRuleSettingsDialogComponent } from './rule-settings-dialog/rule-settings-dialog.component'; @@ -58,9 +59,8 @@ export class GfRuleComponent implements OnInit { @Output() ruleUpdated = new EventEmitter(); private deviceType: string; - private unsubscribeSubject = new Subject(); - public constructor( + private destroyRef: DestroyRef, private deviceService: DeviceDetectorService, private dialog: MatDialog ) { @@ -94,7 +94,7 @@ export class GfRuleComponent implements OnInit { dialogRef .afterClosed() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((settings: RuleSettings) => { if (settings) { this.ruleUpdated.emit({ @@ -115,9 +115,4 @@ export class GfRuleComponent implements OnInit { this.ruleUpdated.emit(settings); } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html index 570dcf4d6..e9af86942 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -27,7 +27,13 @@
- User ID + User ID
Role diff --git a/apps/client/src/app/interfaces/interfaces.ts b/apps/client/src/app/interfaces/interfaces.ts new file mode 100644 index 000000000..493eff4ab --- /dev/null +++ b/apps/client/src/app/interfaces/interfaces.ts @@ -0,0 +1,8 @@ +import type { Params } from '@angular/router'; +import type { DataSource } from '@prisma/client'; + +export interface GfAppQueryParams extends Params { + dataSource?: DataSource; + holdingDetailDialog?: string; + symbol?: string; +} diff --git a/apps/client/src/app/pages/about/about-page.routes.ts b/apps/client/src/app/pages/about/about-page.routes.ts index 4cb13280a..b4466fbab 100644 --- a/apps/client/src/app/pages/about/about-page.routes.ts +++ b/apps/client/src/app/pages/about/about-page.routes.ts @@ -15,29 +15,29 @@ export const routes: Routes = [ import('./overview/about-overview-page.routes').then((m) => m.routes) }, { - path: publicRoutes.about.subRoutes.changelog.path, + path: publicRoutes.about.subRoutes?.changelog.path, loadChildren: () => import('./changelog/changelog-page.routes').then((m) => m.routes) }, { - path: publicRoutes.about.subRoutes.license.path, + path: publicRoutes.about.subRoutes?.license.path, loadChildren: () => import('./license/license-page.routes').then((m) => m.routes) }, { - path: publicRoutes.about.subRoutes.ossFriends.path, + path: publicRoutes.about.subRoutes?.ossFriends.path, loadChildren: () => import('./oss-friends/oss-friends-page.routes').then((m) => m.routes) }, { - path: publicRoutes.about.subRoutes.privacyPolicy.path, + path: publicRoutes.about.subRoutes?.privacyPolicy.path, loadChildren: () => import('./privacy-policy/privacy-policy-page.routes').then( (m) => m.routes ) }, { - path: publicRoutes.about.subRoutes.termsOfService.path, + path: publicRoutes.about.subRoutes?.termsOfService.path, loadChildren: () => import('./terms-of-service/terms-of-service-page.routes').then( (m) => m.routes diff --git a/apps/client/src/app/pages/about/changelog/changelog-page.routes.ts b/apps/client/src/app/pages/about/changelog/changelog-page.routes.ts index 523218acc..7b67283e9 100644 --- a/apps/client/src/app/pages/about/changelog/changelog-page.routes.ts +++ b/apps/client/src/app/pages/about/changelog/changelog-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfChangelogPageComponent, path: '', - title: publicRoutes.about.subRoutes.changelog.title + title: publicRoutes.about.subRoutes?.changelog.title } ]; diff --git a/apps/client/src/app/pages/about/license/license-page.routes.ts b/apps/client/src/app/pages/about/license/license-page.routes.ts index 1684bb0c5..45de6aaa2 100644 --- a/apps/client/src/app/pages/about/license/license-page.routes.ts +++ b/apps/client/src/app/pages/about/license/license-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfLicensePageComponent, path: '', - title: publicRoutes.about.subRoutes.license.title + title: publicRoutes.about.subRoutes?.license.title } ]; diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.routes.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.routes.ts index 8dbb9d52a..dfe65d962 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.routes.ts +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfOpenSourceSoftwareFriendsPageComponent, path: '', - title: publicRoutes.about.subRoutes.ossFriends.title + title: publicRoutes.about.subRoutes?.ossFriends.title } ]; diff --git a/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.routes.ts b/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.routes.ts index e87436c17..934e06289 100644 --- a/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.routes.ts +++ b/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfPrivacyPolicyPageComponent, path: '', - title: publicRoutes.about.subRoutes.privacyPolicy.title + title: publicRoutes.about.subRoutes?.privacyPolicy.title } ]; diff --git a/apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.routes.ts b/apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.routes.ts index 34d7a72d0..caf8751f1 100644 --- a/apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.routes.ts +++ b/apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfTermsOfServicePageComponent, path: '', - title: publicRoutes.about.subRoutes.termsOfService.title + title: publicRoutes.about.subRoutes?.termsOfService.title } ]; diff --git a/apps/client/src/app/pages/admin/admin-page.routes.ts b/apps/client/src/app/pages/admin/admin-page.routes.ts index c5309edbb..08fce248c 100644 --- a/apps/client/src/app/pages/admin/admin-page.routes.ts +++ b/apps/client/src/app/pages/admin/admin-page.routes.ts @@ -20,29 +20,29 @@ export const routes: Routes = [ title: internalRoutes.adminControl.title }, { - path: internalRoutes.adminControl.subRoutes.jobs.path, + path: internalRoutes.adminControl.subRoutes?.jobs.path, component: GfAdminJobsComponent, - title: internalRoutes.adminControl.subRoutes.jobs.title + title: internalRoutes.adminControl.subRoutes?.jobs.title }, { - path: internalRoutes.adminControl.subRoutes.marketData.path, + path: internalRoutes.adminControl.subRoutes?.marketData.path, component: GfAdminMarketDataComponent, - title: internalRoutes.adminControl.subRoutes.marketData.title + title: internalRoutes.adminControl.subRoutes?.marketData.title }, { - path: internalRoutes.adminControl.subRoutes.settings.path, + path: internalRoutes.adminControl.subRoutes?.settings.path, component: GfAdminSettingsComponent, - title: internalRoutes.adminControl.subRoutes.settings.title + title: internalRoutes.adminControl.subRoutes?.settings.title }, { - path: internalRoutes.adminControl.subRoutes.users.path, + path: internalRoutes.adminControl.subRoutes?.users.path, component: GfAdminUsersComponent, - title: internalRoutes.adminControl.subRoutes.users.title + title: internalRoutes.adminControl.subRoutes?.users.title }, { - path: `${internalRoutes.adminControl.subRoutes.users.path}/:userId`, + path: `${internalRoutes.adminControl.subRoutes?.users.path}/:userId`, component: GfAdminUsersComponent, - title: internalRoutes.adminControl.subRoutes.users.title + title: internalRoutes.adminControl.subRoutes?.users.title } ], component: AdminPageComponent, diff --git a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts index c5a9cf178..4b62e4449 100644 --- a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts +++ b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts @@ -12,6 +12,6 @@ import { RouterModule } from '@angular/router'; }) export class GhostfolioJoinsOssFriendsPageComponent { public routerLinkAboutOssFriends = - publicRoutes.about.subRoutes.ossFriends.routerLink; + publicRoutes.about.subRoutes?.ossFriends.routerLink; public routerLinkBlog = publicRoutes.blog.routerLink; } diff --git a/apps/client/src/app/pages/faq/faq-page.routes.ts b/apps/client/src/app/pages/faq/faq-page.routes.ts index 2999e3c80..f80304a08 100644 --- a/apps/client/src/app/pages/faq/faq-page.routes.ts +++ b/apps/client/src/app/pages/faq/faq-page.routes.ts @@ -15,12 +15,12 @@ export const routes: Routes = [ import('./overview/faq-overview-page.routes').then((m) => m.routes) }, { - path: publicRoutes.faq.subRoutes.saas.path, + path: publicRoutes.faq.subRoutes?.saas.path, loadChildren: () => import('./saas/saas-page.routes').then((m) => m.routes) }, { - path: publicRoutes.faq.subRoutes.selfHosting.path, + path: publicRoutes.faq.subRoutes?.selfHosting.path, loadChildren: () => import('./self-hosting/self-hosting-page.routes').then( (m) => m.routes diff --git a/apps/client/src/app/pages/faq/saas/saas-page.component.ts b/apps/client/src/app/pages/faq/saas/saas-page.component.ts index b47d45fe2..4429fe492 100644 --- a/apps/client/src/app/pages/faq/saas/saas-page.component.ts +++ b/apps/client/src/app/pages/faq/saas/saas-page.component.ts @@ -25,7 +25,7 @@ export class GfSaasPageComponent implements OnDestroy { public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`; public routerLinkAccount = internalRoutes.account.routerLink; public routerLinkAccountMembership = - internalRoutes.account.subRoutes.membership.routerLink; + internalRoutes.account.subRoutes?.membership.routerLink; public routerLinkMarkets = publicRoutes.markets.routerLink; public routerLinkRegister = publicRoutes.register.routerLink; public user: User; diff --git a/apps/client/src/app/pages/faq/saas/saas-page.routes.ts b/apps/client/src/app/pages/faq/saas/saas-page.routes.ts index dcb574c38..d68893640 100644 --- a/apps/client/src/app/pages/faq/saas/saas-page.routes.ts +++ b/apps/client/src/app/pages/faq/saas/saas-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfSaasPageComponent, path: '', - title: `${publicRoutes.faq.subRoutes.saas.title} - ${publicRoutes.faq.title}` + title: `${publicRoutes.faq.subRoutes?.saas.title} - ${publicRoutes.faq.title}` } ]; diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts index d08cdb312..ccf034421 100644 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts +++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfSelfHostingPageComponent, path: '', - title: `${publicRoutes.faq.subRoutes.selfHosting.title} - ${publicRoutes.faq.title}` + title: `${publicRoutes.faq.subRoutes?.selfHosting.title} - ${publicRoutes.faq.title}` } ]; diff --git a/apps/client/src/app/pages/home/home-page.routes.ts b/apps/client/src/app/pages/home/home-page.routes.ts index 82ef1e521..436826674 100644 --- a/apps/client/src/app/pages/home/home-page.routes.ts +++ b/apps/client/src/app/pages/home/home-page.routes.ts @@ -20,29 +20,29 @@ export const routes: Routes = [ component: GfHomeOverviewComponent }, { - path: internalRoutes.home.subRoutes.holdings.path, + path: internalRoutes.home.subRoutes?.holdings.path, component: GfHomeHoldingsComponent, - title: internalRoutes.home.subRoutes.holdings.title + title: internalRoutes.home.subRoutes?.holdings.title }, { - path: internalRoutes.home.subRoutes.summary.path, + path: internalRoutes.home.subRoutes?.summary.path, component: GfHomeSummaryComponent, - title: internalRoutes.home.subRoutes.summary.title + title: internalRoutes.home.subRoutes?.summary.title }, { - path: internalRoutes.home.subRoutes.markets.path, + path: internalRoutes.home.subRoutes?.markets.path, component: GfHomeMarketComponent, - title: internalRoutes.home.subRoutes.markets.title + title: internalRoutes.home.subRoutes?.markets.title }, { - path: internalRoutes.home.subRoutes.marketsPremium.path, + path: internalRoutes.home.subRoutes?.marketsPremium.path, component: GfMarketsComponent, - title: internalRoutes.home.subRoutes.marketsPremium.title + title: internalRoutes.home.subRoutes?.marketsPremium.title }, { - path: internalRoutes.home.subRoutes.watchlist.path, + path: internalRoutes.home.subRoutes?.watchlist.path, component: GfHomeWatchlistComponent, - title: internalRoutes.home.subRoutes.watchlist.title + title: internalRoutes.home.subRoutes?.watchlist.title } ], component: GfHomePageComponent, 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 25fb2d6e7..9ee9cceb4 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -9,7 +9,7 @@ import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart'; import { CommonModule } from '@angular/common'; -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { RouterModule } from '@angular/router'; @@ -21,7 +21,6 @@ import { starOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; -import { Subject } from 'rxjs'; @Component({ host: { class: 'page' }, @@ -40,7 +39,7 @@ import { Subject } from 'rxjs'; styleUrls: ['./landing-page.scss'], templateUrl: './landing-page.html' }) -export class GfLandingPageComponent implements OnDestroy, OnInit { +export class GfLandingPageComponent implements OnInit { public countriesOfSubscribersMap: { [code: string]: { value: number }; } = {}; @@ -107,8 +106,6 @@ export class GfLandingPageComponent implements OnDestroy, OnInit { } ]; - private unsubscribeSubject = new Subject(); - public constructor( private dataService: DataService, private deviceService: DeviceDetectorService @@ -155,9 +152,4 @@ export class GfLandingPageComponent implements OnDestroy, OnInit { public ngOnInit() { this.deviceType = this.deviceService.getDeviceInfo().deviceType; } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } 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 6284c41f4..090588d7d 100644 --- a/apps/client/src/app/pages/open/open-page.component.ts +++ b/apps/client/src/app/pages/open/open-page.component.ts @@ -7,11 +7,11 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, - OnDestroy, + DestroyRef, OnInit } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatCardModule } from '@angular/material/card'; -import { Subject, takeUntil } from 'rxjs'; @Component({ host: { class: 'page' }, @@ -21,15 +21,14 @@ import { Subject, takeUntil } from 'rxjs'; styleUrls: ['./open-page.scss'], templateUrl: './open-page.html' }) -export class GfOpenPageComponent implements OnDestroy, OnInit { +export class GfOpenPageComponent implements OnInit { public statistics: Statistics; public user: User; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private destroyRef: DestroyRef, private userService: UserService ) { const { statistics } = this.dataService.fetchInfo(); @@ -39,7 +38,7 @@ export class GfOpenPageComponent implements OnDestroy, OnInit { public ngOnInit() { this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((state) => { if (state?.user) { this.user = state.user; @@ -48,9 +47,4 @@ export class GfOpenPageComponent implements OnDestroy, OnInit { } }); } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } 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 dd78a0221..b9dc9077c 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 @@ -10,10 +10,17 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DateRange } from '@ghostfolio/common/types'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { DataService } from '@ghostfolio/ui/services'; -import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { + ChangeDetectorRef, + Component, + DestroyRef, + OnInit +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; import { PageEvent } from '@angular/material/paginator'; @@ -26,8 +33,7 @@ import { format, parseISO } from 'date-fns'; import { addIcons } from 'ionicons'; import { addOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; -import { Subject, Subscription } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { Subscription } from 'rxjs'; import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component'; import { CreateOrUpdateActivityDialogParams } from './create-or-update-activity-dialog/interfaces/interfaces'; @@ -47,7 +53,7 @@ import { ImportActivitiesDialogParams } from './import-activities-dialog/interfa styleUrls: ['./activities-page.scss'], templateUrl: './activities-page.html' }) -export class GfActivitiesPageComponent implements OnDestroy, OnInit { +export class GfActivitiesPageComponent implements OnInit { public dataSource: MatTableDataSource; public deviceType: string; public hasImpersonationId: boolean; @@ -61,11 +67,10 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { public totalItems: number; public user: User; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private destroyRef: DestroyRef, private deviceService: DeviceDetectorService, private dialog: MatDialog, private icsService: IcsService, @@ -75,13 +80,13 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { private userService: UserService ) { this.routeQueryParams = route.queryParams - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((params) => { if (params['createDialog']) { if (params['activityId']) { this.dataService .fetchActivity(params['activityId']) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((activity) => { this.openCreateActivityDialog(activity); }); @@ -92,7 +97,7 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { if (params['activityId']) { this.dataService .fetchActivity(params['activityId']) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((activity) => { this.openUpdateActivityDialog(activity); }); @@ -110,13 +115,13 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { this.impersonationStorageService .onChangeHasImpersonation() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((impersonationId) => { this.hasImpersonationId = !!impersonationId; }); this.userService.stateChanged - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((state) => { if (state?.user) { this.updateUser(state.user); @@ -129,15 +134,20 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public fetchActivities() { + const dateRange = this.user?.settings?.dateRange; + + const range = this.isCalendarYear(dateRange) ? dateRange : undefined; + this.dataService .fetchActivities({ + range, filters: this.userService.getFilters(), skip: this.pageIndex * this.pageSize, sortColumn: this.sortColumn, sortDirection: this.sortDirection, take: this.pageSize }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ activities, count }) => { this.dataSource = new MatTableDataSource(activities); this.totalItems = count; @@ -178,11 +188,11 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { .deleteActivities({ filters: this.userService.getFilters() }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.userService .get(true) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); this.fetchActivities(); @@ -192,11 +202,11 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { public onDeleteActivity(aId: string) { this.dataService .deleteActivity(aId) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.userService .get(true) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); this.fetchActivities(); @@ -212,7 +222,7 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { this.dataService .fetchExport(fetchExportParams) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { for (const activity of data.activities) { delete activity.id; @@ -232,7 +242,7 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { public onExportDrafts(activityIds?: string[]) { this.dataService .fetchExport({ activityIds }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { downloadAsFile({ content: this.icsService.transformActivitiesToIcsContent( @@ -262,11 +272,11 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { dialogRef .afterClosed() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.userService .get(true) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); this.fetchActivities(); @@ -289,11 +299,11 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { dialogRef .afterClosed() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.userService .get(true) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); this.fetchActivities(); @@ -330,12 +340,12 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { dialogRef .afterClosed() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((activity: UpdateOrderDto) => { if (activity) { this.dataService .putActivity(activity) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe({ next: () => { this.fetchActivities(); @@ -347,15 +357,18 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { }); } - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); + private isCalendarYear(dateRange: DateRange) { + if (!dateRange) { + return false; + } + + return /^\d{4}$/.test(dateRange); } private openCreateActivityDialog(aActivity?: Activity) { this.userService .get() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((user) => { this.updateUser(user); @@ -382,14 +395,14 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { dialogRef .afterClosed() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((transaction: CreateOrderDto | null) => { if (transaction) { this.dataService.postActivity(transaction).subscribe({ next: () => { this.userService .get(true) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); this.fetchActivities(); diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.routes.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.routes.ts index c96c8a558..e1c75f6cc 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.routes.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfActivitiesPageComponent, path: '', - title: internalRoutes.portfolio.subRoutes.activities.title + title: internalRoutes.portfolio.subRoutes?.activities.title } ]; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index c7cd63191..9cc312b25 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 @@ -20,9 +20,10 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, - Inject, - OnDestroy + DestroyRef, + Inject } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, FormGroup, @@ -46,8 +47,8 @@ import { AssetClass, Tag, Type } from '@prisma/client'; import { isAfter, isToday } from 'date-fns'; import { addIcons } from 'ionicons'; import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; -import { EMPTY, Subject } from 'rxjs'; -import { catchError, delay, takeUntil } from 'rxjs/operators'; +import { EMPTY } from 'rxjs'; +import { catchError, delay } from 'rxjs/operators'; import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces'; import { ActivityType } from './types/activity-type.type'; @@ -75,7 +76,7 @@ import { ActivityType } from './types/activity-type.type'; styleUrls: ['./create-or-update-activity-dialog.scss'], templateUrl: 'create-or-update-activity-dialog.html' }) -export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { +export class GfCreateOrUpdateActivityDialogComponent { public activityForm: FormGroup; public assetClassOptions: AssetClassSelectorOption[] = Object.keys(AssetClass) @@ -101,13 +102,12 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { public typesTranslationMap = new Map(); public Validators = Validators; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: CreateOrUpdateActivityDialogParams, private dataService: DataService, private dateAdapter: DateAdapter, + private destroyRef: DestroyRef, public dialogRef: MatDialogRef, private formBuilder: FormBuilder, @Inject(MAT_DATE_LOCALE) private locale: string, @@ -133,7 +133,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { this.dataService .fetchPortfolioHoldings() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ holdings }) => { this.defaultLookupItems = holdings .filter(({ assetSubClass }) => { @@ -237,7 +237,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { // Slightly delay until the more specific form control value changes have // completed delay(300), - takeUntil(this.unsubscribeSubject) + takeUntilDestroyed(this.destroyRef) ) .subscribe(async () => { if ( @@ -284,7 +284,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { this.activityForm .get('assetClass') - .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) + .valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((assetClass) => { const assetSubClasses = ASSET_CLASS_MAPPING.get(assetClass) ?? []; @@ -335,7 +335,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { if (newTag && this.hasPermissionToCreateOwnTag) { this.dataService .postTag({ ...newTag, userId: this.data.user.id }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((tag) => { this.activityForm.get('tags').setValue( tags.map((currentTag) => { @@ -349,7 +349,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { this.userService .get(true) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(); }); } @@ -357,7 +357,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { this.activityForm .get('type') - .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) + .valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((type: ActivityType) => { if ( type === 'VALUABLE' || @@ -465,7 +465,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { dataSource: this.data.activity?.SymbolProfile?.dataSource, symbol: this.data.activity?.SymbolProfile?.symbol }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ marketPrice }) => { this.currentMarketPrice = marketPrice; @@ -557,11 +557,6 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { } } - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } - private updateAssetProfile() { this.isLoading = true; this.changeDetectorRef.markForCheck(); @@ -581,7 +576,7 @@ export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy { return EMPTY; }), - takeUntil(this.unsubscribeSubject) + takeUntilDestroyed(this.destroyRef) ) .subscribe(({ currency, dataSource, marketPrice }) => { if (this.mode === 'create') { 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 1a84e9f31..00f0508fe 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 @@ -21,9 +21,10 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, - Inject, - OnDestroy + DestroyRef, + Inject } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, FormGroup, @@ -52,7 +53,6 @@ import { cloudUploadOutline, warningOutline } from 'ionicons/icons'; import { isArray, sortBy } from 'lodash'; import ms from 'ms'; import { DeviceDetectorService } from 'ngx-device-detector'; -import { Subject, takeUntil } from 'rxjs'; import { ImportStep } from './enums/import-step'; import { ImportActivitiesDialogParams } from './interfaces/interfaces'; @@ -81,7 +81,7 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces'; styleUrls: ['./import-activities-dialog.scss'], templateUrl: 'import-activities-dialog.html' }) -export class GfImportActivitiesDialogComponent implements OnDestroy { +export class GfImportActivitiesDialogComponent { public accounts: CreateAccountWithBalancesDto[] = []; public activities: Activity[] = []; public assetProfileForm: FormGroup; @@ -104,12 +104,11 @@ export class GfImportActivitiesDialogComponent implements OnDestroy { public tags: CreateTagDto[] = []; public totalItems: number; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: ImportActivitiesDialogParams, private dataService: DataService, + private destroyRef: DestroyRef, private deviceService: DeviceDetectorService, private formBuilder: FormBuilder, public dialogRef: MatDialogRef, @@ -152,7 +151,7 @@ export class GfImportActivitiesDialogComponent implements OnDestroy { ], range: 'max' }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ holdings }) => { this.holdings = sortBy(holdings, ({ name }) => { return name.toLowerCase(); @@ -237,7 +236,7 @@ export class GfImportActivitiesDialogComponent implements OnDestroy { dataSource, symbol }) - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ activities }) => { this.activities = activities; this.dataSource = new MatTableDataSource(activities.reverse()); @@ -284,11 +283,6 @@ export class GfImportActivitiesDialogComponent implements OnDestroy { }); } - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } - private async handleFile({ file, stepper 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 5226c3c12..367716d2d 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 @@ -405,17 +405,22 @@ export class GfAllocationsPageComponent implements OnInit { } if (position.holdings.length > 0) { - for (const holding of position.holdings) { - const { allocationInPercentage, name, valueInBaseCurrency } = - holding; - - if (this.topHoldingsMap[name]?.value) { - this.topHoldingsMap[name].value += isNumber(valueInBaseCurrency) + for (const { + allocationInPercentage, + name, + valueInBaseCurrency + } of position.holdings) { + const normalizedAssetName = this.normalizeAssetName(name); + + if (this.topHoldingsMap[normalizedAssetName]?.value) { + this.topHoldingsMap[normalizedAssetName].value += isNumber( + valueInBaseCurrency + ) ? valueInBaseCurrency : allocationInPercentage * this.portfolioDetails.holdings[symbol].valueInPercentage; } else { - this.topHoldingsMap[name] = { + this.topHoldingsMap[normalizedAssetName] = { name, value: isNumber(valueInBaseCurrency) ? valueInBaseCurrency @@ -518,7 +523,10 @@ export class GfAllocationsPageComponent implements OnInit { if (holding.holdings.length > 0) { const currentParentHolding = holding.holdings.find( (parentHolding) => { - return parentHolding.name === name; + return ( + this.normalizeAssetName(parentHolding.name) === + this.normalizeAssetName(name) + ); } ); @@ -555,6 +563,14 @@ export class GfAllocationsPageComponent implements OnInit { } } + private normalizeAssetName(name: string) { + if (!name) { + return ''; + } + + return name.trim().toLowerCase(); + } + private openAccountDetailDialog(aAccountId: string) { const dialogRef = this.dialog.open< GfAccountDetailDialogComponent, diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.routes.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.routes.ts index 91cf4c91b..343d6ced5 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.routes.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.routes.ts @@ -10,6 +10,6 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: GfAnalysisPageComponent, path: '', - title: internalRoutes.portfolio.subRoutes.analysis.title + title: internalRoutes.portfolio.subRoutes?.analysis.title } ]; diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.routes.ts b/apps/client/src/app/pages/portfolio/portfolio-page.routes.ts index aeebf4a6b..a4fdc3f61 100644 --- a/apps/client/src/app/pages/portfolio/portfolio-page.routes.ts +++ b/apps/client/src/app/pages/portfolio/portfolio-page.routes.ts @@ -15,22 +15,22 @@ export const routes: Routes = [ import('./analysis/analysis-page.routes').then((m) => m.routes) }, { - path: internalRoutes.portfolio.subRoutes.activities.path, + path: internalRoutes.portfolio.subRoutes?.activities.path, loadChildren: () => import('./activities/activities-page.routes').then((m) => m.routes) }, { - path: internalRoutes.portfolio.subRoutes.allocations.path, + path: internalRoutes.portfolio.subRoutes?.allocations.path, loadChildren: () => import('./allocations/allocations-page.routes').then((m) => m.routes) }, { - path: internalRoutes.portfolio.subRoutes.fire.path, + path: internalRoutes.portfolio.subRoutes?.fire.path, loadChildren: () => import('./fire/fire-page.routes').then((m) => m.routes) }, { - path: internalRoutes.portfolio.subRoutes.xRay.path, + path: internalRoutes.portfolio.subRoutes?.xRay.path, loadChildren: () => import('./x-ray/x-ray-page.routes').then((m) => m.routes) } 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 4cc0f52f8..cbbe2d29c 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 @@ -8,10 +8,11 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, + DestroyRef, Inject, - OnDestroy, ViewChild } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -27,8 +28,6 @@ import { checkmarkOutline, copyOutline } from 'ionicons/icons'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; import { UserAccountRegistrationDialogParams } from './interfaces/interfaces'; @@ -53,7 +52,7 @@ import { UserAccountRegistrationDialogParams } from './interfaces/interfaces'; styleUrls: ['./user-account-registration-dialog.scss'], templateUrl: 'user-account-registration-dialog.html' }) -export class GfUserAccountRegistrationDialogComponent implements OnDestroy { +export class GfUserAccountRegistrationDialogComponent { @ViewChild(MatStepper) stepper!: MatStepper; public accessToken: string; @@ -64,12 +63,11 @@ export class GfUserAccountRegistrationDialogComponent implements OnDestroy { public routerLinkAboutTermsOfService = publicRoutes.about.subRoutes.termsOfService.routerLink; - private unsubscribeSubject = new Subject(); - public constructor( private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: UserAccountRegistrationDialogParams, - private dataService: DataService + private dataService: DataService, + private destroyRef: DestroyRef ) { addIcons({ arrowForwardOutline, checkmarkOutline, copyOutline }); } @@ -77,7 +75,7 @@ export class GfUserAccountRegistrationDialogComponent implements OnDestroy { public createAccount() { this.dataService .postUser() - .pipe(takeUntil(this.unsubscribeSubject)) + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ accessToken, authToken, role }) => { this.accessToken = accessToken; this.authToken = authToken; @@ -96,9 +94,4 @@ export class GfUserAccountRegistrationDialogComponent implements OnDestroy { public onChangeDislaimerChecked() { this.isDisclaimerChecked = !this.isDisclaimerChecked; } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } } 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 112619239..9c86f2c83 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 @@ -16,7 +16,7 @@ export class ResourcesGlossaryPageComponent implements OnInit { public hasPermissionForSubscription: boolean; public info: InfoItem; public routerLinkResourcesPersonalFinanceTools = - publicRoutes.resources.subRoutes.personalFinanceTools.routerLink; + publicRoutes.resources.subRoutes?.personalFinanceTools.routerLink; public constructor(private dataService: DataService) { this.info = this.dataService.fetchInfo(); diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.routes.ts b/apps/client/src/app/pages/resources/glossary/resources-glossary.routes.ts index 2f864155a..4096dfecd 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary.routes.ts +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.routes.ts @@ -8,6 +8,6 @@ export const routes: Routes = [ { component: ResourcesGlossaryPageComponent, path: '', - title: publicRoutes.resources.subRoutes.glossary.title + title: publicRoutes.resources.subRoutes?.glossary.title } ]; diff --git a/apps/client/src/app/pages/resources/guides/resources-guides.routes.ts b/apps/client/src/app/pages/resources/guides/resources-guides.routes.ts index f9f65f44a..eb8c39e24 100644 --- a/apps/client/src/app/pages/resources/guides/resources-guides.routes.ts +++ b/apps/client/src/app/pages/resources/guides/resources-guides.routes.ts @@ -8,6 +8,6 @@ export const routes: Routes = [ { component: ResourcesGuidesComponent, path: '', - title: publicRoutes.resources.subRoutes.guides.title + title: publicRoutes.resources.subRoutes?.guides.title } ]; diff --git a/apps/client/src/app/pages/resources/markets/resources-markets.routes.ts b/apps/client/src/app/pages/resources/markets/resources-markets.routes.ts index 4bcb66789..a56dc7cf7 100644 --- a/apps/client/src/app/pages/resources/markets/resources-markets.routes.ts +++ b/apps/client/src/app/pages/resources/markets/resources-markets.routes.ts @@ -8,6 +8,6 @@ export const routes: Routes = [ { component: ResourcesMarketsComponent, path: '', - title: publicRoutes.resources.subRoutes.markets.title + title: publicRoutes.resources.subRoutes?.markets.title } ]; diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts index 81338200f..310f16a5e 100644 --- a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts +++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts @@ -20,20 +20,20 @@ export class ResourcesOverviewComponent { { description: 'Explore our guides to help you get started with investing and managing your finances.', - routerLink: publicRoutes.resources.subRoutes.guides.routerLink, - title: publicRoutes.resources.subRoutes.guides.title + routerLink: publicRoutes.resources.subRoutes?.guides.routerLink, + title: publicRoutes.resources.subRoutes?.guides.title }, { description: 'Access various market resources and tools to stay informed about financial markets.', - routerLink: publicRoutes.resources.subRoutes.markets.routerLink, - title: publicRoutes.resources.subRoutes.markets.title + routerLink: publicRoutes.resources.subRoutes?.markets.routerLink, + title: publicRoutes.resources.subRoutes?.markets.title }, { description: 'Learn key financial terms and concepts in our comprehensive glossary.', - routerLink: publicRoutes.resources.subRoutes.glossary.routerLink, - title: publicRoutes.resources.subRoutes.glossary.title + routerLink: publicRoutes.resources.subRoutes?.glossary.routerLink, + title: publicRoutes.resources.subRoutes?.glossary.title } ]; } diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.routes.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.routes.ts index 9081f6b28..081c34000 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.routes.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.routes.ts @@ -11,7 +11,7 @@ export const routes: Routes = [ canActivate: [AuthGuard], component: PersonalFinanceToolsPageComponent, path: '', - title: publicRoutes.resources.subRoutes.personalFinanceTools.title + title: publicRoutes.resources.subRoutes?.personalFinanceTools.title }, ...personalFinanceTools.map(({ alias, key, name }) => { return { @@ -23,8 +23,8 @@ export const routes: Routes = [ return GfProductPageComponent; } ), - path: `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.path}-${alias ?? key}`, - title: `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.title} ${name}` + path: `${publicRoutes.resources.subRoutes?.personalFinanceTools.subRoutes?.product.path}-${alias ?? key}`, + title: `${publicRoutes.resources.subRoutes?.personalFinanceTools.subRoutes?.product.title} ${name}` }; }) ]; diff --git a/apps/client/src/app/pages/resources/resources-page.routes.ts b/apps/client/src/app/pages/resources/resources-page.routes.ts index 107988238..6e59f0995 100644 --- a/apps/client/src/app/pages/resources/resources-page.routes.ts +++ b/apps/client/src/app/pages/resources/resources-page.routes.ts @@ -16,22 +16,22 @@ export const routes: Routes = [ import('./overview/resources-overview.routes').then((m) => m.routes) }, { - path: publicRoutes.resources.subRoutes.glossary.path, + path: publicRoutes.resources.subRoutes?.glossary.path, loadChildren: () => import('./glossary/resources-glossary.routes').then((m) => m.routes) }, { - path: publicRoutes.resources.subRoutes.guides.path, + path: publicRoutes.resources.subRoutes?.guides.path, loadChildren: () => import('./guides/resources-guides.routes').then((m) => m.routes) }, { - path: publicRoutes.resources.subRoutes.markets.path, + path: publicRoutes.resources.subRoutes?.markets.path, loadChildren: () => import('./markets/resources-markets.routes').then((m) => m.routes) }, { - path: publicRoutes.resources.subRoutes.personalFinanceTools.path, + path: publicRoutes.resources.subRoutes?.personalFinanceTools.path, loadChildren: () => import('./personal-finance-tools/personal-finance-tools-page.routes').then( (m) => m.routes diff --git a/apps/client/src/app/pages/user-account/user-account-page.routes.ts b/apps/client/src/app/pages/user-account/user-account-page.routes.ts index 5d0f5b202..7eac1298e 100644 --- a/apps/client/src/app/pages/user-account/user-account-page.routes.ts +++ b/apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -18,14 +18,14 @@ export const routes: Routes = [ title: internalRoutes.account.title }, { - path: internalRoutes.account.subRoutes.membership.path, + path: internalRoutes.account.subRoutes?.membership.path, component: GfUserAccountMembershipComponent, - title: internalRoutes.account.subRoutes.membership.title + title: internalRoutes.account.subRoutes?.membership.title }, { - path: internalRoutes.account.subRoutes.access.path, + path: internalRoutes.account.subRoutes?.access.path, component: GfUserAccountAccessComponent, - title: internalRoutes.account.subRoutes.access.title + title: internalRoutes.account.subRoutes?.access.title } ], component: GfUserAccountPageComponent, diff --git a/apps/client/src/app/pages/zen/zen-page.routes.ts b/apps/client/src/app/pages/zen/zen-page.routes.ts index 60e163ca4..38929dc85 100644 --- a/apps/client/src/app/pages/zen/zen-page.routes.ts +++ b/apps/client/src/app/pages/zen/zen-page.routes.ts @@ -16,9 +16,9 @@ export const routes: Routes = [ component: GfHomeOverviewComponent }, { - path: internalRoutes.zen.subRoutes.holdings.path, + path: internalRoutes.zen.subRoutes?.holdings.path, component: GfHomeHoldingsComponent, - title: internalRoutes.home.subRoutes.holdings.title + title: internalRoutes.home.subRoutes?.holdings.title } ], component: GfZenPageComponent, diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index cf0ede34d..566d91cc7 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -38,7 +38,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -659,7 +659,7 @@ Tipus apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -679,7 +679,7 @@ Perfil d’Actiu apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -687,7 +687,7 @@ Dades Històriques de Mercat apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -699,7 +699,7 @@ Origen de les Dades apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -723,7 +723,7 @@ Prioritat apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -731,7 +731,7 @@ Intents apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -739,7 +739,7 @@ Creat apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -747,7 +747,7 @@ Finalitzat apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -755,7 +755,7 @@ Estat apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -775,7 +775,7 @@ Aturar Processos apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -783,7 +783,7 @@ Veure les Dades apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -791,7 +791,7 @@ Veure Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -799,7 +799,7 @@ Executar Procés apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -807,7 +807,7 @@ Suprimir Procés apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -859,7 +859,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -867,7 +867,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -879,7 +879,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -887,7 +887,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -895,7 +895,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -1231,7 +1231,7 @@ Està segur qeu vol eliminar aquest cupó? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -1239,7 +1239,7 @@ Està segur que vol eliminar aquest missatge del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -1247,7 +1247,7 @@ Està segur que vol depurar el cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -1255,7 +1255,7 @@ Si us plau, afegeixi el seu missatge del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1391,7 +1391,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -1423,7 +1423,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1471,7 +1471,7 @@ Està segur que vol eliminar aquesta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -1495,7 +1495,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1691,15 +1691,15 @@ Oooh! El testimoni de seguretat és incorrecte. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1779,7 +1779,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1787,7 +1787,7 @@ en Actiiu apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -1795,7 +1795,7 @@ Finalitzat apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -1819,7 +1819,7 @@ Gestionar Activitats apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1827,11 +1827,11 @@ Por apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1843,11 +1843,11 @@ Cobdícia apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1951,7 +1951,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2359,7 +2359,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -2371,7 +2371,7 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -2383,7 +2383,7 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2403,7 +2403,7 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2547,7 +2547,7 @@ Automàtic apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2559,7 +2559,7 @@ De debò vols tancar el teu compte de Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -2567,7 +2567,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 - 282 + 279 @@ -2583,7 +2583,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 - 336 + 333 @@ -2775,7 +2775,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2795,7 +2795,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2811,7 +2811,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2947,7 +2947,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3051,7 +3051,7 @@ Dades de mercat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3085,6 +3085,10 @@ Overview Visió general + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3972,7 +3976,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4028,7 +4032,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4148,7 +4152,7 @@ Importar dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4164,7 +4168,7 @@ S’estan important dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -4172,7 +4176,7 @@ La importació s’ha completat apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -4188,7 +4192,7 @@ S’estan validant les dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -4504,7 +4508,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -4524,11 +4528,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4548,7 +4552,7 @@ Mensualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -4556,7 +4560,7 @@ Anualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4564,7 +4568,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -4942,6 +4946,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Personal Finance Tools @@ -5441,7 +5449,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5461,7 +5469,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -5481,7 +5489,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5501,7 +5509,7 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -5653,7 +5661,7 @@ Dipòsit libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -5669,7 +5677,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -5681,7 +5689,7 @@ Estalvi libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -5921,7 +5929,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -5937,7 +5945,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -5969,7 +5977,7 @@ Símbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5985,7 +5993,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -6333,11 +6341,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6857,7 +6865,7 @@ Portfolio Snapshot apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6924,6 +6932,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning From the beginning @@ -7363,7 +7379,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7403,7 +7419,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,7 +7659,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 - 244 + 240 @@ -7788,7 +7804,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index cad4fcc92..ff12aebcb 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -50,7 +50,7 @@ Typ apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -306,7 +306,7 @@ Jobs löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -314,7 +314,7 @@ Datenquelle apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -338,7 +338,7 @@ Versuche apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -346,7 +346,7 @@ Erstellt apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -354,7 +354,7 @@ Abgeschlossen apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -362,7 +362,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -394,7 +394,7 @@ Historische Marktdaten apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -406,7 +406,7 @@ Daten anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -414,7 +414,7 @@ Stacktrace anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -422,7 +422,7 @@ Job löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -514,7 +514,7 @@ Möchtest du diesen Gutscheincode wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -522,7 +522,7 @@ Möchtest du den Cache wirklich leeren? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -530,7 +530,7 @@ Bitte gebe deine Systemmeldung ein: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -650,7 +650,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -758,7 +758,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -778,15 +778,15 @@ Ups! Falsches Sicherheits-Token. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -794,7 +794,7 @@ Aktivitäten verwalten apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1034,7 +1034,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1082,7 +1082,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1094,7 +1094,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1106,7 +1106,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -1126,7 +1126,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -1146,7 +1146,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -1238,7 +1238,7 @@ Möchtest du diese Anmeldemethode wirklich löschen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -1394,7 +1394,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1676,6 +1676,10 @@ Overview Übersicht + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1934,7 +1938,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2058,7 +2062,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2082,7 +2086,7 @@ Daten importieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -2090,7 +2094,7 @@ Der Import wurde abgeschlossen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -2208,6 +2212,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Resources @@ -2398,7 +2406,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2410,7 +2418,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2530,7 +2538,7 @@ Monatlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -2546,7 +2554,7 @@ Einlage libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -2562,7 +2570,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -2574,7 +2582,7 @@ Ersparnisse libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -2598,11 +2606,11 @@ Angst apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -2614,11 +2622,11 @@ Gier apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -2630,7 +2638,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -2714,7 +2722,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2826,7 +2834,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2842,7 +2850,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -2998,7 +3006,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -3018,11 +3026,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3170,7 +3178,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3218,7 +3226,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3242,7 +3250,7 @@ Marktdaten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3294,7 +3302,7 @@ Jährlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -3302,7 +3310,7 @@ Dividenden importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3362,7 +3370,7 @@ Keine Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -3874,7 +3882,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -3918,7 +3926,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -4514,7 +4522,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -4522,7 +4530,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -4702,7 +4710,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4758,7 +4766,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -5508,7 +5516,7 @@ Möchtest du diesen Tag wirklich löschen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5608,7 +5616,7 @@ Anlageprofil apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -5740,7 +5748,7 @@ Möchtest du diese Systemmeldung wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5896,11 +5904,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5920,7 +5928,7 @@ Position abschliessen apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5968,7 +5976,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5988,7 +5996,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6036,7 +6044,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6056,7 +6064,7 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6149,7 +6157,7 @@ Aktiv apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6157,7 +6165,7 @@ Abgeschlossen apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6189,7 +6197,7 @@ Job ausführen apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6197,7 +6205,7 @@ Priorität apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6253,7 +6261,7 @@ Möchtest du dieses Ghostfolio Konto wirklich schliessen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6309,7 +6317,7 @@ Ups! Beim Einrichten der biometrischen Authentifizierung ist ein Fehler aufgetreten. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -6325,7 +6333,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6881,7 +6889,7 @@ Portfolio Snapshot apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6948,6 +6956,14 @@ 42 + + has been copied to the clipboard + wurde in die Zwischenablage kopiert + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Seit Beginn @@ -7387,7 +7403,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7427,7 +7443,7 @@ KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7443,7 +7459,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7451,7 +7467,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7491,7 +7507,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7499,7 +7515,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7507,7 +7523,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7527,7 +7543,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7539,7 +7555,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7547,11 +7563,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7655,11 +7671,11 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7667,7 +7683,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 - 244 + 240 @@ -7788,7 +7804,7 @@ jemand apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Demo Benutzerkonto wurde synchronisiert. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Möchtest du wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Aktien apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Kryptowährungen apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index a904cbae8..26c76ef6c 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -32,7 +32,7 @@ Grantee - Beneficiario + Usuario autorizado apps/client/src/app/components/access-table/access-table.component.html 11 @@ -51,7 +51,7 @@ Tipo apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -76,7 +76,7 @@ Revoke - Revoca + Revocar apps/client/src/app/components/access-table/access-table.component.html 96 @@ -92,7 +92,7 @@ Do you really want to revoke this granted access? - ¿Quieres revocar el acceso concedido? + ¿Seguro que quieres revocar el acceso concedido? apps/client/src/app/components/access-table/access-table.component.ts 113 @@ -224,7 +224,7 @@ Edit - Edita + Editar apps/client/src/app/components/access-table/access-table.component.html 76 @@ -252,7 +252,7 @@ Delete - Elimina + Eliminar apps/client/src/app/components/admin-market-data/admin-market-data.html 289 @@ -296,7 +296,7 @@ Do you really want to delete this account? - ¿Estás seguro de eliminar esta cuenta? + ¿Seguro que quieres eliminar esta cuenta? libs/ui/src/lib/accounts-table/accounts-table.component.ts 148 @@ -304,10 +304,10 @@ Delete Jobs - Elimina los trabajos + Eliminar trabajos apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -315,7 +315,7 @@ Fuente de datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -339,7 +339,7 @@ Intentos apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -347,7 +347,7 @@ Creado apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -355,7 +355,7 @@ Finalizado apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -363,7 +363,7 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -372,7 +372,7 @@ and is driven by the efforts of its contributors - y es impulsado por los esfuerzos de sus contribuidores + y es impulsado por los esfuerzos de sus colaboradores apps/client/src/app/pages/about/overview/about-overview-page.html 49 @@ -380,7 +380,7 @@ Asset Profiles - Perfiles de activos. + Perfiles de activos apps/client/src/app/components/admin-settings/admin-settings.component.html 123 @@ -395,7 +395,7 @@ Datos históricos del mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -404,31 +404,31 @@ View Data - Visualiza los datos + Ver datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 View Stacktrace - Visualiza Stacktrace + Ver Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 Delete Job - Elimina el trabajo + Eliminar trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 Details for - Detalles para + Detalles de libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html 2 @@ -472,7 +472,7 @@ First Activity - Primera actividad + Primera operación apps/client/src/app/components/admin-market-data/admin-market-data.html 147 @@ -492,7 +492,7 @@ Activity Count - Recuento de actividad + Número de operaciones apps/client/src/app/components/admin-overview/admin-overview.html 19 @@ -512,18 +512,18 @@ Do you really want to delete this coupon? - ¿Estás seguro de eliminar este cupón? + ¿Seguro que quieres eliminar este cupón? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 Do you really want to flush the cache? - ¿Estás seguro de limpiar la caché? + ¿Seguro que quieres limpiar la caché? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -531,7 +531,7 @@ Por favor, establece tu mensaje del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -544,7 +544,7 @@ per User - por usario + por usuario apps/client/src/app/components/admin-overview/admin-overview.html 28 @@ -552,7 +552,7 @@ Gather Profile Data - Recoger los datos del perfil + Recopilar datos del perfil apps/client/src/app/components/admin-market-data/admin-market-data.html 234 @@ -616,7 +616,7 @@ Housekeeping - Tareas domésticas + Limpieza del sistema apps/client/src/app/components/admin-overview/admin-overview.html 184 @@ -632,10 +632,10 @@ Do you really want to delete this user? - ¿Estás seguro de eliminar este usuario? + ¿Seguro que quieres eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -656,7 +656,7 @@ No auto-renewal on membership. - No se renueva automáticamente la membresía. + Sin renovación automática de la membresía. apps/client/src/app/components/user-account-membership/user-account-membership.html 74 @@ -664,7 +664,7 @@ Engagement per Day - Contratación diaria + Interacción diaria apps/client/src/app/components/admin-users/admin-users.html 140 @@ -684,7 +684,7 @@ Current Market Mood - Estado de ánimo del mercado + Sentimiento del mercado apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html 12 @@ -743,7 +743,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -760,26 +760,26 @@ Oops! Incorrect Security Token. - Vaya! Token de seguridad incorrecto. + ¡Vaya! Token de seguridad incorrecto. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 Manage Activities - Gestión de las operaciones + Gestionar operaciones apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -932,7 +932,7 @@ Buying Power - Capacidad de compra + Poder adquisitivo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 248 @@ -956,7 +956,7 @@ Please set the amount of your emergency fund. - Por favor, ingresa la cantidad de tu fondo de emergencia: + Por favor, ingresa la cantidad de tu fondo de emergencia. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 111 @@ -1016,10 +1016,10 @@ Report Data Glitch - Reporta un anomalía de los datos + Reportar anomalía en los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1064,10 +1064,10 @@ YTD - Desde principio de año + YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1079,7 +1079,7 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1091,7 +1091,7 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -1100,7 +1100,7 @@ Performance with currency effect - Rendimiento con el efecto del tipo de cambio de divisa + Rendimiento con el efecto de la divisa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 135 @@ -1111,7 +1111,7 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -1131,12 +1131,12 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 About - Sobre + Acerca de apps/client/src/app/components/footer/footer.component.html 20 @@ -1188,7 +1188,7 @@ Please enter your coupon code. - Por favor, ingresa tu código de cupón: + Por favor, ingresa tu código de cupón. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 210 @@ -1196,7 +1196,7 @@ Could not redeem coupon code - No se puede canjear este código de cupón + No se pudo canjear el código de cupón apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 174 @@ -1204,7 +1204,7 @@ Coupon code has been redeemed - El codigo de cupón ha sido canjeado + El código del cupón ha sido canjeado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 187 @@ -1212,7 +1212,7 @@ Reload - Refrescar + Recargar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 188 @@ -1220,10 +1220,10 @@ Do you really want to remove this sign in method? - ¿Estás seguro de eliminar este método de acceso? + ¿Seguro que quieres eliminar este método de acceso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -1248,7 +1248,7 @@ Try Premium - Prueba Premium + Probar Premium apps/client/src/app/components/user-account-membership/user-account-membership.html 53 @@ -1256,7 +1256,7 @@ Redeem Coupon - Canjea el cupón + Canjear cupón apps/client/src/app/components/user-account-membership/user-account-membership.html 67 @@ -1280,7 +1280,7 @@ Locale - Ubicación + Configuración regional apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 512 @@ -1320,7 +1320,7 @@ User ID - ID usuario + ID de usuario apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 51 @@ -1379,7 +1379,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1400,7 +1400,7 @@ Update account - Editar cuenta + Actualizar cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 8 @@ -1416,7 +1416,7 @@ Currency - Divisa base + Divisa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 199 @@ -1480,7 +1480,7 @@ Account ID - ID cuenta + ID de cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 96 @@ -1620,7 +1620,7 @@ Frequently Asked Questions (FAQ) - Preguntas más frecuentes (FAQ) + Preguntas frecuentes (FAQ) apps/client/src/app/components/footer/footer.component.html 33 @@ -1661,6 +1661,10 @@ Overview Visión general + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1784,7 +1788,7 @@ By Holding - Por participación + Por posiciones apps/client/src/app/pages/portfolio/allocations/allocations-page.html 107 @@ -1848,7 +1852,7 @@ Top - Lo mejor + Mejores apps/client/src/app/pages/portfolio/analysis/analysis-page.html 305 @@ -1856,7 +1860,7 @@ Bottom - Lo peor + Peores apps/client/src/app/pages/portfolio/analysis/analysis-page.html 354 @@ -1880,7 +1884,7 @@ Holdings - Participaciones + Posiciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 102 @@ -1908,7 +1912,7 @@ Update activity - Actualizar opereación + Actualizar operación apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 10 @@ -1919,7 +1923,7 @@ Semana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2016,7 +2020,7 @@ Activities - Operación + Operaciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 86 @@ -2043,7 +2047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2067,7 +2071,7 @@ Importando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -2075,12 +2079,12 @@ La importación se ha completado apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 or start a discussion at - o iniciar una discusión en + o inicia una discusión en apps/client/src/app/pages/about/overview/about-overview-page.html 94 @@ -2152,7 +2156,7 @@ Sustainable retirement income - Ingreso sostenible de retiro + Ingresos sostenibles para la jubilación apps/client/src/app/pages/portfolio/fire/fire-page.html 41 @@ -2160,7 +2164,7 @@ Ghostfolio empowers you to keep track of your wealth. - Ghostfolio te permite hacer un seguimiento de tu riqueza. + Ghostfolio te permite hacer un seguimiento de tu patrimonio. apps/client/src/app/pages/public/public-page.html 237 @@ -2193,6 +2197,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Resources @@ -2308,7 +2316,7 @@ Do you really want to delete this activity? - ¿Estás seguro de eliminar esta operación? + ¿Seguro que quieres eliminar esta operación? libs/ui/src/lib/activities-table/activities-table.component.ts 292 @@ -2324,7 +2332,7 @@ contact us - contactarnos + contáctanos apps/client/src/app/pages/pricing/pricing-page.html 336 @@ -2340,7 +2348,7 @@ Annual Interest Rate - Tipo de interés anual + Tasa de interés anual libs/ui/src/lib/fire-calculator/fire-calculator.component.html 21 @@ -2372,14 +2380,14 @@ Oops! Something went wrong. - Vaya! Algo no funcionó bien. + ¡Vaya! Algo no funcionó bien. 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 + 192 @@ -2395,7 +2403,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2424,7 +2432,7 @@ Latest activities - Últimas actividades + Últimas operaciones apps/client/src/app/pages/public/public-page.html 210 @@ -2515,7 +2523,7 @@ Ahorros libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -2531,7 +2539,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -2551,7 +2559,7 @@ Depósito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -2559,7 +2567,7 @@ Mensual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -2583,11 +2591,11 @@ Miedo apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -2599,11 +2607,11 @@ Codicia apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -2615,12 +2623,12 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 Hello, has shared a Portfolio with you! - Hola, ha compartido una Cartera contigo! + ¡Hola, ha compartido una cartera contigo! apps/client/src/app/pages/public/public-page.html 5 @@ -2648,7 +2656,7 @@ Benchmark - Benchmark + Índice de referencia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 379 @@ -2699,7 +2707,7 @@ Automático apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2740,7 +2748,7 @@ Portfolio Evolution - Evolución cartera + Evolución de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html 407 @@ -2811,7 +2819,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2827,7 +2835,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -2860,7 +2868,7 @@ Commodity - Bien + Materia prima libs/ui/src/lib/i18n.ts 47 @@ -2868,7 +2876,7 @@ Equity - Capital + Renta variable apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 57 @@ -2983,7 +2991,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -3003,11 +3011,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3048,7 +3056,7 @@ If you retire today, you would be able to withdraw - Si te retirases hoy, podrías sacar + Si te jubilas hoy, podrías retirar apps/client/src/app/pages/portfolio/fire/fire-page.html 68 @@ -3072,7 +3080,7 @@ The following file formats are supported: - Los siguientes formatos de archivo están soportados: + Los siguientes formatos de archivo son compatibles: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -3092,7 +3100,7 @@ Activities Count - Recuento de actividades + Número de operaciones apps/client/src/app/components/admin-market-data/admin-market-data.html 156 @@ -3100,7 +3108,7 @@ Refresh - Refrescar + Actualizar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 @@ -3116,7 +3124,7 @@ Looking for a student discount? - ¿Buscando un descuento para estudiantes? + ¿Buscas un descuento para estudiantes? apps/client/src/app/pages/pricing/pricing-page.html 342 @@ -3147,7 +3155,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3203,7 +3211,7 @@ Validando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3227,7 +3235,7 @@ Datos del mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3256,7 +3264,7 @@ Holding - Participación + Posición apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 32 @@ -3279,15 +3287,15 @@ Anual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 Import Dividends - Importar Dividendos + Importar dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3328,7 +3336,7 @@ Higher Risk - Riesgo mayor + Mayor riesgo libs/ui/src/lib/i18n.ts 20 @@ -3344,10 +3352,10 @@ No Activities - Sin actividades + Sin operaciones apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -3360,7 +3368,7 @@ Everything in Basic, plus - Todo en Básico, más + Todo lo incluido en Basic, más apps/client/src/app/pages/pricing/pricing-page.html 199 @@ -3376,7 +3384,7 @@ Protection for sensitive information like absolute performances and quantity values - Protección de información confidencial como rendimientos absolutos y valores cuantitativos + Protección de información confidencial como rendimientos absolutos y cantidades apps/client/src/app/components/user-account-settings/user-account-settings.html 194 @@ -3400,7 +3408,7 @@ Are you an ambitious investor who needs the full picture? - ¿Es usted un inversor ambicioso que necesita una visión completa? + ¿Eres un inversor ambicioso que necesita una visión completa? apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 15 @@ -3424,7 +3432,7 @@ Performance Benchmarks - Puntos de referencia de rendimiento + Índices de referencia de rendimiento apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 32 @@ -3456,7 +3464,7 @@ and more Features... - y más características... + y más funcionalidades... apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 44 @@ -3472,7 +3480,7 @@ Skip - Saltar + Omitir apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 59 @@ -3528,7 +3536,7 @@ Unlimited Transactions - Transacciones ilimitadas + Operaciones ilimitadas apps/client/src/app/pages/pricing/pricing-page.html 35 @@ -3552,7 +3560,7 @@ Portfolio Performance - Rendimiento del Portfolio + Rendimiento de la cartera apps/client/src/app/pages/pricing/pricing-page.html 43 @@ -3564,7 +3572,7 @@ Self-hosted, update manually. - Auto alojado, actualiza manualmente. + Autoalojado, actualiza manualmente. apps/client/src/app/pages/pricing/pricing-page.html 84 @@ -3584,7 +3592,7 @@ For new investors who are just getting started with trading. - Para nuevos inversores que estan empezando con el trading. + Para nuevos inversores que están empezando con el trading. apps/client/src/app/pages/pricing/pricing-page.html 119 @@ -3592,7 +3600,7 @@ Fully managed Ghostfolio cloud offering. - Oferta en la nube de Ghostfolio totalmente administrada. + Oferta de Ghostfolio en la nube totalmente gestionada. apps/client/src/app/pages/pricing/pricing-page.html 150 @@ -3604,7 +3612,7 @@ For ambitious investors who need the full picture of their financial assets. - Para inversores ambiciosos que necesitan una visión completa de sus activos financieros + Para inversores ambiciosos que necesitan una visión completa de sus activos financieros. apps/client/src/app/pages/pricing/pricing-page.html 193 @@ -3652,7 +3660,7 @@ Portfolio Allocations - Distribucion del Portfolio + Distribución de la cartera apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 28 @@ -3680,7 +3688,7 @@ Data Import and Export - Importacion y exportacion de datos + Importación y exportación de datos apps/client/src/app/pages/pricing/pricing-page.html 63 @@ -3692,7 +3700,7 @@ Switch to Ghostfolio Premium easily - Cambia a Ghostfolio Premium facilmente + Cambia a Ghostfolio Premium fácilmente libs/ui/src/lib/i18n.ts 13 @@ -3708,7 +3716,7 @@ Email and Chat Support - Soporte a Traves de Email y Chat + Soporte a través de correo electrónico y chat apps/client/src/app/pages/pricing/pricing-page.html 248 @@ -3716,7 +3724,7 @@ Switch to Ghostfolio Premium or Ghostfolio Open Source easily - Cambie a Ghostfolio Premium o Ghostfolio Open Source fácilmente + Cambia a Ghostfolio Premium o Ghostfolio Open Source fácilmente libs/ui/src/lib/i18n.ts 12 @@ -3724,7 +3732,7 @@ Switch to Ghostfolio Open Source or Ghostfolio Basic easily - Cambie a Ghostfolio Open Source o Ghostfolio Basic fácilmente + Cambia a Ghostfolio Open Source o Ghostfolio Basic fácilmente libs/ui/src/lib/i18n.ts 14 @@ -3748,7 +3756,7 @@ Professional Data Provider - Proveedor de datos profesional + Proveedor de datos profesional apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 40 @@ -3808,7 +3816,7 @@ Do you really want to delete these activities? - ¿Realmente deseas eliminar estas actividades? + ¿Seguro que quieres eliminar estas operaciones? libs/ui/src/lib/activities-table/activities-table.component.ts 282 @@ -3824,7 +3832,7 @@ Explore - Explore + Explorar apps/client/src/app/pages/resources/overview/resources-overview.component.html 11 @@ -3851,12 +3859,12 @@ Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 Add platform - Agregar plataforma + Añadir plataforma apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 10 @@ -3864,7 +3872,7 @@ Url - ¿La URL? + Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 422 @@ -3884,7 +3892,7 @@ Asset profile has been saved - El perfil del activo ha sido guardado + Perfil del activo guardado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 594 @@ -3892,10 +3900,10 @@ Do you really want to delete this platform? - ¿Realmente deseas eliminar esta plataforma? + ¿Seguro que quieres eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -3924,7 +3932,7 @@ Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: - Actualiza a Ghostfolio Premium hoy y accede a características exclusivas para mejorar tu experiencia de inversión: + Actualiza a Ghostfolio Premium hoy y accede a funcionalidades exclusivas para mejorar tu experiencia de inversión: apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 18 @@ -3940,7 +3948,7 @@ Add Platform - Agregar plataforma + Añadir plataforma apps/client/src/app/components/admin-platform/admin-platform.component.html 9 @@ -3948,7 +3956,7 @@ Settings - Configuraciones + Ajustes apps/client/src/app/components/user-account-settings/user-account-settings.html 2 @@ -3964,7 +3972,7 @@ This activity already exists. - Esta actividad ya existe. + Esta operación ya existe. libs/ui/src/lib/i18n.ts 21 @@ -3972,7 +3980,7 @@ Manage Benchmarks - Gestionar puntos de referencia + Gestionar índices de referencia apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 35 @@ -4004,7 +4012,7 @@ Select Activities - Seleccionar dividendos + Seleccionar operaciones apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 115 @@ -4164,7 +4172,7 @@ Multi-Accounts - Cuentas múltiples + Múltiples cuentas apps/client/src/app/pages/features/features-page.html 127 @@ -4172,7 +4180,7 @@ Portfolio Calculations - Cálculos de portafolio + Cálculos de la cartera apps/client/src/app/pages/features/features-page.html 141 @@ -4188,7 +4196,7 @@ Market Mood - Modo de mercado + Sentimiento del mercado apps/client/src/app/pages/features/features-page.html 215 @@ -4204,7 +4212,7 @@ Multi-Language - Multilenguaje + Multilingüe apps/client/src/app/pages/features/features-page.html 259 @@ -4228,7 +4236,7 @@ Liability - Responsabilidad + Pasivo libs/ui/src/lib/i18n.ts 41 @@ -4236,7 +4244,7 @@ and we share aggregated key metrics of the platform’s performance - y compartimos agregados métricas clave del rendimiento de la plataforma + y compartimos métricas clave agregadas del rendimiento de la plataforma apps/client/src/app/pages/about/overview/about-overview-page.html 32 @@ -4252,7 +4260,7 @@ Add Asset Profile - Agregar perfil de activo + Añadir perfil de activo apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 @@ -4272,7 +4280,7 @@ Discover Open Source Alternatives for Personal Finance Tools - Descubra alternativas de software libre para herramientas de finanzas personales + Descubre alternativas de software de código abierto para herramientas de finanzas personales apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 5 @@ -4424,7 +4432,7 @@ Effortlessly track, analyze, and visualize your wealth with Ghostfolio. - Siga, analice y visualice su patrimonio sin esfuerzo con Ghostfolio. + Sigue, analiza y visualiza tu patrimonio sin esfuerzo con Ghostfolio. apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 329 @@ -4468,7 +4476,7 @@ Buy - Comprar + Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 31 @@ -4480,7 +4488,7 @@ Valuable - Valioso + Activo de valor libs/ui/src/lib/i18n.ts 43 @@ -4491,7 +4499,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -4499,7 +4507,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -4552,7 +4560,7 @@ The source code is fully available as open source software (OSS) under the AGPL-3.0 license - El código fuente está disponible completamente en software de código abierto (OSS) bajo la licencia AGPL-3.0 + El código fuente está disponible como software de código abierto (OSS) bajo la licencia AGPL-3.0 apps/client/src/app/pages/about/overview/about-overview-page.html 16 @@ -4576,7 +4584,7 @@ Capture your activities - Captura tus actividades + Captura tus operaciones apps/client/src/app/components/home-overview/home-overview.html 28 @@ -4584,7 +4592,7 @@ Record your investment activities to keep your portfolio up to date. - Registra tus actividades de inversión para mantener tu portafolio actualizado. + Registra tus operaciones de inversión para mantener tu cartera actualizada. apps/client/src/app/components/home-overview/home-overview.html 30 @@ -4592,7 +4600,7 @@ Monitor and analyze your portfolio - Monitorea y analiza tu portafolio + Monitorea y analiza tu cartera apps/client/src/app/components/home-overview/home-overview.html 37 @@ -4608,7 +4616,7 @@ Ready to take control of your personal finances? - ¿Listo para tomar el control de tus finanzas personales? + ¿Estás preparado para tomar el control de tus finanzas personales? apps/client/src/app/components/home-overview/home-overview.html 12 @@ -4624,7 +4632,7 @@ this is projected to increase to - esto se proyecta a aumentar a + se proyecta que esto aumente a apps/client/src/app/pages/portfolio/fire/fire-page.html 147 @@ -4640,7 +4648,7 @@ 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. - En Ghostfolio, la transparencia está en el centro de nuestros valores. Publicamos el código fuente como software de código abierto (OSS) bajo la licencia Licencia AGPL-3.0 y compartimos abiertamente métricas clave agregadas sobre el estado operativo de la plataforma. + En Ghostfolio, la transparencia está en el centro de nuestros valores. Publicamos el código fuente como software de código abierto (OSS) bajo la Licencia AGPL-3.0 y compartimos abiertamente métricas clave agregadas sobre el estado operativo de la plataforma. apps/client/src/app/pages/open/open-page.html 7 @@ -4676,10 +4684,10 @@ Job ID - ID de trabajo + ID del trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4732,10 +4740,10 @@ Currencies - Monedas + Divisas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -4776,7 +4784,7 @@ Check out the numerous features of Ghostfolio to manage your wealth - Descubra las numerosas funciones de Ghostfolio para gestionar su patrimonio + Descubre las numerosas funciones de Ghostfolio para gestionar tu patrimonio apps/client/src/app/pages/features/features-page.html 7 @@ -4852,7 +4860,7 @@ Protect your assets. Refine your personal investment strategy. - Protege tus assets. Mejora tu estrategia de inversión personal. + Protege tus activos. Mejora tu estrategia de inversión personal. apps/client/src/app/pages/landing/landing-page.html 124 @@ -4900,7 +4908,7 @@ Get access to 80’000+ tickers from over 50 exchanges - Obtén acceso a más de 80,000 tickers de más de 50 exchanges + Accede a más de 80.000 tickers de más de 50 bolsas apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 84 @@ -4932,7 +4940,7 @@ pursuing a buy & hold strategy - persiguiendo una compra & mantener estrategia + siguiendo una estrategia de comprar y mantener apps/client/src/app/pages/landing/landing-page.html 184 @@ -4940,7 +4948,7 @@ interested in getting insights of your portfolio composition - interesado en obtener información sobre la composición de tu portafolio + interesado en obtener información sobre la composición de tu cartera apps/client/src/app/pages/landing/landing-page.html 189 @@ -4956,7 +4964,7 @@ into minimalism - en el minimalismo + interesado en el minimalismo apps/client/src/app/pages/landing/landing-page.html 197 @@ -4964,7 +4972,7 @@ caring about diversifying your financial resources - preocuparse por diversificar tus recursos financieros + preocupado por diversificar tus recursos financieros apps/client/src/app/pages/landing/landing-page.html 201 @@ -5020,7 +5028,7 @@ How does Ghostfolio work? - ¿Cómo Ghostfolio work? + ¿Cómo funciona Ghostfolio? apps/client/src/app/pages/landing/landing-page.html 282 @@ -5036,7 +5044,7 @@ * no e-mail address nor credit card required - * no se requiere dirección de correo electrónico ni tarjeta de crédito + * no se necesita correo electrónico ni tarjeta de crédito apps/client/src/app/pages/landing/landing-page.html 292 @@ -5052,7 +5060,7 @@ Get valuable insights of your portfolio composition - Obtén información valiosa sobre la composición de tu portafolio + Obtén información valiosa sobre la composición de tu cartera apps/client/src/app/pages/landing/landing-page.html 316 @@ -5060,7 +5068,7 @@ Are you ready? - ¿Estás listo? + ¿Estás preparado? apps/client/src/app/pages/landing/landing-page.html 330 @@ -5084,7 +5092,7 @@ less than - menos que + menos de apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 129 @@ -5273,7 +5281,7 @@ Open Source Alternative to - Alternativa de software libre a + Alternativa de software de código abierto a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 42 @@ -5281,7 +5289,7 @@ The Open Source Alternative to - La alternativa de software libre a + La alternativa de software de código abierto a apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 8 @@ -5289,7 +5297,7 @@ 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. - ¿Estás buscando una alternativa de código abierto a ? Ghostfolio es una potente herramienta de gestión de carteras que ofrece a los usuarios una plataforma integral para rastrear, analizar y optimizar sus inversiones. Ya seas un inversor con experiencia o estés comenzando, Ghostfolio ofrece una interfaz intuitiva y una amplia gama de funcionalidades para ayudarte a tomar decisiones informadas y tener el control de tu futuro financiero. + ¿Estás buscando una alternativa de código abierto a ? Ghostfolio es una potente herramienta de gestión de carteras que proporciona a los usuarios una plataforma completa para seguir, analizar y optimizar sus inversiones. Ya seas un inversor con experiencia o estés comenzando, Ghostfolio ofrece una interfaz intuitiva y una amplia gama de funcionalidades para ayudarte a tomar decisiones informadas y tener el control de tu futuro financiero. apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 19 @@ -5313,7 +5321,7 @@ open-source-alternative-to - alternativa-de-software-libre-a + alternativa-de-software-de-codigo-abierto-a kebab-case libs/common/src/lib/routes/routes.ts @@ -5334,7 +5342,7 @@ Ready to take your investments to the next level? - ¿Listo para llevar sus inversiones al siguiente nivel? + ¿Estás preparado para llevar tus inversiones al siguiente nivel? apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 325 @@ -5382,7 +5390,7 @@ with your university e-mail address - con tu dirección de correo electrónico de la universidad + con tu dirección de correo electrónico universitaria apps/client/src/app/pages/pricing/pricing-page.html 348 @@ -5434,7 +5442,7 @@ One-time fee, annual account fees - Tarifa única, tarifas anuales de la cuenta + Comisión única, comisiones anuales de la cuenta apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 33 @@ -5450,7 +5458,7 @@ Fee - Tarifa + Comisión apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 258 @@ -5474,7 +5482,7 @@ Add Tag - Agregar etiqueta + Añadir etiqueta apps/client/src/app/components/admin-tag/admin-tag.component.html 9 @@ -5482,10 +5490,10 @@ Do you really want to delete this tag? - ¿Realmente deseas eliminar esta etiqueta? + ¿Seguro que quieres eliminar esta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5566,7 +5574,7 @@ Request it - Solicitar + Solicítalo apps/client/src/app/pages/pricing/pricing-page.html 344 @@ -5585,12 +5593,12 @@ Perfil de activo apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 Do you really want to delete this asset profile? - ¿Realmente deseas eliminar este perfil de activo? + ¿Seguro que quieres eliminar este perfil de activo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 37 @@ -5614,7 +5622,7 @@ Ghostfolio is a personal finance dashboard to keep track of your net worth including cash, stocks, ETFs and cryptocurrencies across multiple platforms. - Ghostfolio es un dashboard de finanzas personales para hacer un seguimiento de tus activos como acciones, ETFs o criptodivisas a través de múltiples plataformas. + Ghostfolio es un panel de control de finanzas personales para hacer un seguimiento de tu patrimonio neto, incluyendo efectivo, acciones, ETFs y criptomonedas a través de múltiples plataformas. apps/client/src/app/pages/i18n/i18n-page.html 5 @@ -5650,7 +5658,7 @@ Ghostfolio vs comparison table - Ghostfolio vs tabla comparativa + Tabla comparativa de Ghostfolio vs apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 55 @@ -5666,7 +5674,7 @@ app, asset, cryptocurrency, dashboard, etf, finance, management, performance, portfolio, software, stock, trading, wealth, web3 - aplicación, activo, criptomoneda, panel, ETF, finanzas, gestión, rendimiento, cartera, software, acciones, comercio, riqueza, web3 + aplicación, activo, criptomoneda, panel, ETF, finanzas, gestión, rendimiento, cartera, software, acciones, comercio, patrimonio, web3 apps/client/src/app/pages/i18n/i18n-page.html 10 @@ -5674,7 +5682,7 @@ Oops, cash balance transfer has failed. - Oops, el saldo de efectivo no se ha transferido. + ¡Vaya! La transferencia del saldo de efectivo ha fallado. apps/client/src/app/pages/accounts/accounts-page.component.ts 341 @@ -5690,7 +5698,7 @@ Extreme Greed - Avaricia extrema + Codicia extrema libs/ui/src/lib/i18n.ts 107 @@ -5706,7 +5714,7 @@ Oops! Could not parse historical data. - ¡Ups! No se pudieron analizar los datos históricos. + ¡Vaya! No se pudieron analizar los datos históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts 284 @@ -5714,10 +5722,10 @@ Do you really want to delete this system message? - ¿Realmente deseas eliminar este mensaje del sistema? + ¿Seguro que quieres eliminar este mensaje del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5758,7 +5766,7 @@ Do you really want to delete this account balance? - ¿Realmente desea eliminar el saldo de esta cuenta? + ¿Seguro que quieres eliminar el saldo de esta cuenta? libs/ui/src/lib/account-balances/account-balances.component.ts 113 @@ -5766,7 +5774,7 @@ If a translation is missing, kindly support us in extending it here. - Si falta una traducción, por favor ayúdenos a ampliarla. here. + Si falta una traducción, por favor ayúdanos a completarla aquí. apps/client/src/app/components/user-account-settings/user-account-settings.html 59 @@ -5822,7 +5830,7 @@ Oops! Could not grant access. - ¡Ups! No se pudo otorgar acceso. + ¡Vaya! No se pudo otorgar acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts 141 @@ -5854,7 +5862,7 @@ Market data is delayed for - Los datos del mercado se retrasan por + Los datos del mercado tienen un retraso de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts 95 @@ -5873,11 +5881,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5897,7 +5905,7 @@ Cerrar posición apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5910,7 +5918,7 @@ Asset Performance - Rendimiento de activos + Rendimiento de los activos apps/client/src/app/pages/portfolio/analysis/analysis-page.html 190 @@ -5918,7 +5926,7 @@ Absolute Currency Performance - Rendimiento absoluto de divisas + Rendimiento absoluto de las divisas apps/client/src/app/pages/portfolio/analysis/analysis-page.html 211 @@ -5926,7 +5934,7 @@ Currency Performance - Rendimiento de la moneda + Rendimiento de la divisa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 236 @@ -5945,7 +5953,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5965,7 +5973,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -5974,7 +5982,7 @@ Year to date - El año hasta la fecha + Año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts 374 @@ -5994,7 +6002,7 @@ Oops! A data provider is experiencing the hiccups. - ¡Ups! Un proveedor de datos está experimentando problemas. + ¡Vaya! Un proveedor de datos está experimentando problemas. apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html 8 @@ -6013,7 +6021,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6033,7 +6041,7 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6094,7 +6102,7 @@ self-hosting - auto-alojado + autoalojado kebab-case libs/common/src/lib/routes/routes.ts @@ -6126,7 +6134,7 @@ Activo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6134,7 +6142,7 @@ Cerrado apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6147,7 +6155,7 @@ Activity - Actividad + Operación apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 229 @@ -6163,10 +6171,10 @@ Execute Job - Ejecutar Tarea + Ejecutar trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6174,7 +6182,7 @@ Prioridad apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6195,7 +6203,7 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} - {VAR_PLURAL, plural, =1 {actividad} other {actividades}} + {VAR_PLURAL, plural, =1 {operación} other {operaciones}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 14 @@ -6211,7 +6219,7 @@ Delete Activities - Eliminar actividades + Eliminar operaciones libs/ui/src/lib/activities-table/activities-table.component.html 69 @@ -6227,10 +6235,10 @@ Do you really want to close your Ghostfolio account? - ¿Estás seguro de querer borrar tu cuenta de Ghostfolio? + ¿Seguro que quieres eliminar tu cuenta de Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6259,7 +6267,7 @@ Approximation based on the top holdings of each ETF - Aproximación basada en las principales participaciones de cada ETF + Aproximación basada en las principales posiciones de cada ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html 340 @@ -6283,10 +6291,10 @@ Oops! There was an error setting up biometric authentication. - ¡Ups! Hubo un error al configurar la autenticación biométrica. + ¡Vaya! Hubo un error al configurar la autenticación biométrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -6299,15 +6307,15 @@ Benchmarks - Puntos de referencia + Índices de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 Delete Profiles - Borrar Perfiles + Eliminar Perfiles apps/client/src/app/components/admin-market-data/admin-market-data.html 242 @@ -6315,7 +6323,7 @@ Do you really want to delete these profiles? - Estas seguro de borrar estos perfiles? + ¿Seguro que quieres eliminar estos perfiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 68 @@ -6323,7 +6331,7 @@ Oops! Could not delete profiles. - ¡Ups! No se pudieron eliminar los perfiles. + ¡Vaya! No se pudieron eliminar los perfiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 56 @@ -6339,7 +6347,7 @@ Chart - Grafico + Gráfico apps/client/src/app/components/home-holdings/home-holdings.html 19 @@ -6371,7 +6379,7 @@ Budgeting - Presupuestación + Presupuestos apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 85 @@ -6511,7 +6519,7 @@ Wealth - Riqueza + Patrimonio apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 99 @@ -6559,7 +6567,7 @@ View Holding - Ver fondos + Ver posición libs/ui/src/lib/activities-table/activities-table.component.html 450 @@ -6703,7 +6711,7 @@ Oops! Could not update access. - Oops! No se pudo actualizar el acceso. + ¡Vaya! No se pudo actualizar el acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts 178 @@ -6858,12 +6866,12 @@ Instantánea de la cartera apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 Change with currency effect Change - Cambiar con efecto de cambio dedivisa Cambiar + Cambio con el efecto de la divisa Cambio apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 63 @@ -6879,7 +6887,7 @@ Performance with currency effect Performance - Rendimiento con cambio de divisa Rendimiento + Rendimiento con el efecto de la divisa Rendimiento apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 83 @@ -6903,7 +6911,7 @@ send an e-mail to - enviar un correo electrónico a + envía un correo electrónico a apps/client/src/app/pages/about/overview/about-overview-page.html 87 @@ -6925,6 +6933,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Desde el principio @@ -6935,7 +6951,7 @@ Oops! Invalid currency. - ¡Ups! Moneda inválida. + ¡Vaya! Divisa no válida. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 48 @@ -6983,7 +6999,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year - para usar nuestro enlace de referido y obtener una membresía Ghostfolio Premium por un año + para utilizar nuestro enlace de recomendación y obtener una membresía de Ghostfolio Premium por un año apps/client/src/app/pages/pricing/pricing-page.html 340 @@ -7063,7 +7079,7 @@ Ghostfolio is a lightweight wealth management application for individuals to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. - Ghostfolio es una aplicación de gestión de patrimonio para aquellos individuos que desean realizar un seguimiento de acciones, ETFs o criptomonedas y tomar decisiones de inversión sólidas y basadas en datos. + Ghostfolio es una aplicación ligera de gestión de patrimonio para que las personas realicen un seguimiento de acciones, ETFs o criptomonedas y tomen decisiones de inversión sólidas basadas en datos. apps/client/src/app/pages/about/overview/about-overview-page.html 10 @@ -7071,7 +7087,7 @@ Oops! Could not find any assets. - ¡Ups! No se pudieron encontrar activos. + ¡Vaya! No se pudieron encontrar activos. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html 40 @@ -7095,7 +7111,7 @@ Get access to 80’000+ tickers from over 50 exchanges - Accede a más de 80’000 tickers de más de 50 bolsas + Accede a más de 80.000 tickers de más de 50 bolsas libs/ui/src/lib/i18n.ts 26 @@ -7177,7 +7193,7 @@ Threshold range - Rango umbral + Rango del umbral apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 9 @@ -7217,7 +7233,7 @@ Do you really want to delete the API key? - ¿Realmente deseas eliminar la clave API? + ¿Seguro que quieres eliminar la clave API? apps/client/src/app/components/admin-settings/admin-settings.component.ts 133 @@ -7225,7 +7241,7 @@ Please enter your Ghostfolio API key: - Ingrese su clave API de Ghostfolio: + Ingresa tu clave API de Ghostfolio: apps/client/src/app/pages/api/api-page.component.ts 43 @@ -7233,7 +7249,7 @@ API Requests Today - Solicitudes de API hoy + Solicitudes de API de hoy apps/client/src/app/components/admin-users/admin-users.html 161 @@ -7253,7 +7269,7 @@ Set this API key in your self-hosted environment: - Configure esta clave API en su entorno autohospedado: + Configura esta clave API en tu entorno autoalojado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 151 @@ -7269,7 +7285,7 @@ Do you really want to generate a new API key? - ¿Realmente desea generar una nueva clave API? + ¿Seguro que quieres generar una nueva clave API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 159 @@ -7285,7 +7301,7 @@ Generate Ghostfolio Premium Data Provider API key for self-hosted environments... - Genere la clave API del proveedor de datos premium de Ghostfolio para entornos autohospedados... + Genera la clave API del proveedor de datos premium de Ghostfolio para entornos autoalojados... libs/ui/src/lib/membership-card/membership-card.component.html 29 @@ -7293,7 +7309,7 @@ out of - fuera de + de apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 56 @@ -7301,7 +7317,7 @@ rules align with your portfolio. - Las reglas se alinean con su cartera. + reglas se alinean con tu cartera. apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 58 @@ -7309,7 +7325,7 @@ Save - Ahorrar + Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 610 @@ -7364,7 +7380,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7377,7 +7393,7 @@ Check the system status at - Verificar el estado del sistema en + Verifica el estado del sistema en apps/client/src/app/pages/about/overview/about-overview-page.html 57 @@ -7393,7 +7409,7 @@ Change with currency effect - Cambiar con el efecto del tipo de cambio de divisa + Cambio con el efecto de la divisa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 116 @@ -7401,10 +7417,10 @@ AI prompt has been copied to the clipboard - El aviso de IA ha sido copiado al portapapeles + El prompt para la IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7417,10 +7433,10 @@ Lazy - Perezoso + Bajo demanda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7428,7 +7444,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7468,7 +7484,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7476,7 +7492,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7484,7 +7500,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7497,14 +7513,14 @@ Change - Cambiar + Cambio libs/ui/src/lib/holdings-table/holdings-table.component.html 138 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7516,7 +7532,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7524,11 +7540,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7541,7 +7557,7 @@ Copy portfolio data to clipboard for AI prompt - Copiar los datos del portafolio al portapapeles para el aviso de IA + Copiar los datos de la cartera al portapapeles para el prompt de IA apps/client/src/app/pages/portfolio/analysis/analysis-page.html 42 @@ -7549,7 +7565,7 @@ Copy AI prompt to clipboard for analysis - Copiar el aviso de IA al portapapeles para análisis + Copiar el prompt de IA al portapapeles para análisis apps/client/src/app/pages/portfolio/analysis/analysis-page.html 67 @@ -7557,7 +7573,7 @@ Total amount - Cantidad total + Importe total apps/client/src/app/pages/portfolio/analysis/analysis-page.html 95 @@ -7589,7 +7605,7 @@ Terms and Conditions - Terminos y condiciones + Términos y Condiciones apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 15 @@ -7632,24 +7648,24 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 Do you really want to generate a new security token for this user? - ¿Realmente deseas generar un nuevo token de seguridad para este usuario? + ¿Seguro que quieres generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 244 + 240 Find account, holding or page... - Buscar cuenta, posición o página... + Busca una cuenta, posición o página... libs/ui/src/lib/assistant/assistant.component.ts 115 @@ -7706,7 +7722,7 @@ and I agree to the Terms of Service. - y acepto los Términos del servicio. + y acepto los Términos de servicio. apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 34 @@ -7789,7 +7805,7 @@ alguien apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7818,15 +7834,15 @@ Do you really want to delete this item? - ¿Realmente deseas eliminar este elemento? + ¿Seguro que quieres eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 Log out - Finalizar la sesión + Cerrar sesión apps/client/src/app/components/header/header.component.html 329 @@ -7834,7 +7850,7 @@ Calculations are based on delayed market data and may not be displayed in real-time. - Los cálculos se basan en datos de mercado retrasados ​​y es posible que no se muestren en tiempo real. + Los cálculos se basan en datos de mercado con retraso y es posible que no se muestren en tiempo real. apps/client/src/app/components/home-market/home-market.html 45 @@ -7846,7 +7862,7 @@ changelog - registro-decambios + registro-de-cambios kebab-case libs/common/src/lib/routes/routes.ts @@ -7862,7 +7878,7 @@ La cuenta de usuario de demostración se ha sincronizado. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -7875,7 +7891,7 @@ Set up - Fondo de Emergencia: Establecer + Establecer apps/client/src/app/pages/i18n/i18n-page.html 145 @@ -7899,7 +7915,7 @@ Fee Ratio - Relación de tarifas + Relación de comisiones apps/client/src/app/pages/i18n/i18n-page.html 152 @@ -7907,7 +7923,7 @@ The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - Las tarifas superan el ${thresholdMax}% de su volumen total de inversión (${feeRatio}%) + Las comisiones superan el ${thresholdMax}% de tu volumen total de inversión (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 154 @@ -7915,7 +7931,7 @@ The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - Las tarifas no superan el ${thresholdMax}% de su volumen total de inversión (${feeRatio}%) + Las comisiones no superan el ${thresholdMax}% de tu volumen total de inversión (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 158 @@ -7947,7 +7963,7 @@ Open Source Alternative to - Alternativa de software libre a + Alternativa de software de código abierto a libs/common/src/lib/routes/routes.ts 326 @@ -8009,7 +8025,7 @@ Fuel your self-hosted Ghostfolio with a powerful data provider to access 80,000+ tickers from over 50 exchanges worldwide. - Alimenta tu Ghostfolio autoalojado con un proveedor de datos potente para acceder a más de 80.000 tickers de más de 50 intercambios a nivel mundial. + Alimenta tu Ghostfolio autoalojado con un proveedor de datos potente para acceder a más de 80.000 tickers de más de 50 bolsas a nivel mundial. apps/client/src/app/components/admin-settings/admin-settings.component.html 16 @@ -8025,7 +8041,7 @@ Learn more - Aprender más + Más información apps/client/src/app/components/admin-settings/admin-settings.component.html 38 @@ -8076,7 +8092,7 @@ Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8117,7 +8133,7 @@ Equity - Acciones + Renta variable apps/client/src/app/pages/i18n/i18n-page.html 41 @@ -8181,7 +8197,7 @@ Investment: Base Currency - Inversión: Moneda base + Inversión: Divisa base apps/client/src/app/pages/i18n/i18n-page.html 85 @@ -8189,7 +8205,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - La mayor parte de tu inversión actual no está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) + La mayor parte de tu inversión actual no está en tu divisa base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html 88 @@ -8197,7 +8213,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - La mayor parte de tu inversión actual está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) + La mayor parte de tu inversión actual está en tu divisa base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html 92 @@ -8242,10 +8258,10 @@ Do you really want to generate a new security token? - ¿Realmente deseas generar un nuevo token de seguridad? + ¿Seguro que quieres generar un nuevo token de seguridad? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8258,7 +8274,7 @@ If you encounter a bug, would like to suggest an improvement or a new feature, please join the Ghostfolio Slack community, post to @ghostfolio_ - Si encuentras un error, deseas sugerir una mejora o una nueva característica, por favor únete a la comunidad Ghostfolio Slack, publica en @ghostfolio_ + Si encuentras un error, deseas sugerir una mejora o una nueva funcionalidad, por favor únete a la comunidad de Ghostfolio en Slack y publica en @ghostfolio_ apps/client/src/app/pages/about/overview/about-overview-page.html 69 @@ -8269,7 +8285,7 @@ Acciones apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8281,7 +8297,7 @@ Criptomonedas apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8290,7 +8306,7 @@ - + apps/client/src/app/components/admin-users/admin-users.html 39 @@ -8301,7 +8317,7 @@ Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 @@ -8334,7 +8350,7 @@ Account Cluster Risks - Riesgos de grupo de cuentas + Riesgos de agrupación de cuentas apps/client/src/app/pages/i18n/i18n-page.html 14 @@ -8342,7 +8358,7 @@ Asset Class Cluster Risks - Riesgos de grupo de clases de activos + Riesgos de agrupación de tipos de activos apps/client/src/app/pages/i18n/i18n-page.html 39 @@ -8350,7 +8366,7 @@ Currency Cluster Risks - Riesgos del clúster de divisas + Riesgos de agrupación de divisas apps/client/src/app/pages/i18n/i18n-page.html 83 @@ -8358,7 +8374,7 @@ Economic Market Cluster Risks - Riesgos del clúster de mercados económicos + Riesgos de agrupación de mercados económicos apps/client/src/app/pages/i18n/i18n-page.html 106 @@ -8390,7 +8406,7 @@ Buying Power - Poder de compra + Poder adquisitivo apps/client/src/app/pages/i18n/i18n-page.html 71 @@ -8398,7 +8414,7 @@ Your buying power is below ${thresholdMin} ${baseCurrency} - Tu poder de compra es inferior a ${thresholdMin} ${baseCurrency} + Tu poder adquisitivo está por debajo de ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 73 @@ -8406,7 +8422,7 @@ Your buying power is 0 ${baseCurrency} - Tu poder de compra es 0 ${baseCurrency} + Tu poder adquisitivo es 0 ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 77 @@ -8414,7 +8430,7 @@ Your buying power exceeds ${thresholdMin} ${baseCurrency} - Tu poder de compra excede ${thresholdMin} ${baseCurrency} + Tu poder adquisitivo supera ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 80 @@ -8422,7 +8438,7 @@ Regional Market Cluster Risks - Riesgos de los grupos de mercados regionales + Riesgos de agrupación de mercados regionales apps/client/src/app/pages/i18n/i18n-page.html 163 @@ -8446,7 +8462,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% - La contribución a los mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) supera el ${thresholdMax}% + La contribución a mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) supera ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 112 @@ -8454,7 +8470,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% - La contribución a los mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) es inferior al ${thresholdMin}% + La contribución a mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 117 @@ -8462,7 +8478,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - La contribución a los mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% + La contribución a mercados desarrollados de tu inversión actual (${developedMarketsValueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 122 @@ -8478,7 +8494,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% - La contribución a los mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) supera el ${thresholdMax}% + La contribución a mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) supera ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 130 @@ -8486,7 +8502,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% - La contribución a los mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) es inferior al ${thresholdMin}% + La contribución a mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 135 @@ -8494,7 +8510,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - La contribución a los mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% + La contribución a mercados emergentes de tu inversión actual (${emergingMarketsValueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 140 @@ -8510,7 +8526,7 @@ Your net worth is managed by 0 accounts - Su patrimonio neto es administrado por 0 cuentas + Tu patrimonio neto es administrado por 0 cuentas apps/client/src/app/pages/i18n/i18n-page.html 33 @@ -8526,7 +8542,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - La contribución al mercado de Asia-Pacífico de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% + La contribución al mercado Asiático-Pacífico de tu inversión actual (${valueRatio}%) supera ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 167 @@ -8534,7 +8550,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - La contribución al mercado de Asia-Pacífico de tu inversión actual (${valueRatio}%) es inferior al ${thresholdMin}% + La contribución al mercado Asiático-Pacífico de tu inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 171 @@ -8542,7 +8558,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - La contribución al mercado de Asia-Pacífico de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% + La contribución al mercado Asiático-Pacífico de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 175 @@ -8558,7 +8574,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - La contribución a los mercados emergentes de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% + La contribución a mercados emergentes de tu inversión actual (${valueRatio}%) supera ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 183 @@ -8566,7 +8582,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - La contribución a los mercados emergentes de tu inversión actual (${valueRatio}%) es inferior al ${thresholdMin}% + La contribución a mercados emergentes de tu inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 187 @@ -8574,7 +8590,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - La contribución a los mercados emergentes de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% + La contribución a mercados emergentes de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 191 @@ -8590,7 +8606,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - La contribución al mercado europeo de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% + La contribución al mercado europeo de tu inversión actual (${valueRatio}%) supera ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 197 @@ -8598,7 +8614,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - La contribución al mercado europeo de tu inversión actual (${valueRatio}%) es inferior al ${thresholdMin}% + La contribución al mercado europeo de tu inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 201 @@ -8622,7 +8638,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - La contribución al mercado japonés de su inversión actual (${valueRatio}%) supera el ${thresholdMax}% + La contribución al mercado japonés de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 211 @@ -8630,7 +8646,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - La contribución al mercado japonés de su inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% + La contribución al mercado japonés de tu inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 215 @@ -8638,7 +8654,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - La contribución al mercado japonés de su inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% + La contribución al mercado japonés de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 219 @@ -8654,7 +8670,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - La contribución del mercado de América del Norte de su inversión actual (${valueRatio}%) supera el ${thresholdMax}% + La contribución al mercado de América del Norte de tu inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 225 @@ -8662,7 +8678,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - La contribución al mercado de América del Norte de su inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% + La contribución al mercado de América del Norte de tu inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 229 @@ -8670,7 +8686,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - La contribución al mercado de América del Norte de su inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% + La contribución al mercado de América del Norte de tu inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 233 @@ -8690,7 +8706,7 @@ Join the Ghostfolio Slack community - Únete a la comunidad de Ghostfolio Slack + Únete a la comunidad de Ghostfolio en Slack apps/client/src/app/pages/about/overview/about-overview-page.html 109 @@ -8698,7 +8714,7 @@ Follow Ghostfolio on X (formerly Twitter) - Siga a Ghostfolio en X (anteriormente Twitter) + Sigue a Ghostfolio en X (anteriormente Twitter) apps/client/src/app/pages/about/overview/about-overview-page.html 118 @@ -8726,7 +8742,7 @@ Follow Ghostfolio on LinkedIn - Siga a Ghostfolio en LinkedIn + Sigue a Ghostfolio en LinkedIn apps/client/src/app/pages/about/overview/about-overview-page.html 147 @@ -8734,7 +8750,7 @@ Ghostfolio is an independent & bootstrapped business - Ghostfolio es una empresa independiente y autónoma + Ghostfolio es una empresa independiente y autofinanciada apps/client/src/app/pages/about/overview/about-overview-page.html 157 @@ -8742,7 +8758,7 @@ Support Ghostfolio - Soporte Ghostfolio + Apoya a Ghostfolio apps/client/src/app/pages/about/overview/about-overview-page.html 166 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index f01a3a505..eec144e92 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -42,7 +42,7 @@ Type apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -362,7 +362,7 @@ Source Données apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -386,7 +386,7 @@ Tentatives apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -394,7 +394,7 @@ Créé apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -402,7 +402,7 @@ Terminé apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -410,7 +410,7 @@ Statut apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -430,7 +430,7 @@ Supprimer Tâches apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -450,7 +450,7 @@ Données historiques du marché apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -462,7 +462,7 @@ Voir Données apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -470,7 +470,7 @@ Voir la Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -478,7 +478,7 @@ Supprimer Tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -530,7 +530,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -706,7 +706,7 @@ Voulez-vous vraiment supprimer ce code promotionnel ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -714,7 +714,7 @@ Voulez-vous vraiment vider le cache ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -722,7 +722,7 @@ Veuillez définir votre message système : apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -846,7 +846,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -978,7 +978,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -998,15 +998,15 @@ Oups! Jeton de Sécurité Incorrect. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1014,7 +1014,7 @@ Gérer les Activités apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1022,11 +1022,11 @@ Peur apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1038,11 +1038,11 @@ Avidité apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1294,7 +1294,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1314,7 +1314,7 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1326,7 +1326,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1338,7 +1338,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -1358,7 +1358,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -1386,7 +1386,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -1398,7 +1398,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -1414,7 +1414,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -1474,7 +1474,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1518,7 +1518,7 @@ Voulez-vous vraiment supprimer cette méthode de connexion ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -1714,7 +1714,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1762,7 +1762,7 @@ Données du marché apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -2066,7 +2066,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2098,7 +2098,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2162,7 +2162,7 @@ Import des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -2170,7 +2170,7 @@ L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -2186,7 +2186,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -2418,7 +2418,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -2438,7 +2438,7 @@ Dépôt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -2446,7 +2446,7 @@ Mensuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -2648,6 +2648,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Resources @@ -2700,6 +2704,10 @@ Overview Aperçu + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2858,7 +2866,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -2870,7 +2878,7 @@ Épargne libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -3006,7 +3014,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -3014,7 +3022,7 @@ Symbole apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -3030,7 +3038,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -3242,11 +3250,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3278,7 +3286,7 @@ Annuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -3286,7 +3294,7 @@ Importer Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3354,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -3850,7 +3858,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -3894,7 +3902,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -4490,7 +4498,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -4498,7 +4506,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -4678,7 +4686,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4734,7 +4742,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -5484,7 +5492,7 @@ Confirmez la suppression de ce tag ? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5584,7 +5592,7 @@ Profil d’Actif apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -5716,7 +5724,7 @@ Confirmer la suppresion de ce message système? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5872,11 +5880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5896,7 +5904,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5944,7 +5952,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5964,7 +5972,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6012,7 +6020,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6032,7 +6040,7 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6125,7 +6133,7 @@ Actif apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6133,7 +6141,7 @@ Clôturé apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6165,7 +6173,7 @@ Execute la tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6173,7 +6181,7 @@ Priorité apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6229,7 +6237,7 @@ Confirmer la suppresion de votre compte Ghostfolio ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6285,7 +6293,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 - 336 + 333 @@ -6301,7 +6309,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6857,7 +6865,7 @@ Résumé du portefeuille apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6924,6 +6932,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Depuis le début @@ -7363,7 +7379,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7403,7 +7419,7 @@ Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,7 +7659,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 - 244 + 240 @@ -7788,7 +7804,7 @@ quelqu’un apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Le compte utilisateur de démonstration a été synchronisé. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Actions apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Crypto-monnaies apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 5f06af0b4..b143bbde3 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -51,7 +51,7 @@ Tipo apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -307,7 +307,7 @@ Elimina i lavori apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -315,7 +315,7 @@ Sorgente dei dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -339,7 +339,7 @@ Tentativi apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -347,7 +347,7 @@ Creato apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -355,7 +355,7 @@ Finito apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -363,7 +363,7 @@ Stato apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -395,7 +395,7 @@ Dati storici del mercato apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -407,7 +407,7 @@ Visualizza i dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -415,7 +415,7 @@ Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -423,7 +423,7 @@ Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -515,7 +515,7 @@ Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -523,7 +523,7 @@ Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -531,7 +531,7 @@ Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -635,7 +635,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -743,7 +743,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -763,15 +763,15 @@ Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -779,7 +779,7 @@ Gestione delle attività apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1019,7 +1019,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1067,7 +1067,7 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1079,7 +1079,7 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1091,7 +1091,7 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -1111,7 +1111,7 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -1131,7 +1131,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -1223,7 +1223,7 @@ Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -1379,7 +1379,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1661,6 +1661,10 @@ Overview Panoramica + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1919,7 +1923,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2043,7 +2047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2067,7 +2071,7 @@ Importazione dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -2075,7 +2079,7 @@ L’importazione è stata completata apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -2193,6 +2197,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Resources @@ -2379,7 +2387,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2395,7 +2403,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2515,7 +2523,7 @@ Risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -2531,7 +2539,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -2551,7 +2559,7 @@ Deposito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -2559,7 +2567,7 @@ Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -2583,11 +2591,11 @@ Paura apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -2599,11 +2607,11 @@ Avidità apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -2615,7 +2623,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -2699,7 +2707,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2811,7 +2819,7 @@ Simbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2827,7 +2835,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -2983,7 +2991,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -3003,11 +3011,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3147,7 +3155,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3203,7 +3211,7 @@ Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3227,7 +3235,7 @@ Dati del mercato apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3279,7 +3287,7 @@ Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -3287,7 +3295,7 @@ Importa i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3347,7 +3355,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -3851,7 +3859,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -3895,7 +3903,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -4491,7 +4499,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -4499,7 +4507,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -4679,7 +4687,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4735,7 +4743,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -5485,7 +5493,7 @@ Sei sicuro di voler eliminare questo tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5585,7 +5593,7 @@ Profilo dell’asset apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -5717,7 +5725,7 @@ Confermi di voler cancellare questo messaggio di sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5873,11 +5881,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5897,7 +5905,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5945,7 +5953,7 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5965,7 +5973,7 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6013,7 +6021,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6033,7 +6041,7 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6126,7 +6134,7 @@ Attivo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6134,7 +6142,7 @@ Chiuso apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6166,7 +6174,7 @@ Esegui il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6174,7 +6182,7 @@ Priorità apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6230,7 +6238,7 @@ Confermi di voler chiudere il tuo account Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6286,7 +6294,7 @@ Ops! C’è stato un errore impostando l’autenticazione biometrica. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -6302,7 +6310,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6858,7 +6866,7 @@ Stato del Portfolio apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6925,6 +6933,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Dall’inizio @@ -7364,7 +7380,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7404,7 +7420,7 @@ L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7420,7 +7436,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7428,7 +7444,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7468,7 +7484,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7476,7 +7492,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7484,7 +7500,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7504,7 +7520,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7516,7 +7532,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7524,11 +7540,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7632,11 +7648,11 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7644,7 +7660,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 244 + 240 @@ -7789,7 +7805,7 @@ qualcuno apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7821,7 +7837,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7862,7 +7878,7 @@ L’account utente demo è stato sincronizzato. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8076,7 +8092,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8245,7 +8261,7 @@ Vuoi davvero generare un nuovo token di sicurezza? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8269,7 +8285,7 @@ Azioni apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8281,7 +8297,7 @@ criptovalute apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8301,7 +8317,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index bb361b515..4f544e4aa 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -252,7 +252,7 @@ 유형 apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -592,7 +592,7 @@ 자산 프로필 apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -600,7 +600,7 @@ 과거 시장 데이터 apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -612,7 +612,7 @@ 데이터 소스 apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -636,7 +636,7 @@ 시도 횟수 apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -644,7 +644,7 @@ 생성됨 apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -652,7 +652,7 @@ 완료됨 apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -660,7 +660,7 @@ 상태 apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -680,7 +680,7 @@ 작업 삭제 apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -688,7 +688,7 @@ 데이터 보기 apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -696,7 +696,7 @@ 스택트레이스 보기 apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -704,7 +704,7 @@ 작업 삭제 apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -756,7 +756,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -768,7 +768,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -776,7 +776,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -792,7 +792,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -1076,7 +1076,7 @@ 이 쿠폰을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -1084,7 +1084,7 @@ 이 시스템 메시지를 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -1092,7 +1092,7 @@ 정말로 캐시를 플러시하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -1100,7 +1100,7 @@ 시스템 메시지를 설정하십시오: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1252,7 +1252,7 @@ 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -1284,7 +1284,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1332,7 +1332,7 @@ 이 태그를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -1356,7 +1356,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1512,7 +1512,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1532,15 +1532,15 @@ 이런! 잘못된 보안 토큰. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1548,7 +1548,7 @@ 활동 관리 apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1556,11 +1556,11 @@ 두려움 apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1572,11 +1572,11 @@ 탐욕 apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1680,7 +1680,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -1960,7 +1960,7 @@ 데이터 결함 보고 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -2148,7 +2148,7 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -2160,7 +2160,7 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -2172,7 +2172,7 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2192,7 +2192,7 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2296,7 +2296,7 @@ 자동 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2308,7 +2308,7 @@ 이 로그인 방법을 정말로 제거하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -2492,7 +2492,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2504,7 +2504,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2520,7 +2520,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2648,7 +2648,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2744,7 +2744,7 @@ 시장 데이터 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -2778,6 +2778,10 @@ Overview 개요 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3624,7 +3628,7 @@ 작업 ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -3680,7 +3684,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3808,7 +3812,7 @@ 배당금 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3824,7 +3828,7 @@ 데이터 가져오는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -3832,7 +3836,7 @@ 가져오기가 완료되었습니다. apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -3848,7 +3852,7 @@ 데이터 유효성을 검사하는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -4148,7 +4152,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -4168,7 +4172,7 @@ 보증금 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -4176,7 +4180,7 @@ 월간 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -4184,7 +4188,7 @@ 매년 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4538,6 +4542,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Personal Finance Tools @@ -5129,7 +5137,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -5141,7 +5149,7 @@ 저금 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -5373,7 +5381,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -5389,7 +5397,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -5421,7 +5429,7 @@ 상징 apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5437,7 +5445,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -5777,11 +5785,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5897,7 +5905,7 @@ 닫기 보유 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5921,11 +5929,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5985,7 +5993,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -5997,7 +6005,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -6037,7 +6045,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6057,7 +6065,7 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6150,7 +6158,7 @@ 닫은 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6158,7 +6166,7 @@ 활동적인 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6190,7 +6198,7 @@ 작업 실행 apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6206,7 +6214,7 @@ 우선 사항 apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6262,7 +6270,7 @@ 정말로 Ghostfolio 계정을 폐쇄하시겠습니까? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6310,7 +6318,7 @@ 이런! 생체 인증을 설정하는 중에 오류가 발생했습니다. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -6350,7 +6358,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6898,7 +6906,7 @@ 포트폴리오 스냅샷 apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6957,6 +6965,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + offers a free plan 은(는) 무료 요금제를 제공합니다 @@ -7404,7 +7420,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7428,7 +7444,7 @@ AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7468,7 +7484,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7476,7 +7492,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7492,7 +7508,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7500,7 +7516,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7508,7 +7524,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7528,7 +7544,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7540,7 +7556,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7548,11 +7564,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7656,7 +7672,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 244 + 240 @@ -7672,11 +7688,11 @@ 보안 토큰 apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7789,7 +7805,7 @@ 누구 apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7821,7 +7837,7 @@ 이 항목을 정말로 삭제하시겠습니까? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7870,7 +7886,7 @@ 데모 사용자 계정이 동기화되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8076,7 +8092,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8261,7 +8277,7 @@ 정말로 새로운 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8269,7 +8285,7 @@ 암호화폐 apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8281,7 +8297,7 @@ 주식 apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8301,7 +8317,7 @@ 자산 프로필 관리 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index fbd87961c..039969da0 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -50,7 +50,7 @@ Type apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -306,7 +306,7 @@ Taken verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -314,7 +314,7 @@ Gegevensbron apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -338,7 +338,7 @@ Pogingen apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -346,7 +346,7 @@ Aangemaakt apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -354,7 +354,7 @@ Voltooid apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -362,7 +362,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -394,7 +394,7 @@ Historische marktgegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -406,7 +406,7 @@ Bekijk gegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -414,7 +414,7 @@ Bekijk Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -422,7 +422,7 @@ Taak verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -514,7 +514,7 @@ Wil je deze coupon echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -522,7 +522,7 @@ Wil je echt de cache legen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -530,7 +530,7 @@ Stel je systeemboodschap in: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -634,7 +634,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -742,7 +742,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -762,15 +762,15 @@ Oeps! Onjuiste beveiligingstoken. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -778,7 +778,7 @@ Activiteiten beheren apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1018,7 +1018,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1066,7 +1066,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1078,7 +1078,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1090,7 +1090,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -1110,7 +1110,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -1130,7 +1130,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -1222,7 +1222,7 @@ Wil je deze aanmeldingsmethode echt verwijderen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -1378,7 +1378,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1660,6 +1660,10 @@ Overview Overzicht + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1918,7 +1922,7 @@ Huidige week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2042,7 +2046,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2066,7 +2070,7 @@ Gegevens importeren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -2074,7 +2078,7 @@ Importeren is voltooid apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -2192,6 +2196,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Resources @@ -2378,7 +2386,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2394,7 +2402,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2514,7 +2522,7 @@ Besparingen libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -2530,7 +2538,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -2550,7 +2558,7 @@ Storting libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -2558,7 +2566,7 @@ Maandelijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -2582,11 +2590,11 @@ Angst apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -2598,11 +2606,11 @@ Hebzucht apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -2614,7 +2622,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -2698,7 +2706,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2810,7 +2818,7 @@ Symbool apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2826,7 +2834,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -2982,7 +2990,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -3002,11 +3010,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3146,7 +3154,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3202,7 +3210,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3226,7 +3234,7 @@ Marktgegevens apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3278,7 +3286,7 @@ Jaarlijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -3286,7 +3294,7 @@ Importeer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3354,7 @@ Geen activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -3850,7 +3858,7 @@ Huidig jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -3894,7 +3902,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -4490,7 +4498,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -4498,7 +4506,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -4678,7 +4686,7 @@ Opdracht ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4734,7 +4742,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -5484,7 +5492,7 @@ Weet u zetker dat u dit label wilt verwijderen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5584,7 +5592,7 @@ Bezittingen Profiel apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -5716,7 +5724,7 @@ Wilt u dit systeembericht echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5872,11 +5880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5896,7 +5904,7 @@ Sluit Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5944,7 +5952,7 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5964,7 +5972,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6012,7 +6020,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6032,7 +6040,7 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6125,7 +6133,7 @@ Actief apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6133,7 +6141,7 @@ Gesloten apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6165,7 +6173,7 @@ Opdracht Uitvoeren apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6173,7 +6181,7 @@ Prioriteit apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6229,7 +6237,7 @@ Wilt u uw Ghostfolio account echt sluiten? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6285,7 +6293,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 - 336 + 333 @@ -6301,7 +6309,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6857,7 +6865,7 @@ Portfolio Momentopname apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6924,6 +6932,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Vanaf het begin @@ -7363,7 +7379,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7403,7 +7419,7 @@ AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,7 +7659,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 244 + 240 @@ -7788,7 +7804,7 @@ iemand apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Demo-gebruikersaccount is gesynchroniseerd. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Huidige maand apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Wilt u echt een nieuwe securitytoken genereren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Aandelen apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Cryptovaluta apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index e2083ccf7..a15609e6a 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -240,7 +240,7 @@ please - please + proszę apps/client/src/app/pages/pricing/pricing-page.html 333 @@ -251,7 +251,7 @@ Typ apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -284,7 +284,7 @@ with - with + z apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 87 @@ -583,7 +583,7 @@ Profil Aktywów apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -591,7 +591,7 @@ Historyczne Dane Rynkowe apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -603,7 +603,7 @@ Źródło Danych apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -627,7 +627,7 @@ Próby apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -635,7 +635,7 @@ Utworzono apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -643,7 +643,7 @@ Zakończono apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -651,7 +651,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -660,7 +660,7 @@ and is driven by the efforts of its contributors - i jest rozwijany dzięki pracy jego współtwórców + i jest rozwijany dzięki pracy jego współtwórców apps/client/src/app/pages/about/overview/about-overview-page.html 49 @@ -671,7 +671,7 @@ Usuń Zadania apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -679,7 +679,7 @@ Zobacz Dane apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -687,7 +687,7 @@ Wyświetl Stos Wywołań apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -695,7 +695,7 @@ Usuń Zadanie apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -747,7 +747,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -759,7 +759,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -767,7 +767,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -783,7 +783,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -1043,7 +1043,7 @@ Czy naprawdę chcesz usunąć ten kupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -1051,7 +1051,7 @@ Czy naprawdę chcesz usunąć tę wiadomość systemową? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -1059,7 +1059,7 @@ Czy naprawdę chcesz wyczyścić pamięć podręczną? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -1067,7 +1067,7 @@ Proszę ustawić swoją wiadomość systemową: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1208,7 +1208,7 @@ Asset profile has been saved - Asset profile has been saved + Profil zasobu został zapisany apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 594 @@ -1219,12 +1219,12 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 Explore - Explore + Eksploruj apps/client/src/app/pages/resources/overview/resources-overview.component.html 11 @@ -1232,7 +1232,7 @@ By - By + Przez apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -1248,10 +1248,10 @@ Current year - Current year + Obecny rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1299,7 +1299,7 @@ Czy naprawdę chcesz usunąć ten tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -1323,7 +1323,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1344,7 +1344,7 @@ No auto-renewal on membership. - No auto-renewal on membership. + Brak automatycznego odnawiania członkostwa. apps/client/src/app/components/user-account-membership/user-account-membership.html 74 @@ -1479,7 +1479,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1499,15 +1499,15 @@ Ups! Nieprawidłowy token bezpieczeństwa. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1515,7 +1515,7 @@ Zarządzaj Aktywnościami apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1523,11 +1523,11 @@ Zagrożenie apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1539,11 +1539,11 @@ Zachłanność apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1580,7 +1580,7 @@ The source code is fully available as open source software (OSS) under the AGPL-3.0 license - Kod źródłowy jest w pełni dostępny jako oprogramowanie open source (OSS) na licencji AGPL-3.0 license + Kod źródłowy jest w pełni dostępny jako oprogramowanie open source (OSS) na licencji AGPL-3.0 license apps/client/src/app/pages/about/overview/about-overview-page.html 16 @@ -1644,10 +1644,10 @@ Current week - Current week + Obecny tydzień apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -1927,7 +1927,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -2115,7 +2115,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 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -2127,7 +2127,7 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -2139,7 +2139,7 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2159,7 +2159,7 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2263,7 +2263,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2275,7 +2275,7 @@ Czy na pewno chcesz usunąć tą metode logowania? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -2459,7 +2459,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2471,7 +2471,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2487,7 +2487,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2588,7 +2588,7 @@ for - for + dla apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 128 @@ -2615,7 +2615,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2711,7 +2711,7 @@ Dane Rynkowe apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -2745,6 +2745,10 @@ Overview Przegląd + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2888,7 +2892,7 @@ Could not parse scraper configuration - Could not parse scraper configuration + Nie udało się przetworzyć konfiguracji scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 525 @@ -3044,7 +3048,7 @@ per week - per week + na tydzień apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 130 @@ -3220,7 +3224,7 @@ Edit access - Edit access + Edytuj dostęp apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 11 @@ -3324,7 +3328,7 @@ Get access to 80’000+ tickers from over 50 exchanges - Get access to 80’000+ tickers from over 50 exchanges + Uzyskaj dostęp do 80 000+ tickerów z ponad 50 giełd apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 84 @@ -3460,7 +3464,7 @@ less than - less than + mniej niż apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 129 @@ -3524,7 +3528,7 @@ Ghostfolio Status - Ghostfolio Status + Ghostfolio Status apps/client/src/app/pages/about/overview/about-overview-page.html 62 @@ -3532,7 +3536,7 @@ with your university e-mail address - with your university e-mail address + używając swojego adresu e-mail uczelni apps/client/src/app/pages/pricing/pricing-page.html 348 @@ -3591,7 +3595,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -3647,7 +3651,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3775,7 +3779,7 @@ Impotruj Dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3791,7 +3795,7 @@ Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -3799,12 +3803,12 @@ Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 or start a discussion at - or start a discussion at + lub rozpocznij dyskusję n apps/client/src/app/pages/about/overview/about-overview-page.html 94 @@ -3815,7 +3819,7 @@ Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -4016,7 +4020,7 @@ Latest activities - Latest activities + Ostatnie transakcje apps/client/src/app/pages/public/public-page.html 210 @@ -4084,7 +4088,7 @@ Looking for a student discount? - Looking for a student discount? + Szukasz zniżki studenckiej? apps/client/src/app/pages/pricing/pricing-page.html 342 @@ -4115,7 +4119,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -4135,7 +4139,7 @@ Depozyt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -4143,7 +4147,7 @@ Miesięcznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -4151,7 +4155,7 @@ Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4505,6 +4509,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Personal Finance Tools @@ -4617,7 +4625,7 @@ Website of Thomas Kaul - Website of Thomas Kaul + Strona internetowa Thomas'a Kaul'a apps/client/src/app/pages/about/overview/about-overview-page.html 44 @@ -4849,7 +4857,7 @@ Request it - Request it + Porpoś o apps/client/src/app/pages/pricing/pricing-page.html 344 @@ -4969,7 +4977,7 @@ , - , + , apps/client/src/app/pages/portfolio/fire/fire-page.html 145 @@ -4993,7 +5001,7 @@ contact us - contact us + skontaktuj się z nami apps/client/src/app/pages/pricing/pricing-page.html 336 @@ -5049,7 +5057,7 @@ Interest - Udział + Odsetki apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 69 @@ -5060,7 +5068,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -5072,7 +5080,7 @@ Oszczędności libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -5304,7 +5312,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -5317,10 +5325,10 @@ No Activities - No Activities + Brak transakcji apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -5352,7 +5360,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5368,7 +5376,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -5417,7 +5425,7 @@ Sign in with OpenID Connect - Sign in with OpenID Connect + Zaloguj się za pomocą OpenID Connect apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 55 @@ -5529,7 +5537,7 @@ Authentication - Authentication + Uwierzytelnianie apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 54 @@ -5708,11 +5716,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5829,7 +5837,7 @@ Argentina - Argentina + Argentyna libs/ui/src/lib/i18n.ts 78 @@ -5872,11 +5880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5885,7 +5893,7 @@ here - here + tutaj apps/client/src/app/pages/pricing/pricing-page.html 347 @@ -5893,10 +5901,10 @@ Close Holding - Close Holding + Zamknij pozycję apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5944,7 +5952,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5964,7 +5972,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6012,7 +6020,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6032,7 +6040,7 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6125,7 +6133,7 @@ Antywne apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6133,7 +6141,7 @@ Zamknięte apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6165,7 +6173,7 @@ Wykonaj Zadanie apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6173,7 +6181,7 @@ Priorytet apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6229,7 +6237,7 @@ Czy na pewno chcesz zamknąć swoje konto Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6274,7 +6282,7 @@ Include in - Include in + Uwzględnij w apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 377 @@ -6285,7 +6293,7 @@ Ups! Wystąpił błąd podczas konfigurowania uwierzytelniania biometrycznego. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -6301,7 +6309,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6558,7 +6566,7 @@ View Holding - View Holding + Podgląd inwestycji libs/ui/src/lib/activities-table/activities-table.component.html 450 @@ -6702,7 +6710,7 @@ Oops! Could not update access. - Oops! Could not update access. + Ups! Nie udało się zaktualizować dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts 178 @@ -6830,7 +6838,7 @@ Role - Role + Rola apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 33 @@ -6857,7 +6865,7 @@ Przegląd portfela apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6870,7 +6878,7 @@ If you plan to open an account at - If you plan to open an account at + Jeśli planujesz otworzyć konto w apps/client/src/app/pages/pricing/pricing-page.html 312 @@ -6902,7 +6910,7 @@ send an e-mail to - send an e-mail to + wyślij e-mail do apps/client/src/app/pages/about/overview/about-overview-page.html 87 @@ -6924,6 +6932,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Od samego początku @@ -6982,7 +6998,7 @@ to use our referral link and get a Ghostfolio Premium membership for one year - to use our referral link and get a Ghostfolio Premium membership for one year + aby skorzystać z naszego linku polecającego i otrzymać roczną subskrypcję Ghostfolio Premium apps/client/src/app/pages/pricing/pricing-page.html 340 @@ -6990,7 +7006,7 @@ can be self-hosted - może być hostowany samodzielnie + może być hostowana samodzielnie apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 178 @@ -7014,7 +7030,7 @@ can be used anonymously - może być używany anonimowo + może być używana anonimowo apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 217 @@ -7026,7 +7042,7 @@ cannot be used anonymously - nie może być używany anonimowo + nie może być używana anonimowo apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 224 @@ -7363,7 +7379,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7376,7 +7392,7 @@ Check the system status at - Check the system status at + Sprawdź status systemu n apps/client/src/app/pages/about/overview/about-overview-page.html 57 @@ -7403,7 +7419,7 @@ Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,12 +7659,12 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 244 + 240 Find account, holding or page... - Find account, holding or page... + Znajdź konto, pozycję lub stronę... libs/ui/src/lib/assistant/assistant.component.ts 115 @@ -7788,7 +7804,7 @@ ktoś apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Konto użytkownika demonstracyjnego zostało zsynchronizowane. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -7906,7 +7922,7 @@ The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) + Opłaty przekraczają ${thresholdMax}% twojej całkowitej wartości inwestycji (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 154 @@ -7914,7 +7930,7 @@ The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) + Opłaty nie przekraczają ${thresholdMax}% twojej całkowitej wartości inwestycji (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 158 @@ -8072,10 +8088,10 @@ Current month - Current month + Bieżący miesiąc apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Czy na pewno chcesz wygenerować nowy token bezpieczeństwa? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Akcje apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Kryptowaluty apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 @@ -8365,7 +8381,7 @@ Emergency Fund - Emergency Fund + Fundusz Awaryjny apps/client/src/app/pages/i18n/i18n-page.html 144 @@ -8397,7 +8413,7 @@ Your buying power is below ${thresholdMin} ${baseCurrency} - Your buying power is below ${thresholdMin} ${baseCurrency} + Twoja siła nabywcza jest niższa niż ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 73 @@ -8405,7 +8421,7 @@ Your buying power is 0 ${baseCurrency} - Your buying power is 0 ${baseCurrency} + Twoja siła nabywcza to 0 ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 77 @@ -8429,7 +8445,7 @@ No results found... - No results found... + Nie znaleziono wyników... libs/ui/src/lib/assistant/assistant.html 51 @@ -8445,7 +8461,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% - The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% + Udział rynków rozwiniętych w Twojej obecnej inwestycji (${developedMarketsValueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 112 @@ -8453,7 +8469,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% - The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% + Udział rynków rozwiniętych w Twojej obecnej inwestycji (${developedMarketsValueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 117 @@ -8461,7 +8477,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynków rozwiniętych w Twojej obecnej inwestycji (${developedMarketsValueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 122 @@ -8477,7 +8493,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% - The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% + Udział rynków wschodzących w obecnej inwestycji (${emergingMarketsValueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 130 @@ -8485,7 +8501,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% - The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% + Udział rynków wschodzących w obecnej inwestycji (${emergingMarketsValueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 135 @@ -8493,7 +8509,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynków wschodzących w obecnej inwestycji (${emergingMarketsValueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 140 @@ -8501,7 +8517,7 @@ No accounts have been set up - No accounts have been set up + Nie utworzono żadnych kont apps/client/src/app/pages/i18n/i18n-page.html 21 @@ -8509,7 +8525,7 @@ Your net worth is managed by 0 accounts - Your net worth is managed by 0 accounts + Twój majątek jest zarządzany przez 0 kont apps/client/src/app/pages/i18n/i18n-page.html 33 @@ -8517,7 +8533,7 @@ Asia-Pacific - Asia-Pacific + Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html 165 @@ -8525,7 +8541,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + Udział rynku Azji i Pacyfiku w Twojej obecnej inwestycji (${valueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 167 @@ -8533,7 +8549,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + Udział rynku Azji i Pacyfiku w Twojej obecnej inwestycji (${valueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 171 @@ -8541,7 +8557,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynku Azji i Pacyfiku w Twojej obecnej inwestycji (${valueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 175 @@ -8549,7 +8565,7 @@ Emerging Markets - Emerging Markets + Rynki wschodzące apps/client/src/app/pages/i18n/i18n-page.html 180 @@ -8557,7 +8573,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + Udział rynków wschodzących w Twojej obecnej inwestycji (${valueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 183 @@ -8565,7 +8581,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + Udział rynków wschodzących w Twojej obecnej inwestycji (${valueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 187 @@ -8573,7 +8589,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynków wschodzących w Twojej obecnej inwestycji (${valueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 191 @@ -8589,7 +8605,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + Udział rynku europejskiego w obecnej inwestycji (${valueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 197 @@ -8597,7 +8613,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + Udział rynku europejskiego w obecnej inwestycji (${valueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 201 @@ -8605,7 +8621,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynku europejskiego w obecnej inwestycji (${valueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 205 @@ -8621,7 +8637,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + Udział rynku japońskiego w obecnej inwestycj (${valueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 211 @@ -8629,7 +8645,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + Udział rynku japońskiego w obecnej inwestycj (${valueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 215 @@ -8637,7 +8653,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynku japońskiego w obecnej inwestycj (${valueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 219 @@ -8645,7 +8661,7 @@ North America - North America + Północna Ameryka apps/client/src/app/pages/i18n/i18n-page.html 223 @@ -8653,7 +8669,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% + Udział rynku Ameryki Północnej w obecnej inwestycji (${valueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 225 @@ -8661,7 +8677,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% + Udział rynku Ameryki Północnej w obecnej inwestycji (${valueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 229 @@ -8669,7 +8685,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział rynku Ameryki Północnej w obecnej inwestycji (${valueRatio}%) mieści się w zakresie ${thresholdMin}% i ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 233 @@ -8677,7 +8693,7 @@ Find Ghostfolio on GitHub - Find Ghostfolio on GitHub + Znajdź Ghostfolio na GitHub apps/client/src/app/pages/about/overview/about-overview-page.html 99 @@ -8689,7 +8705,7 @@ Join the Ghostfolio Slack community - Join the Ghostfolio Slack community + Dołącz do społeczności Ghostfolio na Slacku apps/client/src/app/pages/about/overview/about-overview-page.html 109 @@ -8697,7 +8713,7 @@ Follow Ghostfolio on X (formerly Twitter) - Follow Ghostfolio on X (formerly Twitter) + Śledź Ghostfolio na X (poprzednio Twitter) apps/client/src/app/pages/about/overview/about-overview-page.html 118 @@ -8705,7 +8721,7 @@ Send an e-mail - Send an e-mail + Wyślij e-mail apps/client/src/app/pages/about/overview/about-overview-page.html 89 @@ -8717,7 +8733,7 @@ Registration Date - Registration Date + Data rejestracji apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 45 @@ -8725,7 +8741,7 @@ Follow Ghostfolio on LinkedIn - Follow Ghostfolio on LinkedIn + Śledź Ghostfolio na LinkedIn apps/client/src/app/pages/about/overview/about-overview-page.html 147 @@ -8733,7 +8749,7 @@ Ghostfolio is an independent & bootstrapped business - Ghostfolio is an independent & bootstrapped business + Ghostfolio to niezależna & samofinansująca się firma apps/client/src/app/pages/about/overview/about-overview-page.html 157 @@ -8741,7 +8757,7 @@ Support Ghostfolio - Support Ghostfolio + Wesprzyj Ghostfolio apps/client/src/app/pages/about/overview/about-overview-page.html 166 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 72c1e6a3e..3531f84d7 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -42,7 +42,7 @@ Tipo apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -362,7 +362,7 @@ Fonte de dados apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -386,7 +386,7 @@ Tentativas apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -394,7 +394,7 @@ Criado apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -402,7 +402,7 @@ Terminado apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -410,7 +410,7 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -430,7 +430,7 @@ Eliminar Tarefas apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -450,7 +450,7 @@ Histórico de Dados de Mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -462,7 +462,7 @@ Visualizar dados apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -470,7 +470,7 @@ Ver Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -478,7 +478,7 @@ Apagar Tarefa apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -530,7 +530,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -606,7 +606,7 @@ Deseja realmente eliminar este cupão? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -614,7 +614,7 @@ Deseja realmente limpar a cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -622,7 +622,7 @@ Por favor, defina a sua mensagem do sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -714,7 +714,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -846,7 +846,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -866,15 +866,15 @@ Oops! Token de Segurança Incorreto. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -882,7 +882,7 @@ Gerir Atividades apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -890,11 +890,11 @@ Medo apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -906,11 +906,11 @@ Ganância apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -942,7 +942,7 @@ Depósito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -1262,7 +1262,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1310,7 +1310,7 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1322,7 +1322,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1334,7 +1334,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -1354,7 +1354,7 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -1382,7 +1382,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -1394,7 +1394,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -1410,7 +1410,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -1470,7 +1470,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1514,7 +1514,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 - 282 + 279 @@ -1718,7 +1718,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1936,6 +1936,10 @@ Overview Visão geral + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2046,7 +2050,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2078,7 +2082,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2158,7 +2162,7 @@ A importar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -2166,7 +2170,7 @@ A importação foi concluída apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -2362,7 +2366,7 @@ Mensalmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -2584,6 +2588,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Resources @@ -2758,7 +2766,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -2770,7 +2778,7 @@ Poupanças libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -2850,7 +2858,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -2858,7 +2866,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2874,7 +2882,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -3086,11 +3094,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3134,7 +3142,7 @@ Dados de Mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3158,7 +3166,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3210,7 +3218,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3278,7 +3286,7 @@ Anualmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -3286,7 +3294,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3354,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -3850,7 +3858,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -3894,7 +3902,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -4490,7 +4498,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -4498,7 +4506,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -4678,7 +4686,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4734,7 +4742,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -5484,7 +5492,7 @@ Você realmente deseja excluir esta tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5584,7 +5592,7 @@ Perfil de ativos apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -5716,7 +5724,7 @@ Você realmente deseja excluir esta mensagem do sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5872,11 +5880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5896,7 +5904,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5944,7 +5952,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5964,7 +5972,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6012,7 +6020,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6032,7 +6040,7 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6125,7 +6133,7 @@ Ativo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6133,7 +6141,7 @@ Fechado apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6165,7 +6173,7 @@ Executar trabalho apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6173,7 +6181,7 @@ Prioridade apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6229,7 +6237,7 @@ Você realmente deseja encerrar sua conta Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6285,7 +6293,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 - 336 + 333 @@ -6301,7 +6309,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6857,7 +6865,7 @@ Visão geral do portfólio apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6924,6 +6932,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Desde o início @@ -7363,7 +7379,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7403,7 +7419,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,7 +7659,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 - 244 + 240 @@ -7788,7 +7804,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Criptomoedas apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 7f51580d7..e4547a2de 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -223,7 +223,7 @@ Tip apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -543,7 +543,7 @@ Veri Kaynağı apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -567,7 +567,7 @@ Deneme apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -575,7 +575,7 @@ Oluşturuldu apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -583,7 +583,7 @@ Tamamlandı apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -591,7 +591,7 @@ Durum apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -611,7 +611,7 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -631,7 +631,7 @@ Tarihsel Piyasa Verisi apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -643,7 +643,7 @@ Veri Gör apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -651,7 +651,7 @@ Hata İzini Görüntüle apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -659,7 +659,7 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -711,7 +711,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -723,7 +723,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -731,7 +731,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -739,7 +739,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -959,7 +959,7 @@ Bu kuponu gerçekten silmek istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -967,7 +967,7 @@ Önbelleği temizlemeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -975,7 +975,7 @@ Lütfen sistem mesajınızı belirleyin: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1135,7 +1135,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -1167,7 +1167,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1191,7 +1191,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1347,7 +1347,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1367,15 +1367,15 @@ Hay Allah! Güvenlik anahtarı yanlış. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1383,7 +1383,7 @@ İşlemleri Yönet apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1391,11 +1391,11 @@ Korku apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1407,11 +1407,11 @@ Açgözlülük apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1515,7 +1515,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -1795,7 +1795,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1983,7 +1983,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1995,7 +1995,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -2007,7 +2007,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2027,7 +2027,7 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2055,7 +2055,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2067,7 +2067,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2083,7 +2083,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2211,7 +2211,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2275,7 +2275,7 @@ Piyasa Verileri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -2309,6 +2309,10 @@ Overview Özet + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3099,7 +3103,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -3147,7 +3151,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3251,7 +3255,7 @@ Temettüleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3267,7 +3271,7 @@ Veri içe aktarılıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -3275,7 +3279,7 @@ İçe aktarma tamamlandı apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -3291,7 +3295,7 @@ Veri doğrulanıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3599,7 +3603,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3619,7 +3623,7 @@ Para Yatırma libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -3627,7 +3631,7 @@ Aylık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -3635,7 +3639,7 @@ Yıllık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4009,6 +4013,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Personal Finance Tools @@ -4348,7 +4356,7 @@ Otomatik apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4392,7 +4400,7 @@ Bu giriş yöntemini kaldırmayı gerçekten istiyor musunuz? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -4756,7 +4764,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -4768,7 +4776,7 @@ Tasarruflar libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -5000,7 +5008,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -5016,7 +5024,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -5048,7 +5056,7 @@ Sembol apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5064,7 +5072,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -5352,11 +5360,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5484,7 +5492,7 @@ Bu etiketi silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -5584,7 +5592,7 @@ Varlık Profili apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -5716,7 +5724,7 @@ Bu sistem mesajını silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -5872,11 +5880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5896,7 +5904,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5944,7 +5952,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5964,7 +5972,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6012,7 +6020,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6032,7 +6040,7 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6125,7 +6133,7 @@ Aktif apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6133,7 +6141,7 @@ Kapalı apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6165,7 +6173,7 @@ İşlemi Yürüt apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6173,7 +6181,7 @@ Öncelik apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6229,7 +6237,7 @@ Ghostfolio hesabınızı kapatmak istediğinize emin misiniz? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6285,7 +6293,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 - 336 + 333 @@ -6301,7 +6309,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6857,7 +6865,7 @@ Portföy Anlık Görüntüsü apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6924,6 +6932,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning Başlangıçtan beri @@ -7363,7 +7379,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7403,7 +7419,7 @@ Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,7 +7659,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 - 244 + 240 @@ -7788,7 +7804,7 @@ birisi apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Demo kullanıcı hesabı senkronize edildi. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 54bf5a08b..12b5c2bc3 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -38,7 +38,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -675,7 +675,7 @@ Тип apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -695,7 +695,7 @@ Профіль активу apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -703,7 +703,7 @@ Історичні ринкові дані apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -715,7 +715,7 @@ Знімок портфеля apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -723,7 +723,7 @@ Джерело даних apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -747,7 +747,7 @@ Пріоритет apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -755,7 +755,7 @@ Спроби apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -763,7 +763,7 @@ Створено apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -771,7 +771,7 @@ Завершено apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -779,7 +779,7 @@ Статус apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -799,7 +799,7 @@ Видалити завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -807,7 +807,7 @@ Переглянути дані apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -815,7 +815,7 @@ Переглянути трасування apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -823,7 +823,7 @@ Виконати завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -831,7 +831,7 @@ Видалити завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -839,7 +839,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -847,7 +847,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -859,7 +859,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -867,7 +867,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -875,7 +875,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -1227,7 +1227,7 @@ Ви дійсно хочете видалити цей купон? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -1235,7 +1235,7 @@ Ви дійсно хочете видалити це системне повідомлення? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -1243,7 +1243,7 @@ Ви дійсно хочете очистити кеш? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -1251,7 +1251,7 @@ Будь ласка, встановіть ваше системне повідомлення: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1379,7 +1379,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -1411,7 +1411,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1595,7 +1595,7 @@ Ви дійсно хочете видалити цей тег? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -1619,7 +1619,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1803,15 +1803,15 @@ Упс! Неправильний Секретний Токен. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1915,7 +1915,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1923,7 +1923,7 @@ Активний apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -1931,7 +1931,7 @@ Закритий apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -1955,7 +1955,7 @@ Керування діяльністю apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1963,11 +1963,11 @@ Страх apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1979,11 +1979,11 @@ Жадібність apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -2087,7 +2087,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -2571,7 +2571,7 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -2583,7 +2583,7 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -2595,7 +2595,7 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2615,7 +2615,7 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2687,7 +2687,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -2735,7 +2735,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2835,7 +2835,7 @@ Автоматичний apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2847,7 +2847,7 @@ Ви дійсно хочете закрити ваш обліковий запис Ghostfolio? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -2855,7 +2855,7 @@ Ви дійсно хочете вилучити цей спосіб входу? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -2871,7 +2871,7 @@ Упс! Виникла помилка під час налаштування біометричної автентифікації. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -3063,7 +3063,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -3083,7 +3083,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -3219,7 +3219,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3323,7 +3323,7 @@ Ринкові дані apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -3357,6 +3357,10 @@ Overview Огляд + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -4252,7 +4256,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -4308,7 +4312,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4448,7 +4452,7 @@ Імпорт дивідендів apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4464,7 +4468,7 @@ Імпортуються дані... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -4472,7 +4476,7 @@ Імпорт завершено apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -4488,7 +4492,7 @@ Перевірка даних... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -4820,7 +4824,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -4840,11 +4844,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4864,7 +4868,7 @@ Щомісячно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -4872,7 +4876,7 @@ Щорічно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4880,7 +4884,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5247,6 +5251,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning З початку @@ -5314,6 +5326,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Glossary @@ -6171,7 +6187,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -6191,7 +6207,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -6211,7 +6227,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6231,7 +6247,7 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6383,7 +6399,7 @@ Депозит libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -6399,7 +6415,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -6411,7 +6427,7 @@ Заощадження libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -6763,7 +6779,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -6787,7 +6803,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -6819,7 +6835,7 @@ Символ apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -6835,7 +6851,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -7371,11 +7387,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7411,7 +7427,7 @@ Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7419,7 +7435,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7427,7 +7443,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7467,7 +7483,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7475,7 +7491,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7483,7 +7499,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7503,7 +7519,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7515,7 +7531,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7523,11 +7539,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7631,11 +7647,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7643,7 +7659,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 - 244 + 240 @@ -7788,7 +7804,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7820,7 +7836,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7861,7 +7877,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8075,7 +8091,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8244,7 +8260,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8268,7 +8284,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8280,7 +8296,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8300,7 +8316,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 7db54e0c4..fa9e6b874 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -235,7 +235,7 @@ Type apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -559,14 +559,14 @@ Asset Profile apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 Historical Market Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -577,7 +577,7 @@ Data Source apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -600,28 +600,28 @@ Attempts apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 Created apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 Finished apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -639,28 +639,28 @@ Delete Jobs apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 View Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 View Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 Delete Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -708,7 +708,7 @@ Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -719,14 +719,14 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -740,7 +740,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -999,28 +999,28 @@ Do you really want to delete this coupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 Do you really want to delete this system message? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 Do you really want to flush the cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 Please set your system message: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1155,7 +1155,7 @@ Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -1183,7 +1183,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1226,7 +1226,7 @@ Do you really want to delete this tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -1247,7 +1247,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1389,7 +1389,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1408,33 +1408,33 @@ Oops! Incorrect Security Token. apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 Manage Activities apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 Fear apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1445,11 +1445,11 @@ Greed apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1541,7 +1541,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -1797,7 +1797,7 @@ Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -1972,7 +1972,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -1983,7 +1983,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -1994,7 +1994,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2012,7 +2012,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2105,7 +2105,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2116,7 +2116,7 @@ Do you really want to remove this sign in method? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -2280,7 +2280,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2291,7 +2291,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2306,7 +2306,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2425,7 +2425,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2512,7 +2512,7 @@ Market Data apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -2543,6 +2543,10 @@ Overview + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3323,7 +3327,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -3375,7 +3379,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3491,7 +3495,7 @@ Import Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3506,14 +3510,14 @@ Importing data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 Import has been completed apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -3527,7 +3531,7 @@ Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -3797,7 +3801,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -3815,21 +3819,21 @@ Deposit libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 Monthly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 Yearly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4147,6 +4151,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Personal Finance Tools @@ -4680,7 +4688,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -4691,7 +4699,7 @@ Savings libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -4904,7 +4912,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -4918,7 +4926,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -4939,7 +4947,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -4955,7 +4963,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -5259,11 +5267,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5366,7 +5374,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5388,11 +5396,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5445,7 +5453,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -5456,7 +5464,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -5492,7 +5500,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5511,7 +5519,7 @@ years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -5595,14 +5603,14 @@ Closed apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 Active apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -5630,7 +5638,7 @@ Execute Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -5644,7 +5652,7 @@ Priority apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -5693,7 +5701,7 @@ Do you really want to close your Ghostfolio account? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -5735,7 +5743,7 @@ Oops! There was an error setting up biometric authentication. apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -5770,7 +5778,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6268,7 +6276,7 @@ Portfolio Snapshot apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6320,6 +6328,13 @@ 42 + + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + offers a free plan @@ -6724,7 +6739,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -6745,7 +6760,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -6780,14 +6795,14 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -6801,21 +6816,21 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -6833,7 +6848,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -6844,7 +6859,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -6852,11 +6867,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -6947,7 +6962,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 - 244 + 240 @@ -6961,11 +6976,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7065,7 +7080,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7094,7 +7109,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7138,7 +7153,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -7322,7 +7337,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -7485,14 +7500,14 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -7503,7 +7518,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -7521,7 +7536,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index be465e9df..78c9b717d 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -252,7 +252,7 @@ 类型 apps/client/src/app/components/admin-jobs/admin-jobs.html - 48 + 57 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -592,7 +592,7 @@ 资产概况 apps/client/src/app/components/admin-jobs/admin-jobs.html - 52 + 61 @@ -600,7 +600,7 @@ 历史市场数据 apps/client/src/app/components/admin-jobs/admin-jobs.html - 54 + 63 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -612,7 +612,7 @@ 数据源 apps/client/src/app/components/admin-jobs/admin-jobs.html - 82 + 91 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -636,7 +636,7 @@ 尝试次数 apps/client/src/app/components/admin-jobs/admin-jobs.html - 120 + 129 @@ -644,7 +644,7 @@ 创建 apps/client/src/app/components/admin-jobs/admin-jobs.html - 134 + 143 @@ -652,7 +652,7 @@ 完成 apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 152 @@ -660,7 +660,7 @@ 状态 apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 161 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -680,7 +680,7 @@ 删除任务 apps/client/src/app/components/admin-jobs/admin-jobs.html - 193 + 202 @@ -688,7 +688,7 @@ 查看数据 apps/client/src/app/components/admin-jobs/admin-jobs.html - 208 + 217 @@ -696,7 +696,7 @@ 查看堆栈跟踪 apps/client/src/app/components/admin-jobs/admin-jobs.html - 216 + 225 @@ -704,7 +704,7 @@ 删除任务 apps/client/src/app/components/admin-jobs/admin-jobs.html - 224 + 233 @@ -756,7 +756,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 131 + 130 apps/client/src/app/pages/public/public-page.html @@ -768,7 +768,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 136 + 135 @@ -776,7 +776,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 141 + 140 @@ -792,7 +792,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 390 + 383 @@ -1052,7 +1052,7 @@ 您确实要删除此优惠券吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 193 + 196 @@ -1060,7 +1060,7 @@ 您真的要删除这条系统消息吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 206 + 209 @@ -1068,7 +1068,7 @@ 您真的要刷新缓存吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 230 + 233 @@ -1076,7 +1076,7 @@ 请设置您的系统消息: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 250 + 253 @@ -1228,7 +1228,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 112 + 111 @@ -1260,7 +1260,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 @@ -1308,7 +1308,7 @@ 您真的要删除此标签吗? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 109 + 108 @@ -1332,7 +1332,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 218 + 215 @@ -1488,7 +1488,7 @@ apps/client/src/app/components/header/header.component.ts - 297 + 298 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1508,15 +1508,15 @@ 哎呀!安全令牌不正确。 apps/client/src/app/components/header/header.component.ts - 312 + 313 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 154 + 152 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 193 + 191 @@ -1524,7 +1524,7 @@ 管理活动 apps/client/src/app/components/home-holdings/home-holdings.html - 65 + 64 @@ -1532,11 +1532,11 @@ 恐惧 apps/client/src/app/components/home-market/home-market.component.ts - 42 + 41 apps/client/src/app/components/markets/markets.component.ts - 47 + 46 libs/ui/src/lib/i18n.ts @@ -1548,11 +1548,11 @@ 贪婪 apps/client/src/app/components/home-market/home-market.component.ts - 43 + 42 apps/client/src/app/components/markets/markets.component.ts - 48 + 47 libs/ui/src/lib/i18n.ts @@ -1656,7 +1656,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 @@ -1936,7 +1936,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 456 @@ -2124,7 +2124,7 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 204 + 205 libs/ui/src/lib/assistant/assistant.component.ts @@ -2136,7 +2136,7 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 libs/ui/src/lib/assistant/assistant.component.ts @@ -2148,7 +2148,7 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -2168,7 +2168,7 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 216 + 217 libs/ui/src/lib/assistant/assistant.component.ts @@ -2272,7 +2272,7 @@ 自动 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 70 + 69 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2284,7 +2284,7 @@ 您确实要删除此登录方法吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 282 + 279 @@ -2468,7 +2468,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 195 + 194 @@ -2480,7 +2480,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 192 @@ -2496,7 +2496,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 196 + 195 @@ -2624,7 +2624,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 375 + 381 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2720,7 +2720,7 @@ 市场数据 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 397 + 403 libs/common/src/lib/routes/routes.ts @@ -2754,6 +2754,10 @@ Overview 概述 + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 7 + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3608,7 +3612,7 @@ 作业 ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 34 + 43 @@ -3664,7 +3668,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 348 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3792,7 +3796,7 @@ 导入股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 137 + 136 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3808,7 +3812,7 @@ 正在导入数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 175 + 174 @@ -3816,7 +3820,7 @@ 导入已完成 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 185 + 184 @@ -3832,7 +3836,7 @@ 验证数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 299 + 293 @@ -4132,7 +4136,7 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 76 + 75 libs/ui/src/lib/i18n.ts @@ -4152,7 +4156,7 @@ 存款 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 390 + 404 @@ -4160,7 +4164,7 @@ 每月 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 90 @@ -4168,7 +4172,7 @@ 每年 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 92 + 91 @@ -4522,6 +4526,10 @@ apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 88 + + libs/ui/src/lib/value/value.component.html + 18 + Personal Finance Tools @@ -5113,7 +5121,7 @@ libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 400 + 414 libs/ui/src/lib/i18n.ts @@ -5125,7 +5133,7 @@ 储蓄 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 410 + 424 @@ -5357,7 +5365,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 451 @@ -5373,7 +5381,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 146 + 145 @@ -5397,7 +5405,7 @@ 代码 apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 77 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5413,7 +5421,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 315 + 318 libs/ui/src/lib/i18n.ts @@ -5753,11 +5761,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 453 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 467 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5873,7 +5881,7 @@ 关闭持仓 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 447 @@ -5897,11 +5905,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 81 + 80 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 97 + 96 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5961,7 +5969,7 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 libs/ui/src/lib/assistant/assistant.component.ts @@ -5973,7 +5981,7 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 196 + 197 libs/ui/src/lib/assistant/assistant.component.ts @@ -6013,7 +6021,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 208 + 209 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6033,7 +6041,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 212 + 213 libs/ui/src/lib/assistant/assistant.component.ts @@ -6126,7 +6134,7 @@ 已关闭 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 65 + 64 @@ -6134,7 +6142,7 @@ 活跃 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 64 + 63 @@ -6166,7 +6174,7 @@ 执行作业 apps/client/src/app/components/admin-jobs/admin-jobs.html - 220 + 229 @@ -6174,7 +6182,7 @@ 优先级 apps/client/src/app/components/admin-jobs/admin-jobs.html - 96 + 105 @@ -6230,7 +6238,7 @@ 您确定要关闭您的 Ghostfolio 账户吗? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 208 + 205 @@ -6286,7 +6294,7 @@ 哎呀!设置生物识别认证时发生错误。 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 336 + 333 @@ -6302,7 +6310,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 126 + 125 @@ -6858,7 +6866,7 @@ 投资组合快照 apps/client/src/app/components/admin-jobs/admin-jobs.html - 56 + 65 @@ -6925,6 +6933,14 @@ 42 + + has been copied to the clipboard + has been copied to the clipboard + + libs/ui/src/lib/value/value.component.ts + 180 + + From the beginning 从头开始 @@ -7364,7 +7380,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 260 + 257 @@ -7404,7 +7420,7 @@ AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 201 + 199 @@ -7420,7 +7436,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7428,7 +7444,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7468,7 +7484,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 230 + 231 @@ -7476,7 +7492,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 234 + 235 @@ -7484,7 +7500,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 202 + 200 @@ -7504,7 +7520,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 @@ -7516,7 +7532,7 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 55 + 54 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -7524,11 +7540,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 375 + 377 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 388 + 390 @@ -7632,11 +7648,11 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 239 + 235 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 170 + 167 @@ -7644,7 +7660,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 244 + 240 @@ -7789,7 +7805,7 @@ 某人 apps/client/src/app/pages/public/public-page.component.ts - 59 + 61 @@ -7821,7 +7837,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 144 + 139 @@ -7862,7 +7878,7 @@ 演示用户账户已同步。 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 274 + 277 @@ -8076,7 +8092,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 200 + 201 @@ -8245,7 +8261,7 @@ 您真的想要生成一个新的安全令牌吗? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 175 + 172 @@ -8269,7 +8285,7 @@ 股票 apps/client/src/app/components/markets/markets.component.ts - 52 + 51 apps/client/src/app/pages/features/features-page.html @@ -8281,7 +8297,7 @@ 加密货币 apps/client/src/app/components/markets/markets.component.ts - 53 + 52 apps/client/src/app/pages/features/features-page.html @@ -8301,7 +8317,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 471 diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 142d2ea53..f5a4e9c80 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -546,6 +546,10 @@ ngx-skeleton-loader { padding: 9px 24px !important; } +.no-height { + height: unset !important; +} + .no-min-width { min-width: unset !important; } diff --git a/libs/common/src/lib/calculation-helper.ts b/libs/common/src/lib/calculation-helper.ts index 76b38f9b2..2097fa52a 100644 --- a/libs/common/src/lib/calculation-helper.ts +++ b/libs/common/src/lib/calculation-helper.ts @@ -36,14 +36,16 @@ export function getAnnualizedPerformancePercent({ return new Big(0); } -export function getIntervalFromDateRange( - aDateRange: DateRange, - portfolioStart = new Date(0) -) { - let endDate = endOfDay(new Date()); - let startDate = portfolioStart; +export function getIntervalFromDateRange(params: { + dateRange: DateRange; + endDate?: Date; + startDate?: Date; +}) { + const { dateRange } = params; + let endDate = params.endDate ?? endOfDay(new Date()); + let startDate = params.startDate ?? new Date(0); - switch (aDateRange) { + switch (dateRange) { case '1d': startDate = max([startDate, subDays(resetHours(new Date()), 1)]); break; @@ -75,8 +77,8 @@ export function getIntervalFromDateRange( break; default: // '2024', '2023', '2022', etc. - endDate = endOfYear(new Date(aDateRange)); - startDate = max([startDate, new Date(aDateRange)]); + endDate = endOfYear(new Date(dateRange)); + startDate = max([startDate, new Date(dateRange)]); } return { endDate, startDate }; diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts index a70e61bac..f9cb19562 100644 --- a/libs/common/src/lib/permissions.ts +++ b/libs/common/src/lib/permissions.ts @@ -195,7 +195,7 @@ export function hasReadRestrictedAccessPermission({ return false; } - const access = user.accessesGet?.find(({ id }) => { + const access = user?.accessesGet?.find(({ id }) => { return id === impersonationId; }); 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 3e5e3b2e9..1b7b99fa2 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 @@ -25,6 +25,7 @@ import { MatInputModule } from '@angular/material/input'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; +import { isNil } from 'lodash'; import { HistoricalMarketDataEditorDialogParams } from './interfaces/interfaces'; @@ -90,7 +91,9 @@ export class GfHistoricalMarketDataEditorDialogComponent implements OnInit { } public onUpdate() { - if (this.marketPrice() === undefined) { + const marketPrice = this.marketPrice(); + + if (isNil(marketPrice)) { return; } @@ -100,8 +103,8 @@ export class GfHistoricalMarketDataEditorDialogComponent implements OnInit { marketData: { marketData: [ { - date: this.data.dateString, - marketPrice: this.marketPrice() + marketPrice, + date: this.data.dateString } ] }, diff --git a/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts b/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts index 8691dc998..9ca91d111 100644 --- a/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts +++ b/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts @@ -24,5 +24,5 @@ export class GfNoTransactionsInfoComponent { @HostBinding('class.has-border') @Input() hasBorder = true; public routerLinkPortfolioActivities = - internalRoutes.portfolio.subRoutes.activities.routerLink; + internalRoutes.portfolio.subRoutes?.activities.routerLink; } diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts index dec2a4dd5..094001c2f 100644 --- a/libs/ui/src/lib/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -22,7 +22,6 @@ import { } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; -import { DataService } from '@ghostfolio/ui/services'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable, inject } from '@angular/core'; @@ -31,6 +30,8 @@ import { DataSource, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; import { isNumber } from 'lodash'; +import { DataService } from './data.service'; + @Injectable({ providedIn: 'root' }) diff --git a/libs/ui/src/lib/shared/abstract-mat-form-field.ts b/libs/ui/src/lib/shared/abstract-mat-form-field.ts index 628f0a659..0d547af4e 100644 --- a/libs/ui/src/lib/shared/abstract-mat-form-field.ts +++ b/libs/ui/src/lib/shared/abstract-mat-form-field.ts @@ -37,7 +37,7 @@ export abstract class AbstractMatFormField private static nextId = 0; protected constructor( - protected _elementRef: ElementRef, + protected _elementRef: ElementRef, protected _focusMonitor: FocusMonitor, public readonly ngControl: NgControl ) { @@ -137,7 +137,7 @@ export abstract class AbstractMatFormField public ngDoCheck() { if (this.ngControl) { - this.errorState = this.ngControl.invalid && this.ngControl.touched; + this.errorState = !!(this.ngControl.invalid && this.ngControl.touched); this.stateChanges.next(); } } diff --git a/libs/ui/src/lib/top-holdings/top-holdings.component.html b/libs/ui/src/lib/top-holdings/top-holdings.component.html index 7a2a84126..6ff4ecf5b 100644 --- a/libs/ui/src/lib/top-holdings/top-holdings.component.html +++ b/libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -16,7 +16,7 @@ Name -
{{ element?.name | titlecase }}
+
{{ prettifyAssetName(element?.name) }}
diff --git a/libs/ui/src/lib/top-holdings/top-holdings.component.ts b/libs/ui/src/lib/top-holdings/top-holdings.component.ts index 75a96fc5c..7c9ae033f 100644 --- a/libs/ui/src/lib/top-holdings/top-holdings.component.ts +++ b/libs/ui/src/lib/top-holdings/top-holdings.component.ts @@ -20,15 +20,14 @@ import { EventEmitter, Input, OnChanges, - OnDestroy, Output, ViewChild } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; +import { capitalize } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; -import { Subject } from 'rxjs'; import { GfValueComponent } from '../value/value.component'; @@ -58,7 +57,7 @@ import { GfValueComponent } from '../value/value.component'; styleUrls: ['./top-holdings.component.scss'], templateUrl: './top-holdings.component.html' }) -export class GfTopHoldingsComponent implements OnChanges, OnDestroy { +export class GfTopHoldingsComponent implements OnChanges { @Input() baseCurrency: string; @Input() locale = getLocale(); @Input() pageSize = Number.MAX_SAFE_INTEGER; @@ -76,8 +75,6 @@ export class GfTopHoldingsComponent implements OnChanges, OnDestroy { ]; public isLoading = true; - private unsubscribeSubject = new Subject(); - public ngOnChanges() { this.isLoading = true; @@ -101,8 +98,23 @@ export class GfTopHoldingsComponent implements OnChanges, OnDestroy { }); } - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); + public prettifyAssetName(name: string) { + if (!name) { + return ''; + } + + return name + .split(' ') + .filter((token) => { + return !token.startsWith('(') && !token.endsWith(')'); + }) + .map((token) => { + if (token.length <= 2) { + return token.toUpperCase(); + } + + return capitalize(token); + }) + .join(' '); } } diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index a80876f6a..7069cabb0 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -162,7 +162,9 @@ export class GfTreemapChartComponent private initialize() { this.isLoading = true; - const { endDate, startDate } = getIntervalFromDateRange(this.dateRange); + const { endDate, startDate } = getIntervalFromDateRange({ + dateRange: this.dateRange + }); const netPerformancePercentsWithCurrencyEffect = this.holdings.map( ({ dateOfFirstActivity, netPerformancePercentWithCurrencyEffect }) => { diff --git a/libs/ui/src/lib/value/value.component.html b/libs/ui/src/lib/value/value.component.html index 14080c16d..c4d6532a7 100644 --- a/libs/ui/src/lib/value/value.component.html +++ b/libs/ui/src/lib/value/value.component.html @@ -4,7 +4,26 @@
}
- + + + + + + @if (enableCopyToClipboardButton) { + + } + + @if (value || value === 0 || value === null) {
} + @if (!hasLabel) { + + }
} @@ -88,6 +110,9 @@ @if (size === 'large') {
+ @if (hasLabel) { + + } @if (subLabel) { {{ subLabel }} } @@ -95,6 +120,9 @@ } @else { + @if (hasLabel) { + + } }
diff --git a/libs/ui/src/lib/value/value.component.stories.ts b/libs/ui/src/lib/value/value.component.stories.ts index eeebe9399..214331efc 100644 --- a/libs/ui/src/lib/value/value.component.stories.ts +++ b/libs/ui/src/lib/value/value.component.stories.ts @@ -1,3 +1,4 @@ +import '@angular/localize/init'; import { moduleMetadata } from '@storybook/angular'; import type { Meta, StoryObj } from '@storybook/angular'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @@ -17,6 +18,9 @@ export default { control: 'select', options: ['desktop', 'mobile'] }, + enableCopyToClipboardButton: { + control: 'boolean' + }, size: { control: 'select', options: ['small', 'medium', 'large'] @@ -58,7 +62,7 @@ export const Label: Story = { }, render: (args) => ({ props: args, - template: `Label` + template: `Label` }) }; diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts index 795e16491..9c3330466 100644 --- a/libs/ui/src/lib/value/value.component.ts +++ b/libs/ui/src/lib/value/value.component.ts @@ -1,30 +1,41 @@ import { getLocale } from '@ghostfolio/common/helper'; +import { Clipboard } from '@angular/cdk/clipboard'; import { CommonModule } from '@angular/common'; import { - CUSTOM_ELEMENTS_SCHEMA, + AfterViewInit, ChangeDetectionStrategy, + ChangeDetectorRef, Component, + computed, + CUSTOM_ELEMENTS_SCHEMA, + ElementRef, + input, Input, OnChanges, - computed, - input + ViewChild } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { IonIcon } from '@ionic/angular/standalone'; +import { addIcons } from 'ionicons'; +import { copyOutline } from 'ionicons/icons'; import { isNumber } from 'lodash'; +import ms from 'ms'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, IonIcon, NgxSkeletonLoaderModule], + imports: [CommonModule, IonIcon, MatButtonModule, NgxSkeletonLoaderModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-value', styleUrls: ['./value.component.scss'], templateUrl: './value.component.html' }) -export class GfValueComponent implements OnChanges { +export class GfValueComponent implements AfterViewInit, OnChanges { @Input() colorizeSign = false; @Input() deviceType: string; + @Input() enableCopyToClipboardButton = false; @Input() icon = ''; @Input() isAbsolute = false; @Input() isCurrency = false; @@ -37,12 +48,26 @@ export class GfValueComponent implements OnChanges { @Input() unit = ''; @Input() value: number | string = ''; + @ViewChild('labelContent', { static: false }) + labelContent!: ElementRef; + public absoluteValue = 0; public formattedValue = ''; + public hasLabel = false; public isNumber = false; public isString = false; public useAbsoluteValue = false; + public constructor( + private changeDetectorRef: ChangeDetectorRef, + private clipboard: Clipboard, + private snackBar: MatSnackBar + ) { + addIcons({ + copyOutline + }); + } + public readonly precision = input(); private readonly formatOptions = computed(() => { @@ -59,6 +84,17 @@ export class GfValueComponent implements OnChanges { return precision !== undefined && precision >= 0; } + public ngAfterViewInit() { + if (this.labelContent) { + const element = this.labelContent.nativeElement; + + this.hasLabel = + element.children.length > 0 || element.textContent.trim().length > 0; + + this.changeDetectorRef.markForCheck(); + } + } + public ngOnChanges() { this.initializeVariables(); @@ -137,6 +173,18 @@ export class GfValueComponent implements OnChanges { } } + public onCopyValueToClipboard() { + this.clipboard.copy(String(this.value)); + + this.snackBar.open( + '✅ ' + $localize`${this.value} has been copied to the clipboard`, + undefined, + { + duration: ms('3 seconds') + } + ); + } + private initializeVariables() { this.absoluteValue = 0; this.formattedValue = ''; diff --git a/libs/ui/tsconfig.json b/libs/ui/tsconfig.json index 04f4630bc..51348a52a 100644 --- a/libs/ui/tsconfig.json +++ b/libs/ui/tsconfig.json @@ -19,6 +19,7 @@ "target": "es2020", // TODO: Remove once solved in tsconfig.base.json "strict": false, + "strictNullChecks": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, diff --git a/package-lock.json b/package-lock.json index e77522a6f..1f4295a6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.249.0", + "version": "2.251.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.249.0", + "version": "2.251.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -60,7 +60,7 @@ "color": "5.0.3", "cookie-parser": "1.4.7", "countries-and-timezones": "3.8.0", - "countries-list": "3.2.2", + "countries-list": "3.3.0", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", @@ -76,7 +76,7 @@ "lodash": "4.17.23", "marked": "17.0.2", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "3.2.1", + "ng-extract-i18n-merge": "3.3.0", "ngx-device-detector": "11.0.0", "ngx-markdown": "21.1.0", "ngx-skeleton-loader": "12.0.0", @@ -89,7 +89,7 @@ "passport-openidconnect": "0.1.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", - "stripe": "20.3.0", + "stripe": "20.4.1", "svgmap": "2.19.2", "tablemark": "4.1.0", "twitter-api-v2": "1.29.0", @@ -125,7 +125,7 @@ "@schematics/angular": "21.1.1", "@storybook/addon-docs": "10.1.10", "@storybook/angular": "10.1.10", - "@trivago/prettier-plugin-sort-imports": "5.2.2", + "@trivago/prettier-plugin-sort-imports": "6.0.2", "@types/big.js": "6.2.2", "@types/cookie-parser": "1.4.10", "@types/fast-redact": "3.0.4", @@ -153,7 +153,7 @@ "prisma": "6.19.0", "react": "18.2.0", "react-dom": "18.2.0", - "replace-in-file": "8.3.0", + "replace-in-file": "8.4.0", "shx": "0.4.0", "storybook": "10.1.10", "ts-jest": "29.4.0", @@ -12509,25 +12509,28 @@ "license": "MIT" }, "node_modules/@trivago/prettier-plugin-sort-imports": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz", - "integrity": "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-6.0.2.tgz", + "integrity": "sha512-3DgfkukFyC/sE/VuYjaUUWoFfuVjPK55vOFDsxD56XXynFMCZDYFogH2l/hDfOsQAm1myoU/1xByJ3tWqtulXA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/traverse": "^7.26.7", - "@babel/types": "^7.26.7", + "@babel/generator": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "javascript-natural-sort": "^0.7.1", - "lodash": "^4.17.21" + "lodash-es": "^4.17.21", + "minimatch": "^9.0.0", + "parse-imports-exports": "^0.2.4" }, "engines": { - "node": ">18.12" + "node": ">= 20" }, "peerDependencies": { "@vue/compiler-sfc": "3.x", "prettier": "2.x - 3.x", + "prettier-plugin-ember-template-tag": ">= 2.0.0", "prettier-plugin-svelte": "3.x", "svelte": "4.x || 5.x" }, @@ -12535,6 +12538,9 @@ "@vue/compiler-sfc": { "optional": true }, + "prettier-plugin-ember-template-tag": { + "optional": true + }, "prettier-plugin-svelte": { "optional": true }, @@ -12543,6 +12549,32 @@ } } }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -17160,9 +17192,9 @@ } }, "node_modules/countries-list": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.2.tgz", - "integrity": "sha512-ABJ/RWQBrPWy+hRuZoW+0ooK8p65Eo3WmUZwHm6v4wmfSPznNAKzjy3+UUYrJK2v3182BVsgWxdB6ROidj39kw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.3.0.tgz", + "integrity": "sha512-XRUjS+dcZuNh/fg3+mka3bXgcg4TbQZ1gaK5IJqO6qulerBANl1bmrd20P2dgmPkBpP+5FnejiSF1gd7bgAg+g==", "license": "MIT" }, "node_modules/countup.js": { @@ -25294,8 +25326,8 @@ "version": "4.17.22", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/lodash.clonedeepwith": { "version": "4.5.0", @@ -26007,11 +26039,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -26384,9 +26416,9 @@ "license": "MIT" }, "node_modules/ng-extract-i18n-merge": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.2.1.tgz", - "integrity": "sha512-Yq8uEBa32/Imlo+vnyY6rk+h0VOjWQT8r4Vgiw/YlnK0AzIXFxr6H/Ji3gTJKVsuRY6Tt1swBgmnkAUeDmklRw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.3.0.tgz", + "integrity": "sha512-9VCi2gMSjvlz5+bvJ9wTzHEeEiVCM0lb/uvGx2K3FavG4p0HKhg0Y9Tjr/Hr23DSHAQQXS0gssIvznWW3DHIXQ==", "license": "MIT", "dependencies": { "@angular-devkit/architect": ">=0.2000.0 <0.2200.0", @@ -27766,6 +27798,16 @@ "node": ">=6" } }, + "node_modules/parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-statements": "1.0.11" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -27819,6 +27861,13 @@ "node": ">=0.10.0" } }, + "node_modules/parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", + "dev": true, + "license": "MIT" + }, "node_modules/parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", @@ -29871,15 +29920,15 @@ } }, "node_modules/replace-in-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.3.0.tgz", - "integrity": "sha512-4VhddQiMCPIuypiwHDTM+XHjZoVu9h7ngBbSCnwGRcwdHwxltjt/m//Ep3GDwqaOx1fDSrKFQ+n7uo4uVcEz9Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.4.0.tgz", + "integrity": "sha512-D28k8jy2LtUGbCzCnR3znajaTWIjJ/Uee3UdodzcHRxE7zn6NmYW/dcSqyivnsYU3W+MxdX6SbF28NvJ0GRoLA==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "glob": "^10.4.2", - "yargs": "^17.7.2" + "chalk": "^5.6.2", + "glob": "^13.0.0", + "yargs": "^18.0.0" }, "bin": { "replace-in-file": "bin/cli.js" @@ -29888,10 +29937,33 @@ "node": ">=18" } }, + "node_modules/replace-in-file/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/replace-in-file/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/replace-in-file/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -29901,23 +29973,65 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/replace-in-file/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/replace-in-file/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": ">=12" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/replace-in-file/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/replace-in-file/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/replace-in-file/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/require-directory": { @@ -32237,9 +32351,9 @@ } }, "node_modules/stripe": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.3.0.tgz", - "integrity": "sha512-DYzcmV1MfYhycr1GwjCjeQVYk9Gu8dpxyTlu7qeDCsuguug7oUTxPsUQuZeSf/OPzK7pofqobvOKVqAwlpgf/Q==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.4.1.tgz", + "integrity": "sha512-axCguHItc8Sxt0HC6aSkdVRPffjYPV7EQqZRb2GkIa8FzWDycE7nHJM19C6xAIynH1Qp1/BHiopSi96jGBxT0w==", "license": "MIT", "engines": { "node": ">=16" diff --git a/package.json b/package.json index e8b38049b..b7f9bc2e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.249.0", + "version": "2.251.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -105,7 +105,7 @@ "color": "5.0.3", "cookie-parser": "1.4.7", "countries-and-timezones": "3.8.0", - "countries-list": "3.2.2", + "countries-list": "3.3.0", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", @@ -121,7 +121,7 @@ "lodash": "4.17.23", "marked": "17.0.2", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "3.2.1", + "ng-extract-i18n-merge": "3.3.0", "ngx-device-detector": "11.0.0", "ngx-markdown": "21.1.0", "ngx-skeleton-loader": "12.0.0", @@ -134,7 +134,7 @@ "passport-openidconnect": "0.1.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", - "stripe": "20.3.0", + "stripe": "20.4.1", "svgmap": "2.19.2", "tablemark": "4.1.0", "twitter-api-v2": "1.29.0", @@ -170,7 +170,7 @@ "@schematics/angular": "21.1.1", "@storybook/addon-docs": "10.1.10", "@storybook/angular": "10.1.10", - "@trivago/prettier-plugin-sort-imports": "5.2.2", + "@trivago/prettier-plugin-sort-imports": "6.0.2", "@types/big.js": "6.2.2", "@types/cookie-parser": "1.4.10", "@types/fast-redact": "3.0.4", @@ -198,7 +198,7 @@ "prisma": "6.19.0", "react": "18.2.0", "react-dom": "18.2.0", - "replace-in-file": "8.3.0", + "replace-in-file": "8.4.0", "shx": "0.4.0", "storybook": "10.1.10", "ts-jest": "29.4.0",