Browse Source

Merge branch 'main' into feature/fee_in_base_currency

pull/4645/head
Thomas Kaul 4 months ago
committed by GitHub
parent
commit
b611754f70
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 13
      CHANGELOG.md
  2. 8
      apps/api/src/app/import/import.service.ts
  3. 4
      apps/api/src/app/platform/platform.service.ts
  4. 74
      apps/api/src/app/portfolio/portfolio.controller.ts
  5. 60
      apps/api/src/app/portfolio/portfolio.service.ts
  6. 12
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  7. 12
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
  8. 3
      apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
  9. 24
      apps/client/src/app/pages/faq/overview/faq-overview-page.html
  10. 9
      apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts
  11. 4
      apps/client/src/app/pages/faq/saas/saas-page.component.ts
  12. 59
      apps/client/src/app/pages/faq/saas/saas-page.html
  13. 9
      apps/client/src/app/pages/faq/saas/saas-page.module.ts
  14. 4
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
  15. 19
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html
  16. 9
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts
  17. 45
      apps/client/src/app/pages/features/features-page.html
  18. 12
      apps/client/src/app/pages/home/home-page.component.ts
  19. 12
      apps/client/src/app/services/data.service.ts
  20. 40
      apps/client/src/locales/messages.ca.xlf
  21. 40
      apps/client/src/locales/messages.de.xlf
  22. 40
      apps/client/src/locales/messages.es.xlf
  23. 40
      apps/client/src/locales/messages.fr.xlf
  24. 40
      apps/client/src/locales/messages.it.xlf
  25. 40
      apps/client/src/locales/messages.nl.xlf
  26. 40
      apps/client/src/locales/messages.pl.xlf
  27. 40
      apps/client/src/locales/messages.pt.xlf
  28. 40
      apps/client/src/locales/messages.tr.xlf
  29. 40
      apps/client/src/locales/messages.uk.xlf
  30. 40
      apps/client/src/locales/messages.xlf
  31. 40
      apps/client/src/locales/messages.zh.xlf
  32. 2
      libs/common/src/lib/interfaces/index.ts
  33. 8
      libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
  34. 72
      package-lock.json
  35. 4
      package.json
  36. 8
      prisma/schema.prisma

13
CHANGELOG.md

@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased ## Unreleased
### Added
- Added the watchlist to the features page
- Extended the content of the Frequently Asked Questions (FAQ) pages
### Changed
- Moved the watchlist from experimental to general availability
- Deprecated the endpoint to get a portfolio position in favor of get a holding
- Deprecated the endpoint to update portfolio position tags in favor of update holding tags
- Renamed `Account` to `accounts` in the `Platform` database schema
- Upgraded `prisma` from version `6.6.0` to `6.7.0`
### Fixed ### Fixed
- Fixed an issue with the fee calculations related to activities in a custom currency - Fixed an issue with the fee calculations related to activities in a custom currency

8
apps/api/src/app/import/import.service.ts

