Browse Source

Merge branch 'ghostfolio:main' into perf/optimize-redact-attributes

pull/5843/head
Laksh sadhwani 1 month ago
committed by GitHub
parent
commit
f26b3e3513
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 57
      CHANGELOG.md
  2. 13
      README.md
  3. 4
      apps/api/src/app/admin/admin.controller.ts
  4. 6
      apps/api/src/app/admin/admin.service.ts
  5. 17
      apps/api/src/app/auth/auth.controller.ts
  6. 37
      apps/api/src/app/auth/auth.service.ts
  7. 3
      apps/api/src/app/auth/google.strategy.ts
  8. 79
      apps/api/src/app/endpoints/ai/ai.service.ts
  9. 140
      apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts
  10. 362
      apps/api/src/assets/cryptocurrencies/cryptocurrencies.json
  11. 9
      apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
  12. 10
      apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts
  13. 2
      apps/api/src/services/i18n/i18n.service.ts
  14. 1
      apps/api/src/services/interfaces/interfaces.ts
  15. 55
      apps/api/src/services/market-data/market-data.service.ts
  16. 14
      apps/api/src/services/queues/data-gathering/data-gathering.processor.ts
  17. 8
      apps/api/src/services/queues/data-gathering/data-gathering.service.ts
  18. 56
      apps/client/project.json
  19. 7
      apps/client/src/app/app.component.ts
  20. 6
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
  21. 2
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
  22. 27
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  23. 62
      apps/client/src/app/components/admin-platform/admin-platform.component.ts
  24. 14
      apps/client/src/app/components/admin-tag/admin-tag.component.ts
  25. 2
      apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts
  26. 21
      apps/client/src/app/components/admin-users/admin-users.component.ts
  27. 6
      apps/client/src/app/components/header/header.component.ts
  28. 55
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  29. 48
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
  30. 20
      apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
  31. 5
      apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts
  32. 22
      apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts
  33. 11
      apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html
  34. 9
      apps/client/src/app/components/rule/rule.component.ts
  35. 1
      apps/client/src/app/components/rules/rules.component.html
  36. 1
      apps/client/src/app/components/rules/rules.component.ts
  37. 15
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  38. 5
      apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts
  39. 73
      apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
  40. 2
      apps/client/src/app/core/module-preload.service.ts
  41. 26
      apps/client/src/app/pages/about/overview/about-overview-page.html
  42. 25
      apps/client/src/app/pages/accounts/accounts-page.component.ts
  43. 2
      apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
  44. 10
      apps/client/src/app/pages/home/home-page.component.ts
  45. 73
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  46. 1
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts
  47. 2
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts
  48. 7
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
  49. 14
      apps/client/src/app/pages/portfolio/fire/fire-page.scss
  50. 2
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
  51. 34
      apps/client/src/app/pages/register/register-page.component.ts
  52. 14
      apps/client/src/app/pages/register/register-page.html
  53. 18
      apps/client/src/app/pages/resources/glossary/resources-glossary.component.html
  54. 4
      apps/client/src/app/pages/resources/guides/resources-guides.component.html
  55. 8
      apps/client/src/app/pages/resources/markets/resources-markets.component.html
  56. 2
      apps/client/src/app/pages/resources/overview/resources-overview.component.html
  57. 6
      apps/client/src/app/pages/zen/zen-page.component.ts
  58. 4
      apps/client/src/app/services/admin.service.ts
  59. 56
      apps/client/src/app/services/internet-identity.service.ts
  60. 22
      apps/client/src/app/services/user/user.service.ts
  61. 28
      apps/client/src/assets/icons/internet-computer.svg
  62. BIN
      apps/client/src/assets/images/sponsors/logo-lambdatest.png
  63. 12
      apps/client/src/assets/oss-friends.json
  64. 114
      apps/client/src/locales/messages.ca.xlf
  65. 114
      apps/client/src/locales/messages.de.xlf
  66. 114
      apps/client/src/locales/messages.es.xlf
  67. 114
      apps/client/src/locales/messages.fr.xlf
  68. 114
      apps/client/src/locales/messages.it.xlf
  69. 114
      apps/client/src/locales/messages.nl.xlf
  70. 114
      apps/client/src/locales/messages.pl.xlf
  71. 114
      apps/client/src/locales/messages.pt.xlf
  72. 114
      apps/client/src/locales/messages.tr.xlf
  73. 114
      apps/client/src/locales/messages.uk.xlf
  74. 106
      apps/client/src/locales/messages.xlf
  75. 114
      apps/client/src/locales/messages.zh.xlf
  76. 61
      apps/client/src/styles/theme.scss
  77. 4
      apps/client/src/styles/variables.scss
  78. 5
      eslint.config.cjs
  79. 2
      libs/common/src/lib/helper.ts
  80. 4
      libs/common/src/lib/interfaces/index.ts
  81. 2
      libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts
  82. 14
      libs/ui/src/lib/activities-table/activities-table.component.html
  83. 18
      libs/ui/src/lib/activities-table/activities-table.component.ts
  84. 7
      libs/ui/src/lib/benchmark/benchmark.component.ts
  85. 2
      libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
  86. 28
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
  87. 3
      libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
  88. 6
      libs/ui/src/lib/tags-selector/tags-selector.component.ts
  89. 3
      libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
  90. 442
      package-lock.json
  91. 31
      package.json
  92. 8
      test/import/not-ok/invalid-data-source.json
  93. 8
      test/import/not-ok/invalid-date-before-min.json
  94. 8
      test/import/not-ok/invalid-date.json
  95. 8
      test/import/not-ok/invalid-symbol.json
  96. 8
      test/import/not-ok/invalid-type.json
  97. 8
      test/import/not-ok/unavailable-exchange-rate.json
  98. 3
      test/import/ok/500-activities.json
  99. 3
      test/import/ok/btceur.json
  100. 3
      test/import/ok/btcusd-short.json

57
CHANGELOG.md

@ -5,6 +5,63 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Changed
- Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild`
### Fixed
- Fixed the style of the safe withdrawal rate selector in the _FIRE_ section (experimental)
## 2.214.0 - 2025-11-01
### Changed
- Improved the icon of the _View Holding_ menu item in the activities table
- Ensured atomic data replacement during historical market data gathering
- Removed _Internet Identity_ as a social login provider
- Refreshed the cryptocurrencies list
- Upgraded `countries-list` from version `3.1.1` to `3.2.0`
- Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0`
- Upgraded `twitter-api-v2` from version `1.23.0` to `1.27.0`
## 2.213.0 - 2025-10-30
### Added
- Extended the activities table menu with a _View Holding_ item
- Added the error logging to the symbol lookup in the _Trackinsight_ data enhancer
### Changed
- Improved the icon of the holdings tab on the home page
- Improved the icon of the holdings tab on the home page for the _Zen Mode_
- Improved the icon of the holdings tab in the account detail dialog
- Migrated the tags selector component in the holding detail dialog to form control
- Improved the language localization for German (`de`)
- Upgraded `nestjs` from version `11.1.3` to `11.1.8`
## 2.212.0 - 2025-10-29
### Added
- Added a close holding button to the holding detail dialog
- Added the _Sponsors_ section to the about page
- Extended the user detail dialog in the users section of the admin control panel
### Changed
- Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental)
- Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental)
- Improved the usability of the user detail dialog in the users section of the admin control panel
- Improved the language localization for German (`de`)
### Fixed
- Ensured the locale is available in the settings dialog to customize the rule thresholds of the _X-ray_ page
## 2.211.0 - 2025-10-25 ## 2.211.0 - 2025-10-25
### Added ### Added

13
README.md