@ -49,8 +49,8 @@ export class ImportService {
symbol symbol
}: AssetProfileIdentifier): Promise<Activity[]> { }: AssetProfileIdentifier): Promise<Activity[]> {
try { try {
const { firstBuyDate, historicalData, orders } = const { activities, firstBuyDate, historicalData } =
await this.portfolioService.getPosition(dataSource, undefined, symbol); await this.portfolioService.getHolding(dataSource, undefined, symbol);
const [[assetProfile], dividends] = await Promise.all([ const [[assetProfile], dividends] = await Promise.all([
this.symbolProfileService.getSymbolProfiles([ this.symbolProfileService.getSymbolProfiles([
@ -68,7 +68,7 @@ export class ImportService {
}) })
]); ]);
const accounts = orders const accounts = activities
.filter(({ Account }) => { .filter(({ Account }) => {
return !!Account; return !!Account;
}) })
@ -88,7 +88,7 @@ export class ImportService {
const value = new Big(quantity).mul(marketPrice).toNumber(); const value = new Big(quantity).mul(marketPrice).toNumber();
const date = parseDate(dateString); const date = parseDate(dateString);
const isDuplicate = orders.some((activity) => { const isDuplicate = activities.some((activity) => {
return ( return (
activity.accountId === Account?.id && activity.accountId === Account?.id &&
activity.SymbolProfile.currency === assetProfile.currency && activity.SymbolProfile.currency === assetProfile.currency &&

4
apps/api/src/app/platform/platform.service.ts

@ -54,7 +54,7 @@ export class PlatformService {
await this.prismaService.platform.findMany({ await this.prismaService.platform.findMany({
include: { include: {
_count: { _count: {
select: { Account: true } select: { accounts: true }
} }
} }
}); });
@ -64,7 +64,7 @@ export class PlatformService {
id, id,
name, name,
url, url,
accountCount: _count.Account accountCount: _count.accounts
}; };
}); });
} }

74
apps/api/src/app/portfolio/portfolio.controller.ts

@ -20,6 +20,7 @@ import {
import { import {
PortfolioDetails, PortfolioDetails,
PortfolioDividends, PortfolioDividends,
PortfolioHoldingResponse,
PortfolioHoldingsResponse, PortfolioHoldingsResponse,
PortfolioInvestments, PortfolioInvestments,
PortfolioPerformanceResponse, PortfolioPerformanceResponse,
@ -56,7 +57,6 @@ import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
import { Big } from 'big.js'; import { Big } from 'big.js';
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { PortfolioHoldingDetail } from './interfaces/portfolio-holding-detail.interface';
import { PortfolioService } from './portfolio.service'; import { PortfolioService } from './portfolio.service';
import { UpdateHoldingTagsDto } from './update-holding-tags.dto'; import { UpdateHoldingTagsDto } from './update-holding-tags.dto';
@ -365,6 +365,32 @@ export class PortfolioController {
return { dividends }; return { dividends };
} }
@Get('holding/:dataSource/:symbol')
@UseInterceptors(RedactValuesInResponseInterceptor)
@UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getHolding(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
): Promise<PortfolioHoldingResponse> {
const holding = await this.portfolioService.getHolding(
dataSource,
impersonationId,
symbol
);
if (!holding) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
return holding;
}
@Get('holdings') @Get('holdings')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@UseInterceptors(RedactValuesInResponseInterceptor) @UseInterceptors(RedactValuesInResponseInterceptor)
@ -583,6 +609,9 @@ export class PortfolioController {
return performanceInformation; return performanceInformation;
} }
/**
* @deprecated
*/
@Get('position/:dataSource/:symbol') @Get('position/:dataSource/:symbol')
@UseInterceptors(RedactValuesInResponseInterceptor) @UseInterceptors(RedactValuesInResponseInterceptor)
@UseInterceptors(TransformDataSourceInRequestInterceptor) @UseInterceptors(TransformDataSourceInRequestInterceptor)
@ -592,8 +621,8 @@ export class PortfolioController {
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Param('dataSource') dataSource: DataSource, @Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string @Param('symbol') symbol: string
): Promise<PortfolioHoldingDetail> { ): Promise<PortfolioHoldingResponse> {
const holding = await this.portfolioService.getPosition( const holding = await this.portfolioService.getHolding(
dataSource, dataSource,
impersonationId, impersonationId,
symbol symbol
@ -634,7 +663,7 @@ export class PortfolioController {
} }
@HasPermission(permissions.updateOrder) @HasPermission(permissions.updateOrder)
@Put('position/:dataSource/:symbol/tags') @Put('holding/:dataSource/:symbol/tags')
@UseInterceptors(TransformDataSourceInRequestInterceptor) @UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async updateHoldingTags( public async updateHoldingTags(
@ -643,7 +672,42 @@ export class PortfolioController {
@Param('dataSource') dataSource: DataSource, @Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string @Param('symbol') symbol: string
): Promise<void> { ): Promise<void> {
const holding = await this.portfolioService.getPosition( const holding = await this.portfolioService.getHolding(
dataSource,
impersonationId,
symbol
);
if (!holding) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
await this.portfolioService.updateTags({
dataSource,
impersonationId,
symbol,
tags: data.tags,
userId: this.request.user.id
});
}
/**
* @deprecated
*/
@HasPermission(permissions.updateOrder)
@Put('position/:dataSource/:symbol/tags')
@UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async updatePositionTags(
@Body() data: UpdateHoldingTagsDto,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
): Promise<void> {
const holding = await this.portfolioService.getHolding(
dataSource, dataSource,
impersonationId, impersonationId,
symbol symbol

60
apps/api/src/app/portfolio/portfolio.service.ts

@ -41,6 +41,7 @@ import {
HistoricalDataItem, HistoricalDataItem,
InvestmentItem, InvestmentItem,
PortfolioDetails, PortfolioDetails,
PortfolioHoldingResponse,
PortfolioInvestments, PortfolioInvestments,
PortfolioPerformanceResponse, PortfolioPerformanceResponse,
PortfolioPosition, PortfolioPosition,
@ -87,7 +88,6 @@ import { isEmpty } from 'lodash';
import { PortfolioCalculator } from './calculator/portfolio-calculator'; import { PortfolioCalculator } from './calculator/portfolio-calculator';
import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory'; import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory';
import { PortfolioHoldingDetail } from './interfaces/portfolio-holding-detail.interface';
import { RulesService } from './rules.service'; import { RulesService } from './rules.service';
const asiaPacificMarkets = require('../../assets/countries/asia-pacific-markets.json'); const asiaPacificMarkets = require('../../assets/countries/asia-pacific-markets.json');
@ -631,11 +631,11 @@ export class PortfolioService {
}; };
} }
public async getPosition( public async getHolding(
aDataSource: DataSource, aDataSource: DataSource,
aImpersonationId: string, aImpersonationId: string,
aSymbol: string aSymbol: string
): Promise<PortfolioHoldingDetail> { ): Promise<PortfolioHoldingResponse> {
const userId = await this.getUserId(aImpersonationId, this.request.user.id); const userId = await this.getUserId(aImpersonationId, this.request.user.id);
const user = await this.userService.user({ id: userId }); const user = await this.userService.user({ id: userId });
const userCurrency = this.getUserCurrency(user); const userCurrency = this.getUserCurrency(user);
@ -648,6 +648,7 @@ export class PortfolioService {
if (activities.length === 0) { if (activities.length === 0) {
return { return {
activities: [],
averagePrice: undefined, averagePrice: undefined,
dataProviderInfo: undefined, dataProviderInfo: undefined,
dividendInBaseCurrency: undefined, dividendInBaseCurrency: undefined,
@ -662,13 +663,12 @@ export class PortfolioService {
historicalData: [], historicalData: [],
investment: undefined, investment: undefined,
marketPrice: undefined, marketPrice: undefined,
maxPrice: undefined, marketPriceMax: undefined,
minPrice: undefined, marketPriceMin: undefined,
netPerformance: undefined, netPerformance: undefined,
netPerformancePercent: undefined, netPerformancePercent: undefined,
netPerformancePercentWithCurrencyEffect: undefined, netPerformancePercentWithCurrencyEffect: undefined,
netPerformanceWithCurrencyEffect: undefined, netPerformanceWithCurrencyEffect: undefined,
orders: [],
quantity: undefined, quantity: undefined,
SymbolProfile: undefined, SymbolProfile: undefined,
tags: [], tags: [],
@ -714,7 +714,7 @@ export class PortfolioService {
transactionCount transactionCount
} = position; } = position;
const activitiesOfPosition = activities.filter(({ SymbolProfile }) => { const activitiesOfHolding = activities.filter(({ SymbolProfile }) => {
return ( return (
SymbolProfile.dataSource === dataSource && SymbolProfile.dataSource === dataSource &&
SymbolProfile.symbol === symbol SymbolProfile.symbol === symbol
@ -748,12 +748,12 @@ export class PortfolioService {
); );
const historicalDataArray: HistoricalDataItem[] = []; const historicalDataArray: HistoricalDataItem[] = [];
let maxPrice = Math.max( let marketPriceMax = Math.max(
activitiesOfPosition[0].unitPriceInAssetProfileCurrency, activitiesOfHolding[0].unitPriceInAssetProfileCurrency,
marketPrice marketPrice
); );
let minPrice = Math.min( let marketPriceMin = Math.min(
activitiesOfPosition[0].unitPriceInAssetProfileCurrency, activitiesOfHolding[0].unitPriceInAssetProfileCurrency,
marketPrice marketPrice
); );
@ -793,27 +793,31 @@ export class PortfolioService {
quantity: currentQuantity quantity: currentQuantity
}); });
maxPrice = Math.max(marketPrice ?? 0, maxPrice); marketPriceMax = Math.max(marketPrice ?? 0, marketPriceMax);
minPrice = Math.min(marketPrice ?? Number.MAX_SAFE_INTEGER, minPrice); marketPriceMin = Math.min(
marketPrice ?? Number.MAX_SAFE_INTEGER,
marketPriceMin
);
} }
} else { } else {
// Add historical entry for buy date, if no historical data available // Add historical entry for buy date, if no historical data available
historicalDataArray.push({ historicalDataArray.push({
averagePrice: activitiesOfPosition[0].unitPriceInAssetProfileCurrency, averagePrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency,
date: firstBuyDate, date: firstBuyDate,
marketPrice: activitiesOfPosition[0].unitPriceInAssetProfileCurrency, marketPrice: activitiesOfHolding[0].unitPriceInAssetProfileCurrency,
quantity: activitiesOfPosition[0].quantity quantity: activitiesOfHolding[0].quantity
}); });
} }
return { return {
firstBuyDate, firstBuyDate,
marketPrice, marketPrice,
maxPrice, marketPriceMax,
minPrice, marketPriceMin,
SymbolProfile, SymbolProfile,
tags, tags,
transactionCount, transactionCount,
activities: activitiesOfHolding,
averagePrice: averagePrice.toNumber(), averagePrice: averagePrice.toNumber(),
dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0],
dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), dividendInBaseCurrency: dividendInBaseCurrency.toNumber(),
@ -842,7 +846,6 @@ export class PortfolioService {
]?.toNumber(), ]?.toNumber(),
netPerformanceWithCurrencyEffect: netPerformanceWithCurrencyEffect:
position.netPerformanceWithCurrencyEffectMap?.['max']?.toNumber(), position.netPerformanceWithCurrencyEffectMap?.['max']?.toNumber(),
orders: activitiesOfPosition,
quantity: quantity.toNumber(), quantity: quantity.toNumber(),
value: this.exchangeRateDataService.toCurrency( value: this.exchangeRateDataService.toCurrency(
quantity.mul(marketPrice ?? 0).toNumber(), quantity.mul(marketPrice ?? 0).toNumber(),
@ -881,8 +884,8 @@ export class PortfolioService {
} }
const historicalDataArray: HistoricalDataItem[] = []; const historicalDataArray: HistoricalDataItem[] = [];
let maxPrice = marketPrice; let marketPriceMax = marketPrice;
let minPrice = marketPrice; let marketPriceMin = marketPrice;
for (const [date, { marketPrice }] of Object.entries( for (const [date, { marketPrice }] of Object.entries(
historicalData[aSymbol] historicalData[aSymbol]
@ -892,15 +895,19 @@ export class PortfolioService {
value: marketPrice value: marketPrice
}); });
maxPrice = Math.max(marketPrice ?? 0, maxPrice); marketPriceMax = Math.max(marketPrice ?? 0, marketPriceMax);
minPrice = Math.min(marketPrice ?? Number.MAX_SAFE_INTEGER, minPrice); marketPriceMin = Math.min(
marketPrice ?? Number.MAX_SAFE_INTEGER,
marketPriceMin
);
} }
return { return {
marketPrice, marketPrice,
maxPrice, marketPriceMax,
minPrice, marketPriceMin,
SymbolProfile, SymbolProfile,
activities: [],
averagePrice: 0, averagePrice: 0,
dataProviderInfo: undefined, dataProviderInfo: undefined,
dividendInBaseCurrency: 0, dividendInBaseCurrency: 0,
@ -918,7 +925,6 @@ export class PortfolioService {
netPerformancePercent: undefined, netPerformancePercent: undefined,
netPerformancePercentWithCurrencyEffect: undefined, netPerformancePercentWithCurrencyEffect: undefined,
netPerformanceWithCurrencyEffect: undefined, netPerformanceWithCurrencyEffect: undefined,
orders: [],
quantity: 0, quantity: 0,
tags: [], tags: [],
transactionCount: undefined, transactionCount: undefined,
@ -927,7 +933,7 @@ export class PortfolioService {
} }
} }
public async getPositions({ public async getHoldings({
dateRange = 'max', dateRange = 'max',
filters, filters,
impersonationId impersonationId

12
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts

@ -105,8 +105,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public investmentPrecision = 2; public investmentPrecision = 2;
public marketDataItems: MarketData[] = []; public marketDataItems: MarketData[] = [];
public marketPrice: number; public marketPrice: number;
public maxPrice: number; public marketPriceMax: number;
public minPrice: number; public marketPriceMin: number;
public netPerformance: number; public netPerformance: number;
public netPerformancePrecision = 2; public netPerformancePrecision = 2;
public netPerformancePercent: number; public netPerformancePercent: number;
@ -234,8 +234,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
historicalData, historicalData,
investment, investment,
marketPrice, marketPrice,
maxPrice, marketPriceMax,
minPrice, marketPriceMin,
netPerformance, netPerformance,
netPerformancePercent, netPerformancePercent,
netPerformancePercentWithCurrencyEffect, netPerformancePercentWithCurrencyEffect,
@ -297,8 +297,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
} }
this.marketPrice = marketPrice; this.marketPrice = marketPrice;
this.maxPrice = maxPrice; this.marketPriceMax = marketPriceMax;
this.minPrice = minPrice; this.marketPriceMin = marketPriceMin;
this.netPerformance = netPerformance; this.netPerformance = netPerformance;
if ( if (

12
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html

@ -106,11 +106,11 @@
[locale]="data.locale" [locale]="data.locale"
[ngClass]="{ [ngClass]="{
'text-danger': 'text-danger':
minPrice?.toFixed(2) === marketPrice?.toFixed(2) && marketPriceMin?.toFixed(2) === marketPrice?.toFixed(2) &&
maxPrice?.toFixed(2) !== minPrice?.toFixed(2) marketPriceMax?.toFixed(2) !== marketPriceMin?.toFixed(2)
}" }"
[unit]="SymbolProfile?.currency" [unit]="SymbolProfile?.currency"
[value]="minPrice" [value]="marketPriceMin"
>Minimum Price</gf-value >Minimum Price</gf-value
> >
</div> </div>
@ -122,11 +122,11 @@
[locale]="data.locale" [locale]="data.locale"
[ngClass]="{ [ngClass]="{
'text-success': 'text-success':
maxPrice?.toFixed(2) === marketPrice?.toFixed(2) && marketPriceMax?.toFixed(2) === marketPrice?.toFixed(2) &&
maxPrice?.toFixed(2) !== minPrice?.toFixed(2) marketPriceMax?.toFixed(2) !== marketPriceMin?.toFixed(2)
}" }"
[unit]="SymbolProfile?.currency" [unit]="SymbolProfile?.currency"
[value]="maxPrice" [value]="marketPriceMax"
>Maximum Price</gf-value >Maximum Price</gf-value
> >
</div> </div>

3
apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts

@ -12,6 +12,9 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false standalone: false
}) })
export class FaqOverviewPageComponent implements OnDestroy { export class FaqOverviewPageComponent implements OnDestroy {
public pricingUrl =
`https://ghostfol.io/${document.documentElement.lang}/` +
$localize`:snake-case:pricing`;
public routerLinkFeatures = ['/' + $localize`:snake-case:features`]; public routerLinkFeatures = ['/' + $localize`:snake-case:features`];
public user: User; public user: User;

24
apps/client/src/app/pages/faq/overview/faq-overview-page.html

@ -59,9 +59,14 @@
world. The world. The
<a href="https://github.com/ghostfolio/ghostfolio">source code</a> is <a href="https://github.com/ghostfolio/ghostfolio">source code</a> is
fully available as open source software (OSS). Thanks to our generous fully available as open source software (OSS). Thanks to our generous
<a href="https://ghostfol.io/en/pricing">Ghostfolio Premium</a> users <a class="align-items-center d-inline-flex" [href]="pricingUrl"
and <a href="https://www.buymeacoffee.com/ghostfolio">sponsors</a> we >Ghostfolio Premium<gf-premium-indicator
have the ability to run a free, limited plan for novice class="d-inline-block ml-1"
[enableLink]="false"
/></a>
users and
<a href="https://www.buymeacoffee.com/ghostfolio">sponsors</a> we have
the ability to run a free, limited plan for novice
investors.</mat-card-content investors.</mat-card-content
> >
</mat-card> </mat-card>
@ -82,8 +87,11 @@
</mat-card-header> </mat-card-header>
<mat-card-content <mat-card-content
>By offering >By offering
<a href="https://ghostfol.io/en/pricing">Ghostfolio Premium</a>, a <a class="align-items-center d-inline-flex" [href]="pricingUrl"
subscription plan with a managed hosting service and enhanced >Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false" /></a
>, a subscription plan with a managed hosting service and enhanced
features, we fund our business while providing added value to our features, we fund our business while providing added value to our
users.</mat-card-content users.</mat-card-content
> >
@ -105,7 +113,11 @@
</mat-card-header> </mat-card-header>
<mat-card-content <mat-card-content
>Any support for Ghostfolio is welcome. Be it with a >Any support for Ghostfolio is welcome. Be it with a
<a href="https://ghostfol.io/en/pricing">Ghostfolio Premium</a> <a class="align-items-center d-inline-flex" [href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
subscription to finance the hosting infrastructure, a positive rating subscription to finance the hosting infrastructure, a positive rating
in the in the
<a <a

9
apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts

@ -1,3 +1,5 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -7,7 +9,12 @@ import { FaqOverviewPageComponent } from './faq-overview-page.component';
@NgModule({ @NgModule({
declarations: [FaqOverviewPageComponent], declarations: [FaqOverviewPageComponent],
imports: [CommonModule, FaqOverviewPageRoutingModule, MatCardModule], imports: [
CommonModule,
FaqOverviewPageRoutingModule,
GfPremiumIndicatorComponent,
MatCardModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })
export class FaqOverviewPageModule {} export class FaqOverviewPageModule {}

4
apps/client/src/app/pages/faq/saas/saas-page.component.ts

@ -12,8 +12,10 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false standalone: false
}) })
export class SaasPageComponent implements OnDestroy { export class SaasPageComponent implements OnDestroy {
public pricingUrl =
`https://ghostfol.io/${document.documentElement.lang}/` +
$localize`:snake-case:pricing`;
public routerLinkMarkets = ['/' + $localize`:snake-case:markets`]; public routerLinkMarkets = ['/' + $localize`:snake-case:markets`];
public routerLinkPricing = ['/' + $localize`:snake-case:pricing`];
public routerLinkRegister = ['/' + $localize`:snake-case:register`]; public routerLinkRegister = ['/' + $localize`:snake-case:register`];
public user: User; public user: User;

59
apps/client/src/app/pages/faq/saas/saas-page.html

@ -14,11 +14,11 @@
<mat-card-title>How do I start?</mat-card-title> <mat-card-title>How do I start?</mat-card-title>
</mat-card-header> </mat-card-header>
<mat-card-content> <mat-card-content>
You can sign up via the<a [routerLink]="routerLinkRegister" You can sign up via the
>Get Started</a <a [routerLink]="routerLinkRegister">Get Started</a> button at the top
>” button at the top of the page. You have multiple options to join of the page. You have multiple options to join Ghostfolio: Create an
Ghostfolio: Create an account with a security token or account with a security token or <i>Google Sign</i>. We will guide you
<i>Google Sign</i>. We will guide you to set up your portfolio. to set up your portfolio.
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
@ -38,8 +38,8 @@
> >
<mat-card-content <mat-card-content
>Yes, it is! Our >Yes, it is! Our
<a [routerLink]="routerLinkPricing">pricing page</a> details <a target="_blank" [href]="pricingUrl">pricing page</a>
everything you get for free.</mat-card-content details everything you get for free.</mat-card-content
> >
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
@ -49,12 +49,20 @@
></mat-card-header ></mat-card-header
> >
<mat-card-content <mat-card-content
><a [routerLink]="routerLinkPricing">Ghostfolio Premium</a> is a fully ><a
managed Ghostfolio cloud offering for ambitious investors. Revenue is class="align-items-center d-inline-flex"
used to cover the costs of the hosting infrastructure and to fund target="_blank"
ongoing development. It is the Open Source code base with some extras [href]="pricingUrl"
like the <a [routerLink]="routerLinkMarkets">markets overview</a> and >Ghostfolio Premium<gf-premium-indicator
a professional data provider.</mat-card-content class="d-inline-block ml-1"
[enableLink]="false"
/></a>
is a fully managed Ghostfolio cloud offering for ambitious investors.
Revenue is used to cover the costs of the hosting infrastructure and
to fund ongoing development. It is the Open Source code base with some
extras like the
<a [routerLink]="routerLinkMarkets">markets overview</a> and a
professional data provider.</mat-card-content
> >
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
@ -65,8 +73,15 @@
> >
<mat-card-content <mat-card-content
>Yes, you can try >Yes, you can try
<a [routerLink]="routerLinkPricing">Ghostfolio Premium</a> by signing <a
up for Ghostfolio and applying for a trial (see class="align-items-center d-inline-flex"
target="_blank"
[href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
by signing up for Ghostfolio and applying for a trial (see
<a [routerLink]="['/account', 'membership']">Membership</a>). It is <a [routerLink]="['/account', 'membership']">Membership</a>). It is
easy, free and there is no commitment. You can stop using it at any easy, free and there is no commitment. You can stop using it at any
time.</mat-card-content time.</mat-card-content
@ -93,9 +108,17 @@
> >
</mat-card-header> </mat-card-header>
<mat-card-content <mat-card-content
>No, <a [routerLink]="routerLinkPricing">Ghostfolio Premium</a> does >No,
not include auto-renewal. Upon expiration, you can choose whether to <a
start a new subscription.</mat-card-content class="align-items-center d-inline-flex"
target="_blank"
[href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
does not include auto-renewal. Upon expiration, you can choose whether
to start a new subscription.</mat-card-content
> >
</mat-card> </mat-card>
@if (user?.subscription?.type === 'Premium') { @if (user?.subscription?.type === 'Premium') {

9
apps/client/src/app/pages/faq/saas/saas-page.module.ts

@ -1,3 +1,5 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -7,7 +9,12 @@ import { SaasPageComponent } from './saas-page.component';
@NgModule({ @NgModule({
declarations: [SaasPageComponent], declarations: [SaasPageComponent],
imports: [CommonModule, MatCardModule, SaasPageRoutingModule], imports: [
CommonModule,
GfPremiumIndicatorComponent,
MatCardModule,
SaasPageRoutingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })
export class SaasPageModule {} export class SaasPageModule {}

4
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts

@ -9,6 +9,10 @@ import { Subject } from 'rxjs';
standalone: false standalone: false
}) })
export class SelfHostingPageComponent implements OnDestroy { export class SelfHostingPageComponent implements OnDestroy {
public pricingUrl =
`https://ghostfol.io/${document.documentElement.lang}/` +
$localize`:snake-case:pricing`;
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();
public ngOnDestroy() { public ngOnDestroy() {

19
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html

@ -140,6 +140,25 @@
providers are considered experimental.</mat-card-content providers are considered experimental.</mat-card-content
> >
</mat-card> </mat-card>
<mat-card appearance="outlined" class="mb-3">
<mat-card-header>
<mat-card-title
>Can I get access to a professional data provider?</mat-card-title
>
</mat-card-header>
<mat-card-content
>Yes, access to a professional data provider is included with a
<a
class="align-items-center d-inline-flex"
target="_blank"
[href]="pricingUrl"
>Ghostfolio Premium<gf-premium-indicator
class="d-inline-block ml-1"
[enableLink]="false"
/></a>
subscription via an API key.</mat-card-content
>
</mat-card>
<mat-card appearance="outlined" class="mb-3"> <mat-card appearance="outlined" class="mb-3">
<mat-card-header> <mat-card-header>
<mat-card-title>How do I set up a benchmark?</mat-card-title> <mat-card-title>How do I set up a benchmark?</mat-card-title>

9
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts

@ -1,3 +1,5 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -7,7 +9,12 @@ import { SelfHostingPageComponent } from './self-hosting-page.component';
@NgModule({ @NgModule({
declarations: [SelfHostingPageComponent], declarations: [SelfHostingPageComponent],
imports: [CommonModule, MatCardModule, SelfHostingPageRoutingModule], imports: [
CommonModule,
GfPremiumIndicatorComponent,
MatCardModule,
SelfHostingPageRoutingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA] schemas: [CUSTOM_ELEMENTS_SCHEMA]
}) })
export class SelfHostingPageModule {} export class SelfHostingPageModule {}

45
apps/client/src/app/pages/features/features-page.html

@ -175,10 +175,15 @@
<mat-card appearance="outlined" class="d-flex flex-column h-100"> <mat-card appearance="outlined" class="d-flex flex-column h-100">
<mat-card-content> <mat-card-content>
<div class="flex-grow-1"> <div class="flex-grow-1">
<h4 class="align-items-center d-flex" i18n>Dark Mode</h4> <h4 class="align-items-center d-flex">
<span i18n>Static Analysis</span>
@if (hasPermissionForSubscription) {
<gf-premium-indicator class="ml-1" />
}
</h4>
<p class="m-0"> <p class="m-0">
Ghostfolio automatically switches to a dark color theme based Identify potential risks in your portfolio with Ghostfolio
on your operating system's preferences. X-ray, the static portfolio analysis.
</p> </p>
</div> </div>
</mat-card-content> </mat-card-content>
@ -188,10 +193,14 @@
<mat-card appearance="outlined" class="d-flex flex-column h-100"> <mat-card appearance="outlined" class="d-flex flex-column h-100">
<mat-card-content> <mat-card-content>
<div class="flex-grow-1"> <div class="flex-grow-1">
<h4 class="align-items-center d-flex" i18n>Zen Mode</h4> <h4 class="align-items-center d-flex">
<span i18n>Watchlist</span>
@if (hasPermissionForSubscription) {
<gf-premium-indicator class="ml-1" />
}
</h4>
<p class="m-0"> <p class="m-0">
Keep calm and activate Zen Mode if the markets are going Follow assets you are interested in closely on your watchlist.
crazy.
</p> </p>
</div> </div>
</mat-card-content> </mat-card-content>
@ -221,15 +230,23 @@
<mat-card appearance="outlined" class="d-flex flex-column h-100"> <mat-card appearance="outlined" class="d-flex flex-column h-100">
<mat-card-content> <mat-card-content>
<div class="flex-grow-1"> <div class="flex-grow-1">
<h4 class="align-items-center d-flex"> <h4 class="align-items-center d-flex" i18n>Dark Mode</h4>
<span i18n>Static Analysis</span>
@if (hasPermissionForSubscription) {
<gf-premium-indicator class="ml-1" />
}
</h4>
<p class="m-0"> <p class="m-0">
Identify potential risks in your portfolio with Ghostfolio Ghostfolio automatically switches to a dark color theme based
X-ray, the static portfolio analysis. on your operating system's preferences.
</p>
</div>
</mat-card-content>
</mat-card>
</div>
<div class="col-xs-12 col-md-4 mb-3">
<mat-card appearance="outlined" class="d-flex flex-column h-100">
<mat-card-content>
<div class="flex-grow-1">
<h4 class="align-items-center d-flex" i18n>Zen Mode</h4>
<p class="m-0">
Keep calm and activate Zen Mode if the markets are going
crazy.
</p> </p>
</div> </div>
</mat-card-content> </mat-card-content>

12
apps/client/src/app/pages/home/home-page.component.ts

@ -48,18 +48,18 @@ export class HomePageComponent implements OnDestroy, OnInit {
label: $localize`Summary`, label: $localize`Summary`,
path: ['/home', 'summary'] path: ['/home', 'summary']
}, },
{
iconName: 'bookmark-outline',
label: $localize`Watchlist`,
path: ['/home', 'watchlist']
},
{ {
iconName: 'newspaper-outline', iconName: 'newspaper-outline',
label: $localize`Markets`, label: $localize`Markets`,
path: ['/home', 'market'] path: ['/home', 'market']
},
{
iconName: 'bookmark-outline',
label: $localize`Watchlist`,
path: ['/home', 'watchlist'],
showCondition: this.user?.settings?.isExperimentalFeatures
} }
]; ];
this.user = state.user; this.user = state.user;
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();

12
apps/client/src/app/services/data.service.ts

@ -13,7 +13,6 @@ import {
Activity Activity
} from '@ghostfolio/api/app/order/interfaces/activities.interface'; } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto'; import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
import { PortfolioHoldingDetail } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-holding-detail.interface';
import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface'; import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface';
import { DeleteOwnUserDto } from '@ghostfolio/api/app/user/delete-own-user.dto'; import { DeleteOwnUserDto } from '@ghostfolio/api/app/user/delete-own-user.dto';
import { UserItem } from '@ghostfolio/api/app/user/interfaces/user-item.interface'; import { UserItem } from '@ghostfolio/api/app/user/interfaces/user-item.interface';
@ -40,6 +39,7 @@ import {
OAuthResponse, OAuthResponse,
PortfolioDetails, PortfolioDetails,
PortfolioDividends, PortfolioDividends,
PortfolioHoldingResponse,
PortfolioHoldingsResponse, PortfolioHoldingsResponse,
PortfolioInvestments, PortfolioInvestments,
PortfolioPerformanceResponse, PortfolioPerformanceResponse,
@ -406,13 +406,13 @@ export class DataService {
symbol: string; symbol: string;
}) { }) {
return this.http return this.http
.get<PortfolioHoldingDetail>( .get<PortfolioHoldingResponse>(
`/api/v1/portfolio/position/${dataSource}/${symbol}` `/api/v1/portfolio/holding/${dataSource}/${symbol}`
) )
.pipe( .pipe(
map((data) => { map((data) => {
if (data.orders) { if (data.activities) {
for (const order of data.orders) { for (const order of data.activities) {
order.createdAt = parseISO(order.createdAt as unknown as string); order.createdAt = parseISO(order.createdAt as unknown as string);
order.date = parseISO(order.date as unknown as string); order.date = parseISO(order.date as unknown as string);
} }
@ -776,7 +776,7 @@ export class DataService {
tags tags
}: { tags: Tag[] } & AssetProfileIdentifier) { }: { tags: Tag[] } & AssetProfileIdentifier) {
return this.http.put<void>( return this.http.put<void>(
`/api/v1/portfolio/position/${dataSource}/${symbol}/tags`, `/api/v1/portfolio/holding/${dataSource}/${symbol}/tags`,
{ tags } { tags }
); );
} }

40
apps/client/src/locales/messages.ca.xlf

@ -354,7 +354,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html"> <trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
@ -591,7 +591,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -632,7 +632,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -711,9 +711,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -746,7 +754,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -3491,7 +3499,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html"> <trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html">
@ -4035,7 +4043,7 @@
<target state="new">Dark Mode</target> <target state="new">Dark Mode</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4043,7 +4051,7 @@
<target state="new">Market Mood</target> <target state="new">Market Mood</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4051,7 +4059,7 @@
<target state="new">Static Analysis</target> <target state="new">Static Analysis</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4059,7 +4067,7 @@
<target state="new">Multi-Language</target> <target state="new">Multi-Language</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4067,7 +4075,7 @@
<target state="new">Open Source Software</target> <target state="new">Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html"> <trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
@ -4075,7 +4083,7 @@
<target state="new">Get Started</target> <target state="new">Get Started</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -4123,7 +4131,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.de.xlf

@ -1002,7 +1002,7 @@
<target state="translated">Registrieren</target> <target state="translated">Registrieren</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -1766,7 +1766,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html"> <trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
@ -1994,7 +1994,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -3238,7 +3238,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html"> <trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
@ -4278,7 +4278,7 @@
<target state="translated">Dark Mode</target> <target state="translated">Dark Mode</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4286,7 +4286,7 @@
<target state="translated">Marktstimmung</target> <target state="translated">Marktstimmung</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4294,7 +4294,7 @@
<target state="translated">Statische Analyse</target> <target state="translated">Statische Analyse</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4302,7 +4302,7 @@
<target state="translated">Mehrsprachigkeit</target> <target state="translated">Mehrsprachigkeit</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4310,7 +4310,7 @@
<target state="translated">Open Source Software</target> <target state="translated">Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4230401090765872563" datatype="html"> <trans-unit id="4230401090765872563" datatype="html">
@ -5256,7 +5256,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -5432,7 +5432,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -5511,9 +5511,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -5546,7 +5554,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.es.xlf

@ -987,7 +987,7 @@
<target state="translated">Empezar</target> <target state="translated">Empezar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -1751,7 +1751,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html"> <trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
@ -1979,7 +1979,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -3223,7 +3223,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html"> <trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
@ -4255,7 +4255,7 @@
<target state="new">Dark Mode</target> <target state="new">Dark Mode</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4263,7 +4263,7 @@
<target state="new">Market Mood</target> <target state="new">Market Mood</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4271,7 +4271,7 @@
<target state="new">Static Analysis</target> <target state="new">Static Analysis</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4279,7 +4279,7 @@
<target state="new">Multi-Language</target> <target state="new">Multi-Language</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4287,7 +4287,7 @@
<target state="new">Open Source Software</target> <target state="new">Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4230401090765872563" datatype="html"> <trans-unit id="4230401090765872563" datatype="html">
@ -5233,7 +5233,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -5409,7 +5409,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -5488,9 +5488,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -5523,7 +5531,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -7945,6 +7953,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7955,7 +7967,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.fr.xlf

@ -2034,7 +2034,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6b939b00e8481ed8aa8a24d8add7a209d7116759" datatype="html"> <trans-unit id="6b939b00e8481ed8aa8a24d8add7a209d7116759" datatype="html">
@ -2098,7 +2098,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html"> <trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
@ -2398,7 +2398,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -2866,7 +2866,7 @@
<target state="translated">Démarrer</target> <target state="translated">Démarrer</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -4254,7 +4254,7 @@
<target state="translated">Mode Sombre</target> <target state="translated">Mode Sombre</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4262,7 +4262,7 @@
<target state="translated">Sentiment du Marché</target> <target state="translated">Sentiment du Marché</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4270,7 +4270,7 @@
<target state="translated">Analyse statique</target> <target state="translated">Analyse statique</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4278,7 +4278,7 @@
<target state="translated">Multi-Langue</target> <target state="translated">Multi-Langue</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4286,7 +4286,7 @@
<target state="translated">Logiciel Open Source</target> <target state="translated">Logiciel Open Source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4230401090765872563" datatype="html"> <trans-unit id="4230401090765872563" datatype="html">
@ -5232,7 +5232,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -5408,7 +5408,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -5487,9 +5487,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -5522,7 +5530,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.it.xlf

@ -987,7 +987,7 @@
<target state="translated">Inizia</target> <target state="translated">Inizia</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -1751,7 +1751,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html"> <trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
@ -1979,7 +1979,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -3223,7 +3223,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html"> <trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
@ -4255,7 +4255,7 @@
<target state="translated">Modalità scura</target> <target state="translated">Modalità scura</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4263,7 +4263,7 @@
<target state="translated">Umore del mercato</target> <target state="translated">Umore del mercato</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4271,7 +4271,7 @@
<target state="translated">Analisi statica</target> <target state="translated">Analisi statica</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4279,7 +4279,7 @@
<target state="translated">Multilingue</target> <target state="translated">Multilingue</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4287,7 +4287,7 @@
<target state="translated">Software open source</target> <target state="translated">Software open source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4230401090765872563" datatype="html"> <trans-unit id="4230401090765872563" datatype="html">
@ -5233,7 +5233,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -5409,7 +5409,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -5488,9 +5488,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -5523,7 +5531,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -7945,6 +7953,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7955,7 +7967,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.nl.xlf

@ -986,7 +986,7 @@
<target state="translated">Aan de slag</target> <target state="translated">Aan de slag</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -1750,7 +1750,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html"> <trans-unit id="9ae348ee3a7319c2fc4794fa8bc425999d355f8f" datatype="html">
@ -1978,7 +1978,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -3222,7 +3222,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html"> <trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">
@ -4254,7 +4254,7 @@
<target state="new">Dark Mode</target> <target state="new">Dark Mode</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4262,7 +4262,7 @@
<target state="translated">Marktsentiment</target> <target state="translated">Marktsentiment</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4270,7 +4270,7 @@
<target state="translated">Statische Analyse</target> <target state="translated">Statische Analyse</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4278,7 +4278,7 @@
<target state="translated">Meerdere talen</target> <target state="translated">Meerdere talen</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4286,7 +4286,7 @@
<target state="translated">Open Source Software</target> <target state="translated">Open Source Software</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4230401090765872563" datatype="html"> <trans-unit id="4230401090765872563" datatype="html">
@ -5232,7 +5232,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -5408,7 +5408,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -5487,9 +5487,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -5522,7 +5530,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.pl.xlf

@ -193,7 +193,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -251,7 +251,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -330,9 +330,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -382,7 +390,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -787,7 +795,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html"> <trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
@ -3195,7 +3203,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html"> <trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html">
@ -3663,7 +3671,7 @@
<target state="translated">Ciemny motyw</target> <target state="translated">Ciemny motyw</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -3671,7 +3679,7 @@
<target state="translated">Nastrój rynku</target> <target state="translated">Nastrój rynku</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -3679,7 +3687,7 @@
<target state="translated">Analiza statyczna</target> <target state="translated">Analiza statyczna</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -3687,7 +3695,7 @@
<target state="translated">Wielo-językowość</target> <target state="translated">Wielo-językowość</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -3695,7 +3703,7 @@
<target state="translated">Oprogramowanie Open Source</target> <target state="translated">Oprogramowanie Open Source</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html"> <trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
@ -3703,7 +3711,7 @@
<target state="translated">Rozpocznij</target> <target state="translated">Rozpocznij</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -3751,7 +3759,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.pt.xlf

@ -2010,7 +2010,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html">
@ -2310,7 +2310,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -2762,7 +2762,7 @@
<target state="translated">Começar</target> <target state="translated">Começar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -3266,7 +3266,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4798457301875181136" datatype="html"> <trans-unit id="4798457301875181136" datatype="html">
@ -4254,7 +4254,7 @@
<target state="translated">Modo escuro</target> <target state="translated">Modo escuro</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4262,7 +4262,7 @@
<target state="translated">Humor do mercado</target> <target state="translated">Humor do mercado</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4270,7 +4270,7 @@
<target state="translated">Análise estática</target> <target state="translated">Análise estática</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4278,7 +4278,7 @@
<target state="translated">Multilíngua</target> <target state="translated">Multilíngua</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4286,7 +4286,7 @@
<target state="translated">Software de código aberto</target> <target state="translated">Software de código aberto</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4230401090765872563" datatype="html"> <trans-unit id="4230401090765872563" datatype="html">
@ -5232,7 +5232,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -5408,7 +5408,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -5487,9 +5487,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -5522,7 +5530,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.tr.xlf

@ -193,7 +193,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -251,7 +251,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -330,9 +330,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -382,7 +390,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -759,7 +767,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html"> <trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
@ -3207,7 +3215,7 @@
<target state="translated">Karanlık Mod</target> <target state="translated">Karanlık Mod</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html"> <trans-unit id="b5dc65493e3e15fbe15b7d9c17f7626321d82e76" datatype="html">
@ -3219,7 +3227,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -3227,7 +3235,7 @@
<target state="translated">Piyasa Modu</target> <target state="translated">Piyasa Modu</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -3235,7 +3243,7 @@
<target state="translated">Statik Analiz</target> <target state="translated">Statik Analiz</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -3243,7 +3251,7 @@
<target state="translated">Çoklu Dil</target> <target state="translated">Çoklu Dil</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -3251,7 +3259,7 @@
<target state="translated">Açık Kaynak Yazılım</target> <target state="translated">Açık Kaynak Yazılım</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html"> <trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
@ -3259,7 +3267,7 @@
<target state="translated">Başla</target> <target state="translated">Başla</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -3307,7 +3315,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.uk.xlf

@ -354,7 +354,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html"> <trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
@ -591,7 +591,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -632,7 +632,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -711,9 +711,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -746,7 +754,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -3715,7 +3723,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html"> <trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html">
@ -4251,7 +4259,7 @@
<target state="translated">Темний режим</target> <target state="translated">Темний режим</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -4259,7 +4267,7 @@
<target state="translated">Ринковий настрій</target> <target state="translated">Ринковий настрій</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -4267,7 +4275,7 @@
<target state="translated">Статичний аналіз</target> <target state="translated">Статичний аналіз</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -4275,7 +4283,7 @@
<target state="translated">Багатомовність</target> <target state="translated">Багатомовність</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -4283,7 +4291,7 @@
<target state="translated">Програмне забезпечення з відкритим кодом</target> <target state="translated">Програмне забезпечення з відкритим кодом</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html"> <trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
@ -4291,7 +4299,7 @@
<target state="translated">Почати</target> <target state="translated">Почати</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -4339,7 +4347,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -7944,6 +7952,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7954,7 +7966,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

40
apps/client/src/locales/messages.xlf

@ -191,7 +191,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -247,7 +247,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -325,9 +325,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -375,7 +383,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -765,7 +773,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html"> <trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
@ -2995,7 +3003,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html"> <trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html">
@ -3416,42 +3424,42 @@
<source>Dark Mode</source> <source>Dark Mode</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
<source>Market Mood</source> <source>Market Mood</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
<source>Static Analysis</source> <source>Static Analysis</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
<source>Multi-Language</source> <source>Multi-Language</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
<source>Open Source Software</source> <source>Open Source Software</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html"> <trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
<source>Get Started</source> <source>Get Started</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -3496,7 +3504,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -7186,7 +7194,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7a6d28bd1c36c8298c95b7965abf226b218be50d" datatype="html"> <trans-unit id="7a6d28bd1c36c8298c95b7965abf226b218be50d" datatype="html">
@ -7195,6 +7203,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">
<source>Get Early Access</source> <source>Get Early Access</source>

40
apps/client/src/locales/messages.zh.xlf

@ -194,7 +194,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.component.ts</context>
@ -252,7 +252,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">18</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.ts</context>
@ -331,9 +331,17 @@
<context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts</context>
<context context-type="linenumber">15</context> <context context-type="linenumber">15</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts</context>
<context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">17</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts</context>
<context context-type="linenumber">14</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context>
@ -383,7 +391,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/faq/saas/saas-page.component.ts</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.component.ts</context>
@ -788,7 +796,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">260</context> <context context-type="linenumber">277</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html"> <trans-unit id="0275b6f6c30c7b70cff02cb06c355ebd10724f86" datatype="html">
@ -3204,7 +3212,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">191</context> <context context-type="linenumber">246</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html"> <trans-unit id="071f26a758dfeaed37626c8758754707c35e3915" datatype="html">
@ -3672,7 +3680,7 @@
<target state="translated">深色模式</target> <target state="translated">深色模式</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">178</context> <context context-type="linenumber">233</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html"> <trans-unit id="dbf8136366f55644df4ce493c233c74c12d79257" datatype="html">
@ -3680,7 +3688,7 @@
<target state="translated">市场情绪</target> <target state="translated">市场情绪</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">206</context> <context context-type="linenumber">215</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html"> <trans-unit id="122bc975c17dc774c324f7d3ea82517ff3ac7c10" datatype="html">
@ -3688,7 +3696,7 @@
<target state="translated">静态分析</target> <target state="translated">静态分析</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">179</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html"> <trans-unit id="e03687e1445b182f0d6bb3b9f0a94a21428cf18d" datatype="html">
@ -3696,7 +3704,7 @@
<target state="translated">多语言</target> <target state="translated">多语言</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">242</context> <context context-type="linenumber">259</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html"> <trans-unit id="b1153caa5b48efa22a2d312e07b8e28cf3e0e1ea" datatype="html">
@ -3704,7 +3712,7 @@
<target state="translated">开源软件</target> <target state="translated">开源软件</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">296</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html"> <trans-unit id="802222cb4754d74846b18f651b1f94e21576185d" datatype="html">
@ -3712,7 +3720,7 @@
<target state="translated">立即开始</target> <target state="translated">立即开始</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">304</context> <context context-type="linenumber">321</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context> <context context-type="sourcefile">apps/client/src/app/pages/public/public-page.html</context>
@ -3760,7 +3768,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">53</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/markets/markets-page-routing.module.ts</context>
@ -7945,6 +7953,10 @@
<context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context> <context context-type="sourcefile">apps/client/src/app/components/home-watchlist/home-watchlist.html</context>
<context context-type="linenumber">4</context> <context context-type="linenumber">4</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/features/features-page.html</context>
<context context-type="linenumber">197</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="4558213855845176930" datatype="html"> <trans-unit id="4558213855845176930" datatype="html">
<source>Watchlist</source> <source>Watchlist</source>
@ -7955,7 +7967,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/home/home-page.component.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">53</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html"> <trans-unit id="e9d59bb8bf6c08243d5411c55ddbdf925c7c799c" datatype="html">

2
libs/common/src/lib/interfaces/index.ts

@ -52,6 +52,7 @@ import type { ImportResponse } from './responses/import-response.interface';
import type { LookupResponse } from './responses/lookup-response.interface'; import type { LookupResponse } from './responses/lookup-response.interface';
import type { MarketDataDetailsResponse } from './responses/market-data-details-response.interface'; import type { MarketDataDetailsResponse } from './responses/market-data-details-response.interface';
import type { OAuthResponse } from './responses/oauth-response.interface'; import type { OAuthResponse } from './responses/oauth-response.interface';
import { PortfolioHoldingResponse } from './responses/portfolio-holding-response.interface';
import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface'; import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface';
import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface'; import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface';
import type { PortfolioReportResponse } from './responses/portfolio-report.interface'; import type { PortfolioReportResponse } from './responses/portfolio-report.interface';
@ -112,6 +113,7 @@ export {
PortfolioChart, PortfolioChart,
PortfolioDetails, PortfolioDetails,
PortfolioDividends, PortfolioDividends,
PortfolioHoldingResponse,
PortfolioHoldingsResponse, PortfolioHoldingsResponse,
PortfolioInvestments, PortfolioInvestments,
PortfolioItem, PortfolioItem,

8
apps/api/src/app/portfolio/interfaces/portfolio-holding-detail.interface.ts → libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts

@ -7,7 +7,8 @@ import {
import { Tag } from '@prisma/client'; import { Tag } from '@prisma/client';
export interface PortfolioHoldingDetail { export interface PortfolioHoldingResponse {
activities: Activity[];
averagePrice: number; averagePrice: number;
dataProviderInfo: DataProviderInfo; dataProviderInfo: DataProviderInfo;
dividendInBaseCurrency: number; dividendInBaseCurrency: number;
@ -22,13 +23,12 @@ export interface PortfolioHoldingDetail {
historicalData: HistoricalDataItem[]; historicalData: HistoricalDataItem[];
investment: number; investment: number;
marketPrice: number; marketPrice: number;
maxPrice: number; marketPriceMax: number;
minPrice: number; marketPriceMin: number;
netPerformance: number; netPerformance: number;
netPerformancePercent: number; netPerformancePercent: number;
netPerformancePercentWithCurrencyEffect: number; netPerformancePercentWithCurrencyEffect: number;
netPerformanceWithCurrencyEffect: number; netPerformanceWithCurrencyEffect: number;
orders: Activity[];
quantity: number; quantity: number;
SymbolProfile: EnhancedSymbolProfile; SymbolProfile: EnhancedSymbolProfile;
tags: Tag[]; tags: Tag[];

72
package-lock.json

@ -41,7 +41,7 @@
"@nestjs/platform-express": "10.4.15", "@nestjs/platform-express": "10.4.15",
"@nestjs/schedule": "4.1.2", "@nestjs/schedule": "4.1.2",
"@nestjs/serve-static": "4.0.2", "@nestjs/serve-static": "4.0.2",
"@prisma/client": "6.6.0", "@prisma/client": "6.7.0",
"@simplewebauthn/browser": "13.1.0", "@simplewebauthn/browser": "13.1.0",
"@simplewebauthn/server": "13.1.1", "@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "5.4.0", "@stripe/stripe-js": "5.4.0",
@ -150,7 +150,7 @@
"nx": "20.8.1", "nx": "20.8.1",
"prettier": "3.5.3", "prettier": "3.5.3",
"prettier-plugin-organize-attributes": "1.0.0", "prettier-plugin-organize-attributes": "1.0.0",
"prisma": "6.6.0", "prisma": "6.7.0",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"replace-in-file": "8.3.0", "replace-in-file": "8.3.0",
@ -9631,9 +9631,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@prisma/client": { "node_modules/@prisma/client": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.6.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.7.0.tgz",
"integrity": "sha512-vfp73YT/BHsWWOAuthKQ/1lBgESSqYqAWZEYyTdGXyFAHpmewwWL2Iz6ErIzkj4aHbuc6/cGSsE6ZY+pBO04Cg==", "integrity": "sha512-+k61zZn1XHjbZul8q6TdQLpuI/cvyfil87zqK2zpreNIXyXtpUv3+H/oM69hcsFcZXaokHJIzPAt5Z8C8eK2QA==",
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"engines": { "engines": {
@ -9653,9 +9653,9 @@
} }
}, },
"node_modules/@prisma/config": { "node_modules/@prisma/config": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.6.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.7.0.tgz",
"integrity": "sha512-d8FlXRHsx72RbN8nA2QCRORNv5AcUnPXgtPvwhXmYkQSMF/j9cKaJg+9VcUzBRXGy9QBckNzEQDEJZdEOZ+ubA==", "integrity": "sha512-di8QDdvSz7DLUi3OOcCHSwxRNeW7jtGRUD2+Z3SdNE3A+pPiNT8WgUJoUyOwJmUr5t+JA2W15P78C/N+8RXrOA==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@ -9664,53 +9664,53 @@
} }
}, },
"node_modules/@prisma/debug": { "node_modules/@prisma/debug": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.6.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.7.0.tgz",
"integrity": "sha512-DL6n4IKlW5k2LEXzpN60SQ1kP/F6fqaCgU/McgaYsxSf43GZ8lwtmXLke9efS+L1uGmrhtBUP4npV/QKF8s2ZQ==", "integrity": "sha512-RabHn9emKoYFsv99RLxvfG2GHzWk2ZI1BuVzqYtmMSIcuGboHY5uFt3Q3boOREM9de6z5s3bQoyKeWnq8Fz22w==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@prisma/engines": { "node_modules/@prisma/engines": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.6.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.7.0.tgz",
"integrity": "sha512-nC0IV4NHh7500cozD1fBoTwTD1ydJERndreIjpZr/S3mno3P6tm8qnXmIND5SwUkibNeSJMpgl4gAnlqJ/gVlg==", "integrity": "sha512-3wDMesnOxPrOsq++e5oKV9LmIiEazFTRFZrlULDQ8fxdub5w4NgRBoxtWbvXmj2nJVCnzuz6eFix3OhIqsZ1jw==",
"devOptional": true, "devOptional": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/debug": "6.6.0", "@prisma/debug": "6.7.0",
"@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", "@prisma/engines-version": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed",
"@prisma/fetch-engine": "6.6.0", "@prisma/fetch-engine": "6.7.0",
"@prisma/get-platform": "6.6.0" "@prisma/get-platform": "6.7.0"
} }
}, },
"node_modules/@prisma/engines-version": { "node_modules/@prisma/engines-version": {
"version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", "version": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a.tgz", "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed.tgz",
"integrity": "sha512-JzRaQ5Em1fuEcbR3nUsMNYaIYrOT1iMheenjCvzZblJcjv/3JIuxXN7RCNT5i6lRkLodW5ojCGhR7n5yvnNKrw==", "integrity": "sha512-EvpOFEWf1KkJpDsBCrih0kg3HdHuaCnXmMn7XFPObpFTzagK1N0Q0FMnYPsEhvARfANP5Ok11QyoTIRA2hgJTA==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@prisma/fetch-engine": { "node_modules/@prisma/fetch-engine": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.6.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.7.0.tgz",
"integrity": "sha512-Ohfo8gKp05LFLZaBlPUApM0M7k43a0jmo86YY35u1/4t+vuQH9mRGU7jGwVzGFY3v+9edeb/cowb1oG4buM1yw==", "integrity": "sha512-zLlAGnrkmioPKJR4Yf7NfW3hftcvqeNNEHleMZK9yX7RZSkhmxacAYyfGsCcqRt47jiZ7RKdgE0Wh2fWnm7WsQ==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/debug": "6.6.0", "@prisma/debug": "6.7.0",
"@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", "@prisma/engines-version": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed",
"@prisma/get-platform": "6.6.0" "@prisma/get-platform": "6.7.0"
} }
}, },
"node_modules/@prisma/get-platform": { "node_modules/@prisma/get-platform": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.6.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.7.0.tgz",
"integrity": "sha512-3qCwmnT4Jh5WCGUrkWcc6VZaw0JY7eWN175/pcb5Z6FiLZZ3ygY93UX0WuV41bG51a6JN/oBH0uywJ90Y+V5eA==", "integrity": "sha512-i9IH5lO4fQwnMLvQLYNdgVh9TK3PuWBfQd7QLk/YurnAIg+VeADcZDbmhAi4XBBDD+hDif9hrKyASu0hbjwabw==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/debug": "6.6.0" "@prisma/debug": "6.7.0"
} }
}, },
"node_modules/@redis/bloom": { "node_modules/@redis/bloom": {
@ -28457,15 +28457,15 @@
} }
}, },
"node_modules/prisma": { "node_modules/prisma": {
"version": "6.6.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.6.0.tgz", "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.7.0.tgz",
"integrity": "sha512-SYCUykz+1cnl6Ugd8VUvtTQq5+j1Q7C0CtzKPjQ8JyA2ALh0EEJkMCS+KgdnvKW1lrxjtjCyJSHOOT236mENYg==", "integrity": "sha512-vArg+4UqnQ13CVhc2WUosemwh6hr6cr6FY2uzDvCIFwH8pu8BXVv38PktoMLVjtX7sbYThxbnZF5YiR8sN2clw==",
"devOptional": true, "devOptional": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/config": "6.6.0", "@prisma/config": "6.7.0",
"@prisma/engines": "6.6.0" "@prisma/engines": "6.7.0"
}, },
"bin": { "bin": {
"prisma": "build/index.js" "prisma": "build/index.js"

4
package.json

@ -87,7 +87,7 @@
"@nestjs/platform-express": "10.4.15", "@nestjs/platform-express": "10.4.15",
"@nestjs/schedule": "4.1.2", "@nestjs/schedule": "4.1.2",
"@nestjs/serve-static": "4.0.2", "@nestjs/serve-static": "4.0.2",
"@prisma/client": "6.6.0", "@prisma/client": "6.7.0",
"@simplewebauthn/browser": "13.1.0", "@simplewebauthn/browser": "13.1.0",
"@simplewebauthn/server": "13.1.1", "@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "5.4.0", "@stripe/stripe-js": "5.4.0",
@ -196,7 +196,7 @@
"nx": "20.8.1", "nx": "20.8.1",
"prettier": "3.5.3", "prettier": "3.5.3",
"prettier-plugin-organize-attributes": "1.0.0", "prettier-plugin-organize-attributes": "1.0.0",
"prisma": "6.6.0", "prisma": "6.7.0",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"replace-in-file": "8.3.0", "replace-in-file": "8.3.0",

8
prisma/schema.prisma

@ -147,10 +147,10 @@ model Order {
} }
model Platform { model Platform {
id String @id @default(uuid()) accounts Account[]
name String? id String @id @default(uuid())
url String @unique name String?
Account Account[] url String @unique
@@index([name]) @@index([name])
} }

Loading…
Cancel
Save