@ -297,7 +297,18 @@ Ghostfolio is **100% free** and **open source**. We encourage and support an act
Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you.
If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). If you like to support this project, become a [**Sponsor**](https://github.com/sponsors/ghostfolio), get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio).
## Sponsors
<div align="center">
<p>
Browser testing via<br />
<a href="https://www.lambdatest.com?utm_medium=sponsor&utm_source=ghostfolio" target="_blank" title="LambdaTest - AI Powered Testing Tool">
<img alt="LambdaTest Logo" height="45" width="250" src="https://www.lambdatest.com/blue-logo.png" />
</a>
</p>
</div>
## Analytics ## Analytics

4
apps/api/src/app/admin/admin.controller.ts

@ -17,7 +17,7 @@ import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { import {
AdminData, AdminData,
AdminMarketData, AdminMarketData,
AdminUsers, AdminUsersResponse,
EnhancedSymbolProfile, EnhancedSymbolProfile,
ScraperConfiguration ScraperConfiguration
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
@ -315,7 +315,7 @@ export class AdminController {
public async getUsers( public async getUsers(
@Query('skip') skip?: number, @Query('skip') skip?: number,
@Query('take') take?: number @Query('take') take?: number
): Promise<AdminUsers> { ): Promise<AdminUsersResponse> {
return this.adminService.getUsers({ return this.adminService.getUsers({
skip: isNaN(skip) ? undefined : skip, skip: isNaN(skip) ? undefined : skip,
take: isNaN(take) ? undefined : take take: isNaN(take) ? undefined : take

6
apps/api/src/app/admin/admin.service.ts

@ -23,7 +23,7 @@ import {
AdminMarketData, AdminMarketData,
AdminMarketDataDetails, AdminMarketDataDetails,
AdminMarketDataItem, AdminMarketDataItem,
AdminUsers, AdminUsersResponse,
AssetProfileIdentifier, AssetProfileIdentifier,
EnhancedSymbolProfile, EnhancedSymbolProfile,
Filter Filter
@ -513,7 +513,7 @@ export class AdminService {
}: { }: {
skip?: number; skip?: number;
take?: number; take?: number;
}): Promise<AdminUsers> { }): Promise<AdminUsersResponse> {
const [count, users] = await Promise.all([ const [count, users] = await Promise.all([
this.countUsersWithAnalytics(), this.countUsersWithAnalytics(),
this.getUsersWithAnalytics({ skip, take }) this.getUsersWithAnalytics({ skip, take })
@ -818,7 +818,7 @@ export class AdminService {
}: { }: {
skip?: number; skip?: number;
take?: number; take?: number;
}): Promise<AdminUsers['users']> { }): Promise<AdminUsersResponse['users']> {
let orderBy: Prisma.Enumerable<Prisma.UserOrderByWithRelationInput> = [ let orderBy: Prisma.Enumerable<Prisma.UserOrderByWithRelationInput> = [
{ createdAt: 'desc' } { createdAt: 'desc' }
]; ];

17
apps/api/src/app/auth/auth.controller.ts

@ -102,23 +102,6 @@ export class AuthController {
} }
} }
@Post('internet-identity')
public async internetIdentityLogin(
@Body() body: { principalId: string }
): Promise<OAuthResponse> {
try {
const authToken = await this.authService.validateInternetIdentityLogin(
body.principalId
);
return { authToken };
} catch {
throw new HttpException(
getReasonPhrase(StatusCodes.FORBIDDEN),
StatusCodes.FORBIDDEN
);
}
}
@Get('webauthn/generate-registration-options') @Get('webauthn/generate-registration-options')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async generateRegistrationOptions() { public async generateRegistrationOptions() {

37
apps/api/src/app/auth/auth.service.ts

@ -4,7 +4,6 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv
import { Injectable, InternalServerErrorException } from '@nestjs/common'; import { Injectable, InternalServerErrorException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt'; import { JwtService } from '@nestjs/jwt';
import { Provider } from '@prisma/client';
import { ValidateOAuthLoginParams } from './interfaces/interfaces'; import { ValidateOAuthLoginParams } from './interfaces/interfaces';
@ -44,42 +43,6 @@ export class AuthService {
}); });
} }
public async validateInternetIdentityLogin(principalId: string) {
try {
const provider: Provider = 'INTERNET_IDENTITY';
let [user] = await this.userService.users({
where: { provider, thirdPartyId: principalId }
});
if (!user) {
const isUserSignupEnabled =
await this.propertyService.isUserSignupEnabled();
if (!isUserSignupEnabled || true) {
throw new Error('Sign up forbidden');
}
// Create new user if not found
user = await this.userService.createUser({
data: {
provider,
thirdPartyId: principalId
}
});
}
return this.jwtService.sign({
id: user.id
});
} catch (error) {
throw new InternalServerErrorException(
'validateInternetIdentityLogin',
error.message
);
}
}
public async validateOAuthLogin({ public async validateOAuthLogin({
provider, provider,
thirdPartyId thirdPartyId

3
apps/api/src/app/auth/google.strategy.ts

@ -3,6 +3,7 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport'; import { PassportStrategy } from '@nestjs/passport';
import { Provider } from '@prisma/client'; import { Provider } from '@prisma/client';
import { DoneCallback } from 'passport';
import { Profile, Strategy } from 'passport-google-oauth20'; import { Profile, Strategy } from 'passport-google-oauth20';
import { AuthService } from './auth.service'; import { AuthService } from './auth.service';
@ -29,7 +30,7 @@ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
_token: string, _token: string,
_refreshToken: string, _refreshToken: string,
profile: Profile, profile: Profile,
done: Function done: DoneCallback
) { ) {
try { try {
const jwt = await this.authService.validateOAuthLogin({ const jwt = await this.authService.validateOAuthLogin({

79
apps/api/src/app/endpoints/ai/ai.service.ts

@ -14,6 +14,27 @@ import type { ColumnDescriptor } from 'tablemark';
@Injectable() @Injectable()
export class AiService { export class AiService {
private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: ({
key:
| 'ALLOCATION_PERCENTAGE'
| 'ASSET_CLASS'
| 'ASSET_SUB_CLASS'
| 'CURRENCY'
| 'NAME'
| 'SYMBOL';
} & ColumnDescriptor)[] = [
{ key: 'NAME', name: 'Name' },
{ key: 'SYMBOL', name: 'Symbol' },
{ key: 'CURRENCY', name: 'Currency' },
{ key: 'ASSET_CLASS', name: 'Asset Class' },
{ key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' },
{
align: 'right',
key: 'ALLOCATION_PERCENTAGE',
name: 'Allocation in Percentage'
}
];
public constructor( public constructor(
private readonly portfolioService: PortfolioService, private readonly portfolioService: PortfolioService,
private readonly propertyService: PropertyService private readonly propertyService: PropertyService
@ -59,14 +80,10 @@ export class AiService {
userId userId
}); });
const holdingsTableColumns: ColumnDescriptor[] = [ const holdingsTableColumns: ColumnDescriptor[] =
{ name: 'Name' }, AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map(({ align, name }) => {
{ name: 'Symbol' }, return { name, align: align ?? 'left' };
{ name: 'Currency' }, });
{ name: 'Asset Class' },
{ name: 'Asset Sub Class' },
{ align: 'right', name: 'Allocation in Percentage' }
];
const holdingsTableRows = Object.values(holdings) const holdingsTableRows = Object.values(holdings)
.sort((a, b) => { .sort((a, b) => {
@ -78,17 +95,45 @@ export class AiService {
assetClass, assetClass,
assetSubClass, assetSubClass,
currency, currency,
name, name: label,
symbol symbol
}) => { }) => {
return { return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.reduce(
Name: name, (row, { key, name }) => {
Symbol: symbol, switch (key) {
Currency: currency, case 'ALLOCATION_PERCENTAGE':
'Asset Class': assetClass ?? '', row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`;
'Asset Sub Class': assetSubClass ?? '', break;
'Allocation in Percentage': `${(allocationInPercentage * 100).toFixed(3)}%`
}; case 'ASSET_CLASS':
row[name] = assetClass ?? '';
break;
case 'ASSET_SUB_CLASS':
row[name] = assetSubClass ?? '';
break;
case 'CURRENCY':
row[name] = currency;
break;
case 'NAME':
row[name] = label;
break;
case 'SYMBOL':
row[name] = symbol;
break;
default:
row[name] = '';
break;
}
return row;
},
{} as Record<string, string>
);
} }
); );

140
apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts

@ -0,0 +1,140 @@
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import {
activityDummyData,
loadExportFile,
symbolProfileDummyData,
userDummyData
} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils';
import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory';
import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service';
import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock';
import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service';
import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { ExchangeRateDataServiceMock } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service.mock';
import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service';
import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock';
import { parseDate } from '@ghostfolio/common/helper';
import { ExportResponse } from '@ghostfolio/common/interfaces';
import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type';
import { Big } from 'big.js';
import { join } from 'node:path';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
CurrentRateService: jest.fn().mockImplementation(() => {
return CurrentRateServiceMock;
})
};
});
jest.mock(
'@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service',
() => {
return {
ExchangeRateDataService: jest.fn().mockImplementation(() => {
return ExchangeRateDataServiceMock;
})
};
}
);
jest.mock(
'@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service',
() => {
return {
PortfolioSnapshotService: jest.fn().mockImplementation(() => {
return PortfolioSnapshotServiceMock;
})
};
}
);
jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => {
return {
RedisCacheService: jest.fn().mockImplementation(() => {
return RedisCacheServiceMock;
})
};
});
describe('PortfolioCalculator', () => {
let exportResponse: ExportResponse;
let configurationService: ConfigurationService;
let currentRateService: CurrentRateService;
let exchangeRateDataService: ExchangeRateDataService;
let portfolioCalculatorFactory: PortfolioCalculatorFactory;
let portfolioSnapshotService: PortfolioSnapshotService;
let redisCacheService: RedisCacheService;
beforeAll(() => {
exportResponse = loadExportFile(
join(__dirname, '../../../../../../../test/import/ok/btceur.json')
);
});
beforeEach(() => {
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
exchangeRateDataService = new ExchangeRateDataService(
null,
null,
null,
null
);
portfolioSnapshotService = new PortfolioSnapshotService(null);
redisCacheService = new RedisCacheService(null, null);
portfolioCalculatorFactory = new PortfolioCalculatorFactory(
configurationService,
currentRateService,
exchangeRateDataService,
portfolioSnapshotService,
redisCacheService
);
});
describe('get current positions', () => {
it.only('with BTCUSD buy (in EUR)', async () => {
jest.useFakeTimers().setSystemTime(parseDate('2022-01-14').getTime());
const activities: Activity[] = exportResponse.activities.map(
(activity) => ({
...activityDummyData,
...activity,
date: parseDate(activity.date),
feeInAssetProfileCurrency: 4.46,
SymbolProfile: {
...symbolProfileDummyData,
currency: 'USD',
dataSource: activity.dataSource,
name: 'Bitcoin',
symbol: activity.symbol
},
unitPriceInAssetProfileCurrency: 44558.42
})
);
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
activities,
calculationType: PerformanceCalculationType.ROAI,
currency: 'EUR',
userId: userDummyData.id
});
const portfolioSnapshot = await portfolioCalculator.computeSnapshot();
expect(portfolioSnapshot.positions[0].fee).toEqual(new Big(4.46));
expect(
portfolioSnapshot.positions[0].feeInBaseCurrency.toNumber()
).toBeCloseTo(3.94, 1);
});
});
});

362
apps/api/src/assets/cryptocurrencies/cryptocurrencies.json

File diff suppressed because it is too large

9
apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts

@ -4,7 +4,7 @@ import { Holding } from '@ghostfolio/common/interfaces';
import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Country } from '@ghostfolio/common/interfaces/country.interface';
import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
import { Injectable } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { SymbolProfile } from '@prisma/client'; import { SymbolProfile } from '@prisma/client';
import { countries } from 'countries-list'; import { countries } from 'countries-list';
@ -202,7 +202,12 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
return undefined; return undefined;
}) })
.catch(() => { .catch(({ message }) => {
Logger.error(
`Failed to search Trackinsight symbol for ${symbol} (${message})`,
'TrackinsightDataEnhancerService'
);
return undefined; return undefined;
}); });
} }

10
apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts

@ -17,11 +17,21 @@ export const ExchangeRateDataServiceMock = {
'2023-07-10': 0.8854 '2023-07-10': 0.8854
} }
}); });
} else if (targetCurrency === 'EUR') {
return Promise.resolve({
EUREUR: {
'2021-12-12': 1
},
USDEUR: {
'2021-12-12': 0.8855
}
});
} else if (targetCurrency === 'USD') { } else if (targetCurrency === 'USD') {
return Promise.resolve({ return Promise.resolve({
USDUSD: { USDUSD: {
'2018-01-01': 1, '2018-01-01': 1,
'2021-11-16': 1, '2021-11-16': 1,
'2021-12-12': 1,
'2023-07-10': 1 '2023-07-10': 1
} }
}); });

2
apps/api/src/services/i18n/i18n.service.ts

@ -65,7 +65,7 @@ export class I18nService {
} }
private parseLanguageCode(aFileName: string) { private parseLanguageCode(aFileName: string) {
const match = aFileName.match(/\.([a-zA-Z]+)\.xlf$/); const match = /\.([a-zA-Z]+)\.xlf$/.exec(aFileName);
return match ? match[1] : DEFAULT_LANGUAGE_CODE; return match ? match[1] : DEFAULT_LANGUAGE_CODE;
} }

1
apps/api/src/services/interfaces/interfaces.ts

@ -20,4 +20,5 @@ export interface DataProviderResponse {
export interface DataGatheringItem extends AssetProfileIdentifier { export interface DataGatheringItem extends AssetProfileIdentifier {
date?: Date; date?: Date;
force?: boolean;
} }

55
apps/api/src/services/market-data/market-data.service.ts

@ -132,6 +132,61 @@ export class MarketDataService {
}); });
} }
/**
* Atomically replace market data for a symbol within a date range.
* Deletes existing data in the range and inserts new data within a single
* transaction to prevent data loss if the operation fails.
*/
public async replaceForSymbol({
data,
dataSource,
symbol
}: AssetProfileIdentifier & { data: Prisma.MarketDataUpdateInput[] }) {
await this.prismaService.$transaction(async (prisma) => {
if (data.length > 0) {
let minTime = Infinity;
let maxTime = -Infinity;
for (const { date } of data) {
const time = (date as Date).getTime();
if (time < minTime) {
minTime = time;
}
if (time > maxTime) {
maxTime = time;
}
}
const minDate = new Date(minTime);
const maxDate = new Date(maxTime);
await prisma.marketData.deleteMany({
where: {
dataSource,
symbol,
date: {
gte: minDate,
lte: maxDate
}
}
});
await prisma.marketData.createMany({
data: data.map(({ date, marketPrice, state }) => ({
dataSource,
symbol,
date: date as Date,
marketPrice: marketPrice as number,
state: state as MarketDataState
})),
skipDuplicates: true
});
}
});
}
public async updateAssetProfileIdentifier( public async updateAssetProfileIdentifier(
oldAssetProfileIdentifier: AssetProfileIdentifier, oldAssetProfileIdentifier: AssetProfileIdentifier,
newAssetProfileIdentifier: AssetProfileIdentifier newAssetProfileIdentifier: AssetProfileIdentifier

14
apps/api/src/services/queues/data-gathering/data-gathering.processor.ts

@ -100,7 +100,7 @@ export class DataGatheringProcessor {
name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME
}) })
public async gatherHistoricalMarketData(job: Job<DataGatheringItem>) { public async gatherHistoricalMarketData(job: Job<DataGatheringItem>) {
const { dataSource, date, symbol } = job.data; const { dataSource, date, force, symbol } = job.data;
try { try {
let currentDate = parseISO(date as unknown as string); let currentDate = parseISO(date as unknown as string);
@ -109,7 +109,7 @@ export class DataGatheringProcessor {
`Historical market data gathering has been started for ${symbol} (${dataSource}) at ${format( `Historical market data gathering has been started for ${symbol} (${dataSource}) at ${format(
currentDate, currentDate,
DATE_FORMAT DATE_FORMAT
)}`, )}${force ? ' (forced update)' : ''}`,
`DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})`
); );
@ -157,7 +157,15 @@ export class DataGatheringProcessor {
currentDate = addDays(currentDate, 1); currentDate = addDays(currentDate, 1);
} }
await this.marketDataService.updateMany({ data }); if (force) {
await this.marketDataService.replaceForSymbol({
data,
dataSource,
symbol
});
} else {
await this.marketDataService.updateMany({ data });
}
Logger.log( Logger.log(
`Historical market data gathering has been completed for ${symbol} (${dataSource}) at ${format( `Historical market data gathering has been completed for ${symbol} (${dataSource}) at ${format(

8
apps/api/src/services/queues/data-gathering/data-gathering.service.ts

@ -2,7 +2,6 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
@ -41,7 +40,6 @@ export class DataGatheringService {
private readonly dataGatheringQueue: Queue, private readonly dataGatheringQueue: Queue,
private readonly dataProviderService: DataProviderService, private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService, private readonly exchangeRateDataService: ExchangeRateDataService,
private readonly marketDataService: MarketDataService,
private readonly prismaService: PrismaService, private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService, private readonly propertyService: PropertyService,
private readonly symbolProfileService: SymbolProfileService private readonly symbolProfileService: SymbolProfileService
@ -95,8 +93,6 @@ export class DataGatheringService {
} }
public async gatherSymbol({ dataSource, date, symbol }: DataGatheringItem) { public async gatherSymbol({ dataSource, date, symbol }: DataGatheringItem) {
await this.marketDataService.deleteMany({ dataSource, symbol });
const dataGatheringItems = (await this.getSymbolsMax()) const dataGatheringItems = (await this.getSymbolsMax())
.filter((dataGatheringItem) => { .filter((dataGatheringItem) => {
return ( return (
@ -111,6 +107,7 @@ export class DataGatheringService {
await this.gatherSymbols({ await this.gatherSymbols({
dataGatheringItems, dataGatheringItems,
force: true,
priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH
}); });
} }
@ -274,9 +271,11 @@ export class DataGatheringService {
public async gatherSymbols({ public async gatherSymbols({
dataGatheringItems, dataGatheringItems,
force = false,
priority priority
}: { }: {
dataGatheringItems: DataGatheringItem[]; dataGatheringItems: DataGatheringItem[];
force?: boolean;
priority: number; priority: number;
}) { }) {
await this.addJobsToQueue( await this.addJobsToQueue(
@ -285,6 +284,7 @@ export class DataGatheringService {
data: { data: {
dataSource, dataSource,
date, date,
force,
symbol symbol
}, },
name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME, name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME,

56
apps/client/project.json

@ -61,30 +61,30 @@
}, },
"targets": { "targets": {
"build": { "build": {
"executor": "@nx/angular:webpack-browser", "executor": "@nx/angular:browser-esbuild",
"options": { "options": {
"deleteOutputPath": false,
"localize": true,
"outputPath": "dist/apps/client",
"index": "apps/client/src/index.html", "index": "apps/client/src/index.html",
"main": "apps/client/src/main.ts", "main": "apps/client/src/main.ts",
"polyfills": "apps/client/src/polyfills.ts", "outputPath": "dist/apps/client",
"tsConfig": "apps/client/tsconfig.app.json", "tsConfig": "apps/client/tsconfig.app.json",
"buildOptimizer": false,
"deleteOutputPath": false,
"extractLicenses": false,
"localize": true,
"namedChunks": true,
"ngswConfigPath": "apps/client/ngsw-config.json",
"optimization": false,
"polyfills": "apps/client/src/polyfills.ts",
"scripts": ["node_modules/marked/marked.min.js"],
"serviceWorker": true,
"sourceMap": true,
"styles": [ "styles": [
"apps/client/src/assets/fonts/inter.css", "apps/client/src/assets/fonts/inter.css",
"apps/client/src/styles/theme.scss", "apps/client/src/styles/theme.scss",
"apps/client/src/styles.scss", "apps/client/src/styles.scss",
"node_modules/open-color/open-color.css" "node_modules/open-color/open-color.css"
], ],
"scripts": ["node_modules/marked/marked.min.js"], "vendorChunk": true
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": false,
"sourceMap": true,
"optimization": false,
"namedChunks": true,
"serviceWorker": true,
"ngswConfigPath": "apps/client/ngsw-config.json"
}, },
"configurations": { "configurations": {
"development-ca": { "development-ca": {
@ -136,19 +136,6 @@
"localize": ["zh"] "localize": ["zh"]
}, },
"production": { "production": {
"fileReplacements": [
{
"replace": "apps/client/src/environments/environment.ts",
"with": "apps/client/src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [ "budgets": [
{ {
"type": "initial", "type": "initial",
@ -160,7 +147,20 @@
"maximumWarning": "6kb", "maximumWarning": "6kb",
"maximumError": "10kb" "maximumError": "10kb"
} }
] ],
"buildOptimizer": true,
"extractLicenses": true,
"fileReplacements": [
{
"replace": "apps/client/src/environments/environment.ts",
"with": "apps/client/src/environments/environment.prod.ts"
}
],
"namedChunks": false,
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"vendorChunk": false
} }
}, },
"outputs": ["{options.outputPath}"], "outputs": ["{options.outputPath}"],

7
apps/client/src/app/app.component.ts

@ -276,7 +276,10 @@ export class AppComponent implements OnDestroy, OnInit {
.subscribe((user) => { .subscribe((user) => {
this.user = user; this.user = user;
const dialogRef = this.dialog.open(GfHoldingDetailDialogComponent, { const dialogRef = this.dialog.open<
GfHoldingDetailDialogComponent,
HoldingDetailDialogParams
>(GfHoldingDetailDialogComponent, {
autoFocus: false, autoFocus: false,
data: { data: {
dataSource, dataSource,
@ -302,7 +305,7 @@ export class AppComponent implements OnDestroy, OnInit {
hasPermission(this.user?.permissions, permissions.updateOrder) && hasPermission(this.user?.permissions, permissions.updateOrder) &&
!this.user?.settings?.isRestrictedView, !this.user?.settings?.isRestrictedView,
locale: this.user?.settings?.locale locale: this.user?.settings?.locale
} as HoldingDetailDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });

6
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts

@ -43,9 +43,9 @@ import { Big } from 'big.js';
import { format, parseISO } from 'date-fns'; import { format, parseISO } from 'date-fns';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { import {
albumsOutline,
cashOutline, cashOutline,
swapVerticalOutline, swapVerticalOutline
walletOutline
} from 'ionicons/icons'; } from 'ionicons/icons';
import { isNumber } from 'lodash'; import { isNumber } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
@ -129,7 +129,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit {
} }
}); });
addIcons({ cashOutline, swapVerticalOutline, walletOutline }); addIcons({ albumsOutline, cashOutline, swapVerticalOutline });
} }
public ngOnInit() { public ngOnInit() {

2
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html

@ -98,7 +98,7 @@
> >
<mat-tab> <mat-tab>
<ng-template mat-tab-label> <ng-template mat-tab-label>
<ion-icon name="wallet-outline" /> <ion-icon name="albums-outline" />
<div class="d-none d-sm-block ml-2" i18n>Holdings</div> <div class="d-none d-sm-block ml-2" i18n>Holdings</div>
</ng-template> </ng-template>
<gf-holdings-table <gf-holdings-table

27
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts

@ -430,7 +430,10 @@ export class GfAdminMarketDataComponent
.subscribe((user) => { .subscribe((user) => {
this.user = user; this.user = user;
const dialogRef = this.dialog.open(GfAssetProfileDialogComponent, { const dialogRef = this.dialog.open<
GfAssetProfileDialogComponent,
AssetProfileDialogParams
>(GfAssetProfileDialogComponent, {
autoFocus: false, autoFocus: false,
data: { data: {
dataSource, dataSource,
@ -438,7 +441,7 @@ export class GfAdminMarketDataComponent
colorScheme: this.user?.settings.colorScheme, colorScheme: this.user?.settings.colorScheme,
deviceType: this.deviceType, deviceType: this.deviceType,
locale: this.user?.settings?.locale locale: this.user?.settings?.locale
} as AssetProfileDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });
@ -465,17 +468,17 @@ export class GfAdminMarketDataComponent
.subscribe((user) => { .subscribe((user) => {
this.user = user; this.user = user;
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfCreateAssetProfileDialogComponent, GfCreateAssetProfileDialogComponent,
{ CreateAssetProfileDialogParams
autoFocus: false, >(GfCreateAssetProfileDialogComponent, {
data: { autoFocus: false,
deviceType: this.deviceType, data: {
locale: this.user?.settings?.locale deviceType: this.deviceType,
} as CreateAssetProfileDialogParams, locale: this.user?.settings?.locale
width: this.deviceType === 'mobile' ? '100vw' : '50rem' },
} width: this.deviceType === 'mobile' ? '100vw' : '50rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()

62
apps/client/src/app/components/admin-platform/admin-platform.component.ts

@ -34,6 +34,7 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, takeUntil } from 'rxjs'; import { Subject, takeUntil } from 'rxjs';
import { GfCreateOrUpdatePlatformDialogComponent } from './create-or-update-platform-dialog/create-or-update-platform-dialog.component'; import { GfCreateOrUpdatePlatformDialogComponent } from './create-or-update-platform-dialog/create-or-update-platform-dialog.component';
import { CreateOrUpdatePlatformDialogParams } from './create-or-update-platform-dialog/interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@ -153,19 +154,20 @@ export class GfAdminPlatformComponent implements OnInit, OnDestroy {
} }
private openCreatePlatformDialog() { private openCreatePlatformDialog() {
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfCreateOrUpdatePlatformDialogComponent, GfCreateOrUpdatePlatformDialogComponent,
{ CreateOrUpdatePlatformDialogParams
data: { >(GfCreateOrUpdatePlatformDialogComponent, {
platform: { data: {
name: null, platform: {
url: null id: null,
} name: null,
}, url: null
height: this.deviceType === 'mobile' ? '98vh' : undefined, }
width: this.deviceType === 'mobile' ? '100vw' : '50rem' },
} height: this.deviceType === 'mobile' ? '98vh' : undefined,
); width: this.deviceType === 'mobile' ? '100vw' : '50rem'
});
dialogRef dialogRef
.afterClosed() .afterClosed()
@ -191,21 +193,29 @@ export class GfAdminPlatformComponent implements OnInit, OnDestroy {
}); });
} }
private openUpdatePlatformDialog({ id, name, url }) { private openUpdatePlatformDialog({
const dialogRef = this.dialog.open( id,
name,
url
}: {
id: string;
name: string;
url: string;
}) {
const dialogRef = this.dialog.open<
GfCreateOrUpdatePlatformDialogComponent, GfCreateOrUpdatePlatformDialogComponent,
{ CreateOrUpdatePlatformDialogParams
data: { >(GfCreateOrUpdatePlatformDialogComponent, {
platform: { data: {
id, platform: {
name, id,
url name,
} url
}, }
height: this.deviceType === 'mobile' ? '98vh' : undefined, },
width: this.deviceType === 'mobile' ? '100vw' : '50rem' height: this.deviceType === 'mobile' ? '98vh' : undefined,
} width: this.deviceType === 'mobile' ? '100vw' : '50rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()

14
apps/client/src/app/components/admin-tag/admin-tag.component.ts

@ -32,6 +32,7 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, takeUntil } from 'rxjs'; import { Subject, takeUntil } from 'rxjs';
import { GfCreateOrUpdateTagDialogComponent } from './create-or-update-tag-dialog/create-or-update-tag-dialog.component'; import { GfCreateOrUpdateTagDialogComponent } from './create-or-update-tag-dialog/create-or-update-tag-dialog.component';
import { CreateOrUpdateTagDialogParams } from './create-or-update-tag-dialog/interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@ -149,9 +150,13 @@ export class GfAdminTagComponent implements OnInit, OnDestroy {
} }
private openCreateTagDialog() { private openCreateTagDialog() {
const dialogRef = this.dialog.open(GfCreateOrUpdateTagDialogComponent, { const dialogRef = this.dialog.open<
GfCreateOrUpdateTagDialogComponent,
CreateOrUpdateTagDialogParams
>(GfCreateOrUpdateTagDialogComponent, {
data: { data: {
tag: { tag: {
id: null,
name: null name: null
} }
}, },
@ -183,8 +188,11 @@ export class GfAdminTagComponent implements OnInit, OnDestroy {
}); });
} }
private openUpdateTagDialog({ id, name }) { private openUpdateTagDialog({ id, name }: { id: string; name: string }) {
const dialogRef = this.dialog.open(GfCreateOrUpdateTagDialogComponent, { const dialogRef = this.dialog.open<
GfCreateOrUpdateTagDialogComponent,
CreateOrUpdateTagDialogParams
>(GfCreateOrUpdateTagDialogComponent, {
data: { data: {
tag: { tag: {
id, id,

2
apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts

@ -1,5 +1,5 @@
import { Tag } from '@prisma/client'; import { Tag } from '@prisma/client';
export interface CreateOrUpdateTagDialogParams { export interface CreateOrUpdateTagDialogParams {
tag: Tag; tag: Pick<Tag, 'id' | 'name'>;
} }

21
apps/client/src/app/components/admin-users/admin-users.component.ts

@ -5,7 +5,11 @@ import {
getDateFormatString, getDateFormatString,
getEmojiFlag getEmojiFlag
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
import { AdminUsers, InfoItem, User } from '@ghostfolio/common/interfaces'; import {
AdminUsersResponse,
InfoItem,
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfValueComponent } from '@ghostfolio/ui/value';
@ -75,7 +79,7 @@ import { GfUserDetailDialogComponent } from '../user-detail-dialog/user-detail-d
export class GfAdminUsersComponent implements OnDestroy, OnInit { export class GfAdminUsersComponent implements OnDestroy, OnInit {
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
public dataSource = new MatTableDataSource<AdminUsers['users'][0]>(); public dataSource = new MatTableDataSource<AdminUsersResponse['users'][0]>();
public defaultDateFormat: string; public defaultDateFormat: string;
public deviceType: string; public deviceType: string;
public displayedColumns: string[] = []; public displayedColumns: string[] = [];
@ -278,9 +282,9 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit {
}); });
} }
private openUserDetailDialog(userId: string) { private openUserDetailDialog(aUserId: string) {
const userData = this.dataSource.data.find(({ id }) => { const userData = this.dataSource.data.find(({ id }) => {
return id === userId; return id === aUserId;
}); });
if (!userData) { if (!userData) {
@ -288,13 +292,17 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit {
return; return;
} }
const dialogRef = this.dialog.open(GfUserDetailDialogComponent, { const dialogRef = this.dialog.open<
GfUserDetailDialogComponent,
UserDetailDialogParams
>(GfUserDetailDialogComponent, {
autoFocus: false, autoFocus: false,
data: { data: {
userData, userData,
deviceType: this.deviceType, deviceType: this.deviceType,
hasPermissionForSubscription: this.hasPermissionForSubscription,
locale: this.user?.settings?.locale locale: this.user?.settings?.locale
} as UserDetailDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : '60vh', height: this.deviceType === 'mobile' ? '98vh' : '60vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });
@ -303,7 +311,6 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit {
.afterClosed() .afterClosed()
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => { .subscribe(() => {
this.fetchUsers();
this.router.navigate(['.'], { relativeTo: this.route }); this.router.navigate(['.'], { relativeTo: this.route });
}); });
} }

6
apps/client/src/app/components/header/header.component.ts

@ -1,4 +1,5 @@
import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto'; import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto';
import { LoginWithAccessTokenDialogParams } from '@ghostfolio/client/components/login-with-access-token-dialog/interfaces/interfaces';
import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component'; import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component';
import { LayoutService } from '@ghostfolio/client/core/layout.service'; import { LayoutService } from '@ghostfolio/client/core/layout.service';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
@ -271,7 +272,10 @@ export class GfHeaderComponent implements OnChanges {
} }
public openLoginDialog() { public openLoginDialog() {
const dialogRef = this.dialog.open(GfLoginWithAccessTokenDialogComponent, { const dialogRef = this.dialog.open<
GfLoginWithAccessTokenDialogComponent,
LoginWithAccessTokenDialogParams
>(GfLoginWithAccessTokenDialogComponent, {
autoFocus: false, autoFocus: false,
data: { data: {
accessToken: '', accessToken: '',

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

@ -1,3 +1,4 @@
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
@ -38,7 +39,7 @@ import {
OnDestroy, OnDestroy,
OnInit OnInit
} from '@angular/core'; } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms'; import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MatChipsModule } from '@angular/material/chips'; import { MatChipsModule } from '@angular/material/chips';
import { import {
@ -57,6 +58,7 @@ import { isUUID } from 'class-validator';
import { format, isSameMonth, isToday, parseISO } from 'date-fns'; import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { import {
arrowDownCircleOutline,
createOutline, createOutline,
flagOutline, flagOutline,
readerOutline, readerOutline,
@ -92,6 +94,7 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
MatFormFieldModule, MatFormFieldModule,
MatTabsModule, MatTabsModule,
NgxSkeletonLoaderModule, NgxSkeletonLoaderModule,
ReactiveFormsModule,
RouterModule RouterModule
], ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
@ -101,7 +104,6 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
}) })
export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public activitiesCount: number; public activitiesCount: number;
public activityForm: FormGroup;
public accounts: Account[]; public accounts: Account[];
public assetClass: string; public assetClass: string;
public assetSubClass: string; public assetSubClass: string;
@ -122,6 +124,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public hasPermissionToCreateOwnTag: boolean; public hasPermissionToCreateOwnTag: boolean;
public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean;
public historicalDataItems: LineChartItem[]; public historicalDataItems: LineChartItem[];
public holdingForm: FormGroup;
public investmentInBaseCurrencyWithCurrencyEffect: number; public investmentInBaseCurrencyWithCurrencyEffect: number;
public investmentInBaseCurrencyWithCurrencyEffectPrecision = 2; public investmentInBaseCurrencyWithCurrencyEffectPrecision = 2;
public isUUID = isUUID; public isUUID = isUUID;
@ -167,6 +170,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
private userService: UserService private userService: UserService
) { ) {
addIcons({ addIcons({
arrowDownCircleOutline,
createOutline, createOutline,
flagOutline, flagOutline,
readerOutline, readerOutline,
@ -177,16 +181,16 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
} }
public ngOnInit() { public ngOnInit() {
this.activityForm = this.formBuilder.group({
tags: [] as string[]
});
const filters: Filter[] = [ const filters: Filter[] = [
{ id: this.data.dataSource, type: 'DATA_SOURCE' }, { id: this.data.dataSource, type: 'DATA_SOURCE' },
{ id: this.data.symbol, type: 'SYMBOL' } { id: this.data.symbol, type: 'SYMBOL' }
]; ];
this.activityForm this.holdingForm = this.formBuilder.group({
tags: [] as string[]
});
this.holdingForm
.get('tags') .get('tags')
.valueChanges.pipe(takeUntil(this.unsubscribeSubject)) .valueChanges.pipe(takeUntil(this.unsubscribeSubject))
.subscribe((tags: Tag[]) => { .subscribe((tags: Tag[]) => {
@ -427,7 +431,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
}; };
}); });
this.activityForm.setValue({ tags: this.tags }, { emitEvent: false }); this.holdingForm.setValue({ tags: this.tags }, { emitEvent: false });
this.value = value; this.value = value;
@ -557,6 +561,37 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
this.dialogRef.close(); this.dialogRef.close();
} }
public onCloseHolding() {
const today = new Date();
const activity: CreateOrderDto = {
accountId: this.accounts.length === 1 ? this.accounts[0].id : null,
comment: null,
currency: this.SymbolProfile.currency,
dataSource: this.SymbolProfile.dataSource,
date: today.toISOString(),
fee: 0,
quantity: this.quantity,
symbol: this.SymbolProfile.symbol,
tags: this.tags.map(({ id }) => {
return id;
}),
type: 'SELL',
unitPrice: this.marketPrice
};
this.dataService
.postOrder(activity)
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {
this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink
);
this.dialogRef.close();
});
}
public onExport() { public onExport() {
const activityIds = this.dataSource.data.map(({ id }) => { const activityIds = this.dataSource.data.map(({ id }) => {
return id; return id;
@ -583,10 +618,6 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
} }
} }
public onTagsChanged(tags: Tag[]) {
this.activityForm.get('tags').setValue(tags);
}
public onUpdateActivity(aActivity: Activity) { public onUpdateActivity(aActivity: Activity) {
this.router.navigate( this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink, internalRoutes.portfolio.subRoutes.activities.routerLink,

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

@ -411,13 +411,14 @@
} }
</mat-tab-group> </mat-tab-group>
<gf-tags-selector <form [formGroup]="holdingForm">
[hasPermissionToCreateTag]="hasPermissionToCreateOwnTag" <gf-tags-selector
[readonly]="!data.hasPermissionToUpdateOrder" formControlName="tags"
[tags]="activityForm.get('tags')?.value" [hasPermissionToCreateTag]="hasPermissionToCreateOwnTag"
[tagsAvailable]="tagsAvailable" [readonly]="!data.hasPermissionToUpdateOrder"
(tagsChanged)="onTagsChanged($event)" [tagsAvailable]="tagsAvailable"
/> />
</form>
@if ( @if (
data.hasPermissionToAccessAdminControl || data.hasPermissionToAccessAdminControl ||
@ -428,6 +429,29 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="button-container d-flex flex-wrap"> <div class="button-container d-flex flex-wrap">
@if (data.hasPermissionToCreateActivity && quantity > 0) {
<button
color="warn"
mat-stroked-button
(click)="onCloseHolding()"
>
<ion-icon
class="mr-1"
name="arrow-down-circle-outline"
></ion-icon
><span i18n>Close Holding</span>
</button>
}
@if (
dataSource?.data.length > 0 &&
data.hasPermissionToReportDataGlitch === true
) {
<a color="warn" mat-stroked-button [href]="reportDataGlitchMail"
><ion-icon class="mr-1" name="flag-outline" /><span i18n
>Report Data Glitch</span
>...</a
>
}
@if (data.hasPermissionToAccessAdminControl) { @if (data.hasPermissionToAccessAdminControl) {
<a <a
mat-stroked-button mat-stroked-button
@ -443,16 +467,6 @@
>...</a >...</a
> >
} }
@if (
dataSource?.data.length > 0 &&
data.hasPermissionToReportDataGlitch === true
) {
<a color="warn" mat-stroked-button [href]="reportDataGlitchMail"
><ion-icon class="mr-1" name="flag-outline" /><span i18n
>Report Data Glitch</span
>...</a
>
}
</div> </div>
</div> </div>
</div> </div>

20
apps/client/src/app/components/home-watchlist/home-watchlist.component.ts

@ -149,17 +149,17 @@ export class GfHomeWatchlistComponent implements OnDestroy, OnInit {
.subscribe((user) => { .subscribe((user) => {
this.user = user; this.user = user;
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfCreateWatchlistItemDialogComponent, GfCreateWatchlistItemDialogComponent,
{ CreateWatchlistItemDialogParams
autoFocus: false, >(GfCreateWatchlistItemDialogComponent, {
data: { autoFocus: false,
deviceType: this.deviceType, data: {
locale: this.user?.settings?.locale deviceType: this.deviceType,
} as CreateWatchlistItemDialogParams, locale: this.user?.settings?.locale
width: this.deviceType === 'mobile' ? '100vw' : '50rem' },
} width: this.deviceType === 'mobile' ? '100vw' : '50rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()

5
apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts

@ -0,0 +1,5 @@
export interface LoginWithAccessTokenDialogParams {
accessToken: string;
hasPermissionToUseSocialLogin: boolean;
title: string;
}

22
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts

@ -1,10 +1,8 @@
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { InternetIdentityService } from '@ghostfolio/client/services/internet-identity.service';
import { import {
KEY_STAY_SIGNED_IN, KEY_STAY_SIGNED_IN,
SettingsStorageService SettingsStorageService
} from '@ghostfolio/client/services/settings-storage.service'; } from '@ghostfolio/client/services/settings-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
@ -21,11 +19,12 @@ import {
} from '@angular/material/dialog'; } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field'; import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input'; import { MatInputModule } from '@angular/material/input';
import { Router } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone'; import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { eyeOffOutline, eyeOutline } from 'ionicons/icons'; import { eyeOffOutline, eyeOutline } from 'ionicons/icons';
import { LoginWithAccessTokenDialogParams } from './interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
@ -51,12 +50,9 @@ export class GfLoginWithAccessTokenDialogComponent {
public isAccessTokenHidden = true; public isAccessTokenHidden = true;
public constructor( public constructor(
@Inject(MAT_DIALOG_DATA) public data: any, @Inject(MAT_DIALOG_DATA) public data: LoginWithAccessTokenDialogParams,
public dialogRef: MatDialogRef<GfLoginWithAccessTokenDialogComponent>, public dialogRef: MatDialogRef<GfLoginWithAccessTokenDialogComponent>,
private internetIdentityService: InternetIdentityService, private settingsStorageService: SettingsStorageService
private router: Router,
private settingsStorageService: SettingsStorageService,
private tokenStorageService: TokenStorageService
) { ) {
addIcons({ eyeOffOutline, eyeOutline }); addIcons({ eyeOffOutline, eyeOutline });
} }
@ -79,14 +75,4 @@ export class GfLoginWithAccessTokenDialogComponent {
}); });
} }
} }
public async onLoginWithInternetIdentity() {
try {
const { authToken } = await this.internetIdentityService.login();
this.tokenStorageService.saveToken(authToken);
this.dialogRef.close();
this.router.navigate(['/']);
} catch {}
}
} }

11
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html

@ -26,17 +26,6 @@
@if (data.hasPermissionToUseSocialLogin) { @if (data.hasPermissionToUseSocialLogin) {
<div class="my-3 text-center text-muted" i18n>or</div> <div class="my-3 text-center text-muted" i18n>or</div>
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<button
class="mb-2 px-4 rounded-pill"
mat-stroked-button
(click)="onLoginWithInternetIdentity()"
>
<img
class="mr-2"
src="../assets/icons/internet-computer.svg"
style="height: 0.75rem"
/><span i18n>Sign in with Internet Identity</span>
</button>
<a <a
class="px-4 rounded-pill" class="px-4 rounded-pill"
href="../api/v1/auth/google" href="../api/v1/auth/google"

9
apps/client/src/app/components/rule/rule.component.ts

@ -51,6 +51,7 @@ export class GfRuleComponent implements OnInit {
@Input() categoryName: string; @Input() categoryName: string;
@Input() hasPermissionToUpdateUserSettings: boolean; @Input() hasPermissionToUpdateUserSettings: boolean;
@Input() isLoading: boolean; @Input() isLoading: boolean;
@Input() locale: string;
@Input() rule: PortfolioReportRule; @Input() rule: PortfolioReportRule;
@Input() settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment']; @Input() settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment'];
@ -78,12 +79,16 @@ export class GfRuleComponent implements OnInit {
} }
public onCustomizeRule(rule: PortfolioReportRule) { public onCustomizeRule(rule: PortfolioReportRule) {
const dialogRef = this.dialog.open(GfRuleSettingsDialogComponent, { const dialogRef = this.dialog.open<
GfRuleSettingsDialogComponent,
RuleSettingsDialogParams
>(GfRuleSettingsDialogComponent, {
data: { data: {
rule, rule,
categoryName: this.categoryName, categoryName: this.categoryName,
locale: this.locale,
settings: this.settings settings: this.settings
} as RuleSettingsDialogParams, },
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });

1
apps/client/src/app/components/rules/rules.component.html

@ -12,6 +12,7 @@
[hasPermissionToUpdateUserSettings]=" [hasPermissionToUpdateUserSettings]="
hasPermissionToUpdateUserSettings hasPermissionToUpdateUserSettings
" "
[locale]="locale"
[rule]="rule" [rule]="rule"
[settings]="settings?.[rule.key]" [settings]="settings?.[rule.key]"
(ruleUpdated)="onRuleUpdated($event)" (ruleUpdated)="onRuleUpdated($event)"

1
apps/client/src/app/components/rules/rules.component.ts

@ -26,6 +26,7 @@ export class GfRulesComponent {
@Input() categoryName: string; @Input() categoryName: string;
@Input() hasPermissionToUpdateUserSettings: boolean; @Input() hasPermissionToUpdateUserSettings: boolean;
@Input() isLoading: boolean; @Input() isLoading: boolean;
@Input() locale: string;
@Input() rules: PortfolioReportRule[]; @Input() rules: PortfolioReportRule[];
@Input() settings: XRayRulesSettings; @Input() settings: XRayRulesSettings;

15
apps/client/src/app/components/user-account-access/user-account-access.component.ts

@ -31,6 +31,7 @@ import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators'; import { catchError, takeUntil } from 'rxjs/operators';
import { GfCreateOrUpdateAccessDialogComponent } from './create-or-update-access-dialog/create-or-update-access-dialog.component'; import { GfCreateOrUpdateAccessDialogComponent } from './create-or-update-access-dialog/create-or-update-access-dialog.component';
import { CreateOrUpdateAccessDialogParams } from './create-or-update-access-dialog/interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@ -187,10 +188,15 @@ export class GfUserAccountAccessComponent implements OnDestroy, OnInit {
} }
private openCreateAccessDialog() { private openCreateAccessDialog() {
const dialogRef = this.dialog.open(GfCreateOrUpdateAccessDialogComponent, { const dialogRef = this.dialog.open<
GfCreateOrUpdateAccessDialogComponent,
CreateOrUpdateAccessDialogParams
>(GfCreateOrUpdateAccessDialogComponent, {
data: { data: {
access: { access: {
alias: '', alias: '',
grantee: null,
id: null,
permissions: ['READ_RESTRICTED'], permissions: ['READ_RESTRICTED'],
type: 'PRIVATE' type: 'PRIVATE'
} }
@ -219,12 +225,15 @@ export class GfUserAccountAccessComponent implements OnDestroy, OnInit {
return; return;
} }
const dialogRef = this.dialog.open(GfCreateOrUpdateAccessDialogComponent, { const dialogRef = this.dialog.open<
GfCreateOrUpdateAccessDialogComponent,
CreateOrUpdateAccessDialogParams
>(GfCreateOrUpdateAccessDialogComponent, {
data: { data: {
access: { access: {
alias: access.alias, alias: access.alias,
id: access.id,
grantee: access.grantee === 'Public' ? null : access.grantee, grantee: access.grantee === 'Public' ? null : access.grantee,
id: access.id,
permissions: access.permissions, permissions: access.permissions,
type: access.type type: access.type
} }

5
apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts

@ -1,7 +1,8 @@
import { AdminUsers } from '@ghostfolio/common/interfaces'; import { AdminUsersResponse } from '@ghostfolio/common/interfaces';
export interface UserDetailDialogParams { export interface UserDetailDialogParams {
deviceType: string; deviceType: string;
hasPermissionForSubscription: boolean;
locale: string; locale: string;
userData: AdminUsers['users'][0]; userData: AdminUsersResponse['users'][0];
} }

73
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html

@ -8,9 +8,9 @@
<div class="container p-0"> <div class="container p-0">
<div class="mb-3 row"> <div class="mb-3 row">
<div class="col-6 mb-3"> <div class="col-6 mb-3">
<gf-value i18n size="medium" [value]="data.userData.id" <gf-value i18n size="medium" [value]="data.userData.id">
>User ID</gf-value User ID
> </gf-value>
</div> </div>
<div class="col-6 mb-3"> <div class="col-6 mb-3">
<gf-value <gf-value
@ -19,10 +19,75 @@
[isDate]="true" [isDate]="true"
[locale]="data.locale" [locale]="data.locale"
[value]="data.userData.createdAt" [value]="data.userData.createdAt"
>Registration Date</gf-value
> >
Registration Date
</gf-value>
</div> </div>
</div> </div>
<div class="mb-3 row">
<div class="col-6 mb-3">
<gf-value i18n size="medium" [value]="data.userData.role">
Role
</gf-value>
</div>
@if (data.hasPermissionForSubscription) {
<div class="col-6 mb-3">
<gf-value i18n size="medium" [value]="data.userData.country">
Country
</gf-value>
</div>
}
</div>
<div class="mb-3 row">
<div class="col-6 mb-3">
<gf-value
i18n
size="medium"
[locale]="data.locale"
[value]="data.userData.accountCount"
>
Accounts
</gf-value>
</div>
<div class="col-6 mb-3">
<gf-value
i18n
size="medium"
[locale]="data.locale"
[value]="data.userData.activityCount"
>
Activities
</gf-value>
</div>
</div>
@if (data.hasPermissionForSubscription) {
<div class="mb-3 row">
<div class="col-6 mb-3">
<gf-value
i18n
size="medium"
[locale]="data.locale"
[precision]="0"
[value]="data.userData.engagement"
>
Engagement per Day
</gf-value>
</div>
<div class="col-6 mb-3">
<gf-value
i18n
size="medium"
[locale]="data.locale"
[value]="data.userData.dailyApiRequests"
>
API Requests Today
</gf-value>
</div>
</div>
}
</div> </div>
</div> </div>

2
apps/client/src/app/core/module-preload.service.ts

@ -7,7 +7,7 @@ export class ModulePreloadService implements PreloadingStrategy {
/** /**
* Preloads all lazy loading modules with the attribute 'preload' set to true * Preloads all lazy loading modules with the attribute 'preload' set to true
*/ */
preload(route: Route, load: Function): Observable<any> { preload<T>(route: Route, load: () => Observable<T>): Observable<T | null> {
return route.data?.preload ? load() : of(null); return route.data?.preload ? load() : of(null);
} }
} }

26
apps/client/src/app/pages/about/overview/about-overview-page.html

@ -175,7 +175,7 @@
</div> </div>
</div> </div>
<div class="row"> <div class="mb-5 row">
<div <div
class="col-md-6 col-xs-12 my-2" class="col-md-6 col-xs-12 my-2"
[ngClass]="{ 'offset-md-3': hasPermissionForSubscription === false }" [ngClass]="{ 'offset-md-3': hasPermissionForSubscription === false }"
@ -201,4 +201,28 @@
</div> </div>
} }
</div> </div>
@if (user?.subscription?.type !== 'Premium') {
<div class="row">
<div class="col-12">
<h2 class="h4 mb-3">Sponsors</h2>
<div class="text-center">
<small>Browser testing via</small>
<br />
<a
href="https://www.lambdatest.com?utm_medium=sponsor&utm_source=ghostfolio"
target="_blank"
title="LambdaTest - AI Powered Testing Tool"
>
<img
alt="LambdaTest Logo"
height="45"
src="../assets/images/sponsors/logo-lambdatest.png"
width="250"
/>
</a>
</div>
</div>
</div>
}
</div> </div>

25
apps/client/src/app/pages/accounts/accounts-page.component.ts

@ -23,6 +23,8 @@ import { EMPTY, Subject, Subscription } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators'; import { catchError, takeUntil } from 'rxjs/operators';
import { GfCreateOrUpdateAccountDialogComponent } from './create-or-update-account-dialog/create-or-update-account-dialog.component'; import { GfCreateOrUpdateAccountDialogComponent } from './create-or-update-account-dialog/create-or-update-account-dialog.component';
import { CreateOrUpdateAccountDialogParams } from './create-or-update-account-dialog/interfaces/interfaces';
import { TransferBalanceDialogParams } from './transfer-balance/interfaces/interfaces';
import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-balance-dialog.component'; import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-balance-dialog.component';
@Component({ @Component({
@ -179,7 +181,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit {
name, name,
platformId platformId
}: AccountModel) { }: AccountModel) {
const dialogRef = this.dialog.open(GfCreateOrUpdateAccountDialogComponent, { const dialogRef = this.dialog.open<
GfCreateOrUpdateAccountDialogComponent,
CreateOrUpdateAccountDialogParams
>(GfCreateOrUpdateAccountDialogComponent, {
data: { data: {
account: { account: {
balance, balance,
@ -227,7 +232,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit {
} }
private openAccountDetailDialog(aAccountId: string) { private openAccountDetailDialog(aAccountId: string) {
const dialogRef = this.dialog.open(GfAccountDetailDialogComponent, { const dialogRef = this.dialog.open<
GfAccountDetailDialogComponent,
AccountDetailDialogParams
>(GfAccountDetailDialogComponent, {
autoFocus: false, autoFocus: false,
data: { data: {
accountId: aAccountId, accountId: aAccountId,
@ -237,7 +245,7 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit {
!this.hasImpersonationId && !this.hasImpersonationId &&
hasPermission(this.user?.permissions, permissions.createOrder) && hasPermission(this.user?.permissions, permissions.createOrder) &&
!this.user?.settings?.isRestrictedView !this.user?.settings?.isRestrictedView
} as AccountDetailDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });
@ -253,12 +261,16 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit {
} }
private openCreateAccountDialog() { private openCreateAccountDialog() {
const dialogRef = this.dialog.open(GfCreateOrUpdateAccountDialogComponent, { const dialogRef = this.dialog.open<
GfCreateOrUpdateAccountDialogComponent,
CreateOrUpdateAccountDialogParams
>(GfCreateOrUpdateAccountDialogComponent, {
data: { data: {
account: { account: {
balance: 0, balance: 0,
comment: null, comment: null,
currency: this.user?.settings?.baseCurrency, currency: this.user?.settings?.baseCurrency,
id: null,
isExcluded: false, isExcluded: false,
name: null, name: null,
platformId: null platformId: null
@ -295,7 +307,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit {
} }
private openTransferBalanceDialog() { private openTransferBalanceDialog() {
const dialogRef = this.dialog.open(GfTransferBalanceDialogComponent, { const dialogRef = this.dialog.open<
GfTransferBalanceDialogComponent,
TransferBalanceDialogParams
>(GfTransferBalanceDialogComponent, {
data: { data: {
accounts: this.accounts accounts: this.accounts
}, },

2
apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts

@ -1,5 +1,5 @@
import { Account } from '@prisma/client'; import { Account } from '@prisma/client';
export interface CreateOrUpdateAccountDialogParams { export interface CreateOrUpdateAccountDialogParams {
account: Account; account: Omit<Account, 'createdAt' | 'updatedAt' | 'userId'>;
} }

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

@ -16,11 +16,11 @@ import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone'; import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { import {
albumsOutline,
analyticsOutline, analyticsOutline,
bookmarkOutline, bookmarkOutline,
newspaperOutline, newspaperOutline,
readerOutline, readerOutline
walletOutline
} from 'ionicons/icons'; } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -61,7 +61,7 @@ export class GfHomePageComponent implements OnDestroy, OnInit {
routerLink: internalRoutes.home.routerLink routerLink: internalRoutes.home.routerLink
}, },
{ {
iconName: 'wallet-outline', iconName: 'albums-outline',
label: internalRoutes.home.subRoutes.holdings.title, label: internalRoutes.home.subRoutes.holdings.title,
routerLink: internalRoutes.home.subRoutes.holdings.routerLink routerLink: internalRoutes.home.subRoutes.holdings.routerLink
}, },
@ -97,11 +97,11 @@ export class GfHomePageComponent implements OnDestroy, OnInit {
}); });
addIcons({ addIcons({
albumsOutline,
analyticsOutline, analyticsOutline,
bookmarkOutline, bookmarkOutline,
newspaperOutline, newspaperOutline,
readerOutline, readerOutline
walletOutline
}); });
} }

73
apps/client/src/app/pages/portfolio/activities/activities-page.component.ts

@ -28,6 +28,7 @@ import { Subject, Subscription } from 'rxjs';
import { takeUntil } from 'rxjs/operators'; import { takeUntil } from 'rxjs/operators';
import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component'; import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component';
import { CreateOrUpdateActivityDialogParams } from './create-or-update-activity-dialog/interfaces/interfaces';
import { GfImportActivitiesDialogComponent } from './import-activities-dialog/import-activities-dialog.component'; import { GfImportActivitiesDialogComponent } from './import-activities-dialog/import-activities-dialog.component';
import { ImportActivitiesDialogParams } from './import-activities-dialog/interfaces/interfaces'; import { ImportActivitiesDialogParams } from './import-activities-dialog/interfaces/interfaces';
@ -245,11 +246,14 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit {
} }
public onImport() { public onImport() {
const dialogRef = this.dialog.open(GfImportActivitiesDialogComponent, { const dialogRef = this.dialog.open<
GfImportActivitiesDialogComponent,
ImportActivitiesDialogParams
>(GfImportActivitiesDialogComponent, {
data: { data: {
deviceType: this.deviceType, deviceType: this.deviceType,
user: this.user user: this.user
} as ImportActivitiesDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : undefined, height: this.deviceType === 'mobile' ? '98vh' : undefined,
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });
@ -268,12 +272,15 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit {
} }
public onImportDividends() { public onImportDividends() {
const dialogRef = this.dialog.open(GfImportActivitiesDialogComponent, { const dialogRef = this.dialog.open<
GfImportActivitiesDialogComponent,
ImportActivitiesDialogParams
>(GfImportActivitiesDialogComponent, {
data: { data: {
activityTypes: ['DIVIDEND'], activityTypes: ['DIVIDEND'],
deviceType: this.deviceType, deviceType: this.deviceType,
user: this.user user: this.user
} as ImportActivitiesDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : undefined, height: this.deviceType === 'mobile' ? '98vh' : undefined,
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });
@ -306,18 +313,18 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit {
} }
public openUpdateActivityDialog(aActivity: Activity) { public openUpdateActivityDialog(aActivity: Activity) {
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfCreateOrUpdateActivityDialogComponent, GfCreateOrUpdateActivityDialogComponent,
{ CreateOrUpdateActivityDialogParams
data: { >(GfCreateOrUpdateActivityDialogComponent, {
activity: aActivity, data: {
accounts: this.user?.accounts, activity: aActivity,
user: this.user accounts: this.user?.accounts,
}, user: this.user
height: this.deviceType === 'mobile' ? '98vh' : '80vh', },
width: this.deviceType === 'mobile' ? '100vw' : '50rem' height: this.deviceType === 'mobile' ? '98vh' : '80vh',
} width: this.deviceType === 'mobile' ? '100vw' : '50rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()
@ -350,26 +357,26 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit {
.subscribe((user) => { .subscribe((user) => {
this.updateUser(user); this.updateUser(user);
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfCreateOrUpdateActivityDialogComponent, GfCreateOrUpdateActivityDialogComponent,
{ CreateOrUpdateActivityDialogParams
data: { >(GfCreateOrUpdateActivityDialogComponent, {
accounts: this.user?.accounts, data: {
activity: { accounts: this.user?.accounts,
...aActivity, activity: {
accountId: aActivity?.accountId, ...aActivity,
date: new Date(), accountId: aActivity?.accountId,
id: null, date: new Date(),
fee: 0, id: null,
type: aActivity?.type ?? 'BUY', fee: 0,
unitPrice: null type: aActivity?.type ?? 'BUY',
}, unitPrice: null
user: this.user
}, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', user: this.user
width: this.deviceType === 'mobile' ? '100vw' : '50rem' },
} height: this.deviceType === 'mobile' ? '98vh' : '80vh',
); width: this.deviceType === 'mobile' ? '100vw' : '50rem'
});
dialogRef dialogRef
.afterClosed() .afterClosed()

1
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts

@ -4,7 +4,6 @@ import { User } from '@ghostfolio/common/interfaces';
import { Account } from '@prisma/client'; import { Account } from '@prisma/client';
export interface CreateOrUpdateActivityDialogParams { export interface CreateOrUpdateActivityDialogParams {
accountId: string;
accounts: Account[]; accounts: Account[];
activity: Activity; activity: Activity;
user: User; user: User;

2
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts

@ -3,7 +3,7 @@ import { User } from '@ghostfolio/common/interfaces';
import { Type } from '@prisma/client'; import { Type } from '@prisma/client';
export interface ImportActivitiesDialogParams { export interface ImportActivitiesDialogParams {
activityTypes: Type[]; activityTypes?: Type[];
deviceType: string; deviceType: string;
user: User; user: User;
} }

7
apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts

@ -558,7 +558,10 @@ export class GfAllocationsPageComponent implements OnDestroy, OnInit {
} }
private openAccountDetailDialog(aAccountId: string) { private openAccountDetailDialog(aAccountId: string) {
const dialogRef = this.dialog.open(GfAccountDetailDialogComponent, { const dialogRef = this.dialog.open<
GfAccountDetailDialogComponent,
AccountDetailDialogParams
>(GfAccountDetailDialogComponent, {
autoFocus: false, autoFocus: false,
data: { data: {
accountId: aAccountId, accountId: aAccountId,
@ -568,7 +571,7 @@ export class GfAllocationsPageComponent implements OnDestroy, OnInit {
!this.hasImpersonationId && !this.hasImpersonationId &&
hasPermission(this.user?.permissions, permissions.createOrder) && hasPermission(this.user?.permissions, permissions.createOrder) &&
!this.user?.settings?.isRestrictedView !this.user?.settings?.isRestrictedView
} as AccountDetailDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });

14
apps/client/src/app/pages/portfolio/fire/fire-page.scss

@ -1,9 +1,21 @@
@use '../../../../styles/variables.scss' as variables;
@mixin select-arrow($color) {
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$color}' height='6' width='10'><polygon points='0,0 10,0 5,6'/></svg>");
}
:host { :host {
display: block; display: block;
.safe-withdrawal-rate-select { .safe-withdrawal-rate-select {
@include select-arrow(variables.$dark-primary-text);
appearance: none;
background-color: transparent; background-color: transparent;
background-position: right 0 center;
background-repeat: no-repeat;
color: rgb(var(--dark-primary-text)); color: rgb(var(--dark-primary-text));
padding: 0 0.75rem 0 0.25rem;
&:focus { &:focus {
box-shadow: none; box-shadow: none;
@ -14,6 +26,8 @@
:host-context(.theme-dark) { :host-context(.theme-dark) {
.safe-withdrawal-rate-select { .safe-withdrawal-rate-select {
@include select-arrow(variables.$light-primary-text);
color: rgb(var(--light-primary-text)); color: rgb(var(--light-primary-text));
} }
} }

2
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html

@ -76,6 +76,7 @@
!hasImpersonationId && hasPermissionToUpdateUserSettings !hasImpersonationId && hasPermissionToUpdateUserSettings
" "
[isLoading]="isLoading" [isLoading]="isLoading"
[locale]="user?.settings?.locale"
[rules]="category.rules" [rules]="category.rules"
[settings]="user?.settings?.xRayRules" [settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)" (rulesUpdated)="onRulesUpdated($event)"
@ -90,6 +91,7 @@
!hasImpersonationId && hasPermissionToUpdateUserSettings !hasImpersonationId && hasPermissionToUpdateUserSettings
" "
[isLoading]="isLoading" [isLoading]="isLoading"
[locale]="user?.settings?.locale"
[rules]="inactiveRules" [rules]="inactiveRules"
[settings]="user?.settings?.xRayRules" [settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)" (rulesUpdated)="onRulesUpdated($event)"

34
apps/client/src/app/pages/register/register-page.component.ts

@ -1,5 +1,4 @@
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { InternetIdentityService } from '@ghostfolio/client/services/internet-identity.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { InfoItem, LineChartItem } from '@ghostfolio/common/interfaces'; import { InfoItem, LineChartItem } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@ -43,7 +42,6 @@ export class GfRegisterPageComponent implements OnDestroy, OnInit {
private dataService: DataService, private dataService: DataService,
private deviceService: DeviceDetectorService, private deviceService: DeviceDetectorService,
private dialog: MatDialog, private dialog: MatDialog,
private internetIdentityService: InternetIdentityService,
private router: Router, private router: Router,
private tokenStorageService: TokenStorageService private tokenStorageService: TokenStorageService
) { ) {
@ -73,29 +71,19 @@ export class GfRegisterPageComponent implements OnDestroy, OnInit {
); );
} }
public async onLoginWithInternetIdentity() {
try {
const { authToken } = await this.internetIdentityService.login();
this.tokenStorageService.saveToken(authToken);
await this.router.navigate(['/']);
} catch {}
}
public openShowAccessTokenDialog() { public openShowAccessTokenDialog() {
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfUserAccountRegistrationDialogComponent, GfUserAccountRegistrationDialogComponent,
{ UserAccountRegistrationDialogParams
data: { >(GfUserAccountRegistrationDialogComponent, {
deviceType: this.deviceType, data: {
needsToAcceptTermsOfService: this.hasPermissionForSubscription deviceType: this.deviceType,
} as UserAccountRegistrationDialogParams, needsToAcceptTermsOfService: this.hasPermissionForSubscription
disableClose: true, },
height: this.deviceType === 'mobile' ? '98vh' : undefined, disableClose: true,
width: this.deviceType === 'mobile' ? '100vw' : '30rem' height: this.deviceType === 'mobile' ? '98vh' : undefined,
} width: this.deviceType === 'mobile' ? '100vw' : '30rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()

14
apps/client/src/app/pages/register/register-page.html

@ -28,20 +28,6 @@
</button> </button>
@if (hasPermissionForSocialLogin) { @if (hasPermissionForSocialLogin) {
<div class="my-3 text-muted" i18n>or</div> <div class="my-3 text-muted" i18n>or</div>
@if (false) {
<button
class="d-block mb-2 px-4 rounded-pill"
mat-stroked-button
(click)="onLoginWithInternetIdentity()"
>
<img
class="mr-2"
src="../assets/icons/internet-computer.svg"
style="height: 0.75rem"
/>
<span i18n>Continue with Internet Identity</span>
</button>
}
<a <a
class="px-4 rounded-pill w-100" class="px-4 rounded-pill w-100"
href="../api/v1/auth/google" href="../api/v1/auth/google"

18
apps/client/src/app/pages/resources/glossary/resources-glossary.component.html

@ -5,7 +5,7 @@
<div> <div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Buy and Hold</h3> <h2 class="h5 mb-1 mt-0">Buy and Hold</h2>
<div class="mb-1"> <div class="mb-1">
Buy and hold is a passive investment strategy where you buy assets Buy and hold is a passive investment strategy where you buy assets
and hold them for a long period regardless of fluctuations in the and hold them for a long period regardless of fluctuations in the
@ -22,7 +22,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Deflation</h3> <h2 class="h5 mb-1 mt-0">Deflation</h2>
<div class="mb-1"> <div class="mb-1">
Deflation is a decrease of the general price level for goods and Deflation is a decrease of the general price level for goods and
services in an economy over a period of time. services in an economy over a period of time.
@ -38,7 +38,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Dollar-Cost Averaging (DCA)</h3> <h2 class="h5 mb-1 mt-0">Dollar-Cost Averaging (DCA)</h2>
<div class="mb-1"> <div class="mb-1">
Dollar-cost averaging is an investment strategy where you split Dollar-cost averaging is an investment strategy where you split
the total amount to be invested across periodic purchases of a the total amount to be invested across periodic purchases of a
@ -56,7 +56,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Financial Independence</h3> <h2 class="h5 mb-1 mt-0">Financial Independence</h2>
<div class="mb-1"> <div class="mb-1">
Financial independence is the status of having enough income, for Financial independence is the status of having enough income, for
example with a passive income like dividends, to cover your living example with a passive income like dividends, to cover your living
@ -73,7 +73,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">FIRE</h3> <h2 class="h5 mb-1 mt-0">FIRE</h2>
<div class="mb-1"> <div class="mb-1">
FIRE is a movement that promotes saving and investing to achieve FIRE is a movement that promotes saving and investing to achieve
financial independence and early retirement. financial independence and early retirement.
@ -85,7 +85,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Inflation</h3> <h2 class="h5 mb-1 mt-0">Inflation</h2>
<div class="mb-1"> <div class="mb-1">
Inflation is an increase of the general price level for goods and Inflation is an increase of the general price level for goods and
services in an economy over a period of time. services in an economy over a period of time.
@ -102,7 +102,7 @@
@if (hasPermissionForSubscription) { @if (hasPermissionForSubscription) {
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Personal Finance Tools</h3> <h2 class="h5 mb-1 mt-0">Personal Finance Tools</h2>
<div class="mb-1"> <div class="mb-1">
Personal finance tools are software applications that help Personal finance tools are software applications that help
manage your money, track expenses, set budgets, monitor manage your money, track expenses, set budgets, monitor
@ -118,7 +118,7 @@
} }
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Stagflation</h3> <h2 class="h5 mb-1 mt-0">Stagflation</h2>
<div class="mb-1"> <div class="mb-1">
Stagflation describes a situation in which there is a stagnant Stagflation describes a situation in which there is a stagnant
economy with high unemployment and high inflation. economy with high unemployment and high inflation.
@ -134,7 +134,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Stealth Wealth</h3> <h2 class="h5 mb-1 mt-0">Stealth Wealth</h2>
<div class="mb-1"> <div class="mb-1">
Stealth wealth is a lifestyle choice where you don’t openly show Stealth wealth is a lifestyle choice where you don’t openly show
off your wealth, but instead live quietly to maintain privacy and off your wealth, but instead live quietly to maintain privacy and

4
apps/client/src/app/pages/resources/guides/resources-guides.component.html

@ -5,7 +5,7 @@
<div class="mb-5"> <div class="mb-5">
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Boringly Getting Rich</h3> <h2 class="h5 mb-1 mt-0">Boringly Getting Rich</h2>
<div class="mb-1"> <div class="mb-1">
The <i>Boringly Getting Rich</i> guide supports you to get started The <i>Boringly Getting Rich</i> guide supports you to get started
with investing. It introduces a strategy utilizing a broadly with investing. It introduces a strategy utilizing a broadly
@ -21,7 +21,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">How do I get my finances in order?</h3> <h2 class="h5 mb-1 mt-0">How do I get my finances in order?</h2>
<div class="mb-1"> <div class="mb-1">
Before you can think of long-term investing, you have to get your Before you can think of long-term investing, you have to get your
finances in order. Learn how you can reach your financial goals finances in order. Learn how you can reach your financial goals

8
apps/client/src/app/pages/resources/markets/resources-markets.component.html

@ -3,7 +3,7 @@
<div class="mb-5"> <div class="mb-5">
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Crypto Coins Heatmap</h3> <h2 class="h5 mb-1 mt-0">Crypto Coins Heatmap</h2>
<div class="mb-1"> <div class="mb-1">
With the <i>Crypto Coins Heatmap</i> you can track the daily market With the <i>Crypto Coins Heatmap</i> you can track the daily market
movements of cryptocurrencies as a visual snapshot. movements of cryptocurrencies as a visual snapshot.
@ -17,7 +17,7 @@
</div> </div>
<div class="mb-4 media"> <div class="mb-4 media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Fear & Greed Index</h3> <h2 class="h5 mb-1 mt-0">Fear & Greed Index</h2>
<div class="mb-1"> <div class="mb-1">
The fear and greed index was developed by <i>CNNMoney</i> to measure The fear and greed index was developed by <i>CNNMoney</i> to measure
the primary emotions (fear and greed) that influence how much the primary emotions (fear and greed) that influence how much
@ -32,7 +32,7 @@
</div> </div>
<div class="media"> <div class="media">
<div class="mb-4 media"> <div class="mb-4 media">
<h3 class="h5 mt-0">Inflation Chart</h3> <h2 class="h5 mb-1 mt-0">Inflation Chart</h2>
<div class="mb-1"> <div class="mb-1">
<i>Inflation Chart</i> helps you find the intrinsic value of stock <i>Inflation Chart</i> helps you find the intrinsic value of stock
markets, stock prices, goods and services by adjusting them to the markets, stock prices, goods and services by adjusting them to the
@ -48,7 +48,7 @@
</div> </div>
<div class="media"> <div class="media">
<div class="media-body"> <div class="media-body">
<h3 class="h5 mt-0">Stock Heatmap</h3> <h2 class="h5 mb-1 mt-0">Stock Heatmap</h2>
<div class="mb-1"> <div class="mb-1">
With the <i>Stock Heatmap</i> you can track the daily market movements With the <i>Stock Heatmap</i> you can track the daily market movements
of stocks as a visual snapshot. of stocks as a visual snapshot.

2
apps/client/src/app/pages/resources/overview/resources-overview.component.html

@ -5,7 +5,7 @@
<div class="overview-list"> <div class="overview-list">
@for (item of overviewItems; track item) { @for (item of overviewItems; track item) {
<div class="mb-4"> <div class="mb-4">
<h3 class="h5 mt-0">{{ item.title }}</h3> <h2 class="h5 mb-1 mt-0">{{ item.title }}</h2>
<p class="mb-1">{{ item.description }}</p> <p class="mb-1">{{ item.description }}</p>
<a [routerLink]="item.routerLink">Explore {{ item.title }} →</a> <a [routerLink]="item.routerLink">Explore {{ item.title }} →</a>
</div> </div>

6
apps/client/src/app/pages/zen/zen-page.component.ts

@ -8,7 +8,7 @@ import { MatTabsModule } from '@angular/material/tabs';
import { RouterModule } from '@angular/router'; import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone'; import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { analyticsOutline, walletOutline } from 'ionicons/icons'; import { albumsOutline, analyticsOutline } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators'; import { takeUntil } from 'rxjs/operators';
@ -43,7 +43,7 @@ export class GfZenPageComponent implements OnDestroy, OnInit {
routerLink: internalRoutes.zen.routerLink routerLink: internalRoutes.zen.routerLink
}, },
{ {
iconName: 'wallet-outline', iconName: 'albums-outline',
label: internalRoutes.zen.subRoutes.holdings.title, label: internalRoutes.zen.subRoutes.holdings.title,
routerLink: internalRoutes.zen.subRoutes.holdings.routerLink routerLink: internalRoutes.zen.subRoutes.holdings.routerLink
} }
@ -54,7 +54,7 @@ export class GfZenPageComponent implements OnDestroy, OnInit {
} }
}); });
addIcons({ analyticsOutline, walletOutline }); addIcons({ albumsOutline, analyticsOutline });
} }
public ngOnInit() { public ngOnInit() {

4
apps/client/src/app/services/admin.service.ts

@ -12,7 +12,7 @@ import {
AdminData, AdminData,
AdminJobs, AdminJobs,
AdminMarketData, AdminMarketData,
AdminUsers, AdminUsersResponse,
DataProviderGhostfolioStatusResponse, DataProviderGhostfolioStatusResponse,
EnhancedSymbolProfile, EnhancedSymbolProfile,
Filter Filter
@ -154,7 +154,7 @@ export class AdminService {
params = params.append('skip', skip); params = params.append('skip', skip);
params = params.append('take', take); params = params.append('take', take);
return this.http.get<AdminUsers>('/api/v1/admin/user', { params }); return this.http.get<AdminUsersResponse>('/api/v1/admin/user', { params });
} }
public gather7Days() { public gather7Days() {

56
apps/client/src/app/services/internet-identity.service.ts

@ -1,56 +0,0 @@
import { OAuthResponse } from '@ghostfolio/common/interfaces';
import { HttpClient } from '@angular/common/http';
import { Injectable, OnDestroy } from '@angular/core';
import { AuthClient } from '@dfinity/auth-client';
import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class InternetIdentityService implements OnDestroy {
private unsubscribeSubject = new Subject<void>();
public constructor(private http: HttpClient) {}
public async login(): Promise<OAuthResponse> {
const authClient = await AuthClient.create({
idleOptions: {
disableDefaultIdleCallback: true,
disableIdle: true
}
});
return new Promise((resolve, reject) => {
authClient.login({
onError: async () => {
return reject();
},
onSuccess: () => {
const principalId = authClient.getIdentity().getPrincipal();
this.http
.post<OAuthResponse>(`/api/v1/auth/internet-identity`, {
principalId: principalId.toText()
})
.pipe(
catchError(() => {
reject();
return EMPTY;
}),
takeUntil(this.unsubscribeSubject)
)
.subscribe((response) => {
resolve(response);
});
}
});
});
}
public ngOnDestroy() {
this.unsubscribeSubject.next();
this.unsubscribeSubject.complete();
}
}

22
apps/client/src/app/services/user/user.service.ts

@ -116,18 +116,18 @@ export class UserService extends ObservableStore<UserStoreState> {
permissions.enableSubscriptionInterstitial permissions.enableSubscriptionInterstitial
) )
) { ) {
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfSubscriptionInterstitialDialogComponent, GfSubscriptionInterstitialDialogComponent,
{ SubscriptionInterstitialDialogParams
autoFocus: false, >(GfSubscriptionInterstitialDialogComponent, {
data: { autoFocus: false,
user data: {
} as SubscriptionInterstitialDialogParams, user
disableClose: true, },
height: this.deviceType === 'mobile' ? '98vh' : '80vh', disableClose: true,
width: this.deviceType === 'mobile' ? '100vw' : '50rem' height: this.deviceType === 'mobile' ? '98vh' : '80vh',
} width: this.deviceType === 'mobile' ? '100vw' : '50rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()

28
apps/client/src/assets/icons/internet-computer.svg

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 358.8 179.8" style="enable-background:new 0 0 358.8 179.8;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_2_);}
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#29ABE2;}
</style>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="224.7853" y1="257.7536" x2="348.0663" y2="133.4581" gradientTransform="matrix(1 0 0 -1 0 272)">
<stop offset="0.21" style="stop-color:#F15A24"/>
<stop offset="0.6841" style="stop-color:#FBB03B"/>
</linearGradient>
<path class="st0" d="M271.6,0c-20,0-41.9,10.9-65,32.4c-10.9,10.1-20.5,21.1-27.5,29.8c0,0,11.2,12.9,23.5,26.8
c6.7-8.4,16.2-19.8,27.3-30.1c20.5-19.2,33.9-23.1,41.6-23.1c28.8,0,52.2,24.2,52.2,54.1c0,29.6-23.4,53.8-52.2,54.1
c-1.4,0-3-0.2-5-0.6c8.4,3.9,17.5,6.7,26,6.7c52.8,0,63.2-36.5,63.8-39.1c1.5-6.7,2.4-13.7,2.4-20.9C358.6,40.4,319.6,0,271.6,0z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="133.9461" y1="106.4262" x2="10.6653" y2="230.7215" gradientTransform="matrix(1 0 0 -1 0 272)">
<stop offset="0.21" style="stop-color:#ED1E79"/>
<stop offset="0.8929" style="stop-color:#522785"/>
</linearGradient>
<path class="st1" d="M87.1,179.8c20,0,41.9-10.9,65-32.4c10.9-10.1,20.5-21.1,27.5-29.8c0,0-11.2-12.9-23.5-26.8
c-6.7,8.4-16.2,19.8-27.3,30.1c-20.5,19-34,23.1-41.6,23.1c-28.8,0-52.2-24.2-52.2-54.1c0-29.6,23.4-53.8,52.2-54.1
c1.4,0,3,0.2,5,0.6c-8.4-3.9-17.5-6.7-26-6.7C13.4,29.6,3,66.1,2.4,68.8C0.9,75.5,0,82.5,0,89.7C0,139.4,39,179.8,87.1,179.8z"/>
<path class="st2" d="M127.3,59.7c-5.8-5.6-34-28.5-61-29.3C18.1,29.2,4,64.2,2.7,68.7C12,29.5,46.4,0.2,87.2,0
c33.3,0,67,32.7,91.9,62.2c0,0,0.1-0.1,0.1-0.1c0,0,11.2,12.9,23.5,26.8c0,0,14,16.5,28.8,31c5.8,5.6,33.9,28.2,60.9,29
c49.5,1.4,63.2-35.6,63.9-38.4c-9.1,39.5-43.6,68.9-84.6,69.1c-33.3,0-67-32.7-92-62.2c0,0.1-0.1,0.1-0.1,0.2
c0,0-11.2-12.9-23.5-26.8C156.2,90.8,142.2,74.2,127.3,59.7z M2.7,69.1c0-0.1,0-0.2,0.1-0.3C2.7,68.9,2.7,69,2.7,69.1z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
apps/client/src/assets/images/sponsors/logo-lambdatest.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

12
apps/client/src/assets/oss-friends.json

@ -1,5 +1,5 @@
{ {
"createdAt": "2025-09-17T00:00:00.000Z", "createdAt": "2025-10-31T00:00:00.000Z",
"data": [ "data": [
{ {
"name": "Activepieces", "name": "Activepieces",
@ -16,6 +16,11 @@
"description": "Argos provides the developer tools to debug tests and detect visual regressions.", "description": "Argos provides the developer tools to debug tests and detect visual regressions.",
"href": "https://argos-ci.com" "href": "https://argos-ci.com"
}, },
{
"name": "Bifrost",
"description": "Fastest LLM gateway with adaptive load balancer, cluster mode, guardrails, 1000+ models support & <100 µs overhead at 5k RPS.",
"href": "https://www.getmaxim.ai/bifrost"
},
{ {
"name": "Cal.com", "name": "Cal.com",
"description": "Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.", "description": "Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.",
@ -56,11 +61,6 @@
"description": "Inbox Zero makes it easy to clean up your inbox and reach inbox zero fast. It provides bulk newsletter unsubscribe, cold email blocking, email analytics, and AI automations.", "description": "Inbox Zero makes it easy to clean up your inbox and reach inbox zero fast. It provides bulk newsletter unsubscribe, cold email blocking, email analytics, and AI automations.",
"href": "https://getinboxzero.com" "href": "https://getinboxzero.com"
}, },
{
"name": "Infisical",
"description": "Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.",
"href": "https://infisical.com"
},
{ {
"name": "KeepHQ", "name": "KeepHQ",
"description": "Keep is an open-source AIOps (AI for IT operations) platform", "description": "Keep is an open-source AIOps (AI for IT operations) platform",

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

@ -38,7 +38,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -603,7 +603,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -639,7 +639,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -1366,6 +1366,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="5487499696517396535" datatype="html"> <trans-unit id="5487499696517396535" datatype="html">
<source>Add Platform</source> <source>Add Platform</source>
<target state="translated">Afegeix Plataforma</target> <target state="translated">Afegeix Plataforma</target>
@ -1379,7 +1387,7 @@
<target state="translated">Està segur que vol eliminar aquesta plataforma?</target> <target state="translated">Està segur que vol eliminar aquesta plataforma?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="774722884061553775" datatype="html"> <trans-unit id="774722884061553775" datatype="html">
@ -1443,7 +1451,7 @@
<target state="translated">Està segur que vol eliminar aquesta etiqueta?</target> <target state="translated">Està segur que vol eliminar aquesta etiqueta?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -1651,11 +1659,11 @@
<target state="translated">Oooh! El testimoni de seguretat és incorrecte.</target> <target state="translated">Oooh! El testimoni de seguretat és incorrecte.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1739,7 +1747,7 @@
<target state="translated">Informar d’un Problema amb les Dades</target> <target state="translated">Informar d’un Problema amb les Dades</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8204176479746810612" datatype="html"> <trans-unit id="8204176479746810612" datatype="html">
@ -2409,10 +2417,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2891,7 +2895,7 @@
<target state="translated">Vaja, la transferència del saldo en efectiu ha fallat.</target> <target state="translated">Vaja, la transferència del saldo en efectiu ha fallat.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4154970040744792968" datatype="html"> <trans-unit id="4154970040744792968" datatype="html">
@ -4451,6 +4455,14 @@
<context context-type="linenumber">91</context> <context context-type="linenumber">91</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Rendiment absolut dels actius</target> <target state="translated">Rendiment absolut dels actius</target>
@ -5112,6 +5124,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Pla gratuït</target> <target state="translated">Pla gratuït</target>
@ -5305,7 +5325,7 @@
<target state="translated">Clonar</target> <target state="translated">Clonar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -5313,7 +5333,7 @@
<target state="translated">Exporta l’esborrany com a ICS</target> <target state="translated">Exporta l’esborrany com a ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4239552960465242484" datatype="html"> <trans-unit id="4239552960465242484" datatype="html">
@ -5321,7 +5341,7 @@
<target state="translated">De veritat vols suprimir aquestes activitats?</target> <target state="translated">De veritat vols suprimir aquestes activitats?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -5329,7 +5349,7 @@
<target state="translated">Realment vols suprimir aquesta activitat?</target> <target state="translated">Realment vols suprimir aquesta activitat?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3105754554141014845" datatype="html"> <trans-unit id="3105754554141014845" datatype="html">
@ -6408,6 +6428,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="new">Canada</target> <target state="new">Canada</target>
@ -6565,7 +6593,7 @@
<target state="new">Inactive</target> <target state="new">Inactive</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6668,6 +6696,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="new">Yes</target> <target state="new">Yes</target>
@ -6679,6 +6715,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6972,6 +7012,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="new">Guides</target> <target state="new">Guides</target>
@ -7110,6 +7158,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="new">API Key</target> <target state="new">API Key</target>
@ -7199,7 +7255,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="new">Default Market Price</target> <target state="new">Default Market Price</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="new">Do you really want to generate a new security token?</target> <target state="new">Do you really want to generate a new security token?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="new">Manage Asset Profile</target> <target state="new">Manage Asset Profile</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="new">Average Unit Price</target> <target state="new">Average Unit Price</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -242,7 +242,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -278,7 +278,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -633,6 +633,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="translated">Aktivitäten</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html"> <trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source> <source>Do you really want to delete this user?</source>
<target state="translated">Möchtest du diesen Benutzer wirklich löschen?</target> <target state="translated">Möchtest du diesen Benutzer wirklich löschen?</target>
@ -710,7 +718,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -730,11 +738,11 @@
<target state="translated">Ups! Falsches Sicherheits-Token.</target> <target state="translated">Ups! Falsches Sicherheits-Token.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -982,7 +990,7 @@
<target state="translated">Datenfehler melden</target> <target state="translated">Datenfehler melden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8927080808898221200" datatype="html"> <trans-unit id="8927080808898221200" datatype="html">
@ -1280,10 +1288,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2238,7 +2242,7 @@
<target state="translated">Kopieren</target> <target state="translated">Kopieren</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -2246,7 +2250,7 @@
<target state="translated">Geplante Aktivität als ICS exportieren</target> <target state="translated">Geplante Aktivität als ICS exportieren</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -2254,7 +2258,7 @@
<target state="translated">Möchtest du diese Aktivität wirklich löschen?</target> <target state="translated">Möchtest du diese Aktivität wirklich löschen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -3746,7 +3750,7 @@
<target state="translated">Möchtest du diese Aktivitäten wirklich löschen?</target> <target state="translated">Möchtest du diese Aktivitäten wirklich löschen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7462039419171681274" datatype="html"> <trans-unit id="7462039419171681274" datatype="html">
@ -3806,7 +3810,7 @@
<target state="translated">Möchtest du diese Plattform wirklich löschen?</target> <target state="translated">Möchtest du diese Plattform wirklich löschen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7966917302907632321" datatype="html"> <trans-unit id="7966917302907632321" datatype="html">
@ -4313,6 +4317,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="translated">Benutzer ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Kostenlose Nutzung</target> <target state="translated">Kostenlose Nutzung</target>
@ -5364,7 +5376,7 @@
<target state="translated">Möchtest du diesen Tag wirklich löschen?</target> <target state="translated">Möchtest du diesen Tag wirklich löschen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5556,7 +5568,7 @@
<target state="translated">Ups, der Cash-Bestand Transfer ist fehlgeschlagen.</target> <target state="translated">Ups, der Cash-Bestand Transfer ist fehlgeschlagen.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5771,6 +5783,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="translated">Position abschliessen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Absolute Anlage Performance</target> <target state="translated">Absolute Anlage Performance</target>
@ -6432,6 +6452,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="translated">Position ansehen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Kanada</target> <target state="translated">Kanada</target>
@ -6589,7 +6617,7 @@
<target state="translated">Inaktiv</target> <target state="translated">Inaktiv</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6692,6 +6720,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="translated">Rolle</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Ja</target> <target state="translated">Ja</target>
@ -6703,6 +6739,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="translated">Konten</target> <target state="translated">Konten</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6996,6 +7036,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="translated">Engagement pro Tag</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Ratgeber</target> <target state="translated">Ratgeber</target>
@ -7134,6 +7182,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="translated">Land</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">API-Schlüssel</target> <target state="translated">API-Schlüssel</target>
@ -7223,7 +7279,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7282,6 +7338,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="translated">Heutige API Anfragen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Standardmarktpreis</target> <target state="translated">Standardmarktpreis</target>
@ -7479,7 +7543,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="translated">Möchtest du wirklich ein neues Sicherheits-Token generieren?</target> <target state="translated">Möchtest du wirklich ein neues Sicherheits-Token generieren?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="translated">Anlageprofil verwalten</target> <target state="translated">Anlageprofil verwalten</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="translated">Ø Preis pro Einheit</target> <target state="translated">Ø Preis pro Einheit</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="translated">Registrierungsdatum</target> <target state="translated">Registrierungsdatum</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -243,7 +243,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -279,7 +279,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -618,6 +618,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html"> <trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source> <source>Do you really want to delete this user?</source>
<target state="translated">¿Estás seguro de eliminar este usuario?</target> <target state="translated">¿Estás seguro de eliminar este usuario?</target>
@ -695,7 +703,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -715,11 +723,11 @@
<target state="translated">Vaya! Token de seguridad incorrecto.</target> <target state="translated">Vaya! Token de seguridad incorrecto.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -967,7 +975,7 @@
<target state="translated">Reporta un anomalía de los datos</target> <target state="translated">Reporta un anomalía de los datos</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8927080808898221200" datatype="html"> <trans-unit id="8927080808898221200" datatype="html">
@ -1265,10 +1273,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2223,7 +2227,7 @@
<target state="translated">Clonar</target> <target state="translated">Clonar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -2231,7 +2235,7 @@
<target state="translated">Exportar borrador como ICS</target> <target state="translated">Exportar borrador como ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -2239,7 +2243,7 @@
<target state="translated">¿Estás seguro de eliminar esta operación?</target> <target state="translated">¿Estás seguro de eliminar esta operación?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -3723,7 +3727,7 @@
<target state="translated">¿Realmente deseas eliminar estas actividades?</target> <target state="translated">¿Realmente deseas eliminar estas actividades?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7462039419171681274" datatype="html"> <trans-unit id="7462039419171681274" datatype="html">
@ -3783,7 +3787,7 @@
<target state="translated">¿Realmente deseas eliminar esta plataforma?</target> <target state="translated">¿Realmente deseas eliminar esta plataforma?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7966917302907632321" datatype="html"> <trans-unit id="7966917302907632321" datatype="html">
@ -4290,6 +4294,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Plan gratuito</target> <target state="translated">Plan gratuito</target>
@ -5341,7 +5353,7 @@
<target state="translated">¿Realmente deseas eliminar esta etiqueta?</target> <target state="translated">¿Realmente deseas eliminar esta etiqueta?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5533,7 +5545,7 @@
<target state="translated">Oops, el saldo de efectivo no se ha transferido.</target> <target state="translated">Oops, el saldo de efectivo no se ha transferido.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5748,6 +5760,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Rendimiento absoluto de los activos</target> <target state="translated">Rendimiento absoluto de los activos</target>
@ -6409,6 +6429,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Canadá</target> <target state="translated">Canadá</target>
@ -6566,7 +6594,7 @@
<target state="translated">Inactiva</target> <target state="translated">Inactiva</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6669,6 +6697,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Sí</target> <target state="translated">Sí</target>
@ -6680,6 +6716,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6973,6 +7013,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Guías</target> <target state="translated">Guías</target>
@ -7111,6 +7159,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">Clave API</target> <target state="translated">Clave API</target>
@ -7200,7 +7256,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7259,6 +7315,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Precio de mercado por defecto</target> <target state="translated">Precio de mercado por defecto</target>
@ -7456,7 +7520,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8073,7 +8137,7 @@
<target state="translated">¿Realmente deseas generar un nuevo token de seguridad?</target> <target state="translated">¿Realmente deseas generar un nuevo token de seguridad?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8129,7 +8193,7 @@
<target state="translated">Gestionar perfil de activo</target> <target state="translated">Gestionar perfil de activo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8153,7 +8217,7 @@
<target state="translated">Precio medio por unidad</target> <target state="translated">Precio medio por unidad</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8544,12 +8608,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -298,7 +298,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -334,7 +334,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -825,6 +825,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html"> <trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source> <source>Do you really want to delete this user?</source>
<target state="translated">Voulez-vous vraiment supprimer cet·te utilisateur·rice ?</target> <target state="translated">Voulez-vous vraiment supprimer cet·te utilisateur·rice ?</target>
@ -942,7 +950,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -962,11 +970,11 @@
<target state="translated">Oups! Jeton de Sécurité Incorrect.</target> <target state="translated">Oups! Jeton de Sécurité Incorrect.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1254,7 +1262,7 @@
<target state="translated">Signaler une Erreur de Données</target> <target state="translated">Signaler une Erreur de Données</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6048892649018070225" datatype="html"> <trans-unit id="6048892649018070225" datatype="html">
@ -1612,10 +1620,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2698,7 +2702,7 @@
<target state="translated">Dupliquer</target> <target state="translated">Dupliquer</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -2706,7 +2710,7 @@
<target state="translated">Exporter Brouillon sous ICS</target> <target state="translated">Exporter Brouillon sous ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -2714,7 +2718,7 @@
<target state="translated">Voulez-vous vraiment supprimer cette activité ?</target> <target state="translated">Voulez-vous vraiment supprimer cette activité ?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -3722,7 +3726,7 @@
<target state="translated">Voulez-vous vraiment supprimer toutes vos activités ?</target> <target state="translated">Voulez-vous vraiment supprimer toutes vos activités ?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7462039419171681274" datatype="html"> <trans-unit id="7462039419171681274" datatype="html">
@ -3782,7 +3786,7 @@
<target state="translated">Voulez-vous vraiment supprimer cette plateforme ?</target> <target state="translated">Voulez-vous vraiment supprimer cette plateforme ?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7966917302907632321" datatype="html"> <trans-unit id="7966917302907632321" datatype="html">
@ -4289,6 +4293,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Plan gratuit</target> <target state="translated">Plan gratuit</target>
@ -5340,7 +5352,7 @@
<target state="translated">Confirmez la suppression de ce tag ?</target> <target state="translated">Confirmez la suppression de ce tag ?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5532,7 +5544,7 @@
<target state="translated">Oops, échec du transfert de la cash balance.</target> <target state="translated">Oops, échec du transfert de la cash balance.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5747,6 +5759,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Performance des Actifs en valeur absolue</target> <target state="translated">Performance des Actifs en valeur absolue</target>
@ -6408,6 +6428,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Canada</target> <target state="translated">Canada</target>
@ -6565,7 +6593,7 @@
<target state="translated">Inactif</target> <target state="translated">Inactif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6668,6 +6696,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Oui</target> <target state="translated">Oui</target>
@ -6679,6 +6715,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6972,6 +7012,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Guides</target> <target state="translated">Guides</target>
@ -7110,6 +7158,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">Clé API</target> <target state="translated">Clé API</target>
@ -7199,7 +7255,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Prix du marché par défaut</target> <target state="translated">Prix du marché par défaut</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="translated">Voulez-vous vraiment générer un nouveau jeton de sécurité?</target> <target state="translated">Voulez-vous vraiment générer un nouveau jeton de sécurité?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="translated">Gérer le profil d’actif</target> <target state="translated">Gérer le profil d’actif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="new">Average Unit Price</target> <target state="new">Average Unit Price</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -243,7 +243,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -279,7 +279,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -618,6 +618,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html"> <trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source> <source>Do you really want to delete this user?</source>
<target state="translated">Vuoi davvero eliminare questo utente?</target> <target state="translated">Vuoi davvero eliminare questo utente?</target>
@ -695,7 +703,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -715,11 +723,11 @@
<target state="translated">Ops! Token di sicurezza errato.</target> <target state="translated">Ops! Token di sicurezza errato.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -967,7 +975,7 @@
<target state="translated">Segnala un’anomalia dei dati</target> <target state="translated">Segnala un’anomalia dei dati</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8927080808898221200" datatype="html"> <trans-unit id="8927080808898221200" datatype="html">
@ -1265,10 +1273,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2223,7 +2227,7 @@
<target state="translated">Clona</target> <target state="translated">Clona</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -2231,7 +2235,7 @@
<target state="translated">Esporta la bozza come ICS</target> <target state="translated">Esporta la bozza come ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -2239,7 +2243,7 @@
<target state="translated">Vuoi davvero eliminare questa attività?</target> <target state="translated">Vuoi davvero eliminare questa attività?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -3723,7 +3727,7 @@
<target state="translated">Vuoi davvero eliminare tutte le tue attività?</target> <target state="translated">Vuoi davvero eliminare tutte le tue attività?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7462039419171681274" datatype="html"> <trans-unit id="7462039419171681274" datatype="html">
@ -3783,7 +3787,7 @@
<target state="translated">Vuoi davvero eliminare questa piattaforma?</target> <target state="translated">Vuoi davvero eliminare questa piattaforma?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7966917302907632321" datatype="html"> <trans-unit id="7966917302907632321" datatype="html">
@ -4290,6 +4294,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Piano gratuito</target> <target state="translated">Piano gratuito</target>
@ -5341,7 +5353,7 @@
<target state="translated">Sei sicuro di voler eliminare questo tag?</target> <target state="translated">Sei sicuro di voler eliminare questo tag?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5533,7 +5545,7 @@
<target state="translated">Ops, il trasferimento del saldo di cassa è fallito.</target> <target state="translated">Ops, il trasferimento del saldo di cassa è fallito.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5748,6 +5760,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Rendimento assoluto dell’Asset</target> <target state="translated">Rendimento assoluto dell’Asset</target>
@ -6409,6 +6429,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Canada</target> <target state="translated">Canada</target>
@ -6566,7 +6594,7 @@
<target state="translated">Inattivo</target> <target state="translated">Inattivo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6669,6 +6697,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Si</target> <target state="translated">Si</target>
@ -6680,6 +6716,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6973,6 +7013,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Guide</target> <target state="translated">Guide</target>
@ -7111,6 +7159,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">API Key</target> <target state="translated">API Key</target>
@ -7200,7 +7256,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7259,6 +7315,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Prezzo di mercato predefinito</target> <target state="translated">Prezzo di mercato predefinito</target>
@ -7456,7 +7520,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8073,7 +8137,7 @@
<target state="translated">Vuoi davvero generare un nuovo token di sicurezza?</target> <target state="translated">Vuoi davvero generare un nuovo token di sicurezza?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8129,7 +8193,7 @@
<target state="translated">Gestisci profilo risorsa</target> <target state="translated">Gestisci profilo risorsa</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8153,7 +8217,7 @@
<target state="new">Average Unit Price</target> <target state="new">Average Unit Price</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8544,12 +8608,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -242,7 +242,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -278,7 +278,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -617,6 +617,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html"> <trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source> <source>Do you really want to delete this user?</source>
<target state="translated">Wilt je deze gebruiker echt verwijderen?</target> <target state="translated">Wilt je deze gebruiker echt verwijderen?</target>
@ -694,7 +702,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -714,11 +722,11 @@
<target state="translated">Oeps! Onjuiste beveiligingstoken.</target> <target state="translated">Oeps! Onjuiste beveiligingstoken.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -966,7 +974,7 @@
<target state="translated">Gegevensstoring melden</target> <target state="translated">Gegevensstoring melden</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8927080808898221200" datatype="html"> <trans-unit id="8927080808898221200" datatype="html">
@ -1264,10 +1272,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2222,7 +2226,7 @@
<target state="translated">Kloon</target> <target state="translated">Kloon</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -2230,7 +2234,7 @@
<target state="translated">Concept exporteren als ICS</target> <target state="translated">Concept exporteren als ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -2238,7 +2242,7 @@
<target state="translated">Wil je deze activiteit echt verwijderen?</target> <target state="translated">Wil je deze activiteit echt verwijderen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -3722,7 +3726,7 @@
<target state="translated">Weet je zeker dat je alle activiteiten wilt verwijderen?</target> <target state="translated">Weet je zeker dat je alle activiteiten wilt verwijderen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7462039419171681274" datatype="html"> <trans-unit id="7462039419171681274" datatype="html">
@ -3782,7 +3786,7 @@
<target state="translated">Wil je dit platform echt verwijderen?</target> <target state="translated">Wil je dit platform echt verwijderen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7966917302907632321" datatype="html"> <trans-unit id="7966917302907632321" datatype="html">
@ -4289,6 +4293,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Gratis abonnement</target> <target state="translated">Gratis abonnement</target>
@ -5340,7 +5352,7 @@
<target state="translated">Weet u zetker dat u dit label wilt verwijderen?</target> <target state="translated">Weet u zetker dat u dit label wilt verwijderen?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5532,7 +5544,7 @@
<target state="translated">Oeps, geldoverdracht is mislukt.</target> <target state="translated">Oeps, geldoverdracht is mislukt.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5747,6 +5759,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Absolute Activaprestaties</target> <target state="translated">Absolute Activaprestaties</target>
@ -6408,6 +6428,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Canada</target> <target state="translated">Canada</target>
@ -6565,7 +6593,7 @@
<target state="translated">Inactief</target> <target state="translated">Inactief</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6668,6 +6696,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Ja</target> <target state="translated">Ja</target>
@ -6679,6 +6715,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6972,6 +7012,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Gidsen</target> <target state="translated">Gidsen</target>
@ -7110,6 +7158,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">API-sleutel</target> <target state="translated">API-sleutel</target>
@ -7199,7 +7255,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Standaard Marktprijs</target> <target state="translated">Standaard Marktprijs</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="translated">Wilt u echt een nieuwe securitytoken genereren?</target> <target state="translated">Wilt u echt een nieuwe securitytoken genereren?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="translated">Beheer activaprofiel</target> <target state="translated">Beheer activaprofiel</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="translated">Gemiddelde eenheidsprijs</target> <target state="translated">Gemiddelde eenheidsprijs</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -519,7 +519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -555,7 +555,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -1166,6 +1166,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="5487499696517396535" datatype="html"> <trans-unit id="5487499696517396535" datatype="html">
<source>Add Platform</source> <source>Add Platform</source>
<target state="translated">Dodaj Platformę</target> <target state="translated">Dodaj Platformę</target>
@ -1199,7 +1207,7 @@
<target state="translated">Czy naprawdę chcesz usunąć tę platformę?</target> <target state="translated">Czy naprawdę chcesz usunąć tę platformę?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="774722884061553775" datatype="html"> <trans-unit id="774722884061553775" datatype="html">
@ -1263,7 +1271,7 @@
<target state="translated">Czy naprawdę chcesz usunąć ten tag?</target> <target state="translated">Czy naprawdę chcesz usunąć ten tag?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -1431,7 +1439,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -1451,11 +1459,11 @@
<target state="translated">Ups! Nieprawidłowy token bezpieczeństwa.</target> <target state="translated">Ups! Nieprawidłowy token bezpieczeństwa.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1875,7 +1883,7 @@
<target state="translated">Zgłoś Błąd Danych</target> <target state="translated">Zgłoś Błąd Danych</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5451369123952965511" datatype="html"> <trans-unit id="5451369123952965511" datatype="html">
@ -2353,10 +2361,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="8604673556809626581" datatype="html"> <trans-unit id="8604673556809626581" datatype="html">
<source>Export Data</source> <source>Export Data</source>
@ -2559,7 +2563,7 @@
<target state="translated">Ups, transfer salda nie powiódł się.</target> <target state="translated">Ups, transfer salda nie powiódł się.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4154970040744792968" datatype="html"> <trans-unit id="4154970040744792968" datatype="html">
@ -3563,7 +3567,7 @@
<target state="translated">Czy na pewno chcesz usunąć te aktywności?</target> <target state="translated">Czy na pewno chcesz usunąć te aktywności?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1111435290645444471" datatype="html"> <trans-unit id="1111435290645444471" datatype="html">
@ -4643,6 +4647,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Plan Darmowy</target> <target state="translated">Plan Darmowy</target>
@ -4832,7 +4844,7 @@
<target state="translated">Sklonuj</target> <target state="translated">Sklonuj</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -4840,7 +4852,7 @@
<target state="translated">Eksportuj Wersję Roboczą jako ICS</target> <target state="translated">Eksportuj Wersję Roboczą jako ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -4848,7 +4860,7 @@
<target state="translated">Czy na pewno chcesz usunąć tę działalność?</target> <target state="translated">Czy na pewno chcesz usunąć tę działalność?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3060494754215793943" datatype="html"> <trans-unit id="3060494754215793943" datatype="html">
@ -5747,6 +5759,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Łączny wynik aktywów</target> <target state="translated">Łączny wynik aktywów</target>
@ -6408,6 +6428,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Kanada</target> <target state="translated">Kanada</target>
@ -6565,7 +6593,7 @@
<target state="translated">Nieaktywny</target> <target state="translated">Nieaktywny</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6668,6 +6696,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Tak</target> <target state="translated">Tak</target>
@ -6679,6 +6715,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6972,6 +7012,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Poradniki</target> <target state="translated">Poradniki</target>
@ -7110,6 +7158,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">Klucz API</target> <target state="translated">Klucz API</target>
@ -7199,7 +7255,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Domyślna cena rynkowa</target> <target state="translated">Domyślna cena rynkowa</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="translated">Czy na pewno chcesz wygenerować nowy token bezpieczeństwa?</target> <target state="translated">Czy na pewno chcesz wygenerować nowy token bezpieczeństwa?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="translated">Zarządzaj profilem aktywów</target> <target state="translated">Zarządzaj profilem aktywów</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="translated">Średnia cena jednostkowa</target> <target state="translated">Średnia cena jednostkowa</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -298,7 +298,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -334,7 +334,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -697,6 +697,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="2817099043823177227" datatype="html"> <trans-unit id="2817099043823177227" datatype="html">
<source>Do you really want to delete this user?</source> <source>Do you really want to delete this user?</source>
<target state="translated">Deseja realmente excluir este utilizador?</target> <target state="translated">Deseja realmente excluir este utilizador?</target>
@ -814,7 +822,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -834,11 +842,11 @@
<target state="translated">Oops! Token de Segurança Incorreto.</target> <target state="translated">Oops! Token de Segurança Incorreto.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1214,7 +1222,7 @@
<target state="translated">Dados do Relatório com Problema</target> <target state="translated">Dados do Relatório com Problema</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8927080808898221200" datatype="html"> <trans-unit id="8927080808898221200" datatype="html">
@ -1608,10 +1616,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="5369707274411995821" datatype="html"> <trans-unit id="5369707274411995821" datatype="html">
<source>Granted Access</source> <source>Granted Access</source>
@ -2598,7 +2602,7 @@
<target state="translated">Clonar</target> <target state="translated">Clonar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -2606,7 +2610,7 @@
<target state="translated">Exportar Rascunho como ICS</target> <target state="translated">Exportar Rascunho como ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -2614,7 +2618,7 @@
<target state="translated">Deseja realmente eliminar esta atividade?</target> <target state="translated">Deseja realmente eliminar esta atividade?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -3722,7 +3726,7 @@
<target state="translated">Deseja mesmo eliminar estas atividades?</target> <target state="translated">Deseja mesmo eliminar estas atividades?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7462039419171681274" datatype="html"> <trans-unit id="7462039419171681274" datatype="html">
@ -3782,7 +3786,7 @@
<target state="translated">Deseja mesmo eliminar esta plataforma?</target> <target state="translated">Deseja mesmo eliminar esta plataforma?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7966917302907632321" datatype="html"> <trans-unit id="7966917302907632321" datatype="html">
@ -4289,6 +4293,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Plano gratuito</target> <target state="translated">Plano gratuito</target>
@ -5340,7 +5352,7 @@
<target state="translated">Você realmente deseja excluir esta tag?</target> <target state="translated">Você realmente deseja excluir esta tag?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5532,7 +5544,7 @@
<target state="translated">Ops, a transferência do saldo em dinheiro falhou.</target> <target state="translated">Ops, a transferência do saldo em dinheiro falhou.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5747,6 +5759,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Desempenho absoluto de ativos</target> <target state="translated">Desempenho absoluto de ativos</target>
@ -6408,6 +6428,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Canadá</target> <target state="translated">Canadá</target>
@ -6565,7 +6593,7 @@
<target state="translated">Inativo</target> <target state="translated">Inativo</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6668,6 +6696,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Sim</target> <target state="translated">Sim</target>
@ -6679,6 +6715,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6972,6 +7012,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Guias</target> <target state="translated">Guias</target>
@ -7110,6 +7158,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">Chave de API</target> <target state="translated">Chave de API</target>
@ -7199,7 +7255,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Preço de mercado padrão</target> <target state="translated">Preço de mercado padrão</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="new">Do you really want to generate a new security token?</target> <target state="new">Do you really want to generate a new security token?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="translated">Gerenciar perfil de ativos</target> <target state="translated">Gerenciar perfil de ativos</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="translated">Preço médio unitário</target> <target state="translated">Preço médio unitário</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -479,7 +479,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -515,7 +515,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -1078,6 +1078,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="5487499696517396535" datatype="html"> <trans-unit id="5487499696517396535" datatype="html">
<source>Add Platform</source> <source>Add Platform</source>
<target state="translated">Platform Ekle</target> <target state="translated">Platform Ekle</target>
@ -1111,7 +1119,7 @@
<target state="translated">Bu platformu silmeyi gerçekten istiyor musunuz?</target> <target state="translated">Bu platformu silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="774722884061553775" datatype="html"> <trans-unit id="774722884061553775" datatype="html">
@ -1287,7 +1295,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -1307,11 +1315,11 @@
<target state="translated">Hay Allah! Güvenlik anahtarı yanlış.</target> <target state="translated">Hay Allah! Güvenlik anahtarı yanlış.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1731,7 +1739,7 @@
<target state="translated">Rapor Veri Sorunu</target> <target state="translated">Rapor Veri Sorunu</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5451369123952965511" datatype="html"> <trans-unit id="5451369123952965511" datatype="html">
@ -3063,7 +3071,7 @@
<target state="translated">Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz?</target> <target state="translated">Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1111435290645444471" datatype="html"> <trans-unit id="1111435290645444471" datatype="html">
@ -4131,6 +4139,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">Ücretsiz Plan</target> <target state="translated">Ücretsiz Plan</target>
@ -4470,10 +4486,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="8604673556809626581" datatype="html"> <trans-unit id="8604673556809626581" datatype="html">
<source>Export Data</source> <source>Export Data</source>
@ -4552,7 +4564,7 @@
<target state="translated">Klonla</target> <target state="translated">Klonla</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -4560,7 +4572,7 @@
<target state="translated">Taslakları ICS Olarak Dışa Aktar</target> <target state="translated">Taslakları ICS Olarak Dışa Aktar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -4568,7 +4580,7 @@
<target state="translated">TBu işlemi silmeyi gerçekten istiyor musunuz?</target> <target state="translated">TBu işlemi silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5425547984857378790" datatype="html"> <trans-unit id="5425547984857378790" datatype="html">
@ -5340,7 +5352,7 @@
<target state="translated">Bu etiketi silmeyi gerçekten istiyor musunuz?</target> <target state="translated">Bu etiketi silmeyi gerçekten istiyor musunuz?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -5532,7 +5544,7 @@
<target state="translated">Hay Allah, Nakit bakiyesi tranferi başarısız oldu.</target> <target state="translated">Hay Allah, Nakit bakiyesi tranferi başarısız oldu.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1189482335778578193" datatype="html"> <trans-unit id="1189482335778578193" datatype="html">
@ -5747,6 +5759,14 @@
<context context-type="linenumber">364</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Mutlak Varlık Performansı</target> <target state="translated">Mutlak Varlık Performansı</target>
@ -6408,6 +6428,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Kanada</target> <target state="translated">Kanada</target>
@ -6565,7 +6593,7 @@
<target state="translated">Pasif</target> <target state="translated">Pasif</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6668,6 +6696,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Evet</target> <target state="translated">Evet</target>
@ -6679,6 +6715,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6972,6 +7012,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Kılavuzlar</target> <target state="translated">Kılavuzlar</target>
@ -7110,6 +7158,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">API Anahtarı</target> <target state="translated">API Anahtarı</target>
@ -7199,7 +7255,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">Varsayılan Piyasa Fiyatı</target> <target state="translated">Varsayılan Piyasa Fiyatı</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="new">Do you really want to generate a new security token?</target> <target state="new">Do you really want to generate a new security token?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="new">Manage Asset Profile</target> <target state="new">Manage Asset Profile</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="new">Average Unit Price</target> <target state="new">Average Unit Price</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -38,7 +38,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -345,6 +345,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -627,7 +631,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -663,7 +667,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -1362,6 +1366,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="5487499696517396535" datatype="html"> <trans-unit id="5487499696517396535" datatype="html">
<source>Add Platform</source> <source>Add Platform</source>
<target state="translated">Додати платформу</target> <target state="translated">Додати платформу</target>
@ -1375,7 +1387,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/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="774722884061553775" datatype="html"> <trans-unit id="774722884061553775" datatype="html">
@ -1559,7 +1571,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/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -1763,11 +1775,11 @@
<target state="translated">Упс! Неправильний Секретний Токен.</target> <target state="translated">Упс! Неправильний Секретний Токен.</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1875,7 +1887,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/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8204176479746810612" datatype="html"> <trans-unit id="8204176479746810612" datatype="html">
@ -2625,10 +2637,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="7156797854368699223" datatype="html"> <trans-unit id="7156797854368699223" datatype="html">
<source>Me</source> <source>Me</source>
@ -2639,7 +2647,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -3175,7 +3183,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/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4154970040744792968" datatype="html"> <trans-unit id="4154970040744792968" datatype="html">
@ -4779,6 +4787,14 @@
<context context-type="linenumber">91</context> <context context-type="linenumber">91</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">Абсолютна прибутковість активів</target> <target state="translated">Абсолютна прибутковість активів</target>
@ -4936,7 +4952,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/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5080775557941296581" datatype="html"> <trans-unit id="5080775557941296581" datatype="html">
@ -5255,6 +5271,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">Посібники</target> <target state="translated">Посібники</target>
@ -5786,6 +5810,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="7900108539442184659" datatype="html"> <trans-unit id="7900108539442184659" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source> <source><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> can be used anonymously</source>
<target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> може використовуватися анонімно</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{ product1.name }}"/> може використовуватися анонімно</target>
@ -6035,7 +6067,7 @@
<target state="translated">Клонувати</target> <target state="translated">Клонувати</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -6043,7 +6075,7 @@
<target state="translated">Експортувати чернетку як ICS</target> <target state="translated">Експортувати чернетку як ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4239552960465242484" datatype="html"> <trans-unit id="4239552960465242484" datatype="html">
@ -6051,7 +6083,7 @@
<target state="translated">Ви дійсно хочете видалити ці дії?</target> <target state="translated">Ви дійсно хочете видалити ці дії?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -6059,7 +6091,7 @@
<target state="translated">Ви дійсно хочете видалити цю активність?</target> <target state="translated">Ви дійсно хочете видалити цю активність?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3105754554141014845" datatype="html"> <trans-unit id="3105754554141014845" datatype="html">
@ -6750,6 +6782,14 @@
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">Так</target> <target state="translated">Так</target>
@ -7014,6 +7054,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">Канада</target> <target state="translated">Канада</target>
@ -7166,6 +7214,14 @@
<context context-type="linenumber">110</context> <context context-type="linenumber">110</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">Ключ API</target> <target state="translated">Ключ API</target>
@ -7258,6 +7314,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="new">Default Market Price</target> <target state="new">Default Market Price</target>
@ -7455,7 +7519,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8072,7 +8136,7 @@
<target state="new">Do you really want to generate a new security token?</target> <target state="new">Do you really want to generate a new security token?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8128,7 +8192,7 @@
<target state="new">Manage Asset Profile</target> <target state="new">Manage Asset Profile</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8152,7 +8216,7 @@
<target state="new">Average Unit Price</target> <target state="new">Average Unit Price</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8543,12 +8607,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

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

@ -498,7 +498,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -533,7 +533,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -1106,6 +1106,13 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="5487499696517396535" datatype="html"> <trans-unit id="5487499696517396535" datatype="html">
<source>Add Platform</source> <source>Add Platform</source>
<context-group purpose="location"> <context-group purpose="location">
@ -1136,7 +1143,7 @@
<source>Do you really want to delete this platform?</source> <source>Do you really want to delete this platform?</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="774722884061553775" datatype="html"> <trans-unit id="774722884061553775" datatype="html">
@ -1193,7 +1200,7 @@
<source>Do you really want to delete this tag?</source> <source>Do you really want to delete this tag?</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -1344,7 +1351,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -1363,11 +1370,11 @@
<source>Oops! Incorrect Security Token.</source> <source>Oops! Incorrect Security Token.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1747,7 +1754,7 @@
<source>Report Data Glitch</source> <source>Report Data Glitch</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5451369123952965511" datatype="html"> <trans-unit id="5451369123952965511" datatype="html">
@ -2181,10 +2188,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="8604673556809626581" datatype="html"> <trans-unit id="8604673556809626581" datatype="html">
<source>Export Data</source> <source>Export Data</source>
@ -2372,7 +2375,7 @@
<source>Oops, cash balance transfer has failed.</source> <source>Oops, cash balance transfer has failed.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4154970040744792968" datatype="html"> <trans-unit id="4154970040744792968" datatype="html">
@ -3287,7 +3290,7 @@
<source>Do you really want to delete these activities?</source> <source>Do you really want to delete these activities?</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1111435290645444471" datatype="html"> <trans-unit id="1111435290645444471" datatype="html">
@ -4261,6 +4264,13 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<context-group purpose="location"> <context-group purpose="location">
@ -4449,21 +4459,21 @@
<source>Clone</source> <source>Clone</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
<source>Export Draft as ICS</source> <source>Export Draft as ICS</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
<source>Do you really want to delete this activity?</source> <source>Do you really want to delete this activity?</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3060494754215793943" datatype="html"> <trans-unit id="3060494754215793943" datatype="html">
@ -5233,6 +5243,13 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<context-group purpose="location"> <context-group purpose="location">
@ -5790,6 +5807,13 @@
<context context-type="linenumber">99</context> <context context-type="linenumber">99</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<context-group purpose="location"> <context-group purpose="location">
@ -6000,6 +6024,13 @@
<context context-type="linenumber">9</context> <context context-type="linenumber">9</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<context-group purpose="location"> <context-group purpose="location">
@ -6018,7 +6049,7 @@
<source>Inactive</source> <source>Inactive</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7819314041543176992" datatype="html"> <trans-unit id="7819314041543176992" datatype="html">
@ -6136,6 +6167,10 @@
</trans-unit> </trans-unit>
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6361,6 +6396,13 @@
<context context-type="linenumber">291</context> <context context-type="linenumber">291</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<context-group purpose="location"> <context-group purpose="location">
@ -6444,6 +6486,13 @@
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<context-group purpose="location"> <context-group purpose="location">
@ -6569,7 +6618,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4068738931505527681" datatype="html"> <trans-unit id="4068738931505527681" datatype="html">
@ -6600,6 +6649,13 @@
<context context-type="linenumber">450</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<context-group purpose="location"> <context-group purpose="location">
@ -6796,7 +6852,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5343721620901142551" datatype="html"> <trans-unit id="5343721620901142551" datatype="html">
@ -7322,7 +7378,7 @@
<source>Do you really want to generate a new security token?</source> <source>Do you really want to generate a new security token?</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1419479195323304896" datatype="html"> <trans-unit id="1419479195323304896" datatype="html">
@ -7358,7 +7414,7 @@
<source>Manage Asset Profile</source> <source>Manage Asset Profile</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -7379,7 +7435,7 @@
<source>Average Unit Price</source> <source>Average Unit Price</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -7723,11 +7779,11 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5606994816647505945" datatype="html"> <trans-unit id="5606994816647505945" datatype="html">

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

@ -528,7 +528,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">451</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7022070615528435141" datatype="html"> <trans-unit id="7022070615528435141" datatype="html">
@ -564,7 +564,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">478</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/benchmark/benchmark.component.html</context>
@ -1175,6 +1175,14 @@
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119836022359386797" datatype="html">
<source>Activities</source>
<target state="new">Activities</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">61</context>
</context-group>
</trans-unit>
<trans-unit id="5487499696517396535" datatype="html"> <trans-unit id="5487499696517396535" datatype="html">
<source>Add Platform</source> <source>Add Platform</source>
<target state="translated">添加平台</target> <target state="translated">添加平台</target>
@ -1208,7 +1216,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/components/admin-platform/admin-platform.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-platform/admin-platform.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">108</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="774722884061553775" datatype="html"> <trans-unit id="774722884061553775" datatype="html">
@ -1272,7 +1280,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/components/admin-tag/admin-tag.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/admin-tag/admin-tag.component.ts</context>
<context context-type="linenumber">103</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3653624484380347431" datatype="html"> <trans-unit id="3653624484380347431" datatype="html">
@ -1440,7 +1448,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">279</context> <context context-type="linenumber">283</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
@ -1460,11 +1468,11 @@
<target state="translated">哎呀!安全令牌不正确。</target> <target state="translated">哎呀!安全令牌不正确。</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/header/header.component.ts</context>
<context context-type="linenumber">294</context> <context context-type="linenumber">298</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">153</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.component.ts</context>
@ -1884,7 +1892,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/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">452</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5451369123952965511" datatype="html"> <trans-unit id="5451369123952965511" datatype="html">
@ -2362,10 +2370,6 @@
<context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-settings/user-account-settings.html</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="8604673556809626581" datatype="html"> <trans-unit id="8604673556809626581" datatype="html">
<source>Export Data</source> <source>Export Data</source>
@ -2568,7 +2572,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/accounts/accounts-page.component.ts</context> <context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.component.ts</context>
<context context-type="linenumber">324</context> <context context-type="linenumber">339</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4154970040744792968" datatype="html"> <trans-unit id="4154970040744792968" datatype="html">
@ -3572,7 +3576,7 @@
<target state="translated">您确定要删除这些活动吗?</target> <target state="translated">您确定要删除这些活动吗?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">270</context> <context context-type="linenumber">276</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1111435290645444471" datatype="html"> <trans-unit id="1111435290645444471" datatype="html">
@ -4652,6 +4656,14 @@
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1434671461968858301" datatype="html">
<source>User ID</source>
<target state="new">User ID</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="1154843799824106777" datatype="html"> <trans-unit id="1154843799824106777" datatype="html">
<source>Free Plan</source> <source>Free Plan</source>
<target state="translated">免费计划</target> <target state="translated">免费计划</target>
@ -4861,7 +4873,7 @@
<target state="translated">克隆</target> <target state="translated">克隆</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">449</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4631493229601603593" datatype="html"> <trans-unit id="4631493229601603593" datatype="html">
@ -4869,7 +4881,7 @@
<target state="translated">将汇票导出为 ICS</target> <target state="translated">将汇票导出为 ICS</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">459</context> <context context-type="linenumber">467</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="670983159637074283" datatype="html"> <trans-unit id="670983159637074283" datatype="html">
@ -4877,7 +4889,7 @@
<target state="translated">您确实要删除此活动吗?</target> <target state="translated">您确实要删除此活动吗?</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">280</context> <context context-type="linenumber">286</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3060494754215793943" datatype="html"> <trans-unit id="3060494754215793943" datatype="html">
@ -5732,6 +5744,14 @@
<context context-type="linenumber">193</context> <context context-type="linenumber">193</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1600023202562292052" datatype="html">
<source>Close Holding</source>
<target state="new">Close Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">441</context>
</context-group>
</trans-unit>
<trans-unit id="1605678350626749943" datatype="html"> <trans-unit id="1605678350626749943" datatype="html">
<source>Absolute Asset Performance</source> <source>Absolute Asset Performance</source>
<target state="translated">绝对资产回报</target> <target state="translated">绝对资产回报</target>
@ -6409,6 +6429,14 @@
<context context-type="linenumber">83</context> <context context-type="linenumber">83</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3477953895055172777" datatype="html">
<source>View Holding</source>
<target state="new">View Holding</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
</trans-unit>
<trans-unit id="3486679398271885916" datatype="html"> <trans-unit id="3486679398271885916" datatype="html">
<source>Canada</source> <source>Canada</source>
<target state="translated">加拿大</target> <target state="translated">加拿大</target>
@ -6566,7 +6594,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/portfolio/x-ray/x-ray-page.component.html</context> <context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">87</context> <context context-type="linenumber">88</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2159130950882492111" datatype="html"> <trans-unit id="2159130950882492111" datatype="html">
@ -6669,6 +6697,14 @@
<context context-type="linenumber">11</context> <context context-type="linenumber">11</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2803298218425845065" datatype="html">
<source>Role</source>
<target state="new">Role</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html"> <trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source> <source>Yes</source>
<target state="translated">是</target> <target state="translated">是</target>
@ -6680,6 +6716,10 @@
<trans-unit id="6574710269679413520" datatype="html"> <trans-unit id="6574710269679413520" datatype="html">
<source>Accounts</source> <source>Accounts</source>
<target state="new">Accounts</target> <target state="new">Accounts</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">51</context>
</context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context> <context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">84</context> <context context-type="linenumber">84</context>
@ -6973,6 +7013,14 @@
<context context-type="linenumber">293</context> <context context-type="linenumber">293</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7417020438124538834" datatype="html">
<source>Engagement per Day</source>
<target state="new">Engagement per Day</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">76</context>
</context-group>
</trans-unit>
<trans-unit id="7423212324650924366" datatype="html"> <trans-unit id="7423212324650924366" datatype="html">
<source>Guides</source> <source>Guides</source>
<target state="translated">指南</target> <target state="translated">指南</target>
@ -7111,6 +7159,14 @@
<context context-type="linenumber">167</context> <context context-type="linenumber">167</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8514765519764380399" datatype="html">
<source>Country</source>
<target state="new">Country</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="8517109745758603034" datatype="html"> <trans-unit id="8517109745758603034" datatype="html">
<source>API Key</source> <source>API Key</source>
<target state="translated">API 密钥</target> <target state="translated">API 密钥</target>
@ -7200,7 +7256,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">251</context> <context context-type="linenumber">260</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1769610706135259386" datatype="html"> <trans-unit id="1769610706135259386" datatype="html">
@ -7259,6 +7315,14 @@
<context context-type="linenumber">234</context> <context context-type="linenumber">234</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8214324091109908102" datatype="html">
<source>API Requests Today</source>
<target state="new">API Requests Today</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="8214660894894142610" datatype="html"> <trans-unit id="8214660894894142610" datatype="html">
<source>Default Market Price</source> <source>Default Market Price</source>
<target state="translated">默认市场价格</target> <target state="translated">默认市场价格</target>
@ -7456,7 +7520,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">169</context> <context context-type="linenumber">170</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751986162338860240" datatype="html"> <trans-unit id="6751986162338860240" datatype="html">
@ -8073,7 +8137,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/components/user-account-access/user-account-access.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/user-account-access/user-account-access.component.ts</context>
<context context-type="linenumber">174</context> <context context-type="linenumber">175</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5193539160604294602" datatype="html"> <trans-unit id="5193539160604294602" datatype="html">
@ -8129,7 +8193,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/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">442</context> <context context-type="linenumber">465</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2978009302056542263" datatype="html"> <trans-unit id="2978009302056542263" datatype="html">
@ -8153,7 +8217,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/components/holding-detail-dialog/holding-detail-dialog.component.ts</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts</context>
<context context-type="linenumber">111</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
@ -8544,12 +8608,12 @@
<context context-type="linenumber">128</context> <context context-type="linenumber">128</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="339860602695747533" datatype="html"> <trans-unit id="889243574476657449" datatype="html">
<source>Registration Date</source> <source>Registration Date</source>
<target state="new">Registration Date</target> <target state="new">Registration Date</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context> <context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">22</context> <context context-type="linenumber">23</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5162138648470294706" datatype="html"> <trans-unit id="5162138648470294706" datatype="html">

61
apps/client/src/styles/theme.scss

@ -1,9 +1,6 @@
@use '@angular/material' as mat; @use '@angular/material' as mat;
$dark-primary-text: rgba(black, 0.87); @use './variables.scss' as variables;
$light-primary-text: white;
$mat-css-dark-theme-selector: '.theme-dark';
$gf-primary: ( $gf-primary: (
50: var(--gf-theme-primary-50), 50: var(--gf-theme-primary-50),
@ -21,20 +18,20 @@ $gf-primary: (
A400: var(--gf-theme-primary-A400), A400: var(--gf-theme-primary-A400),
A700: var(--gf-theme-primary-A700), A700: var(--gf-theme-primary-A700),
contrast: ( contrast: (
50: $dark-primary-text, 50: variables.$dark-primary-text,
100: $dark-primary-text, 100: variables.$dark-primary-text,
200: $dark-primary-text, 200: variables.$dark-primary-text,
300: $light-primary-text, 300: variables.$light-primary-text,
400: $light-primary-text, 400: variables.$light-primary-text,
500: $light-primary-text, 500: variables.$light-primary-text,
600: $light-primary-text, 600: variables.$light-primary-text,
700: $light-primary-text, 700: variables.$light-primary-text,
800: $light-primary-text, 800: variables.$light-primary-text,
900: $light-primary-text, 900: variables.$light-primary-text,
A100: $dark-primary-text, A100: variables.$dark-primary-text,
A200: $light-primary-text, A200: variables.$light-primary-text,
A400: $light-primary-text, A400: variables.$light-primary-text,
A700: $light-primary-text A700: variables.$light-primary-text
) )
); );
@ -54,20 +51,20 @@ $gf-secondary: (
A400: var(--gf-theme-secondary-A400), A400: var(--gf-theme-secondary-A400),
A700: var(--gf-theme-secondary-A700), A700: var(--gf-theme-secondary-A700),
contrast: ( contrast: (
50: $dark-primary-text, 50: variables.$dark-primary-text,
100: $dark-primary-text, 100: variables.$dark-primary-text,
200: $dark-primary-text, 200: variables.$dark-primary-text,
300: $light-primary-text, 300: variables.$light-primary-text,
400: $light-primary-text, 400: variables.$light-primary-text,
500: $light-primary-text, 500: variables.$light-primary-text,
600: $light-primary-text, 600: variables.$light-primary-text,
700: $light-primary-text, 700: variables.$light-primary-text,
800: $light-primary-text, 800: variables.$light-primary-text,
900: $light-primary-text, 900: variables.$light-primary-text,
A100: $dark-primary-text, A100: variables.$dark-primary-text,
A200: $light-primary-text, A200: variables.$light-primary-text,
A400: $light-primary-text, A400: variables.$light-primary-text,
A700: $light-primary-text A700: variables.$light-primary-text
) )
); );

4
apps/client/src/styles/variables.scss

@ -0,0 +1,4 @@
$dark-primary-text: rgba(black, 0.87);
$light-primary-text: white;
$mat-css-dark-theme-selector: '.theme-dark';

5
eslint.config.cjs

@ -152,7 +152,6 @@ module.exports = [
// The following rules are part of eslint:recommended // The following rules are part of eslint:recommended
// and can be remove once solved // and can be remove once solved
'no-constant-binary-expression': 'warn',
'no-loss-of-precision': 'warn', 'no-loss-of-precision': 'warn',
// The following rules are part of @typescript-eslint/recommended-type-checked // The following rules are part of @typescript-eslint/recommended-type-checked
@ -170,7 +169,6 @@ module.exports = [
'@typescript-eslint/no-unsafe-argument': 'warn', '@typescript-eslint/no-unsafe-argument': 'warn',
'@typescript-eslint/no-unsafe-assignment': 'warn', '@typescript-eslint/no-unsafe-assignment': 'warn',
'@typescript-eslint/no-unsafe-enum-comparison': 'warn', '@typescript-eslint/no-unsafe-enum-comparison': 'warn',
'@typescript-eslint/no-unsafe-function-type': 'warn',
'@typescript-eslint/no-unsafe-member-access': 'warn', '@typescript-eslint/no-unsafe-member-access': 'warn',
'@typescript-eslint/no-unsafe-return': 'warn', '@typescript-eslint/no-unsafe-return': 'warn',
'@typescript-eslint/no-unsafe-call': 'warn', '@typescript-eslint/no-unsafe-call': 'warn',
@ -189,8 +187,7 @@ module.exports = [
// The following rules are part of @typescript-eslint/stylistic-type-checked // The following rules are part of @typescript-eslint/stylistic-type-checked
// and can be remove once solved // and can be remove once solved
'@typescript-eslint/prefer-nullish-coalescing': 'warn', // TODO: Requires strictNullChecks: true '@typescript-eslint/prefer-nullish-coalescing': 'warn' // TODO: Requires strictNullChecks: true
'@typescript-eslint/prefer-regexp-exec': 'warn'
} }
})) }))
]; ];

2
libs/common/src/lib/helper.ts

@ -375,7 +375,7 @@ export function parseDate(date: string): Date {
// Transform 'yyyyMMdd' format to supported format by parse function // Transform 'yyyyMMdd' format to supported format by parse function
if (date?.length === 8) { if (date?.length === 8) {
const match = date.match(/^(\d{4})(\d{2})(\d{2})$/); const match = /^(\d{4})(\d{2})(\d{2})$/.exec(date);
if (match) { if (match) {
const [, year, month, day] = match; const [, year, month, day] = match;

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

@ -7,7 +7,6 @@ import type {
AdminMarketData, AdminMarketData,
AdminMarketDataItem AdminMarketDataItem
} from './admin-market-data.interface'; } from './admin-market-data.interface';
import type { AdminUsers } from './admin-users.interface';
import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetClassSelectorOption } from './asset-class-selector-option.interface';
import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface';
import type { BenchmarkProperty } from './benchmark-property.interface'; import type { BenchmarkProperty } from './benchmark-property.interface';
@ -39,6 +38,7 @@ import type { AccountBalancesResponse } from './responses/account-balances-respo
import type { AccountsResponse } from './responses/accounts-response.interface'; import type { AccountsResponse } from './responses/accounts-response.interface';
import type { ActivitiesResponse } from './responses/activities-response.interface'; import type { ActivitiesResponse } from './responses/activities-response.interface';
import type { ActivityResponse } from './responses/activity-response.interface'; import type { ActivityResponse } from './responses/activity-response.interface';
import type { AdminUsersResponse } from './responses/admin-users-response.interface';
import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface';
import type { ApiKeyResponse } from './responses/api-key-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface';
import type { AssetResponse } from './responses/asset-response.interface'; import type { AssetResponse } from './responses/asset-response.interface';
@ -92,7 +92,7 @@ export {
AdminMarketData, AdminMarketData,
AdminMarketDataDetails, AdminMarketDataDetails,
AdminMarketDataItem, AdminMarketDataItem,
AdminUsers, AdminUsersResponse,
AiPromptResponse, AiPromptResponse,
ApiKeyResponse, ApiKeyResponse,
AssetClassSelectorOption, AssetClassSelectorOption,

2
libs/common/src/lib/interfaces/admin-users.interface.ts → libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts

@ -1,6 +1,6 @@
import { Role } from '@prisma/client'; import { Role } from '@prisma/client';
export interface AdminUsers { export interface AdminUsersResponse {
count: number; count: number;
users: { users: {
accountCount: number; accountCount: number;

14
libs/ui/src/lib/activities-table/activities-table.component.html

@ -437,6 +437,14 @@
class="no-max-width" class="no-max-width"
xPosition="before" xPosition="before"
> >
@if (canClickActivity(element)) {
<button mat-menu-item (click)="onClickActivity(element)">
<span class="align-items-center d-flex">
<ion-icon class="mr-2" name="tablet-landscape-outline" />
<span i18n>View Holding</span>
</span>
</button>
}
<button mat-menu-item (click)="onUpdateActivity(element)"> <button mat-menu-item (click)="onUpdateActivity(element)">
<span class="align-items-center d-flex"> <span class="align-items-center d-flex">
<ion-icon class="mr-2" name="create-outline" /> <ion-icon class="mr-2" name="create-outline" />
@ -479,11 +487,7 @@
*matRowDef="let row; columns: displayedColumns" *matRowDef="let row; columns: displayedColumns"
mat-row mat-row
[ngClass]="{ [ngClass]="{
'cursor-pointer': 'cursor-pointer': canClickActivity(row)
hasPermissionToOpenDetails &&
isExcludedFromAnalysis(row) === false &&
row.isDraft === false &&
['BUY', 'DIVIDEND', 'SELL'].includes(row.type)
}" }"
(click)="onClickActivity(row)" (click)="onClickActivity(row)"
></tr> ></tr>

18
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -56,6 +56,7 @@ import {
documentTextOutline, documentTextOutline,
ellipsisHorizontal, ellipsisHorizontal,
ellipsisVertical, ellipsisVertical,
tabletLandscapeOutline,
trashOutline trashOutline
} from 'ionicons/icons'; } from 'ionicons/icons';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
@ -153,6 +154,7 @@ export class GfActivitiesTableComponent
documentTextOutline, documentTextOutline,
ellipsisHorizontal, ellipsisHorizontal,
ellipsisVertical, ellipsisVertical,
tabletLandscapeOutline,
trashOutline trashOutline
}); });
} }
@ -226,6 +228,15 @@ export class GfActivitiesTableComponent
return numSelectedRows === numTotalRows; return numSelectedRows === numTotalRows;
} }
public canClickActivity(activity: Activity) {
return (
this.hasPermissionToOpenDetails &&
this.isExcludedFromAnalysis(activity) === false &&
activity.isDraft === false &&
['BUY', 'DIVIDEND', 'SELL'].includes(activity.type)
);
}
public isExcludedFromAnalysis(activity: Activity) { public isExcludedFromAnalysis(activity: Activity) {
return ( return (
activity.account?.isExcluded || activity.account?.isExcluded ||
@ -244,12 +255,7 @@ export class GfActivitiesTableComponent
if (!activity.error) { if (!activity.error) {
this.selectedRows.toggle(activity); this.selectedRows.toggle(activity);
} }
} else if ( } else if (this.canClickActivity(activity)) {
this.hasPermissionToOpenDetails &&
this.isExcludedFromAnalysis(activity) === false &&
activity.isDraft === false &&
['BUY', 'DIVIDEND', 'SELL'].includes(activity.type)
) {
this.activityClicked.emit({ this.activityClicked.emit({
dataSource: activity.SymbolProfile.dataSource, dataSource: activity.SymbolProfile.dataSource,
symbol: activity.SymbolProfile.symbol symbol: activity.SymbolProfile.symbol

7
libs/ui/src/lib/benchmark/benchmark.component.ts

@ -155,14 +155,17 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy {
dataSource, dataSource,
symbol symbol
}: AssetProfileIdentifier) { }: AssetProfileIdentifier) {
const dialogRef = this.dialog.open(GfBenchmarkDetailDialogComponent, { const dialogRef = this.dialog.open<
GfBenchmarkDetailDialogComponent,
BenchmarkDetailDialogParams
>(GfBenchmarkDetailDialogComponent, {
data: { data: {
dataSource, dataSource,
symbol, symbol,
colorScheme: this.user?.settings?.colorScheme, colorScheme: this.user?.settings?.colorScheme,
deviceType: this.deviceType, deviceType: this.deviceType,
locale: this.locale locale: this.locale
} as BenchmarkDetailDialogParams, },
height: this.deviceType === 'mobile' ? '98vh' : undefined, height: this.deviceType === 'mobile' ? '98vh' : undefined,
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}); });

2
libs/ui/src/lib/fire-calculator/fire-calculator.component.ts

@ -185,7 +185,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
'principalInvestmentAmount' 'principalInvestmentAmount'
).value, ).value,
projectedTotalAmount: projectedTotalAmount:
Number(this.getProjectedTotalAmount().toFixed(0)) ?? 0, Math.round(this.getProjectedTotalAmount()) || 0,
retirementDate: retirementDate:
this.getRetirementDate() ?? this.DEFAULT_RETIREMENT_DATE this.getRetirementDate() ?? this.DEFAULT_RETIREMENT_DATE
}, },

28
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts

@ -199,21 +199,21 @@ export class GfHistoricalMarketDataEditorComponent
}) { }) {
const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice; const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice;
const dialogRef = this.dialog.open( const dialogRef = this.dialog.open<
GfHistoricalMarketDataEditorDialogComponent, GfHistoricalMarketDataEditorDialogComponent,
{ HistoricalMarketDataEditorDialogParams
data: { >(GfHistoricalMarketDataEditorDialogComponent, {
marketPrice, data: {
currency: this.currency, marketPrice,
dataSource: this.dataSource, currency: this.currency,
dateString: `${yearMonth}-${day}`, dataSource: this.dataSource,
symbol: this.symbol, dateString: `${yearMonth}-${day}`,
user: this.user symbol: this.symbol,
} as HistoricalMarketDataEditorDialogParams, user: this.user
height: this.deviceType === 'mobile' ? '98vh' : '80vh', },
width: this.deviceType === 'mobile' ? '100vw' : '50rem' height: this.deviceType === 'mobile' ? '98vh' : '80vh',
} width: this.deviceType === 'mobile' ? '100vw' : '50rem'
); });
dialogRef dialogRef
.afterClosed() .afterClosed()

3
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts

@ -31,6 +31,7 @@ import ChartDataLabels from 'chartjs-plugin-datalabels';
import { isUUID } from 'class-validator'; import { isUUID } from 'class-validator';
import Color from 'color'; import Color from 'color';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import OpenColor from 'open-color';
import { translate } from '../i18n'; import { translate } from '../i18n';
@ -47,7 +48,7 @@ const {
teal, teal,
violet, violet,
yellow yellow
} = require('open-color'); } = OpenColor;
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,

6
libs/ui/src/lib/tags-selector/tags-selector.component.ts

@ -5,12 +5,10 @@ import {
Component, Component,
CUSTOM_ELEMENTS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA,
ElementRef, ElementRef,
EventEmitter,
Input, Input,
OnChanges, OnChanges,
OnDestroy, OnDestroy,
OnInit, OnInit,
Output,
signal, signal,
ViewChild ViewChild
} from '@angular/core'; } from '@angular/core';
@ -66,8 +64,6 @@ export class GfTagsSelectorComponent
@Input() tags: Tag[]; @Input() tags: Tag[];
@Input() tagsAvailable: Tag[]; @Input() tagsAvailable: Tag[];
@Output() tagsChanged = new EventEmitter<Tag[]>();
@ViewChild('tagInput') tagInput: ElementRef<HTMLInputElement>; @ViewChild('tagInput') tagInput: ElementRef<HTMLInputElement>;
public filteredOptions: Subject<Tag[]> = new BehaviorSubject([]); public filteredOptions: Subject<Tag[]> = new BehaviorSubject([]);
@ -115,7 +111,6 @@ export class GfTagsSelectorComponent
}); });
const newTags = this.tagsSelected(); const newTags = this.tagsSelected();
this.tagsChanged.emit(newTags);
this.onChange(newTags); this.onChange(newTags);
this.onTouched(); this.onTouched();
this.tagInput.nativeElement.value = ''; this.tagInput.nativeElement.value = '';
@ -130,7 +125,6 @@ export class GfTagsSelectorComponent
}); });
const newTags = this.tagsSelected(); const newTags = this.tagsSelected();
this.tagsChanged.emit(newTags);
this.onChange(newTags); this.onChange(newTags);
this.onTouched(); this.onTouched();
this.updateFilters(); this.updateFilters();

3
libs/ui/src/lib/treemap-chart/treemap-chart.component.ts

@ -33,10 +33,11 @@ import { isUUID } from 'class-validator';
import { differenceInDays, max } from 'date-fns'; import { differenceInDays, max } from 'date-fns';
import { orderBy } from 'lodash'; import { orderBy } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import OpenColor from 'open-color';
import { GetColorParams } from './interfaces/interfaces'; import { GetColorParams } from './interfaces/interfaces';
const { gray, green, red } = require('open-color'); const { gray, green, red } = OpenColor;
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,

442
package-lock.json

@ -1,12 +1,12 @@
{ {
"name": "ghostfolio", "name": "ghostfolio",
"version": "2.211.0", "version": "2.214.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ghostfolio", "name": "ghostfolio",
"version": "2.211.0", "version": "2.214.0",
"hasInstallScript": true, "hasInstallScript": true,
"license": "AGPL-3.0", "license": "AGPL-3.0",
"dependencies": { "dependencies": {
@ -23,25 +23,20 @@
"@angular/service-worker": "20.2.4", "@angular/service-worker": "20.2.4",
"@codewithdan/observable-store": "2.2.15", "@codewithdan/observable-store": "2.2.15",
"@date-fns/utc": "2.1.0", "@date-fns/utc": "2.1.0",
"@dfinity/agent": "0.15.7",
"@dfinity/auth-client": "0.15.7",
"@dfinity/candid": "0.15.7",
"@dfinity/identity": "0.15.7",
"@dfinity/principal": "0.15.7",
"@internationalized/number": "3.6.3", "@internationalized/number": "3.6.3",
"@ionic/angular": "8.7.3", "@ionic/angular": "8.7.3",
"@keyv/redis": "4.4.0", "@keyv/redis": "4.4.0",
"@nestjs/bull": "11.0.2", "@nestjs/bull": "11.0.4",
"@nestjs/cache-manager": "3.0.1", "@nestjs/cache-manager": "3.0.1",
"@nestjs/common": "11.1.3", "@nestjs/common": "11.1.8",
"@nestjs/config": "4.0.2", "@nestjs/config": "4.0.2",
"@nestjs/core": "11.1.3", "@nestjs/core": "11.1.8",
"@nestjs/event-emitter": "3.0.1", "@nestjs/event-emitter": "3.0.1",
"@nestjs/jwt": "11.0.0", "@nestjs/jwt": "11.0.1",
"@nestjs/passport": "11.0.5", "@nestjs/passport": "11.0.5",
"@nestjs/platform-express": "11.1.3", "@nestjs/platform-express": "11.1.8",
"@nestjs/schedule": "6.0.0", "@nestjs/schedule": "6.0.1",
"@nestjs/serve-static": "5.0.3", "@nestjs/serve-static": "5.0.4",
"@openrouter/ai-sdk-provider": "0.7.2", "@openrouter/ai-sdk-provider": "0.7.2",
"@prisma/client": "6.18.0", "@prisma/client": "6.18.0",
"@simplewebauthn/browser": "13.1.0", "@simplewebauthn/browser": "13.1.0",
@ -62,7 +57,7 @@
"class-validator": "0.14.2", "class-validator": "0.14.2",
"color": "5.0.0", "color": "5.0.0",
"countries-and-timezones": "3.8.0", "countries-and-timezones": "3.8.0",
"countries-list": "3.1.1", "countries-list": "3.2.0",
"countup.js": "2.9.0", "countup.js": "2.9.0",
"date-fns": "4.1.0", "date-fns": "4.1.0",
"dotenv": "17.2.3", "dotenv": "17.2.3",
@ -77,7 +72,7 @@
"lodash": "4.17.21", "lodash": "4.17.21",
"marked": "15.0.4", "marked": "15.0.4",
"ms": "3.0.0-canary.1", "ms": "3.0.0-canary.1",
"ng-extract-i18n-merge": "3.0.0", "ng-extract-i18n-merge": "3.1.0",
"ngx-device-detector": "10.1.0", "ngx-device-detector": "10.1.0",
"ngx-markdown": "20.0.0", "ngx-markdown": "20.0.0",
"ngx-skeleton-loader": "11.3.0", "ngx-skeleton-loader": "11.3.0",
@ -93,7 +88,7 @@
"stripe": "18.5.0", "stripe": "18.5.0",
"svgmap": "2.12.2", "svgmap": "2.12.2",
"tablemark": "4.1.0", "tablemark": "4.1.0",
"twitter-api-v2": "1.23.0", "twitter-api-v2": "1.27.0",
"uuid": "11.1.0", "uuid": "11.1.0",
"yahoo-finance2": "3.10.0", "yahoo-finance2": "3.10.0",
"zone.js": "0.15.1" "zone.js": "0.15.1"
@ -112,8 +107,8 @@
"@angular/pwa": "20.2.2", "@angular/pwa": "20.2.2",
"@eslint/eslintrc": "3.3.1", "@eslint/eslintrc": "3.3.1",
"@eslint/js": "9.35.0", "@eslint/js": "9.35.0",
"@nestjs/schematics": "11.0.5", "@nestjs/schematics": "11.0.9",
"@nestjs/testing": "11.1.3", "@nestjs/testing": "11.1.8",
"@nx/angular": "21.5.1", "@nx/angular": "21.5.1",
"@nx/cypress": "21.5.1", "@nx/cypress": "21.5.1",
"@nx/eslint-plugin": "21.5.1", "@nx/eslint-plugin": "21.5.1",
@ -4713,6 +4708,7 @@
"version": "0.8.1", "version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jridgewell/trace-mapping": "0.3.9" "@jridgewell/trace-mapping": "0.3.9"
@ -4725,6 +4721,7 @@
"version": "0.3.9", "version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/resolve-uri": "^3.0.3",
@ -4953,73 +4950,6 @@
"node": "^16.13.0 || >=18.0.0" "node": "^16.13.0 || >=18.0.0"
} }
}, },
"node_modules/@dfinity/agent": {
"version": "0.15.7",
"resolved": "https://registry.npmjs.org/@dfinity/agent/-/agent-0.15.7.tgz",
"integrity": "sha512-w34yvlUTpPBG8nLOD0t/ao3k2xonOFq4QGvfJ1HiS/nIggdza/3xC3nLBszGrjVYWj1jqu8BLFvQXCAeWin75A==",
"license": "Apache-2.0",
"dependencies": {
"base64-arraybuffer": "^0.2.0",
"bignumber.js": "^9.0.0",
"borc": "^2.1.1",
"js-sha256": "0.9.0",
"simple-cbor": "^0.4.1",
"ts-node": "^10.8.2"
},
"peerDependencies": {
"@dfinity/candid": "^0.15.7",
"@dfinity/principal": "^0.15.7"
}
},
"node_modules/@dfinity/auth-client": {
"version": "0.15.7",
"resolved": "https://registry.npmjs.org/@dfinity/auth-client/-/auth-client-0.15.7.tgz",
"integrity": "sha512-f6cRqXayCf+7+9gNcDnAZZwJrgBYKIzfxjxeRLlpsueQeo+E/BX2yVSANxzTkCNc4U3p+ttHI1RNtasLunYTcA==",
"license": "Apache-2.0",
"dependencies": {
"idb": "^7.0.2"
},
"peerDependencies": {
"@dfinity/agent": "^0.15.7",
"@dfinity/identity": "^0.15.7",
"@dfinity/principal": "^0.15.7"
}
},
"node_modules/@dfinity/candid": {
"version": "0.15.7",
"resolved": "https://registry.npmjs.org/@dfinity/candid/-/candid-0.15.7.tgz",
"integrity": "sha512-lTcjK/xrSyT7wvUQ2pApG+yklQAwxaofQ04D1IWv0/8gKbY0eUbh8G2w6+CypJ15Hb1CH24ijUj8nWdeX/z3jg==",
"license": "Apache-2.0",
"dependencies": {
"ts-node": "^10.8.2"
}
},
"node_modules/@dfinity/identity": {
"version": "0.15.7",
"resolved": "https://registry.npmjs.org/@dfinity/identity/-/identity-0.15.7.tgz",
"integrity": "sha512-kBAkx9wq78jSQf6T5aayLyWm8YgtOZw8bW6+OuzX6tR3hkAEa85A9TcKA7BjkmMWSIskjEDVQub4fFfKWS2vOQ==",
"license": "Apache-2.0",
"dependencies": {
"borc": "^2.1.1",
"js-sha256": "^0.9.0",
"tweetnacl": "^1.0.1"
},
"peerDependencies": {
"@dfinity/agent": "^0.15.7",
"@dfinity/principal": "^0.15.7",
"@peculiar/webcrypto": "^1.4.0"
}
},
"node_modules/@dfinity/principal": {
"version": "0.15.7",
"resolved": "https://registry.npmjs.org/@dfinity/principal/-/principal-0.15.7.tgz",
"integrity": "sha512-6/AkYzpGEH6Jw/0+B/EeeQn+5u2GDDvRLt1kQPhIG4txQYFnOy04H3VvyrymmfAj6/CXUgrOrux6OxgYSLYVJg==",
"license": "Apache-2.0",
"dependencies": {
"js-sha256": "^0.9.0",
"ts-node": "^10.8.2"
}
},
"node_modules/@discoveryjs/json-ext": { "node_modules/@discoveryjs/json-ext": {
"version": "0.6.3", "version": "0.6.3",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz",
@ -8997,12 +8927,12 @@
} }
}, },
"node_modules/@nestjs/bull": { "node_modules/@nestjs/bull": {
"version": "11.0.2", "version": "11.0.4",
"resolved": "https://registry.npmjs.org/@nestjs/bull/-/bull-11.0.2.tgz", "resolved": "https://registry.npmjs.org/@nestjs/bull/-/bull-11.0.4.tgz",
"integrity": "sha512-RjyP9JZUuLmMhmq1TMNIZqolkAd14az1jyXMMVki+C9dYvaMjWzBSwcZAtKs9Pk15Rm7qN1xn3R11aMV2Xv4gg==", "integrity": "sha512-QVz2PR/rJF/isy7otVnMTSqLf/O71p9Ka7lBZt9Gm+NQFv8fcH2L11GL7TA0whyCcw/kAX5iRepUXz/wed4JoA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@nestjs/bull-shared": "^11.0.2", "@nestjs/bull-shared": "^11.0.4",
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -9012,9 +8942,9 @@
} }
}, },
"node_modules/@nestjs/bull-shared": { "node_modules/@nestjs/bull-shared": {
"version": "11.0.3", "version": "11.0.4",
"resolved": "https://registry.npmjs.org/@nestjs/bull-shared/-/bull-shared-11.0.3.tgz", "resolved": "https://registry.npmjs.org/@nestjs/bull-shared/-/bull-shared-11.0.4.tgz",
"integrity": "sha512-CaHniPkLAxis6fAB1DB8WZELQv8VPCLedbj7iP0VQ1pz74i6NSzG9mBg6tOomXq/WW4la4P4OMGEQ48UAJh20A==", "integrity": "sha512-VBJcDHSAzxQnpcDfA0kt9MTGUD1XZzfByV70su0W0eDCQ9aqIEBlzWRW21tv9FG9dIut22ysgDidshdjlnczLw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"tslib": "2.8.1" "tslib": "2.8.1"
@ -9038,14 +8968,14 @@
} }
}, },
"node_modules/@nestjs/common": { "node_modules/@nestjs/common": {
"version": "11.1.3", "version": "11.1.8",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.8.tgz",
"integrity": "sha512-ogEK+GriWodIwCw6buQ1rpcH4Kx+G7YQ9EwuPySI3rS05pSdtQ++UhucjusSI9apNidv+QURBztJkRecwwJQXg==", "integrity": "sha512-bbsOqwld/GdBfiRNc4nnjyWWENDEicq4SH+R5AuYatvf++vf1x5JIsHB1i1KtfZMD3eRte0D4K9WXuAYil6XAg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"file-type": "21.0.0", "file-type": "21.0.0",
"iterare": "1.2.1", "iterare": "1.2.1",
"load-esm": "1.0.2", "load-esm": "1.0.3",
"tslib": "2.8.1", "tslib": "2.8.1",
"uid": "2.0.2" "uid": "2.0.2"
}, },
@ -9111,16 +9041,16 @@
} }
}, },
"node_modules/@nestjs/core": { "node_modules/@nestjs/core": {
"version": "11.1.3", "version": "11.1.8",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.8.tgz",
"integrity": "sha512-5lTni0TCh8x7bXETRD57pQFnKnEg1T6M+VLE7wAmyQRIecKQU+2inRGZD+A4v2DC1I04eA0WffP0GKLxjOKlzw==", "integrity": "sha512-7riWfmTmMhCJHZ5ZiaG+crj4t85IPCq/wLRuOUSigBYyFT2JZj0lVHtAdf4Davp9ouNI8GINBDt9h9b5Gz9nTw==",
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/opencollective": "0.4.1", "@nuxt/opencollective": "0.4.1",
"fast-safe-stringify": "2.1.1", "fast-safe-stringify": "2.1.1",
"iterare": "1.2.1", "iterare": "1.2.1",
"path-to-regexp": "8.2.0", "path-to-regexp": "8.3.0",
"tslib": "2.8.1", "tslib": "2.8.1",
"uid": "2.0.2" "uid": "2.0.2"
}, },
@ -9165,12 +9095,12 @@
} }
}, },
"node_modules/@nestjs/jwt": { "node_modules/@nestjs/jwt": {
"version": "11.0.0", "version": "11.0.1",
"resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-11.0.0.tgz", "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-11.0.1.tgz",
"integrity": "sha512-v7YRsW3Xi8HNTsO+jeHSEEqelX37TVWgwt+BcxtkG/OfXJEOs6GZdbdza200d6KqId1pJQZ6UPj1F0M6E+mxaA==", "integrity": "sha512-HXSsc7SAnCnjA98TsZqrE7trGtHDnYXWp4Ffy6LwSmck1QvbGYdMzBquXofX5l6tIRpeY4Qidl2Ti2CVG77Pdw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/jsonwebtoken": "9.0.7", "@types/jsonwebtoken": "9.0.10",
"jsonwebtoken": "9.0.2" "jsonwebtoken": "9.0.2"
}, },
"peerDependencies": { "peerDependencies": {
@ -9188,15 +9118,15 @@
} }
}, },
"node_modules/@nestjs/platform-express": { "node_modules/@nestjs/platform-express": {
"version": "11.1.3", "version": "11.1.8",
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.8.tgz",
"integrity": "sha512-hEDNMlaPiBO72fxxX/CuRQL3MEhKRc/sIYGVoXjrnw6hTxZdezvvM6A95UaLsYknfmcZZa/CdG1SMBZOu9agHQ==", "integrity": "sha512-rL6pZH9BW7BnL5X2eWbJMtt86uloAKjFgyY5+L2UkizgfEp7rgAs0+Z1z0BcW2Pgu5+q8O7RKPNyHJ/9ZNz/ZQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"cors": "2.8.5", "cors": "2.8.5",
"express": "5.1.0", "express": "5.1.0",
"multer": "2.0.1", "multer": "2.0.2",
"path-to-regexp": "8.2.0", "path-to-regexp": "8.3.0",
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"funding": { "funding": {
@ -9209,12 +9139,12 @@
} }
}, },
"node_modules/@nestjs/schedule": { "node_modules/@nestjs/schedule": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.0.0.tgz", "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.0.1.tgz",
"integrity": "sha512-aQySMw6tw2nhitELXd3EiRacQRgzUKD9mFcUZVOJ7jPLqIBvXOyvRWLsK9SdurGA+jjziAlMef7iB5ZEFFoQpw==", "integrity": "sha512-v3yO6cSPAoBSSyH67HWnXHzuhPhSNZhRmLY38JvCt2sqY8sPMOODpcU1D79iUMFf7k16DaMEbL4Mgx61ZhiC8Q==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"cron": "4.3.0" "cron": "4.3.3"
}, },
"peerDependencies": { "peerDependencies": {
"@nestjs/common": "^10.0.0 || ^11.0.0", "@nestjs/common": "^10.0.0 || ^11.0.0",
@ -9222,15 +9152,15 @@
} }
}, },
"node_modules/@nestjs/schematics": { "node_modules/@nestjs/schematics": {
"version": "11.0.5", "version": "11.0.9",
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-11.0.5.tgz", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-11.0.9.tgz",
"integrity": "sha512-T50SCNyqCZ/fDssaOD7meBKLZ87ebRLaJqZTJPvJKjlib1VYhMOCwXYsr7bjMPmuPgiQHOwvppz77xN/m6GM7A==", "integrity": "sha512-0NfPbPlEaGwIT8/TCThxLzrlz3yzDNkfRNpbL7FiplKq3w4qXpJg0JYwqgMEJnLQZm3L/L/5XjoyfJHUO3qX9g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@angular-devkit/core": "19.2.6", "@angular-devkit/core": "19.2.17",
"@angular-devkit/schematics": "19.2.6", "@angular-devkit/schematics": "19.2.17",
"comment-json": "4.2.5", "comment-json": "4.4.1",
"jsonc-parser": "3.3.1", "jsonc-parser": "3.3.1",
"pluralize": "8.0.0" "pluralize": "8.0.0"
}, },
@ -9239,9 +9169,9 @@
} }
}, },
"node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": {
"version": "19.2.6", "version": "19.2.17",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.6.tgz", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.17.tgz",
"integrity": "sha512-WFgiYhrDMq83UNaGRAneIM7CYYdBozD+yYA9BjoU8AgBLKtrvn6S8ZcjKAk5heoHtY/u8pEb0mwDTz9gxFmJZQ==", "integrity": "sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -9267,13 +9197,13 @@
} }
}, },
"node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": {
"version": "19.2.6", "version": "19.2.17",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.6.tgz", "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.17.tgz",
"integrity": "sha512-YTAxNnT++5eflx19OUHmOWu597/TbTel+QARiZCv1xQw99+X8DCKKOUXtqBRd53CAHlREDI33Rn/JLY3NYgMLQ==", "integrity": "sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@angular-devkit/core": "19.2.6", "@angular-devkit/core": "19.2.17",
"jsonc-parser": "3.3.1", "jsonc-parser": "3.3.1",
"magic-string": "0.30.17", "magic-string": "0.30.17",
"ora": "5.4.1", "ora": "5.4.1",
@ -9371,12 +9301,12 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/@nestjs/serve-static": { "node_modules/@nestjs/serve-static": {
"version": "5.0.3", "version": "5.0.4",
"resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-5.0.3.tgz", "resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-5.0.4.tgz",
"integrity": "sha512-0jFjTlSVSLrI+mot8lfm+h2laXtKzCvgsVStv9T1ZBZTDwS26gM5czIhIESmWAod0PfrbCDFiu9C1MglObL8VA==", "integrity": "sha512-3kO1M9D3vsPyWPFardxIjUYeuolS58PnhCoBTkS7t3BrdZFZCKHnBZ15js+UOzOR2Q6HmD7ssGjLd0DVYVdvOw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"path-to-regexp": "8.2.0" "path-to-regexp": "8.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"@fastify/static": "^8.0.4", "@fastify/static": "^8.0.4",
@ -9398,9 +9328,9 @@
} }
}, },
"node_modules/@nestjs/testing": { "node_modules/@nestjs/testing": {
"version": "11.1.3", "version": "11.1.8",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-11.1.8.tgz",
"integrity": "sha512-CeXG6/eEqgFIkPkmU00y18Dd3DLOIDFhPItzJK1SWckKo6IhcnfoRJzGx75bmuvUMjb51j6An96S/+MJ2ty9jA==", "integrity": "sha512-E6K+0UTKztcPxJzLnQa7S34lFjZbrj3Z1r7c5y5WDrL1m5HD1H4AeyBhicHgdaFmxjLAva2bq0sYKy/S7cdeYA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -11908,36 +11838,6 @@
"tslib": "^2.8.1" "tslib": "^2.8.1"
} }
}, },
"node_modules/@peculiar/json-schema": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz",
"integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==",
"license": "MIT",
"peer": true,
"dependencies": {
"tslib": "^2.0.0"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/@peculiar/webcrypto": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz",
"integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@peculiar/asn1-schema": "^2.3.8",
"@peculiar/json-schema": "^1.1.12",
"pvtsutils": "^1.3.5",
"tslib": "^2.6.2",
"webcrypto-core": "^1.8.0"
},
"engines": {
"node": ">=10.12.0"
}
},
"node_modules/@phenomnomnominal/tsquery": { "node_modules/@phenomnomnominal/tsquery": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz",
@ -13754,24 +13654,28 @@
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@tsconfig/node12": { "node_modules/@tsconfig/node12": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@tsconfig/node14": { "node_modules/@tsconfig/node14": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@tsconfig/node16": { "node_modules/@tsconfig/node16": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@tufjs/canonical-json": { "node_modules/@tufjs/canonical-json": {
@ -14449,11 +14353,12 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/jsonwebtoken": { "node_modules/@types/jsonwebtoken": {
"version": "9.0.7", "version": "9.0.10",
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz",
"integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/ms": "*",
"@types/node": "*" "@types/node": "*"
} }
}, },
@ -14465,9 +14370,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/luxon": { "node_modules/@types/luxon": {
"version": "3.6.2", "version": "3.7.1",
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz",
"integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/mdx": { "node_modules/@types/mdx": {
@ -14484,6 +14389,12 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/ms": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"license": "MIT"
},
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "22.15.17", "version": "22.15.17",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz",
@ -15679,6 +15590,7 @@
"version": "8.15.0", "version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"devOptional": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
@ -15725,6 +15637,7 @@
"version": "8.3.4", "version": "8.3.4",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"acorn": "^8.11.0" "acorn": "^8.11.0"
@ -16050,6 +15963,7 @@
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/argparse": { "node_modules/argparse": {
@ -16702,14 +16616,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/base64-arraybuffer": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz",
"integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/base64-js": { "node_modules/base64-js": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@ -17033,30 +16939,6 @@
"popper.js": "^1.16.1" "popper.js": "^1.16.1"
} }
}, },
"node_modules/borc": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/borc/-/borc-2.1.2.tgz",
"integrity": "sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==",
"license": "MIT",
"dependencies": {
"bignumber.js": "^9.0.0",
"buffer": "^5.5.0",
"commander": "^2.15.0",
"ieee754": "^1.1.13",
"iso-url": "~0.4.7",
"json-text-sequence": "~0.1.0",
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/borc/node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"license": "MIT"
},
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
"version": "1.1.12", "version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@ -17153,6 +17035,7 @@
"version": "5.7.1", "version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -18266,17 +18149,15 @@
} }
}, },
"node_modules/comment-json": { "node_modules/comment-json": {
"version": "4.2.5", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.4.1.tgz",
"integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "integrity": "sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"array-timsort": "^1.0.3", "array-timsort": "^1.0.3",
"core-util-is": "^1.0.3", "core-util-is": "^1.0.3",
"esprima": "^4.0.1", "esprima": "^4.0.1"
"has-own-prop": "^2.0.0",
"repeat-string": "^1.6.1"
}, },
"engines": { "engines": {
"node": ">= 6" "node": ">= 6"
@ -18642,9 +18523,9 @@
} }
}, },
"node_modules/countries-list": { "node_modules/countries-list": {
"version": "3.1.1", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.1.1.tgz", "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.0.tgz",
"integrity": "sha512-nPklKJ5qtmY5MdBKw1NiBAoyx5Sa7p2yPpljZyQ7gyCN1m+eMFs9I6CT37Mxt8zvR5L3VzD3DJBE4WQzX3WF4A==", "integrity": "sha512-HYHAo2fwEsG3TmbsNdVmIQPHizRlqeYMTtLEAl0IANG/3jRYX7p3NR6VapDqKP0n60TmsRy1dyRjVN5JbywDbA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/countup.js": { "node_modules/countup.js": {
@ -19320,16 +19201,17 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/cron": { "node_modules/cron": {
"version": "4.3.0", "version": "4.3.3",
"resolved": "https://registry.npmjs.org/cron/-/cron-4.3.0.tgz", "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.3.tgz",
"integrity": "sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw==", "integrity": "sha512-B/CJj5yL3sjtlun6RtYHvoSB26EmQ2NUmhq9ZiJSyKIM4K/fqfh9aelDFlIayD2YMeFZqWLi9hHV+c+pq2Djkw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/luxon": "~3.6.0", "@types/luxon": "~3.7.0",
"luxon": "~3.6.0" "luxon": "~3.7.0"
}, },
"engines": { "engines": {
"node": ">=18.x" "node": ">=18.x"
@ -20803,12 +20685,6 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/delimit-stream": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz",
"integrity": "sha512-a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ==",
"license": "BSD-2-Clause"
},
"node_modules/denque": { "node_modules/denque": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
@ -20903,6 +20779,7 @@
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"engines": { "engines": {
"node": ">=0.3.1" "node": ">=0.3.1"
@ -24205,16 +24082,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/has-own-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz",
"integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/has-property-descriptors": { "node_modules/has-property-descriptors": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@ -24845,12 +24712,6 @@
"postcss": "^8.1.0" "postcss": "^8.1.0"
} }
}, },
"node_modules/idb": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz",
"integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==",
"license": "ISC"
},
"node_modules/identity-obj-proxy": { "node_modules/identity-obj-proxy": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
@ -25842,15 +25703,6 @@
"dev": true, "dev": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/iso-url": {
"version": "0.4.7",
"resolved": "https://registry.npmjs.org/iso-url/-/iso-url-0.4.7.tgz",
"integrity": "sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/isobject": { "node_modules/isobject": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@ -30103,12 +29955,6 @@
"license": "MIT", "license": "MIT",
"peer": true "peer": true
}, },
"node_modules/js-sha256": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz",
"integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==",
"license": "MIT"
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -30321,15 +30167,6 @@
"dev": true, "dev": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/json-text-sequence": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz",
"integrity": "sha512-L3mEegEWHRekSHjc7+sc8eJhba9Clq1PZ8kMkzf8OxElhXc8O4TS5MwcVlj9aEbm5dr81N90WHC5nAz3UO971w==",
"license": "MIT",
"dependencies": {
"delimit-stream": "0.1.0"
}
},
"node_modules/json5": { "node_modules/json5": {
"version": "2.2.3", "version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@ -31620,9 +31457,9 @@
} }
}, },
"node_modules/load-esm": { "node_modules/load-esm": {
"version": "1.0.2", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.2.tgz", "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz",
"integrity": "sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==", "integrity": "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==",
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -32040,9 +31877,9 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/luxon": { "node_modules/luxon": {
"version": "3.6.1", "version": "3.7.2",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz",
"integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=12" "node": ">=12"
@ -32088,6 +31925,7 @@
"version": "1.3.6", "version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/make-fetch-happen": { "node_modules/make-fetch-happen": {
@ -32633,9 +32471,9 @@
} }
}, },
"node_modules/multer": { "node_modules/multer": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/multer/-/multer-2.0.1.tgz", "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz",
"integrity": "sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==", "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"append-field": "^1.0.0", "append-field": "^1.0.0",
@ -32785,9 +32623,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/ng-extract-i18n-merge": { "node_modules/ng-extract-i18n-merge": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.0.0.tgz", "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.1.0.tgz",
"integrity": "sha512-vTWtAz6a/wVYxnUMFHp1ur6o4JSLm+LcxdSMV8o8Ml2p5oCsSB4iFd5E6h8Yb8X8D596qyBz0ELgiDmbn4YyRQ==", "integrity": "sha512-4rJRcpTcP54xf5cjoz3S1By0T04X2RoyQcMDxr4wLdRx3fVxkeP8jeuLzmj9F4G5n0yMQb+6jhUiFERxpkfs1w==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@angular-devkit/architect": "^0.2000.0", "@angular-devkit/architect": "^0.2000.0",
@ -34756,12 +34594,13 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/path-to-regexp": { "node_modules/path-to-regexp": {
"version": "8.2.0", "version": "8.3.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
"integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
"license": "MIT", "license": "MIT",
"engines": { "funding": {
"node": ">=16" "type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/path-type": { "node_modules/path-type": {
@ -36514,16 +36353,6 @@
"entities": "^2.0.0" "entities": "^2.0.0"
} }
}, },
"node_modules/repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10"
}
},
"node_modules/replace-in-file": { "node_modules/replace-in-file": {
"version": "8.3.0", "version": "8.3.0",
"resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.3.0.tgz", "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.3.0.tgz",
@ -38095,12 +37924,6 @@
"node": "^18.17.0 || >=20.5.0" "node": "^18.17.0 || >=20.5.0"
} }
}, },
"node_modules/simple-cbor": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/simple-cbor/-/simple-cbor-0.4.1.tgz",
"integrity": "sha512-rijcxtwx2b4Bje3sqeIqw5EeW7UlOIC4YfOdwqIKacpvRQ/D78bWg/4/0m5e0U91oKvlGh7LlJuZCu07ISCC7w==",
"license": "ISC"
},
"node_modules/sirv": { "node_modules/sirv": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
@ -40056,6 +39879,7 @@
"version": "10.9.2", "version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@cspotcode/source-map-support": "^0.8.0", "@cspotcode/source-map-support": "^0.8.0",
@ -40233,16 +40057,10 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/tweetnacl": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
"license": "Unlicense"
},
"node_modules/twitter-api-v2": { "node_modules/twitter-api-v2": {
"version": "1.23.0", "version": "1.27.0",
"resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.23.0.tgz", "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.27.0.tgz",
"integrity": "sha512-5i1agETVpTuY68Zuk9i2B3N9wHzc4JIWw0WKyG4CEaFv9mRKmU87roa+U1oYYXTChWb0HMcqfkwoBJHYmLbeDA==", "integrity": "sha512-hbIFwzg0NeOcFOdmJqtKMCXjLjc0INff/7NwhnZ2zpnw65oku8i+0eMxo5M0iTc1hs+inD/IpDw3S0Xh2c45QQ==",
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/type-check": { "node_modules/type-check": {
@ -40809,6 +40627,7 @@
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/v8-to-istanbul": { "node_modules/v8-to-istanbul": {
@ -41124,20 +40943,6 @@
"license": "MIT", "license": "MIT",
"optional": true "optional": true
}, },
"node_modules/webcrypto-core": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz",
"integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==",
"license": "MIT",
"peer": true,
"dependencies": {
"@peculiar/asn1-schema": "^2.3.13",
"@peculiar/json-schema": "^1.1.12",
"asn1js": "^3.0.5",
"pvtsutils": "^1.3.5",
"tslib": "^2.7.0"
}
},
"node_modules/webidl-conversions": { "node_modules/webidl-conversions": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
@ -42438,6 +42243,7 @@
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"

31
package.json

@ -1,6 +1,6 @@
{ {
"name": "ghostfolio", "name": "ghostfolio",
"version": "2.211.0", "version": "2.214.0",
"homepage": "https://ghostfol.io", "homepage": "https://ghostfol.io",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio", "repository": "https://github.com/ghostfolio/ghostfolio",
@ -69,25 +69,20 @@
"@angular/service-worker": "20.2.4", "@angular/service-worker": "20.2.4",
"@codewithdan/observable-store": "2.2.15", "@codewithdan/observable-store": "2.2.15",
"@date-fns/utc": "2.1.0", "@date-fns/utc": "2.1.0",
"@dfinity/agent": "0.15.7",
"@dfinity/auth-client": "0.15.7",
"@dfinity/candid": "0.15.7",
"@dfinity/identity": "0.15.7",
"@dfinity/principal": "0.15.7",
"@internationalized/number": "3.6.3", "@internationalized/number": "3.6.3",
"@ionic/angular": "8.7.3", "@ionic/angular": "8.7.3",
"@keyv/redis": "4.4.0", "@keyv/redis": "4.4.0",
"@nestjs/bull": "11.0.2", "@nestjs/bull": "11.0.4",
"@nestjs/cache-manager": "3.0.1", "@nestjs/cache-manager": "3.0.1",
"@nestjs/common": "11.1.3", "@nestjs/common": "11.1.8",
"@nestjs/config": "4.0.2", "@nestjs/config": "4.0.2",
"@nestjs/core": "11.1.3", "@nestjs/core": "11.1.8",
"@nestjs/event-emitter": "3.0.1", "@nestjs/event-emitter": "3.0.1",
"@nestjs/jwt": "11.0.0", "@nestjs/jwt": "11.0.1",
"@nestjs/passport": "11.0.5", "@nestjs/passport": "11.0.5",
"@nestjs/platform-express": "11.1.3", "@nestjs/platform-express": "11.1.8",
"@nestjs/schedule": "6.0.0", "@nestjs/schedule": "6.0.1",
"@nestjs/serve-static": "5.0.3", "@nestjs/serve-static": "5.0.4",
"@openrouter/ai-sdk-provider": "0.7.2", "@openrouter/ai-sdk-provider": "0.7.2",
"@prisma/client": "6.18.0", "@prisma/client": "6.18.0",
"@simplewebauthn/browser": "13.1.0", "@simplewebauthn/browser": "13.1.0",
@ -108,7 +103,7 @@
"class-validator": "0.14.2", "class-validator": "0.14.2",
"color": "5.0.0", "color": "5.0.0",
"countries-and-timezones": "3.8.0", "countries-and-timezones": "3.8.0",
"countries-list": "3.1.1", "countries-list": "3.2.0",
"countup.js": "2.9.0", "countup.js": "2.9.0",
"date-fns": "4.1.0", "date-fns": "4.1.0",
"dotenv": "17.2.3", "dotenv": "17.2.3",
@ -123,7 +118,7 @@
"lodash": "4.17.21", "lodash": "4.17.21",
"marked": "15.0.4", "marked": "15.0.4",
"ms": "3.0.0-canary.1", "ms": "3.0.0-canary.1",
"ng-extract-i18n-merge": "3.0.0", "ng-extract-i18n-merge": "3.1.0",
"ngx-device-detector": "10.1.0", "ngx-device-detector": "10.1.0",
"ngx-markdown": "20.0.0", "ngx-markdown": "20.0.0",
"ngx-skeleton-loader": "11.3.0", "ngx-skeleton-loader": "11.3.0",
@ -139,7 +134,7 @@
"stripe": "18.5.0", "stripe": "18.5.0",
"svgmap": "2.12.2", "svgmap": "2.12.2",
"tablemark": "4.1.0", "tablemark": "4.1.0",
"twitter-api-v2": "1.23.0", "twitter-api-v2": "1.27.0",
"uuid": "11.1.0", "uuid": "11.1.0",
"yahoo-finance2": "3.10.0", "yahoo-finance2": "3.10.0",
"zone.js": "0.15.1" "zone.js": "0.15.1"
@ -158,8 +153,8 @@
"@angular/pwa": "20.2.2", "@angular/pwa": "20.2.2",
"@eslint/eslintrc": "3.3.1", "@eslint/eslintrc": "3.3.1",
"@eslint/js": "9.35.0", "@eslint/js": "9.35.0",
"@nestjs/schematics": "11.0.5", "@nestjs/schematics": "11.0.9",
"@nestjs/testing": "11.1.3", "@nestjs/testing": "11.1.8",
"@nx/angular": "21.5.1", "@nx/angular": "21.5.1",
"@nx/cypress": "21.5.1", "@nx/cypress": "21.5.1",
"@nx/eslint-plugin": "21.5.1", "@nx/eslint-plugin": "21.5.1",

8
test/import/not-ok/invalid-data-source.json

@ -14,5 +14,11 @@
"type": "BUY", "type": "BUY",
"unitPrice": 100.0 "unitPrice": 100.0
} }
] ],
"user": {
"settings": {
"currency": "USD",
"performanceCalculationType": "ROAI"
}
}
} }

8
test/import/not-ok/invalid-date-before-min.json

@ -14,5 +14,11 @@
"type": "BUY", "type": "BUY",
"unitPrice": 100.0 "unitPrice": 100.0
} }
] ],
"user": {
"settings": {
"currency": "USD",
"performanceCalculationType": "ROAI"
}
}
} }

8
test/import/not-ok/invalid-date.json

@ -14,5 +14,11 @@
"type": "BUY", "type": "BUY",
"unitPrice": 100.0 "unitPrice": 100.0
} }
] ],
"user": {
"settings": {
"currency": "USD",
"performanceCalculationType": "ROAI"
}
}
} }

8
test/import/not-ok/invalid-symbol.json

@ -14,5 +14,11 @@
"type": "BUY", "type": "BUY",
"unitPrice": 100.0 "unitPrice": 100.0
} }
] ],
"user": {
"settings": {
"currency": "USD",
"performanceCalculationType": "ROAI"
}
}
} }

8
test/import/not-ok/invalid-type.json

@ -14,5 +14,11 @@
"type": "<invalid>", "type": "<invalid>",
"unitPrice": 100.0 "unitPrice": 100.0
} }
] ],
"user": {
"settings": {
"currency": "USD",
"performanceCalculationType": "ROAI"
}
}
} }

8
test/import/not-ok/unavailable-exchange-rate.json

@ -15,5 +15,11 @@
"date": "1990-01-01T00:00:00.000Z", "date": "1990-01-01T00:00:00.000Z",
"symbol": "MSFT" "symbol": "MSFT"
} }
] ],
"user": {
"settings": {
"currency": "USD",
"performanceCalculationType": "ROAI"
}
}
} }

3
test/import/ok/500-activities.json

@ -6019,7 +6019,8 @@
], ],
"user": { "user": {
"settings": { "settings": {
"currency": "USD" "currency": "USD",
"performanceCalculationType": "ROAI"
} }
} }
} }

3
test/import/ok/btceur.json

@ -23,7 +23,8 @@
], ],
"user": { "user": {
"settings": { "settings": {
"currency": "USD" "currency": "USD",
"performanceCalculationType": "ROAI"
} }
} }
} }

3
test/import/ok/btcusd-short.json

@ -36,7 +36,8 @@
], ],
"user": { "user": {
"settings": { "settings": {
"currency": "USD" "currency": "USD",
"performanceCalculationType": "ROAI"
} }
} }
} }

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save