Compare commits

...

53 Commits

Author SHA1 Message Date
30bb484d5a Release 1.243.0 (#1777) 2023-03-08 20:25:27 +01:00
f88ee5e5a0 Feature/improve validation for manual currency (#1769)
* Improve validation

* Update changelog
2023-03-08 20:23:03 +01:00
73b5030972 Remove documentation of BASE_CURRENCY (#1776) 2023-03-08 20:22:39 +01:00
a69a3442ab Feature/add coingecko as default data source (#1775)
* Add CoinGecko as a default data source

* Update changelog
2023-03-08 20:13:53 +01:00
d4dff744b5 Sort imports (#1770) 2023-03-07 22:05:02 +01:00
62c93ad99d Make NODE_ENV optional in production
* Make NODE_ENV optional

* Update changelog

---------

Co-authored-by: Thomas <4159106+dtslvr@users.noreply.github.com>
2023-03-06 21:02:20 +01:00
1e42d6bffa Feature/harmonize axis style of charts (#1768)
* Harmonize axis style

* Update changelog
2023-03-06 19:58:43 +01:00
002ac29f2f Feature/remove environment variable for custom symbols (#1766)
* Remove environment variable

* Update changelog
2023-03-05 09:46:38 +01:00
20ccf389e9 Release 1.242.0 (#1765) 2023-03-04 10:32:51 +01:00
a2f99ed4d2 Feature/upgrade ngx skeleton loader to version 7.0.0 (#1758)
* Upgrade ngx-skeleton-loader to version 7.0.0

* Update changelog
2023-03-04 10:30:15 +01:00
cc6320acfd Feature/simplify database seeding (#1763)
* Simplify database seeding

* Update documentation

* Update changelog
2023-03-04 10:16:16 +01:00
261a0fb0b9 Refactor AuthInterceptor (#1764)
* Refactor AuthInterceptor

* Refactor JwtStrategy
2023-03-04 10:13:04 +01:00
cfc05cce41 Resolve segmentation fault during prisma db migrations (#1761)
* Resolves segmentation fault during prisma db migrations by downgrading Node.js from version 18 to 16

* Update changelog
2023-03-02 19:28:58 +01:00
1f15b70134 Release 1.241.0 (#1760) 2023-03-01 20:53:59 +01:00
a5b49b286d Feature/filter item activities from search results (#1759)
* Filter ITEM activities from search results

* Update changelog
2023-03-01 20:52:12 +01:00
f3333f24da Feature/upgrade stripe dependencies 20230226 (#1755)
* Upgrade Stripe dependencies

* Consider language of user in Stripe checkout

* Update changelog
2023-03-01 20:25:48 +01:00
cad8f0d0e2 Feature/upgrade twitter api v2 to version 1.14.2 (#1754)
* Update twitter-api-v2 to version 1.14.2

* Update changelog
2023-02-27 08:17:13 +01:00
edd3e75730 Release 1.240.0 (#1753) 2023-02-26 17:13:50 +01:00
ab68c2c69a Bugfix/fix feature graphic of umbrel blog post (#1752)
* Fix feature graphic

* Update changelog
2023-02-26 17:12:38 +01:00
cbb95f21a3 Feature/support manual currency for unit price (#1751)
* Support manual currency for unit price

* Update changelog
2023-02-26 17:10:13 +01:00
74d3954335 Release 1.239.0 (#1750) 2023-02-25 20:28:30 +01:00
92449b0369 Feature/remove rimraf (#1739)
* Remove rimraf

* Update changelog
2023-02-25 20:26:56 +01:00
65276483e0 Feature/add umbrel blog post (#1749)
* Add blog post: Ghostfolio meets Umbrel

* Update changelog
2023-02-25 20:14:33 +01:00
dde0d1e465 Add linux/arm/v7 (#1741) 2023-02-25 11:34:22 +01:00
3ad802c6f5 Release 1.238.0 (#1747) 2023-02-25 11:23:05 +01:00
b81377a682 Feature/rename example env file (#1734)
* Rename .env to .env.example

* Ignore .env file

* Update changelog
2023-02-25 11:20:38 +01:00
545180b88f Feature/add reddit and umbrel logos to landing page (#1745)
* Add Reddit and Umbrel logos

* Update changelog
2023-02-25 11:20:04 +01:00
a9819b9e25 Feature/upgrade zone.js to version 0.12.0 (#1740)
* Upgrade zone.js

* Update changelog
2023-02-25 10:33:59 +01:00
897e941e7a Feature/add data provider info to position (#1730)
* Add data provider info

* Update changelog
2023-02-25 10:33:45 +01:00
aef840c2cc Bugfix/fix maximum call stack size exceeded error in value redaction (#1743)
* Bugfix for RangeError: Maximum call stack size exceeded

* Update changelog
2023-02-25 10:15:25 +01:00
80d0638922 Adding Coingecko Data Provider (#1736)
* Adding Coingecko Data Provider

* Update changelog

---------

Co-authored-by: Thomas <4159106+dtslvr@users.noreply.github.com>
2023-02-25 09:45:01 +01:00
494ba36d44 Feature/reset letter spacing in buttons (#1742)
* Reset letter spacing in buttons

* Update changelog
2023-02-24 20:44:20 +01:00
dab9154092 Add support for armv7 processors (#1738)
* Add support for armv7 processors

* Update changelog
2023-02-23 18:09:35 +01:00
cd4a85abbf Improve wording (#1729) 2023-02-21 14:43:21 +01:00
e7977a9fbb Release 1.237.0 (#1733) 2023-02-19 19:26:16 +01:00
684c1e55b0 Bugfix/do not skip manual data source part 2 (#1732)
* Do not skip MANUAL data source

* Update changelog
2023-02-19 19:24:52 +01:00
1ffa831c5c Feature/improve style of symbol search results (#1728)
* Improve style

* Update changelog
2023-02-19 11:20:56 +01:00
40eed0016c Feature/migrate header module to angular material 15 (#1725)
* Migrate GfHeaderModule to Angular Material 15

* Update changelog
2023-02-19 10:36:52 +01:00
b58631083b Increase file size limit for imports (#1726)
* Increase file size limit for imports

* Update changelog
2023-02-19 10:09:13 +01:00
e0c0425d21 Add development guide (#1722) 2023-02-19 10:06:52 +01:00
bf2de5d572 Feature/add support to pricing page (#1723)
* Add support

* Update changelog
2023-02-19 10:02:46 +01:00
2b4a1dc480 Bugfix/fix issue with exact matches in activities filter (#1724)
* Fix issue with exact match

* Update changelog
2023-02-19 10:01:51 +01:00
ce022c024f Feature/upgrade nx to version 15.7.2 (#1721)
* Upgrade Angular and Nx

* Update changelog
2023-02-18 19:34:06 +01:00
0f4bf529d8 Handle impersonation mode with guard (#1714) 2023-02-18 14:59:38 +01:00
dad6bf7095 Release 1.236.0 (#1720) 2023-02-17 19:23:04 +01:00
86ca9eaae6 Bugfix/fix logout url in development (#1715)
* Add language

* Update changelog
2023-02-17 19:20:58 +01:00
9d9b805b0e Bugfix/do not skip manual data source (#1718)
* Do not skip MANUAL data source

* Update changelog
2023-02-17 19:20:14 +01:00
851401be1e Feature/remove ghostfolio as data source type (#1717)
* Remove GHOSTFOLIO

* Update changelog
2023-02-17 19:19:16 +01:00
85052bc9bc Bugfix/fix buying power calculation with emergency fund tag (#1713)
* Fix buying power calculation

* Update changelog
2023-02-17 17:29:48 +01:00
bff09f529d Feature/beautify etf names in asset profiles (#1709)
* Beautify ETF names

* Update changelog
2023-02-17 11:20:46 +01:00
f438458687 Release 1.235.0 (#1708) 2023-02-16 17:20:22 +01:00
7125b12631 Feature/improve styles on about page (#1707)
* Improve styles

* Update changelog
2023-02-16 17:17:30 +01:00
0cbf275a2e Feature/eliminate ghostfolio scraper api service (#1706)
* Eliminate GhostfolioScraperApiService

* Update changelog
2023-02-16 16:25:23 +01:00
117 changed files with 8965 additions and 2369 deletions

View File

View File

@ -10,7 +10,7 @@ jobs:
strategy:
matrix:
node_version:
- 18
- 16
steps:
- name: Checkout code
uses: actions/checkout@v3

View File

@ -41,7 +41,7 @@ jobs:
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/amd64,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.output.labels }}

3
.gitignore vendored
View File

@ -25,6 +25,7 @@
# misc
/.angular/cache
.env
.env.prod
/.sass-cache
/connect.lock
@ -38,4 +39,4 @@ yarn-error.log
# System Files
.DS_Store
Thumbs.db
Thumbs.db

View File

@ -1,10 +1,7 @@
module.exports = {
stories: [],
addons: ['@storybook/addon-essentials']
// uncomment the property below if you want to apply some webpack config globally
// webpackFinal: async (config, { configType }) => {
// // Make whatever fine-grained changes you need that should apply to all storybook configs
// // Return the altered config
// return config;
// },

View File

@ -5,6 +5,122 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 1.243.0 - 2023-03-08
### Added
- Added `COINGECKO` as a default to `DATA_SOURCES`
### Changed
- Improved the validation of the manual currency for the activity fee and unit price
- Harmonized the axis style of charts
- Made setting `NODE_ENV: production` optional (to avoid `ENOENT: no such file or directory` errors on startup)
- Removed the environment variable `ENABLE_FEATURE_CUSTOM_SYMBOLS`
## 1.242.0 - 2023-03-04
### Changed
- Simplified the database seeding
- Upgraded `ngx-skeleton-loader` from version `5.0.0` to `7.0.0`
### Fixed
- Downgraded `Node.js` from version `18` to `16` (Dockerfile) to resolve `SIGSEGV` (segmentation fault) during the `prisma` database migrations (see https://github.com/prisma/prisma/issues/10649)
## 1.241.0 - 2023-03-01
### Changed
- Filtered activities with type `ITEM` from search results
- Considered the user's language in the _Stripe_ checkout
- Upgraded the _Stripe_ dependencies
- Upgraded `twitter-api-v2` from version `1.10.3` to `1.14.2`
## 1.240.0 - 2023-02-26
### Added
- Supported a manual currency for the activity unit price
### Fixed
- Fixed the feature graphic of the _Ghostfolio meets Umbrel_ blog post
## 1.239.0 - 2023-02-25
### Added
- Added a blog post: _Ghostfolio meets Umbrel_
### Changed
- Removed the dependency `rimraf`
## 1.238.0 - 2023-02-25
### Added
- Added `COINGECKO` as a new data source type
- Added support for data provider information to the position detail dialog
- Added the configuration to publish a `linux/arm/v7` docker image
- Added _Reddit_ to the _As seen in_ section on the landing page
- Added _Umbrel_ to the _As seen in_ section on the landing page
### Changed
- Renamed the example environment variable file from `.env` to `.env.example`
- Upgraded `zone.js` from version `0.11.8` to `0.12.0`
### Fixed
- Fixed `RangeError: Maximum call stack size exceeded` for values of type `Big` in the value redaction interceptor for the impersonation mode
- Reset the letter spacing in buttons
### Todo
- Ensure that you still have a `.env` file in your project
## 1.237.0 - 2023-02-19
### Added
- Added the support details to the pricing page
### Changed
- Increased the file size limit for the activities import
- Improved the style of the search results for symbols
- Migrated the style of `GfHeaderModule` to `@angular/material` `15` (mdc)
- Upgraded `angular` from version `15.1.2` to `15.1.5`
- Upgraded `Nx` from version `15.6.3` to `15.7.2`
### Fixed
- Fixed an issue with exact matches in the activities table filter (`VT` vs. `VTI`)
- Fixed an issue in the data gathering service (do not skip `MANUAL` data source)
## 1.236.0 - 2023-02-17
### Changed
- Beautified the ETF names in the asset profile
- Removed the data source type `GHOSTFOLIO`
### Fixed
- Fixed an issue in the data gathering service (do not skip `MANUAL` data source)
- Fixed the buying power calculation if no emergency fund is set but an activity is tagged as _Emergency Fund_
- Fixed the url on logout during the local development
## 1.235.0 - 2023-02-16
### Changed
- Improved the styles on the about page
- Eliminated the `GhostfolioScraperApiService`
## 1.234.0 - 2023-02-15
### Added
@ -718,7 +834,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added the alias to the `Access` database schema
- Added support for translated time distances
- Added a _GitHub Action_ to create an `arm64` docker image
- Added a _GitHub Action_ to create an `linux/arm64` docker image
### Changed
@ -1331,7 +1447,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Beautified the ETF names in the symbol profile
- Beautified the ETF names in the asset profile
### Fixed
@ -1756,7 +1872,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Extended the historical data view in the admin control panel
- Upgraded _Stripe_ dependencies
- Upgraded the _Stripe_ dependencies
- Upgraded `prisma` from version `3.7.0` to `3.8.1`
### Fixed

25
DEVELOPMENT.md Normal file
View File

@ -0,0 +1,25 @@
# Ghostfolio Development Guide
## Git
### Rebase
`git rebase -i --autosquash main`
## Dependencies
### Nx
#### Upgrade
1. Run `yarn nx migrate latest`
1. Make sure `package.json` changes make sense and then run `yarn install`
1. Run `yarn nx migrate --run-migrations`
### Prisma
#### Create schema migration (local)
Run `yarn prisma migrate dev --name added_job_title`
https://www.prisma.io/docs/concepts/components/prisma-migrate#getting-started-with-prisma-migrate

View File

@ -1,4 +1,4 @@
FROM --platform=$BUILDPLATFORM node:18-slim as builder
FROM --platform=$BUILDPLATFORM node:16-slim as builder
# Build application and add additional files
WORKDIR /ghostfolio
@ -50,7 +50,7 @@ COPY package.json /ghostfolio/dist/apps/api
RUN yarn database:generate-typings
# Image to run, copy everything needed from builder
FROM node:18-slim
FROM node:16-slim
RUN apt update && apt install -y \
openssl \
&& rm -rf /var/lib/apt/lists/*

View File

@ -75,7 +75,7 @@ The frontend is built with [Angular](https://angular.io) and uses [Angular Mater
## Self-hosting
We provide official container images hosted on [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio) for `linux/amd64` and `linux/arm64`.
We provide official container images hosted on [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio) for `linux/amd64`, `linux/arm/v7` and `linux/arm64`.
<div align="center">
@ -85,20 +85,19 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c
### Supported Environment Variables
| Name | Default Value | Description |
| ------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ACCESS_TOKEN_SALT` | | A random string used as salt for access tokens |
| `BASE_CURRENCY` | `USD` | The base currency of the Ghostfolio application.<br />`AUD` \| `CAD` \| `CNY` \| `EUR` \| `GBP` \| `JPY` \| `RUB` \| `USD`<br />Caution: Only set if you intend to track cryptocurrencies in a non-`USD` currency. This cannot be changed later! |
| `DATABASE_URL` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` |
| `HOST` | `0.0.0.0` | The host where the Ghostfolio application will run on |
| `JWT_SECRET_KEY` | | A random string used for _JSON Web Tokens_ (JWT) |
| `PORT` | `3333` | The port where the Ghostfolio application will run on |
| `POSTGRES_DB` | | The name of the _PostgreSQL_ database |
| `POSTGRES_PASSWORD` | | The password of the _PostgreSQL_ database |
| `POSTGRES_USER` | | The user of the _PostgreSQL_ database |
| `REDIS_HOST` | | The host where _Redis_ is running |
| `REDIS_PASSWORD` | | The password of _Redis_ |
| `REDIS_PORT` | | The port where _Redis_ is running |
| Name | Default Value | Description |
| ------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `ACCESS_TOKEN_SALT` | | A random string used as salt for access tokens |
| `DATABASE_URL` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` |
| `HOST` | `0.0.0.0` | The host where the Ghostfolio application will run on |
| `JWT_SECRET_KEY` | | A random string used for _JSON Web Tokens_ (JWT) |
| `PORT` | `3333` | The port where the Ghostfolio application will run on |
| `POSTGRES_DB` | | The name of the _PostgreSQL_ database |
| `POSTGRES_PASSWORD` | | The password of the _PostgreSQL_ database |
| `POSTGRES_USER` | | The user of the _PostgreSQL_ database |
| `REDIS_HOST` | | The host where _Redis_ is running |
| `REDIS_PASSWORD` | | The password of _Redis_ |
| `REDIS_PORT` | | The port where _Redis_ is running |
### Run with Docker Compose
@ -106,7 +105,8 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c
- Basic knowledge of Docker
- Installation of [Docker](https://www.docker.com/products/docker-desktop)
- Local copy of this Git repository (clone)
- Create a local copy of this Git repository (clone)
- Copy the file `.env.example` to `.env` and populate it with your data (`cp .env.example .env`)
#### a. Run environment
@ -125,13 +125,10 @@ docker-compose --env-file ./.env -f docker/docker-compose.build.yml build
docker-compose --env-file ./.env -f docker/docker-compose.build.yml up -d
```
#### Fetch Historical Data
Open http://localhost:3333 in your browser and accomplish these steps:
#### Setup
1. Open http://localhost:3333 in your browser
1. Create a new user via _Get Started_ (this first user will get the role `ADMIN`)
1. Go to the _Market Data_ tab in the _Admin Control Panel_ and click _Gather All Data_ to fetch historical data
1. Click _Sign out_ and check out the _Live Demo_
#### Upgrade Version
@ -150,18 +147,18 @@ Please follow the instructions of the Ghostfolio [Unraid Community App](https://
- [Docker](https://www.docker.com/products/docker-desktop)
- [Node.js](https://nodejs.org/en/download) (version 16)
- [Yarn](https://yarnpkg.com/en/docs/install)
- A local copy of this Git repository (clone)
- Create a local copy of this Git repository (clone)
- Copy the file `.env.example` to `.env` and populate it with your data (`cp .env.example .env`)
### Setup
1. Run `yarn install`
1. Run `yarn build:dev` to build the source code including the assets
1. Run `docker-compose --env-file ./.env -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io)
1. Run `yarn database:setup` to initialize the database schema and populate your database with (example) data
1. Run `yarn database:setup` to initialize the database schema
1. Start the server and the client (see [_Development_](#Development))
1. Open http://localhost:4200/en in your browser
1. Create a new user via _Get Started_ (this first user will get the role `ADMIN`)
1. Go to the _Market Data_ tab in the _Admin Control Panel_ and click _Gather All Data_ to fetch historical data
1. Click _Sign out_ and check out the _Live Demo_
### Start Server

View File

@ -1,6 +1,7 @@
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response.interceptor';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service';
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import { Accounts } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import type {
@ -83,7 +84,7 @@ export class AccountController {
@UseGuards(AuthGuard('jwt'))
@UseInterceptors(RedactValuesInResponseInterceptor)
public async getAllAccounts(
@Headers('impersonation-id') impersonationId
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId
): Promise<Accounts> {
const impersonationUserId =
await this.impersonationService.validateImpersonationId(
@ -101,7 +102,7 @@ export class AccountController {
@UseGuards(AuthGuard('jwt'))
@UseInterceptors(RedactValuesInResponseInterceptor)
public async getAccountById(
@Headers('impersonation-id') impersonationId,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
@Param('id') id: string
): Promise<AccountWithValue> {
const impersonationUserId =

View File

@ -231,12 +231,27 @@ export class AdminService {
}
private async getUsersWithAnalytics(): Promise<AdminData['users']> {
const usersWithAnalytics = await this.prismaService.user.findMany({
orderBy: {
let orderBy: any = {
createdAt: 'desc'
};
let where;
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
orderBy = {
Analytics: {
updatedAt: 'desc'
}
},
};
where = {
NOT: {
Analytics: null
}
};
}
const usersWithAnalytics = await this.prismaService.user.findMany({
orderBy,
where,
select: {
_count: {
select: { Account: true, Order: true }
@ -252,19 +267,16 @@ export class AdminService {
id: true,
Subscription: true
},
take: 30,
where: {
NOT: {
Analytics: null
}
}
take: 30
});
return usersWithAnalytics.map(
({ _count, Analytics, createdAt, id, Subscription }) => {
const daysSinceRegistration =
differenceInDays(new Date(), createdAt) + 1;
const engagement = Analytics.activityCount / daysSinceRegistration;
const engagement = Analytics
? Analytics.activityCount / daysSinceRegistration
: undefined;
const subscription = this.configurationService.get(
'ENABLE_FEATURE_SUBSCRIPTION'
@ -278,8 +290,8 @@ export class AdminService {
id,
subscription,
accountCount: _count.Account || 0,
country: Analytics.country,
lastActivity: Analytics.updatedAt,
country: Analytics?.country,
lastActivity: Analytics?.updatedAt,
transactionCount: _count.Order || 0
};
}

View File

@ -1,33 +1,46 @@
import { UserService } from '@ghostfolio/api/app/user/user.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
import { HEADER_KEY_TIMEZONE } from '@ghostfolio/common/config';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import * as countriesAndTimezones from 'countries-and-timezones';
import { ExtractJwt, Strategy } from 'passport-jwt';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
public constructor(
readonly configurationService: ConfigurationService,
private readonly configurationService: ConfigurationService,
private readonly prismaService: PrismaService,
private readonly userService: UserService
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
passReqToCallback: true,
secretOrKey: configurationService.get('JWT_SECRET_KEY')
});
}
public async validate({ id }: { id: string }) {
public async validate(request: Request, { id }: { id: string }) {
try {
const timezone = request.headers[HEADER_KEY_TIMEZONE.toLowerCase()];
const user = await this.userService.user({ id });
if (user) {
await this.prismaService.analytics.upsert({
create: { User: { connect: { id: user.id } } },
update: { activityCount: { increment: 1 }, updatedAt: new Date() },
where: { userId: user.id }
});
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
const country =
countriesAndTimezones.getCountryForTimezone(timezone)?.id;
await this.prismaService.analytics.upsert({
create: { country, User: { connect: { id: user.id } } },
update: {
country,
activityCount: { increment: 1 },
updatedAt: new Date()
},
where: { userId: user.id }
});
}
return user;
} else {

View File

@ -1,6 +1,13 @@
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
import { Controller, Get, Param, UseGuards } from '@nestjs/common';
import {
Controller,
Get,
HttpException,
Param,
UseGuards
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { ExchangeRateService } from './exchange-rate.service';
@ -18,9 +25,18 @@ export class ExchangeRateController {
): Promise<IDataProviderHistoricalResponse> {
const date = new Date(dateString);
return this.exchangeRateService.getExchangeRate({
const exchangeRate = await this.exchangeRateService.getExchangeRate({
date,
symbol
});
if (exchangeRate) {
return { marketPrice: exchangeRate };
}
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
}

View File

@ -1,5 +1,4 @@
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
import { Injectable } from '@nestjs/common';
@Injectable()
@ -14,16 +13,14 @@ export class ExchangeRateService {
}: {
date: Date;
symbol: string;
}): Promise<IDataProviderHistoricalResponse> {
}): Promise<number> {
const [currency1, currency2] = symbol.split('-');
const marketPrice = await this.exchangeRateDataService.toCurrencyAtDate(
return this.exchangeRateDataService.toCurrencyAtDate(
1,
currency1,
currency2,
date
);
return { marketPrice };
}
}

View File

@ -1,11 +1,11 @@
import * as fs from 'fs';
import * as path from 'path';
import { environment } from '@ghostfolio/api/environments/environment';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import { Injectable, NestMiddleware } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { format } from 'date-fns';
import { NextFunction, Request, Response } from 'express';
@ -18,18 +18,10 @@ export class FrontendMiddleware implements NestMiddleware {
public indexHtmlIt = '';
public indexHtmlNl = '';
public indexHtmlPt = '';
public isProduction: boolean;
public constructor(
private readonly configService: ConfigService,
private readonly configurationService: ConfigurationService
) {
const NODE_ENV =
this.configService.get<'development' | 'production'>('NODE_ENV') ??
'development';
this.isProduction = NODE_ENV === 'production';
try {
this.indexHtmlDe = fs.readFileSync(
this.getPathOfIndexHtmlFile('de'),
@ -90,12 +82,17 @@ export class FrontendMiddleware implements NestMiddleware {
) {
featureGraphicPath = 'assets/images/blog/ghostfolio-x-sackgeld.png';
title = `Ghostfolio auf Sackgeld.com vorgestellt - ${title}`;
} else if (
request.path.startsWith('/en/blog/2023/02/ghostfolio-meets-umbrel')
) {
featureGraphicPath = 'assets/images/blog/ghostfolio-x-umbrel.png';
title = `Ghostfolio meets Umbrel - ${title}`;
}
if (
request.path.startsWith('/api/') ||
this.isFileRequest(request.url) ||
!this.isProduction
!environment.production
) {
// Skip
next();

View File

@ -6,8 +6,8 @@ import { PrismaService } from '@ghostfolio/api/services/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import {
DEMO_USER_ID,
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
PROPERTY_DEMO_USER_ID,
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_SLACK_COMMUNITY_USERS,
PROPERTY_STRIPE_CONFIG,
@ -59,9 +59,7 @@ export class InfoService {
}
if (this.configurationService.get('ENABLE_FEATURE_FEAR_AND_GREED_INDEX')) {
if (
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true
) {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
info.fearAndGreedDataSource = encodeDataSource(
ghostfolioFearAndGreedIndexDataSource
);
@ -120,7 +118,7 @@ export class InfoService {
baseCurrency: this.configurationService.get('BASE_CURRENCY'),
benchmarks: await this.benchmarkService.getBenchmarkAssetProfiles(),
currencies: this.exchangeRateDataService.getCurrencies(),
demoAuthToken: this.getDemoAuthToken(),
demoAuthToken: await this.getDemoAuthToken(),
statistics: await this.getStatistics(),
subscriptions: await this.getSubscriptions(),
tags: await this.tagService.get()
@ -248,10 +246,18 @@ export class InfoService {
)) as string;
}
private getDemoAuthToken() {
return this.jwtService.sign({
id: DEMO_USER_ID
});
private async getDemoAuthToken() {
const demoUserId = (await this.propertyService.getByKey(
PROPERTY_DEMO_USER_ID
)) as string;
if (demoUserId) {
return this.jwtService.sign({
id: demoUserId
});
}
return undefined;
}
private async getStatistics() {

View File

@ -3,6 +3,7 @@ import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interce
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service';
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import type { RequestWithUser } from '@ghostfolio/common/types';
import {
@ -66,7 +67,7 @@ export class OrderController {
@UseInterceptors(RedactValuesInResponseInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getAllOrders(
@Headers('impersonation-id') impersonationId,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
@Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string,
@Query('tags') filterByTags?: string

View File

@ -110,9 +110,6 @@ export class OrderService {
dataSource,
symbol: id
};
} else {
data.SymbolProfile.connectOrCreate.create.symbol =
data.SymbolProfile.connectOrCreate.create.symbol.toUpperCase();
}
await this.dataGatheringService.addJobToQueue(

View File

@ -1,4 +1,5 @@
import { parseDate, resetHours } from '@ghostfolio/common/helper';
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
import { addDays, endOfDay, isBefore, isSameDay } from 'date-fns';
import { GetValueObject } from './interfaces/get-value-object.interface';
@ -48,8 +49,11 @@ export const CurrentRateServiceMock = {
getValues: ({
dataGatheringItems,
dateQuery
}: GetValuesParams): Promise<GetValueObject[]> => {
const result: GetValueObject[] = [];
}: GetValuesParams): Promise<{
dataProviderInfos: DataProviderInfo[];
values: GetValueObject[];
}> => {
const values: GetValueObject[] = [];
if (dateQuery.lt) {
for (
let date = resetHours(dateQuery.gte);
@ -57,7 +61,7 @@ export const CurrentRateServiceMock = {
date = addDays(date, 1)
) {
for (const dataGatheringItem of dataGatheringItems) {
result.push({
values.push({
date,
marketPriceInBaseCurrency: mockGetValue(
dataGatheringItem.symbol,
@ -70,7 +74,7 @@ export const CurrentRateServiceMock = {
} else {
for (const date of dateQuery.in) {
for (const dataGatheringItem of dataGatheringItems) {
result.push({
values.push({
date,
marketPriceInBaseCurrency: mockGetValue(
dataGatheringItem.symbol,
@ -81,6 +85,6 @@ export const CurrentRateServiceMock = {
}
}
}
return Promise.resolve(result);
return Promise.resolve({ values, dataProviderInfos: [] });
}
};

View File

@ -1,6 +1,7 @@
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data.service';
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
import { DataSource, MarketData } from '@prisma/client';
import { CurrentRateService } from './current-rate.service';
@ -103,17 +104,23 @@ describe('CurrentRateService', () => {
},
userCurrency: 'CHF'
})
).toMatchObject<GetValueObject[]>([
{
date: undefined,
marketPriceInBaseCurrency: 1841.823902,
symbol: 'AMZN'
},
{
date: undefined,
marketPriceInBaseCurrency: 1847.839966,
symbol: 'AMZN'
}
]);
).toMatchObject<{
dataProviderInfos: DataProviderInfo[];
values: GetValueObject[];
}>({
dataProviderInfos: [],
values: [
{
date: undefined,
marketPriceInBaseCurrency: 1841.823902,
symbol: 'AMZN'
},
{
date: undefined,
marketPriceInBaseCurrency: 1847.839966,
symbol: 'AMZN'
}
]
});
});
});

View File

@ -2,6 +2,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data.service';
import { resetHours } from '@ghostfolio/common/helper';
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common';
import { isBefore, isToday } from 'date-fns';
import { flatten } from 'lodash';
@ -22,7 +23,11 @@ export class CurrentRateService {
dataGatheringItems,
dateQuery,
userCurrency
}: GetValuesParams): Promise<GetValueObject[]> {
}: GetValuesParams): Promise<{
dataProviderInfos: DataProviderInfo[];
values: GetValueObject[];
}> {
const dataProviderInfos: DataProviderInfo[] = [];
const includeToday =
(!dateQuery.lt || isBefore(new Date(), dateQuery.lt)) &&
(!dateQuery.gte || isBefore(dateQuery.gte, new Date())) &&
@ -38,6 +43,14 @@ export class CurrentRateService {
.then((dataResultProvider) => {
const result: GetValueObject[] = [];
for (const dataGatheringItem of dataGatheringItems) {
if (
dataResultProvider?.[dataGatheringItem.symbol]?.dataProviderInfo
) {
dataProviderInfos.push(
dataResultProvider[dataGatheringItem.symbol].dataProviderInfo
);
}
result.push({
date: today,
marketPriceInBaseCurrency:
@ -81,7 +94,10 @@ export class CurrentRateService {
})
);
return flatten(await Promise.all(promises));
return {
dataProviderInfos,
values: flatten(await Promise.all(promises))
};
}
private containsToday(dates: Date[]): boolean {

View File

@ -1,4 +1,5 @@
import {
DataProviderInfo,
EnhancedSymbolProfile,
HistoricalDataItem
} from '@ghostfolio/common/interfaces';
@ -7,6 +8,7 @@ import { Tag } from '@prisma/client';
export interface PortfolioPositionDetail {
averagePrice: number;
dataProviderInfo: DataProviderInfo;
dividendInBaseCurrency: number;
feeInBaseCurrency: number;
firstBuyDate: string;

View File

@ -1,7 +1,11 @@
import { TimelineInfoInterface } from '@ghostfolio/api/app/portfolio/interfaces/timeline-info.interface';
import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
import { DATE_FORMAT, parseDate, resetHours } from '@ghostfolio/common/helper';
import { ResponseError, TimelinePosition } from '@ghostfolio/common/interfaces';
import {
DataProviderInfo,
ResponseError,
TimelinePosition
} from '@ghostfolio/common/interfaces';
import { GroupBy } from '@ghostfolio/common/types';
import { Logger } from '@nestjs/common';
import { Type as TypeOfOrder } from '@prisma/client';
@ -45,6 +49,7 @@ export class PortfolioCalculator {
private currency: string;
private currentRateService: CurrentRateService;
private dataProviderInfos: DataProviderInfo[];
private orders: PortfolioOrder[];
private transactionPoints: TransactionPoint[];
@ -202,14 +207,17 @@ export class PortfolioCalculator {
symbols[item.symbol] = true;
}
const marketSymbols = await this.currentRateService.getValues({
currencies,
dataGatheringItems,
dateQuery: {
in: dates
},
userCurrency: this.currency
});
const { dataProviderInfos, values: marketSymbols } =
await this.currentRateService.getValues({
currencies,
dataGatheringItems,
dateQuery: {
in: dates
},
userCurrency: this.currency
});
this.dataProviderInfos = dataProviderInfos;
const marketSymbolMap: {
[date: string]: { [symbol: string]: Big };
@ -368,14 +376,17 @@ export class PortfolioCalculator {
dates.push(resetHours(end));
const marketSymbols = await this.currentRateService.getValues({
currencies,
dataGatheringItems,
dateQuery: {
in: dates
},
userCurrency: this.currency
});
const { dataProviderInfos, values: marketSymbols } =
await this.currentRateService.getValues({
currencies,
dataGatheringItems,
dateQuery: {
in: dates
},
userCurrency: this.currency
});
this.dataProviderInfos = dataProviderInfos;
const marketSymbolMap: {
[date: string]: { [symbol: string]: Big };
@ -463,6 +474,10 @@ export class PortfolioCalculator {
};
}
public getDataProviderInfos() {
return this.dataProviderInfos;
}
public getInvestments(): { date: string; investment: Big }[] {
if (this.transactionPoints.length === 0) {
return [];
@ -748,7 +763,7 @@ export class PortfolioCalculator {
let marketSymbols: GetValueObject[] = [];
if (dataGatheringItems.length > 0) {
try {
marketSymbols = await this.currentRateService.getValues({
const { values } = await this.currentRateService.getValues({
currencies,
dataGatheringItems,
dateQuery: {
@ -757,6 +772,7 @@ export class PortfolioCalculator {
},
userCurrency: this.currency
});
marketSymbols = values;
} catch (error) {
Logger.error(
`Failed to fetch info for date ${startDate} with exception`,

View File

@ -10,6 +10,7 @@ import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interc
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import {
PortfolioDetails,
PortfolioDividends,
@ -65,7 +66,7 @@ export class PortfolioController {
@UseInterceptors(RedactValuesInResponseInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getDetails(
@Headers('impersonation-id') impersonationId: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string,
@Query('range') dateRange: DateRange = 'max',
@ -189,7 +190,7 @@ export class PortfolioController {
@Get('dividends')
@UseGuards(AuthGuard('jwt'))
public async getDividends(
@Headers('impersonation-id') impersonationId: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string,
@Query('groupBy') groupBy?: GroupBy,
@ -239,7 +240,7 @@ export class PortfolioController {
@Get('investments')
@UseGuards(AuthGuard('jwt'))
public async getInvestments(
@Headers('impersonation-id') impersonationId: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string,
@Query('groupBy') groupBy?: GroupBy,
@ -291,7 +292,7 @@ export class PortfolioController {
@UseInterceptors(TransformDataSourceInResponseInterceptor)
@Version('2')
public async getPerformanceV2(
@Headers('impersonation-id') impersonationId: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string,
@Query('range') dateRange: DateRange = 'max',
@ -360,7 +361,7 @@ export class PortfolioController {
@UseInterceptors(RedactValuesInResponseInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getPositions(
@Headers('impersonation-id') impersonationId: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string,
@Query('range') dateRange: DateRange = 'max',
@ -451,7 +452,7 @@ export class PortfolioController {
@UseInterceptors(TransformDataSourceInResponseInterceptor)
@UseGuards(AuthGuard('jwt'))
public async getPosition(
@Headers('impersonation-id') impersonationId: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Param('dataSource') dataSource,
@Param('symbol') symbol
): Promise<PortfolioPositionDetail> {
@ -474,7 +475,7 @@ export class PortfolioController {
@Get('report')
@UseGuards(AuthGuard('jwt'))
public async getReport(
@Headers('impersonation-id') impersonationId: string
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
): Promise<PortfolioReport> {
const report = await this.portfolioService.getReport(impersonationId);

View File

@ -678,6 +678,7 @@ export class PortfolioService {
return {
tags,
averagePrice: undefined,
dataProviderInfo: undefined,
dividendInBaseCurrency: undefined,
feeInBaseCurrency: undefined,
firstBuyDate: undefined,
@ -849,6 +850,7 @@ export class PortfolioService {
tags,
transactionCount,
averagePrice: averagePrice.toNumber(),
dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0],
dividendInBaseCurrency: dividendInBaseCurrency.toNumber(),
feeInBaseCurrency: this.exchangeRateDataService.toCurrency(
fee.toNumber(),
@ -911,6 +913,7 @@ export class PortfolioService {
SymbolProfile,
tags,
averagePrice: 0,
dataProviderInfo: undefined,
dividendInBaseCurrency: 0,
feeInBaseCurrency: 0,
firstBuyDate: undefined,
@ -1550,7 +1553,10 @@ export class PortfolioService {
userCurrency
}).toNumber();
const emergencyFund = new Big(
(user.Settings?.settings as UserSettings)?.emergencyFund ?? 0
Math.max(
emergencyFundPositionsValueInBaseCurrency,
(user.Settings?.settings as UserSettings)?.emergencyFund ?? 0
)
);
const fees = this.getFees({ activities, userCurrency }).toNumber();
const firstOrderDate = activities[0]?.date;

View File

@ -117,7 +117,7 @@ export class SubscriptionController {
return await this.subscriptionService.createCheckoutSession({
couponId,
priceId,
userId: this.request.user.id
user: this.request.user
});
} catch (error) {
Logger.error(error, 'SubscriptionController');

View File

@ -4,6 +4,7 @@ import {
DEFAULT_LANGUAGE_CODE,
PROPERTY_STRIPE_CONFIG
} from '@ghostfolio/common/config';
import { UserWithSettings } from '@ghostfolio/common/interfaces';
import { Subscription as SubscriptionInterface } from '@ghostfolio/common/interfaces/subscription.interface';
import { SubscriptionType } from '@ghostfolio/common/types/subscription.type';
import { Injectable, Logger } from '@nestjs/common';
@ -23,7 +24,7 @@ export class SubscriptionService {
this.stripe = new Stripe(
this.configurationService.get('STRIPE_SECRET_KEY'),
{
apiVersion: '2020-08-27'
apiVersion: '2022-11-15'
}
);
}
@ -31,17 +32,17 @@ export class SubscriptionService {
public async createCheckoutSession({
couponId,
priceId,
userId
user
}: {
couponId?: string;
priceId: string;
userId: string;
user: UserWithSettings;
}) {
const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = {
cancel_url: `${this.configurationService.get(
'ROOT_URL'
)}/${DEFAULT_LANGUAGE_CODE}/account`,
client_reference_id: userId,
cancel_url: `${this.configurationService.get('ROOT_URL')}/${
user.Settings?.settings?.language ?? DEFAULT_LANGUAGE_CODE
}/account`,
client_reference_id: user.id,
line_items: [
{
price: priceId,
@ -116,10 +117,6 @@ export class SubscriptionService {
userId: session.client_reference_id
});
await this.stripe.customers.update(session.customer as string, {
description: session.client_reference_id
});
return session.client_reference_id;
} catch (error) {
Logger.error(error, 'SubscriptionService');

View File

@ -1,7 +0,0 @@
import { IsOptional, IsString } from 'class-validator';
export class CreateUserDto {
@IsString()
@IsOptional()
country?: string;
}

View File

@ -22,7 +22,6 @@ import { User as UserModel } from '@prisma/client';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { size } from 'lodash';
import { CreateUserDto } from './create-user.dto';
import { UserItem } from './interfaces/user-item.interface';
import { UpdateUserSettingDto } from './update-user-setting.dto';
import { UserService } from './user.service';
@ -66,7 +65,7 @@ export class UserController {
}
@Post()
public async signupUser(@Body() data: CreateUserDto): Promise<UserItem> {
public async signupUser(): Promise<UserItem> {
const isUserSignupEnabled =
await this.propertyService.isUserSignupEnabled();
@ -80,7 +79,6 @@ export class UserController {
const hasAdmin = await this.userService.hasAdmin();
const { accessToken, id, role } = await this.userService.createUser({
country: data.country,
data: { role: hasAdmin ? 'USER' : 'ADMIN' }
});

View File

@ -18,8 +18,6 @@ import { Injectable } from '@nestjs/common';
import { Prisma, Role, User } from '@prisma/client';
import { sortBy } from 'lodash';
import { CreateUserDto } from './create-user.dto';
const crypto = require('crypto');
@Injectable()
@ -234,9 +232,10 @@ export class UserService {
}
public async createUser({
country,
data
}: CreateUserDto & { data: Prisma.UserCreateInput }): Promise<User> {
}: {
data: Prisma.UserCreateInput;
}): Promise<User> {
if (!data?.provider) {
data.provider = 'ANONYMOUS';
}
@ -264,7 +263,6 @@ export class UserService {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
await this.prismaService.analytics.create({
data: {
country,
User: { connect: { id: user.id } }
}
});

View File

@ -1,3 +1,4 @@
import Big from 'big.js';
import { cloneDeep, isArray, isObject } from 'lodash';
export function hasNotDefinedValuesInObject(aObject: Object): boolean {
@ -59,7 +60,10 @@ export function redactAttributes({
return redactAttributes({ options, object: currentObject });
}
);
} else if (isObject(redactedObject[property])) {
} else if (
isObject(redactedObject[property]) &&
!(redactedObject[property] instanceof Big)
) {
// Recursively call the function on the nested object
redactedObject[property] = redactAttributes({
options,

View File

@ -1,5 +1,6 @@
import { UserService } from '@ghostfolio/api/app/user/user.service';
import { redactAttributes } from '@ghostfolio/api/helper/object.helper';
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import {
CallHandler,
ExecutionContext,
@ -22,7 +23,8 @@ export class RedactValuesInResponseInterceptor<T>
return next.handle().pipe(
map((data: any) => {
const request = context.switchToHttp().getRequest();
const hasImpersonationId = !!request.headers?.['impersonation-id'];
const hasImpersonationId =
!!request.headers?.[HEADER_KEY_IMPERSONATION.toLowerCase()];
if (
hasImpersonationId ||

View File

@ -24,7 +24,7 @@ export class TransformDataSourceInRequestInterceptor<T>
const http = context.switchToHttp();
const request = http.getRequest();
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true) {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
if (request.body.dataSource) {
request.body.dataSource = decodeDataSource(request.body.dataSource);
}

View File

@ -26,9 +26,7 @@ export class TransformDataSourceInResponseInterceptor<T>
): Observable<any> {
return next.handle().pipe(
map((data: any) => {
if (
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true
) {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
data = redactAttributes({
options: [
{

View File

@ -1,6 +1,7 @@
import { Logger, ValidationPipe, VersioningType } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { NestFactory } from '@nestjs/core';
import * as bodyParser from 'body-parser';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
@ -9,15 +10,10 @@ async function bootstrap() {
const configApp = await NestFactory.create(AppModule);
const configService = configApp.get<ConfigService>(ConfigService);
const NODE_ENV =
configService.get<'development' | 'production'>('NODE_ENV') ??
'development';
const app = await NestFactory.create(AppModule, {
logger:
NODE_ENV === 'production'
? ['error', 'log', 'warn']
: ['debug', 'error', 'log', 'verbose', 'warn']
logger: environment.production
? ['error', 'log', 'warn']
: ['debug', 'error', 'log', 'verbose', 'warn']
});
app.enableCors();
app.enableVersioning({
@ -33,6 +29,9 @@ async function bootstrap() {
})
);
// Support 10mb csv/json files for importing activities
app.use(bodyParser.json({ limit: '10mb' }));
const HOST = configService.get<string>('HOST') || '0.0.0.0';
const PORT = configService.get<number>('PORT') || 3333;
await app.listen(PORT, HOST, () => {

View File

@ -19,10 +19,9 @@ export class ConfigurationService {
CACHE_TTL: num({ default: 1 }),
DATA_SOURCE_PRIMARY: str({ default: DataSource.YAHOO }),
DATA_SOURCES: json({
default: [DataSource.GHOSTFOLIO, DataSource.MANUAL, DataSource.YAHOO]
default: [DataSource.COINGECKO, DataSource.MANUAL, DataSource.YAHOO]
}),
ENABLE_FEATURE_BLOG: bool({ default: false }),
ENABLE_FEATURE_CUSTOM_SYMBOLS: bool({ default: false }),
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }),
ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }),
ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }),

View File

@ -207,10 +207,6 @@ export class DataGatheringService {
public async gatherSymbols(aSymbolsWithStartDate: IDataGatheringItem[]) {
for (const { dataSource, date, symbol } of aSymbolsWithStartDate) {
if (dataSource === 'MANUAL') {
continue;
}
await this.addJobToQueue(
GATHER_HISTORICAL_MARKET_DATA_PROCESS,
{
@ -253,11 +249,6 @@ export class DataGatheringService {
},
scraperConfiguration: true,
symbol: true
},
where: {
dataSource: {
not: 'MANUAL'
}
}
})
).map((symbolProfile) => {
@ -278,7 +269,6 @@ export class DataGatheringService {
return symbolProfiles
.filter(({ dataSource }) => {
return (
dataSource !== DataSource.GHOSTFOLIO &&
dataSource !== DataSource.MANUAL &&
dataSource !== DataSource.RAPID_API
);
@ -300,11 +290,6 @@ export class DataGatheringService {
dataSource: true,
scraperConfiguration: true,
symbol: true
},
where: {
dataSource: {
not: 'MANUAL'
}
}
});

View File

@ -0,0 +1,200 @@
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
import {
IDataProviderHistoricalResponse,
IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
import { Granularity } from '@ghostfolio/common/types';
import { Injectable, Logger } from '@nestjs/common';
import {
AssetClass,
AssetSubClass,
DataSource,
SymbolProfile
} from '@prisma/client';
import bent from 'bent';
import { format, fromUnixTime, getUnixTime } from 'date-fns';
@Injectable()
export class CoinGeckoService implements DataProviderInterface {
private baseCurrency: string;
private readonly URL = 'https://api.coingecko.com/api/v3';
public constructor(
private readonly configurationService: ConfigurationService
) {
this.baseCurrency = this.configurationService.get('BASE_CURRENCY');
}
public canHandle(symbol: string) {
return true;
}
public async getAssetProfile(
aSymbol: string
): Promise<Partial<SymbolProfile>> {
const response: Partial<SymbolProfile> = {
assetClass: AssetClass.CASH,
assetSubClass: AssetSubClass.CRYPTOCURRENCY,
currency: this.baseCurrency,
dataSource: this.getName(),
symbol: aSymbol
};
try {
const get = bent(`${this.URL}/coins/${aSymbol}`, 'GET', 'json', 200);
const { name } = await get();
response.name = name;
} catch (error) {
Logger.error(error, 'CoinGeckoService');
}
return response;
}
public async getDividends({
from,
granularity = 'day',
symbol,
to
}: {
from: Date;
granularity: Granularity;
symbol: string;
to: Date;
}) {
return {};
}
public async getHistorical(
aSymbol: string,
aGranularity: Granularity = 'day',
from: Date,
to: Date
): Promise<{
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
}> {
try {
const get = bent(
`${
this.URL
}/coins/${aSymbol}/market_chart/range?vs_currency=${this.baseCurrency.toLowerCase()}&from=${getUnixTime(
from
)}&to=${getUnixTime(to)}`,
'GET',
'json',
200
);
const { prices } = await get();
const result: {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
} = {
[aSymbol]: {}
};
for (const [timestamp, marketPrice] of prices) {
result[aSymbol][format(fromUnixTime(timestamp / 1000), DATE_FORMAT)] = {
marketPrice
};
}
return result;
} catch (error) {
throw new Error(
`Could not get historical market data for ${aSymbol} (${this.getName()}) from ${format(
from,
DATE_FORMAT
)} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`
);
}
}
public getMaxNumberOfSymbolsPerRequest() {
return 50;
}
public getName(): DataSource {
return DataSource.COINGECKO;
}
public async getQuotes(
aSymbols: string[]
): Promise<{ [symbol: string]: IDataProviderResponse }> {
const results: { [symbol: string]: IDataProviderResponse } = {};
if (aSymbols.length <= 0) {
return {};
}
try {
const get = bent(
`${this.URL}/simple/price?ids=${aSymbols.join(
','
)}&vs_currencies=${this.baseCurrency.toLowerCase()}`,
'GET',
'json',
200
);
const response = await get();
for (const symbol in response) {
if (Object.prototype.hasOwnProperty.call(response, symbol)) {
results[symbol] = {
currency: this.baseCurrency,
dataProviderInfo: this.getDataProviderInfo(),
dataSource: DataSource.COINGECKO,
marketPrice: response[symbol][this.baseCurrency.toLowerCase()],
marketState: 'open'
};
}
}
} catch (error) {
Logger.error(error, 'CoinGeckoService');
}
return results;
}
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
let items: LookupItem[] = [];
if (aQuery.length <= 2) {
return { items };
}
try {
const get = bent(
`${this.URL}/search?query=${aQuery}`,
'GET',
'json',
200
);
const { coins } = await get();
items = coins.map(({ id: symbol, name }) => {
return {
name,
symbol,
currency: this.baseCurrency,
dataSource: this.getName()
};
});
} catch (error) {
Logger.error(error, 'CoinGeckoService');
}
return { items };
}
private getDataProviderInfo(): DataProviderInfo {
return {
name: 'CoinGecko',
url: 'https://coingecko.com'
};
}
}

View File

@ -1,8 +1,8 @@
import { ConfigurationModule } from '@ghostfolio/api/services/configuration.module';
import { CryptocurrencyModule } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.module';
import { AlphaVantageService } from '@ghostfolio/api/services/data-provider/alpha-vantage/alpha-vantage.service';
import { CoinGeckoService } from '@ghostfolio/api/services/data-provider/coingecko/coingecko.service';
import { EodHistoricalDataService } from '@ghostfolio/api/services/data-provider/eod-historical-data/eod-historical-data.service';
import { GhostfolioScraperApiService } from '@ghostfolio/api/services/data-provider/ghostfolio-scraper-api/ghostfolio-scraper-api.service';
import { GoogleSheetsService } from '@ghostfolio/api/services/data-provider/google-sheets/google-sheets.service';
import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
import { RapidApiService } from '@ghostfolio/api/services/data-provider/rapid-api/rapid-api.service';
@ -22,9 +22,9 @@ import { DataProviderService } from './data-provider.service';
],
providers: [
AlphaVantageService,
CoinGeckoService,
DataProviderService,
EodHistoricalDataService,
GhostfolioScraperApiService,
GoogleSheetsService,
ManualService,
RapidApiService,
@ -32,8 +32,8 @@ import { DataProviderService } from './data-provider.service';
{
inject: [
AlphaVantageService,
CoinGeckoService,
EodHistoricalDataService,
GhostfolioScraperApiService,
GoogleSheetsService,
ManualService,
RapidApiService,
@ -42,16 +42,16 @@ import { DataProviderService } from './data-provider.service';
provide: 'DataProviderInterfaces',
useFactory: (
alphaVantageService,
coinGeckoService,
eodHistoricalDataService,
ghostfolioScraperApiService,
googleSheetsService,
manualService,
rapidApiService,
yahooFinanceService
) => [
alphaVantageService,
coinGeckoService,
eodHistoricalDataService,
ghostfolioScraperApiService,
googleSheetsService,
manualService,
rapidApiService,
@ -59,10 +59,6 @@ import { DataProviderService } from './data-provider.service';
]
}
],
exports: [
DataProviderService,
GhostfolioScraperApiService,
YahooFinanceService
]
exports: [DataProviderService, YahooFinanceService]
})
export class DataProviderModule {}

View File

@ -1,194 +0,0 @@
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
import {
IDataProviderHistoricalResponse,
IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces';
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
import {
DATE_FORMAT,
extractNumberFromString,
getYesterday
} from '@ghostfolio/common/helper';
import { Granularity } from '@ghostfolio/common/types';
import { Injectable, Logger } from '@nestjs/common';
import { DataSource, SymbolProfile } from '@prisma/client';
import bent from 'bent';
import * as cheerio from 'cheerio';
import { addDays, format, isBefore } from 'date-fns';
@Injectable()
export class GhostfolioScraperApiService implements DataProviderInterface {
public constructor(
private readonly prismaService: PrismaService,
private readonly symbolProfileService: SymbolProfileService
) {}
public canHandle(symbol: string) {
return true;
}
public async getAssetProfile(
aSymbol: string
): Promise<Partial<SymbolProfile>> {
return {
dataSource: this.getName()
};
}
public async getDividends({
from,
granularity = 'day',
symbol,
to
}: {
from: Date;
granularity: Granularity;
symbol: string;
to: Date;
}) {
return {};
}
public async getHistorical(
aSymbol: string,
aGranularity: Granularity = 'day',
from: Date,
to: Date
): Promise<{
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
}> {
try {
const symbol = aSymbol;
const [symbolProfile] =
await this.symbolProfileService.getSymbolProfilesBySymbols([symbol]);
const { defaultMarketPrice, selector, url } =
symbolProfile.scraperConfiguration ?? {};
if (defaultMarketPrice) {
const historical: {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
} = {
[symbol]: {}
};
let date = from;
while (isBefore(date, to)) {
historical[symbol][format(date, DATE_FORMAT)] = {
marketPrice: defaultMarketPrice
};
date = addDays(date, 1);
}
return historical;
} else if (selector === undefined || url === undefined) {
return {};
}
const get = bent(url, 'GET', 'string', 200, {});
const html = await get();
const $ = cheerio.load(html);
const value = extractNumberFromString($(selector).text());
return {
[symbol]: {
[format(getYesterday(), DATE_FORMAT)]: {
marketPrice: value
}
}
};
} catch (error) {
throw new Error(
`Could not get historical market data for ${aSymbol} (${this.getName()}) from ${format(
from,
DATE_FORMAT
)} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`
);
}
}
public getName(): DataSource {
return DataSource.GHOSTFOLIO;
}
public async getQuotes(
aSymbols: string[]
): Promise<{ [symbol: string]: IDataProviderResponse }> {
const response: { [symbol: string]: IDataProviderResponse } = {};
if (aSymbols.length <= 0) {
return response;
}
try {
const symbolProfiles =
await this.symbolProfileService.getSymbolProfilesBySymbols(aSymbols);
const marketData = await this.prismaService.marketData.findMany({
distinct: ['symbol'],
orderBy: {
date: 'desc'
},
take: aSymbols.length,
where: {
symbol: {
in: aSymbols
}
}
});
for (const symbolProfile of symbolProfiles) {
response[symbolProfile.symbol] = {
currency: symbolProfile.currency,
dataSource: this.getName(),
marketPrice: marketData.find((marketDataItem) => {
return marketDataItem.symbol === symbolProfile.symbol;
})?.marketPrice,
marketState: 'delayed'
};
}
return response;
} catch (error) {
Logger.error(error, 'GhostfolioScraperApiService');
}
return {};
}
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
const items = await this.prismaService.symbolProfile.findMany({
select: {
currency: true,
dataSource: true,
name: true,
symbol: true
},
where: {
OR: [
{
dataSource: this.getName(),
name: {
mode: 'insensitive',
startsWith: aQuery
}
},
{
dataSource: this.getName(),
symbol: {
mode: 'insensitive',
startsWith: aQuery
}
}
]
}
});
return { items };
}
}

View File

@ -16,6 +16,7 @@ import { Injectable, Logger } from '@nestjs/common';
import { DataSource, SymbolProfile } from '@prisma/client';
import bent from 'bent';
import * as cheerio from 'cheerio';
import { isUUID } from 'class-validator';
import { addDays, format, isBefore } from 'date-fns';
@Injectable()
@ -162,7 +163,7 @@ export class ManualService implements DataProviderInterface {
}
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
const items = await this.prismaService.symbolProfile.findMany({
let items = await this.prismaService.symbolProfile.findMany({
select: {
currency: true,
dataSource: true,
@ -189,6 +190,11 @@ export class ManualService implements DataProviderInterface {
}
});
items = items.filter(({ symbol }) => {
// Remove UUID symbols (activities of type ITEM)
return !isUUID(symbol);
});
return { items };
}
}

View File

@ -441,8 +441,10 @@ export class YahooFinanceService implements DataProviderInterface {
let name = longName;
if (name) {
name = name.replace('Amundi Index Solutions - ', '');
name = name.replace('iShares ETF (CH) - ', '');
name = name.replace('iShares III Public Limited Company - ', '');
name = name.replace('iShares V PLC - ', '');
name = name.replace('iShares VI Public Limited Company - ', '');
name = name.replace('iShares VII PLC - ', '');
name = name.replace('Multi Units Luxembourg - ', '');

View File

@ -168,7 +168,7 @@ export class ExchangeRateDataService {
return this.toCurrency(aValue, aFromCurrency, aToCurrency);
}
let factor = 1;
let factor: number;
if (aFromCurrency !== aToCurrency) {
const dataSource = this.dataProviderService.getPrimaryDataSource();
@ -185,7 +185,6 @@ export class ExchangeRateDataService {
} else {
// TODO: Get from data provider service or calculate indirectly via base currency
// and market data
return this.toCurrency(aValue, aFromCurrency, aToCurrency);
}
}
@ -193,12 +192,15 @@ export class ExchangeRateDataService {
return factor * aValue;
}
// Fallback with error, if currencies are not available
Logger.error(
`No exchange rate has been found for ${aFromCurrency}${aToCurrency}`,
`No exchange rate has been found for ${aFromCurrency}${aToCurrency} at ${format(
aDate,
DATE_FORMAT
)}`,
'ExchangeRateDataService'
);
return aValue;
return undefined;
}
private async prepareCurrencies(): Promise<string[]> {

View File

@ -8,7 +8,6 @@ export interface Environment extends CleanedEnvAccessors {
DATA_SOURCE_PRIMARY: string;
DATA_SOURCES: string[];
ENABLE_FEATURE_BLOG: boolean;
ENABLE_FEATURE_CUSTOM_SYMBOLS: boolean;
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean;
ENABLE_FEATURE_READ_ONLY_MODE: boolean;
ENABLE_FEATURE_SOCIAL_LOGIN: boolean;

View File

@ -1,4 +1,4 @@
import { UniqueAsset } from '@ghostfolio/common/interfaces';
import { DataProviderInfo, UniqueAsset } from '@ghostfolio/common/interfaces';
import { MarketState } from '@ghostfolio/common/types';
import {
Account,
@ -28,6 +28,7 @@ export interface IDataProviderHistoricalResponse {
export interface IDataProviderResponse {
currency: string;
dataProviderInfo?: DataProviderInfo;
dataSource: DataSource;
marketPrice: number;
marketState: MarketState;

View File

@ -123,6 +123,13 @@ const routes: Routes = [
'./pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.module'
).then((m) => m.GhostfolioAufSackgeldVorgestelltPageModule)
},
{
path: 'blog/2023/02/ghostfolio-meets-umbrel',
loadChildren: () =>
import(
'./pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.module'
).then((m) => m.GhostfolioMeetsUmbrelPageModule)
},
{
path: 'demo',
loadChildren: () =>

View File

@ -104,7 +104,7 @@ export class AppComponent implements OnDestroy, OnInit {
this.tokenStorageService.signOut();
this.userService.remove();
document.location.href = '/';
document.location.href = `/${document.documentElement.lang}`;
}
public ngOnDestroy() {

View File

@ -1,6 +1,7 @@
<div>
<gf-line-chart
class="mb-4"
[colorScheme]="user?.settings?.colorScheme"
[historicalDataItems]="historicalDataItems"
[isAnimated]="true"
[locale]="locale"
@ -28,7 +29,7 @@
}"
[title]="
(itemByMonth.key + '-' + (i + 1 < 10 ? '0' + (i + 1) : i + 1)
| date: defaultDateFormat) ?? ''
| date : defaultDateFormat) ?? ''
"
(click)="
onOpenMarketDataDetail({

View File

@ -1,11 +1,11 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatButtonModule } from '@angular/material/button';
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
import { MarketDataDetailDialog } from './market-data-detail-dialog.component';

View File

@ -28,7 +28,13 @@
>
<ng-container i18n>Engagement per Day</ng-container>
</th>
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
<th
*ngIf="hasPermissionForSubscription"
class="mat-header-cell px-1 py-2"
i18n
>
Last Request
</th>
<th class="mat-header-cell px-1 py-2"></th>
</tr>
</thead>
@ -86,7 +92,10 @@
[value]="userItem.engagement"
></gf-value>
</td>
<td class="mat-cell px-1 py-2">
<td
*ngIf="hasPermissionForSubscription"
class="mat-cell px-1 py-2"
>
{{ formatDistanceToNow(userItem.lastActivity) }}
</td>
<td class="mat-cell px-1 py-2">

View File

@ -166,7 +166,6 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
},
display: true,
grid: {
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
display: false
},
type: 'time',
@ -177,13 +176,21 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
},
y: {
border: {
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`,
display: false
width: 0
},
display: true,
grid: {
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
display: false
color: ({ scale, tick }) => {
if (
tick.value === 0 ||
tick.value === scale.max ||
tick.value === scale.min
) {
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
}
return 'transparent';
}
},
position: 'right',
ticks: {

View File

@ -110,11 +110,7 @@
</button>
<mat-menu #accountMenu="matMenu" xPosition="before">
<ng-container *ngIf="user?.access?.length > 0">
<button
class="align-items-center d-flex"
mat-menu-item
(click)="impersonateAccount(null)"
>
<button mat-menu-item (click)="impersonateAccount(null)">
<ion-icon
*ngIf="user?.access?.length > 0"
class="mr-2"
@ -128,7 +124,6 @@
</button>
<button
*ngFor="let accessItem of user?.access"
class="align-items-center d-flex"
mat-menu-item
(click)="impersonateAccount(accessItem.id)"
>
@ -147,7 +142,7 @@
<hr class="m-0" />
</ng-container>
<a
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{
@ -157,7 +152,7 @@
>Overview</a
>
<a
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{
@ -167,7 +162,7 @@
>Portfolio</a
>
<a
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{ 'font-weight-bold': currentRoute === 'accounts' }"
@ -175,7 +170,6 @@
>Accounts</a
>
<a
class="align-items-center d-flex"
i18n
mat-menu-item
[ngClass]="{ 'font-weight-bold': currentRoute === 'account' }"
@ -184,7 +178,7 @@
>
<a
*ngIf="hasPermissionToAccessAdminControl"
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{ 'font-weight-bold': currentRoute === 'admin' }"
@ -193,7 +187,7 @@
>
<hr class="m-0" />
<a
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{
@ -206,7 +200,7 @@
*ngIf="
hasPermissionForSubscription && user?.subscription?.type === 'Basic'
"
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{ 'font-weight-bold': currentRoute === 'pricing' }"
@ -214,14 +208,14 @@
>Pricing</a
>
<a
class="d-block d-sm-none"
class="d-flex d-sm-none"
i18n
mat-menu-item
[ngClass]="{ 'font-weight-bold': currentRoute === 'about' }"
[routerLink]="['/about']"
>About Ghostfolio</a
>
<hr class="d-block d-sm-none m-0" />
<hr class="d-flex d-sm-none m-0" />
<button mat-menu-item (click)="onSignOut()">Logout</button>
</mat-menu>
</ng-container>
@ -283,9 +277,9 @@
>Markets</a
>
<a
class="d-none d-sm-block mx-1 no-min-width px-1"
class="d-none d-sm-block no-min-width"
href="https://github.com/ghostfolio/ghostfolio"
mat-flat-button
mat-icon-button
><ion-icon name="logo-github"></ion-icon
></a>
<button class="mx-1" mat-flat-button (click)="openLoginDialog()">

View File

@ -11,7 +11,9 @@
flex: 1 1 auto;
}
.mat-flat-button {
.mdc-button {
height: unset;
&:not(.mat-primary) {
background-color: transparent;
text-decoration-color: rgba(var(--palette-primary-500), 1) !important;

View File

@ -1,7 +1,7 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatLegacyButtonModule as MatButtonModule } from '@angular/material/legacy-button';
import { MatLegacyMenuModule as MatMenuModule } from '@angular/material/legacy-menu';
import { MatButtonModule } from '@angular/material/button';
import { MatMenuModule } from '@angular/material/menu';
import { MatToolbarModule } from '@angular/material/toolbar';
import { RouterModule } from '@angular/router';
import { LoginWithAccessTokenDialogModule } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.module';

View File

@ -10,6 +10,7 @@
symbol="Fear & Greed Index"
yMax="100"
yMin="0"
[colorScheme]="user?.settings?.colorScheme"
[historicalDataItems]="historicalDataItems"
[isAnimated]="true"
[locale]="user?.settings?.locale"

View File

@ -283,7 +283,6 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
},
display: true,
grid: {
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
display: false
},
min: this.daysInMarket
@ -298,13 +297,21 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
},
y: {
border: {
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`,
display: false
},
display: !this.isInPercent,
grid: {
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
display: false
color: ({ scale, tick }) => {
if (
tick.value === 0 ||
tick.value === scale.max ||
tick.value === scale.min
) {
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
}
return 'transparent';
}
},
position: 'right',
ticks: {

View File

@ -50,7 +50,7 @@ export class PortfolioSummaryComponent implements OnChanges, OnInit {
public onEditEmergencyFund() {
const emergencyFundInput = prompt(
$localize`Please enter the amount of your emergency fund:`,
this.summary.emergencyFund.toString()
this.summary.emergencyFund?.toString() ?? '0'
);
const emergencyFund = parseFloat(emergencyFundInput?.trim());

View File

@ -13,6 +13,7 @@ import {
import { DataService } from '@ghostfolio/client/services/data.service';
import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper';
import {
DataProviderInfo,
EnhancedSymbolProfile,
LineChartItem
} from '@ghostfolio/common/interfaces';
@ -40,6 +41,7 @@ export class PositionDetailDialog implements OnDestroy, OnInit {
public countries: {
[code: string]: { name: string; value: number };
};
public dataProviderInfo: DataProviderInfo;
public dividendInBaseCurrency: number;
public feeInBaseCurrency: number;
public firstBuyDate: string;
@ -83,6 +85,7 @@ export class PositionDetailDialog implements OnDestroy, OnInit {
.subscribe(
({
averagePrice,
dataProviderInfo,
dividendInBaseCurrency,
feeInBaseCurrency,
firstBuyDate,
@ -105,6 +108,7 @@ export class PositionDetailDialog implements OnDestroy, OnInit {
this.averagePrice = averagePrice;
this.benchmarkDataItems = [];
this.countries = {};
this.dataProviderInfo = dataProviderInfo;
this.dividendInBaseCurrency = dividendInBaseCurrency;
this.feeInBaseCurrency = feeInBaseCurrency;
this.firstBuyDate = firstBuyDate;

View File

@ -227,6 +227,12 @@
</div>
</ng-template>
</ng-container>
<div *ngIf="dataProviderInfo" class="col-md-12 mb-3 text-center">
<hr />
<gf-data-provider-credits [dataProviderInfos]="[dataProviderInfo]">
</gf-data-provider-credits>
<hr />
</div>
</div>
<div class="row" [ngClass]="{ 'd-none': !orders?.length }">
@ -249,7 +255,7 @@
</div>
<div *ngIf="tags?.length > 0" class="row">
<div class="col mb-3">
<div class="col">
<div class="h5" i18n>Tags</div>
<mat-chip-list>
<mat-chip *ngFor="let tag of tags">{{ tag.name }}</mat-chip>
@ -261,7 +267,7 @@
*ngIf="data.hasPermissionToReportDataGlitch === true && orders?.length > 0"
class="row"
>
<div class="col mb-3">
<div class="col">
<hr />
<a color="warn" mat-stroked-button [href]="reportDataGlitchMail"
><ion-icon class="mr-1" name="flag-outline"></ion-icon

View File

@ -6,6 +6,7 @@ import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/lega
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module';
import { GfActivitiesTableModule } from '@ghostfolio/ui/activities-table/activities-table.module';
import { GfDataProviderCreditsModule } from '@ghostfolio/ui/data-provider-credits/data-provider-credits.module';
import { GfLineChartModule } from '@ghostfolio/ui/line-chart/line-chart.module';
import { GfPortfolioProportionChartModule } from '@ghostfolio/ui/portfolio-proportion-chart/portfolio-proportion-chart.module';
import { GfValueModule } from '@ghostfolio/ui/value';
@ -18,6 +19,7 @@ import { PositionDetailDialog } from './position-detail-dialog.component';
imports: [
CommonModule,
GfActivitiesTableModule,
GfDataProviderCreditsModule,
GfDialogFooterModule,
GfDialogHeaderModule,
GfLineChartModule,

View File

@ -5,14 +5,16 @@ import {
HttpRequest
} from '@angular/common/http';
import { Injectable } from '@angular/core';
import {
HEADER_KEY_IMPERSONATION,
HEADER_KEY_TIMEZONE,
HEADER_KEY_TOKEN
} from '@ghostfolio/common/config';
import { Observable } from 'rxjs';
import { ImpersonationStorageService } from '../services/impersonation-storage.service';
import { TokenStorageService } from '../services/token-storage.service';
const IMPERSONATION_KEY = 'Impersonation-Id';
const TOKEN_HEADER_KEY = 'Authorization';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
public constructor(
@ -24,21 +26,27 @@ export class AuthInterceptor implements HttpInterceptor {
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
let authReq = req;
let request = req;
let headers = request.headers.set(
HEADER_KEY_TIMEZONE,
Intl?.DateTimeFormat().resolvedOptions().timeZone
);
const token = this.tokenStorageService.getToken();
const impersonationId = this.impersonationStorageService.getId();
if (token !== null) {
let headers = req.headers.set(TOKEN_HEADER_KEY, `Bearer ${token}`);
headers = headers.set(HEADER_KEY_TOKEN, `Bearer ${token}`);
const impersonationId = this.impersonationStorageService.getId();
if (impersonationId !== null) {
headers = headers.set(IMPERSONATION_KEY, impersonationId);
headers = headers.set(HEADER_KEY_IMPERSONATION, impersonationId);
}
authReq = req.clone({ headers });
}
return next.handle(authReq);
request = request.clone({ headers });
return next.handle(request);
}
}

View File

@ -48,7 +48,7 @@
>hi@ghostfol.io</a
></ng-container
>
or open an issue at
or start a discussion at
<a
href="https://github.com/ghostfolio/ghostfolio"
title="Find Ghostfolio on GitHub"
@ -62,7 +62,7 @@
mat-icon-button
title="Follow Ghostfolio on Twitter"
>
<ion-icon name="logo-twitter" size="large"></ion-icon>
<ion-icon name="logo-twitter"></ion-icon>
</a>
<a
class="mx-2"
@ -70,7 +70,7 @@
mat-icon-button
title="Send an e-mail"
>
<ion-icon name="mail" size="large"></ion-icon>
<ion-icon name="mail"></ion-icon>
</a>
<a
class="mx-2"
@ -78,7 +78,7 @@
mat-icon-button
title="Join the Ghostfolio Slack channel"
>
<ion-icon name="logo-slack" size="large"></ion-icon>
<ion-icon name="logo-slack"></ion-icon>
</a>
<a
class="mx-2"
@ -86,7 +86,7 @@
mat-icon-button
title="Find Ghostfolio on GitHub"
>
<ion-icon name="logo-github" size="large"></ion-icon>
<ion-icon name="logo-github"></ion-icon>
</a>
</p>
<div
@ -191,7 +191,7 @@
<div class="row">
<div *ngIf="hasPermissionForSubscription" class="col-md-3 col-xs-12 my-2">
<a
class="py-2 w-100"
class="py-4 w-100"
color="primary"
mat-flat-button
[routerLink]="['/faq']"
@ -203,7 +203,7 @@
[ngClass]="{ 'offset-md-4': !hasPermissionForBlog }"
>
<a
class="py-2 w-100"
class="py-4 w-100"
color="primary"
mat-flat-button
[routerLink]="['/about', 'changelog']"
@ -212,7 +212,7 @@
</div>
<div *ngIf="hasPermissionForSubscription" class="col-md-3 col-xs-12 my-2">
<a
class="py-2 w-100"
class="py-4 w-100"
color="primary"
mat-flat-button
[routerLink]="['/about', 'privacy-policy']"
@ -221,7 +221,7 @@
</div>
<div *ngIf="hasPermissionForBlog" class="col-md-3 col-xs-12 my-2">
<a
class="py-2 w-100"
class="py-4 w-100"
color="primary"
mat-flat-button
[routerLink]="['/blog']"

View File

@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { GhostfolioMeetsUmbrelPageComponent } from './ghostfolio-meets-umbrel-page.component';
const routes: Routes = [
{
canActivate: [AuthGuard],
component: GhostfolioMeetsUmbrelPageComponent,
path: '',
title: 'Ghostfolio meets Umbrel'
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class GhostfolioMeetsUmbrelPageRoutingModule {}

View File

@ -0,0 +1,9 @@
import { Component } from '@angular/core';
@Component({
host: { class: 'page' },
selector: 'gf-ghostfolio-meets-umbrel-page',
styleUrls: ['./ghostfolio-meets-umbrel-page.scss'],
templateUrl: './ghostfolio-meets-umbrel-page.html'
})
export class GhostfolioMeetsUmbrelPageComponent {}

View File

@ -0,0 +1,200 @@
<div class="blog container">
<div class="row">
<div class="col-md-8 offset-md-2">
<article>
<div class="mb-4 text-center">
<h1 class="mb-1">Ghostfolio meets Umbrel</h1>
<div class="mb-3 text-muted"><small>2023-02-25</small></div>
<img
alt="Ghostfolio meets Umbrel Teaser"
class="border rounded w-100"
src="../assets/images/blog/ghostfolio-x-umbrel.png"
title="Ghostfolio meets Umbrel"
/>
</div>
<section class="mb-4">
<p>
We are happy to announce that
<a href="https://ghostfol.io">Ghostfolio</a>, the web-based personal
finance management software, is now available in the
<a href="https://umbrel.com" target="_blank">Umbrel</a> App Store, a
home server OS for self-hosting.
</p>
<p>
In recent years, we have seen an increasing number of individuals
and organizations moving their data to the cloud. While cloud
computing has its benefits, such as accessibility and scalability,
it also comes with some concerns regarding data privacy and
security. However, there is an alternative to cloud computing that
provides the convenience of the cloud while giving you ownership and
control of your data: personal servers.
</p>
</section>
<section class="mb-4">
<h2 class="h4">Umbrel A personal server OS for self-hosting</h2>
<p>
<a href="https://github.com/getumbrel/umbrel" target="_blank"
>Umbrel</a
>
is an operating system based on
<a href="https://www.docker.com" target="_blank">Docker</a> that
allows you to run a personal server in your home. With it, you can
self-host open source apps directly from an integrated app store.
This means that you can discover self-hosted apps directly in the
<a href="https://github.com/getumbrel/umbrel-apps" target="_blank"
>Umbrel App Store</a
>
and install them in one click. You can get up and running Umbrel on
a Raspberry Pi 4, any Ubuntu / Debian system, or a VPS in only 5
minutes.
</p>
<p>
Umbrel offers numerous advantages for running a personal server in
your home, such as enhanced data privacy and security, ownership and
control of your data, and access to a diverse selection of
self-hosted apps.
</p>
</section>
<section class="mb-4">
<h2 class="h4">
Ghostfolio Track your portfolio without being tracked
</h2>
<p>
Keeping track of multiple assets can make managing your personal
finance a challenging task. However, there are tools available
beyond spreadsheets that can help you streamline the process and
make well-informed investment decisions based on data.
</p>
<p>
<a href="https://github.com/ghostfolio/ghostfolio" target="_blank"
>Ghostfolio</a
>
is a modern open source web application designed to manage your
personal finance with ease and confidence. It presents your current
assets in real-time, including stocks, ETFs, cryptocurrencies,
commodities, and more. It allows you to track and analyze your
investments in one place.
</p>
<p>
The application has a range of features such as real-time asset
tracking, data import and export and advanced portfolio analytics
tools.
</p>
</section>
<section class="mb-4">
<p>
To participate in the ongoing development of Ghostfolio, please feel
free to reach out to us on our
<a href="https://ghostfolio.slack.com" target="_blank"
>Slack channel</a
>
or via Twitter
<a href="https://twitter.com/ghostfolio_" target="_blank"
>@ghostfolio_</a
>. We look forward to hearing from you!
</p>
</section>
<section class="mb-4">
<ul class="list-inline">
<li class="list-inline-item">
<span class="badge badge-light">Announcement</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">App Store</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Assets</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Cloud</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Commodity</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Cryptocurrency</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Debian</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Development</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Docker</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">ETF</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Fintech</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Ghostfolio</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Home Server</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Investing</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Linux</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Open Source</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Operating System</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">OS</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">OSS</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Personal Finance</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Personal Server</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Portfolio</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Privacy</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Raspberry Pi</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Security</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Software</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Spreadsheet</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Stocks</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Ubuntu</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Umbrel</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">VPS</span>
</li>
<li class="list-inline-item">
<span class="badge badge-light">Wealth Management</span>
</li>
</ul>
</section>
</article>
</div>
</div>
</div>

View File

@ -0,0 +1,13 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { GhostfolioMeetsUmbrelPageRoutingModule } from './ghostfolio-meets-umbrel-page-routing.module';
import { GhostfolioMeetsUmbrelPageComponent } from './ghostfolio-meets-umbrel-page.component';
@NgModule({
declarations: [GhostfolioMeetsUmbrelPageComponent],
imports: [CommonModule, GhostfolioMeetsUmbrelPageRoutingModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class GhostfolioMeetsUmbrelPageModule {}

View File

@ -0,0 +1,3 @@
:host {
display: block;
}

View File

@ -2,6 +2,32 @@
<div class="mb-5 row">
<div class="col">
<h3 class="d-none d-sm-block mb-3 text-center" i18n>Blog</h3>
<mat-card appearance="outlined" class="mb-3">
<mat-card-content>
<div class="container p-0">
<div class="flex-nowrap no-gutters row">
<a
class="d-flex overflow-hidden w-100"
href="../en/blog/2023/02/ghostfolio-meets-umbrel"
>
<div class="flex-grow-1 overflow-hidden">
<div class="h6 m-0 text-truncate">
Ghostfolio meets Umbrel
</div>
<div class="d-flex text-muted">2023-02-25</div>
</div>
<div class="align-items-center d-flex">
<ion-icon
class="chevron text-muted"
name="chevron-forward-outline"
size="small"
></ion-icon>
</div>
</a>
</div>
</div>
</mat-card-content>
</mat-card>
<mat-card appearance="outlined" class="mb-3">
<mat-card-content>
<div class="container p-0">

View File

@ -17,8 +17,8 @@ export class LandingPageComponent implements OnDestroy, OnInit {
[code: string]: { value: number };
} = {};
public currentYear = format(new Date(), 'yyyy');
public demoAuthToken: string;
public deviceType: string;
public hasPermissionForDemo: boolean;
public hasPermissionForStatistics: boolean;
public hasPermissionForSubscription: boolean;
public hasPermissionToCreateUser: boolean;
@ -54,6 +54,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
) {
const {
countriesOfSubscribers = [],
demoAuthToken,
globalPermissions,
statistics
} = this.dataService.fetchInfo();
@ -64,6 +65,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
};
}
this.hasPermissionForDemo = !!demoAuthToken;
this.hasPermissionForStatistics = hasPermission(
globalPermissions,
permissions.enableStatistics

View File

@ -40,12 +40,18 @@
>
Get Started
</a>
<div class="d-inline-block mx-3 text-muted">or</div></ng-container
>
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
Live Demo
</a>
</ng-container>
<ng-container *ngIf="hasPermissionForDemo">
<div
*ngIf="hasPermissionToCreateUser"
class="d-inline-block mx-3 text-muted"
>
or
</div>
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
Live Demo
</a>
</ng-container>
</div>
</div>
</div>
@ -165,6 +171,14 @@
title="Product Hunt The best new products in tech."
></a>
</div>
<div class="align-items-center col-md-3 d-flex justify-content-center my-1">
<a
class="d-block logo logo-reddit mask"
href="https://www.reddit.com"
target="_blank"
title="Reddit - Dive into anything"
></a>
</div>
<div class="col-md-3 d-flex justify-content-center my-1">
<a
class="d-block logo logo-sackgeld mask"
@ -181,6 +195,14 @@
title="SourceForge: The Complete Open-Source and Business Software Platform"
></a>
</div>
<div class="align-items-center col-md-3 d-flex justify-content-center my-1">
<a
class="d-block logo logo-umbrel mask"
href="https://umbrel.com"
target="_blank"
title="Umbrel — A personal server OS for self-hosting"
></a>
</div>
<div class="col-md-3 d-flex justify-content-center my-1">
<a
class="d-block logo logo-unraid mask"
@ -363,16 +385,20 @@
<div class="col">
<h2 class="h4 mb-1 text-center">Are <strong>you</strong> ready?</h2>
<p class="lead mb-3 text-center">
Join now or check out the example account
Join now<ng-container *ngIf="hasPermissionForDemo">
or check out the example account</ng-container
>
</p>
<div class="py-2 text-center">
<a color="primary" mat-flat-button [routerLink]="['/register']">
Get Started
</a>
<div class="d-inline-block mx-3 text-muted">or</div>
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
Live Demo
</a>
<ng-container *ngIf="hasPermissionForDemo">
<div class="d-inline-block mx-3 text-muted">or</div>
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
Live Demo
</a>
</ng-container>
</div>
</div>
</div>

View File

@ -69,6 +69,11 @@
filter: grayscale(1);
}
&.logo-reddit {
mask-image: url('/assets/images/logo-reddit.svg');
max-height: 1rem;
}
&.logo-sackgeld {
mask-image: url('/assets/images/logo-sackgeld.png');
}
@ -77,6 +82,11 @@
mask-image: url('/assets/images/logo-sourceforge.svg');
}
&.logo-umbrel {
mask-image: url('/assets/images/logo-umbrel.svg');
max-height: 1.5rem;
}
&.logo-unraid {
mask-image: url('/assets/images/logo-unraid.svg');
}
@ -114,8 +124,10 @@
&.logo-agplv3,
&.logo-alternative-to,
&.logo-privacy-tools,
&.logo-reddit,
&.logo-sackgeld,
&.logo-sourceforge,
&.logo-umbrel,
&.logo-unraid {
background-color: rgba(var(--light-primary-text));
}

View File

@ -9,12 +9,13 @@ import {
ViewChild
} from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
import {
MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA,
MatLegacyDialogRef as MatDialogRef
} from '@angular/material/legacy-dialog';
import { getDateFormatString } from '@ghostfolio/common/helper';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
@ -56,6 +57,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
});
public currencies: string[] = [];
public currentMarketPrice = null;
public defaultDateFormat: string;
public filteredLookupItems: LookupItem[];
public filteredLookupItemsObservable: Observable<LookupItem[]>;
public filteredTagsObservable: Observable<Tag[]>;
@ -85,6 +87,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
const { currencies, platforms, tags } = this.dataService.fetchInfo();
this.currencies = currencies;
this.defaultDateFormat = getDateFormatString(this.locale);
this.platforms = platforms;
this.tags = tags.map(({ id, name }) => {
return {
@ -106,6 +109,10 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.data.activity?.SymbolProfile?.currency,
Validators.required
],
currencyOfUnitPrice: [
this.data.activity?.SymbolProfile?.currency,
Validators.required
],
dataSource: [
this.data.activity?.SymbolProfile?.dataSource,
Validators.required
@ -131,16 +138,26 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
})
],
type: [undefined, Validators.required], // Set after value changes subscription
unitPrice: [this.data.activity?.unitPrice, Validators.required]
unitPrice: [this.data.activity?.unitPrice, Validators.required],
unitPriceInCustomCurrency: [
this.data.activity?.unitPrice,
Validators.required
]
});
this.activityForm.valueChanges
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(async () => {
let exchangeRate = 1;
let exchangeRateOfFee = 1;
let exchangeRateOfUnitPrice = 1;
this.activityForm.controls['feeInCustomCurrency'].setErrors(null);
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors(null);
const currency = this.activityForm.controls['currency'].value;
const currencyOfFee = this.activityForm.controls['currencyOfFee'].value;
const currencyOfUnitPrice =
this.activityForm.controls['currencyOfUnitPrice'].value;
const date = this.activityForm.controls['date'].value;
if (currency && currencyOfFee && currency !== currencyOfFee && date) {
@ -154,18 +171,57 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
.pipe(takeUntil(this.unsubscribeSubject))
);
exchangeRate = marketPrice;
} catch {}
exchangeRateOfFee = marketPrice;
} catch {
this.activityForm.controls['feeInCustomCurrency'].setErrors({
invalid: true
});
}
}
const feeInCustomCurrency =
this.activityForm.controls['feeInCustomCurrency'].value *
exchangeRate;
exchangeRateOfFee;
this.activityForm.controls['fee'].setValue(feeInCustomCurrency, {
emitEvent: false
});
if (
currency &&
currencyOfUnitPrice &&
currency !== currencyOfUnitPrice &&
date
) {
try {
const { marketPrice } = await lastValueFrom(
this.dataService
.fetchExchangeRateForDate({
date,
symbol: `${currencyOfUnitPrice}-${currency}`
})
.pipe(takeUntil(this.unsubscribeSubject))
);
exchangeRateOfUnitPrice = marketPrice;
} catch {
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors({
invalid: true
});
}
}
const unitPriceInCustomCurrency =
this.activityForm.controls['unitPriceInCustomCurrency'].value *
exchangeRateOfUnitPrice;
this.activityForm.controls['unitPrice'].setValue(
unitPriceInCustomCurrency,
{
emitEvent: false
}
);
if (
this.activityForm.controls['type'].value === 'BUY' ||
this.activityForm.controls['type'].value === 'ITEM'
@ -231,6 +287,9 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.activityForm.controls['currencyOfFee'].setValue(
this.data.user.settings.baseCurrency
);
this.activityForm.controls['currencyOfUnitPrice'].setValue(
this.data.user.settings.baseCurrency
);
this.activityForm.controls['dataSource'].removeValidators(
Validators.required
);
@ -288,7 +347,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
public applyCurrentMarketPrice() {
this.activityForm.patchValue({
unitPrice: this.currentMarketPrice
currencyOfUnitPrice: this.activityForm.controls['currency'].value,
unitPriceInCustomCurrency: this.currentMarketPrice
});
}
@ -415,6 +475,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
.subscribe(({ currency, dataSource, marketPrice }) => {
this.activityForm.controls['currency'].setValue(currency);
this.activityForm.controls['currencyOfFee'].setValue(currency);
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency);
this.activityForm.controls['dataSource'].setValue(dataSource);
this.currentMarketPrice = marketPrice;

View File

@ -7,7 +7,7 @@
<h1 *ngIf="data.activity.id" i18n mat-dialog-title>Update activity</h1>
<h1 *ngIf="!data.activity.id" i18n mat-dialog-title>Add activity</h1>
<div class="flex-grow-1 pt-3" mat-dialog-content>
<div>
<div class="mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Type</mat-label>
<mat-select formControlName="type">
@ -18,7 +18,7 @@
</mat-select>
</mat-form-field>
</div>
<div>
<div class="mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Account</mat-label>
<mat-select formControlName="accountId">
@ -33,6 +33,7 @@
</mat-form-field>
</div>
<div
class="mb-3"
[ngClass]="{ 'd-none': !activityForm.controls['searchSymbol'].hasValidator(Validators.required) }"
>
<mat-form-field appearance="outline" class="w-100">
@ -54,11 +55,14 @@
<ng-container>
<mat-option
*ngFor="let lookupItem of filteredLookupItemsObservable | async"
class="autocomplete"
class="line-height-1"
[value]="lookupItem"
>
<span class="mr-2 symbol">{{ lookupItem.symbol | gfSymbol }}</span
><span><b>{{ lookupItem.name }}</b></span>
<span><b>{{ lookupItem.name }}</b></span>
<br />
<small class="text-muted"
>{{ lookupItem.symbol | gfSymbol }}</small
>
</mat-option>
</ng-container>
</mat-autocomplete>
@ -66,6 +70,7 @@
</mat-form-field>
</div>
<div
class="mb-3"
[ngClass]="{ 'd-none': !activityForm.controls['name'].hasValidator(Validators.required) }"
>
<mat-form-field appearance="outline" class="w-100">
@ -89,7 +94,7 @@
<input formControlName="dataSource" matInput />
</mat-form-field>
</div>
<div>
<div class="mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Date</mat-label>
<input formControlName="date" matInput [matDatepicker]="date" />
@ -103,13 +108,60 @@
<mat-datepicker #date disabled="false"></mat-datepicker>
</mat-form-field>
</div>
<div>
<div class="mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Quantity</mat-label>
<input formControlName="quantity" matInput type="number" />
</mat-form-field>
</div>
<div class="align-items-start d-flex">
<div class="align-items-start d-flex mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label
><ng-container [ngSwitch]="activityForm.controls['type']?.value">
<ng-container *ngSwitchCase="'DIVIDEND'" i18n
>Dividend</ng-container
>
<ng-container *ngSwitchCase="'ITEM'" i18n>Value</ng-container>
<ng-container *ngSwitchDefault i18n>Unit Price</ng-container>
</ng-container>
</mat-label>
<input
formControlName="unitPriceInCustomCurrency"
matInput
type="number"
/>
<div
class="ml-2"
matTextSuffix
[ngClass]="{ 'd-none': !activityForm.controls['currency']?.value }"
>
<mat-select formControlName="currencyOfUnitPrice">
<mat-option *ngFor="let currency of currencies" [value]="currency">
{{ currency }}
</mat-option>
</mat-select>
</div>
<mat-error
*ngIf="activityForm.controls['unitPriceInCustomCurrency'].hasError('invalid')"
><ng-container i18n
>Oops! Could not get the historical exchange rate from</ng-container
>
{{ activityForm.controls['date']?.value | date: defaultDateFormat
}}</mat-error
>
</mat-form-field>
<button
*ngIf="currentMarketPrice && (data.activity.type === 'BUY' || data.activity.type === 'SELL')"
class="apply-current-market-price ml-2 no-min-width"
mat-button
title="Apply current market price"
type="button"
(click)="applyCurrentMarketPrice()"
>
<ion-icon class="text-muted" name="refresh-outline"></ion-icon>
</button>
</div>
<div class="d-none">
<mat-form-field appearance="outline" class="w-100">
<mat-label
><ng-container [ngSwitch]="activityForm.controls['type']?.value">
@ -125,18 +177,8 @@
>{{ activityForm.controls['currency'].value }}</span
>
</mat-form-field>
<button
*ngIf="currentMarketPrice && (data.activity.type === 'BUY' || data.activity.type === 'SELL')"
class="apply-current-market-price ml-2 no-min-width"
mat-button
title="Apply current market price"
type="button"
(click)="applyCurrentMarketPrice()"
>
<ion-icon class="text-muted" name="refresh-outline"></ion-icon>
</button>
</div>
<div>
<div class="mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Fee</mat-label>
<input formControlName="feeInCustomCurrency" matInput type="number" />
@ -151,6 +193,14 @@
</mat-option>
</mat-select>
</div>
<mat-error
*ngIf="activityForm.controls['feeInCustomCurrency'].hasError('invalid')"
><ng-container i18n
>Oops! Could not get the historical exchange rate from</ng-container
>
{{ activityForm.controls['date']?.value | date: defaultDateFormat
}}</mat-error
>
</mat-form-field>
</div>
<div class="d-none">
@ -162,7 +212,7 @@
>
</mat-form-field>
</div>
<div>
<div class="mb-3">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Note</mat-label>
<textarea
@ -175,6 +225,7 @@
</mat-form-field>
</div>
<div
class="mb-3"
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }"
>
<mat-form-field appearance="outline" class="w-100">
@ -190,6 +241,7 @@
</mat-form-field>
</div>
<div
class="mb-3"
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }"
>
<mat-form-field appearance="outline" class="w-100">
@ -204,7 +256,7 @@
</mat-select>
</mat-form-field>
</div>
<div [ngClass]="{ 'd-none': tags?.length <= 0 }">
<div class="mb-3" [ngClass]="{ 'd-none': tags?.length <= 0 }">
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Tags</mat-label>
<mat-chip-grid #tagsChipList>

View File

@ -1,13 +1,13 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
import { MatChipsModule } from '@angular/material/chips';
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';

View File

@ -10,16 +10,6 @@
.mat-dialog-content {
max-height: unset;
.autocomplete {
font-size: 90%;
height: 2.5rem;
.symbol {
display: inline-block;
min-width: 4rem;
}
}
.mat-datepicker-input {
&.mat-mdc-input-element:disabled {
color: var(--dark-primary-text);

View File

@ -15,6 +15,9 @@ import { takeUntil } from 'rxjs/operators';
export class PricingPageComponent implements OnDestroy, OnInit {
public baseCurrency: string;
public coupon: number;
public importAndExportTooltipBasic = translate(
'DATA_IMPORT_AND_EXPORT_TOOLTIP_BASIC'
);
public importAndExportTooltipOSS = translate(
'DATA_IMPORT_AND_EXPORT_TOOLTIP_OSS'
);

View File

@ -106,6 +106,13 @@
></ion-icon>
<a i18n [routerLink]="['/features']">and more Features...</a>
</li>
<li class="align-items-center d-flex mb-1">
<ion-icon
class="mr-1"
name="checkmark-circle-outline"
></ion-icon>
<span i18n>Community Support</span>
</li>
</ul>
</div>
<p i18n>Self-hosted, update manually.</p>
@ -158,35 +165,19 @@
></ion-icon>
<span i18n>Portfolio Performance</span>
</li>
<li>
<li class="align-items-center d-flex mb-1">
<ion-icon
class="invisible"
name="checkmark-circle-outline"
></ion-icon>
</li>
<li>
<ion-icon
class="invisible"
name="checkmark-circle-outline"
></ion-icon>
</li>
<li>
<ion-icon
class="invisible"
name="checkmark-circle-outline"
></ion-icon>
</li>
<li>
<ion-icon
class="invisible"
name="checkmark-circle-outline"
></ion-icon>
</li>
<li>
<ion-icon
class="invisible"
class="mr-1"
name="checkmark-circle-outline"
></ion-icon>
<span i18n>Data Import and Export</span>
<span
class="align-items-center d-flex ml-1"
matTooltipPosition="above"
[matTooltip]="importAndExportTooltipBasic"
>
<ion-icon name="information-circle-outline"></ion-icon>
</span>
</li>
</ul>
</div>
@ -296,6 +287,13 @@
></ion-icon>
<a i18n [routerLink]="['/features']">and more Features...</a>
</li>
<li class="align-items-center d-flex mb-1">
<ion-icon
class="mr-1"
name="checkmark-circle-outline"
></ion-icon>
<span i18n>Email and Chat Support</span>
</li>
</ul>
</div>
<p i18n>Fully managed Ghostfolio cloud offering.</p>

View File

@ -63,7 +63,7 @@ export class RegisterPageComponent implements OnDestroy, OnInit {
public async createAccount() {
this.dataService
.postUser({ country: this.userService.getCountry() })
.postUser()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ accessToken, authToken, role }) => {
this.openShowAccessTokenDialog(accessToken, authToken, role);

View File

@ -21,7 +21,6 @@
class="d-inline-block"
color="primary"
mat-flat-button
[disabled]="!demoAuthToken"
(click)="createAccount()"
>
<ng-container i18n>Create Account</ng-container>

View File

@ -405,8 +405,8 @@ export class DataService {
return this.http.post<OrderModel>(`/api/v1/order`, aOrder);
}
public postUser({ country }: { country: string }) {
return this.http.post<UserItem>(`/api/v1/user`, { country });
public postUser() {
return this.http.post<UserItem>(`/api/v1/user`, {});
}
public putAccount(aAccount: UpdateAccountDto) {

View File

@ -6,7 +6,6 @@ import { SubscriptionInterstitialDialogParams } from '@ghostfolio/client/compone
import { SubscriptionInterstitialDialog } from '@ghostfolio/client/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { timezoneCitiesToCountries } from '@ghostfolio/common/timezone-cities-to-countries';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, of } from 'rxjs';
import { throwError } from 'rxjs';
@ -46,20 +45,6 @@ export class UserService extends ObservableStore<UserStoreState> {
}
}
public getCountry() {
let country: string;
if (Intl) {
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
const timeZoneArray = timeZone.split('/');
const city = timeZoneArray[timeZoneArray.length - 1];
country = timezoneCitiesToCountries[city];
}
return country;
}
public remove() {
this.setState({ user: null }, UserStoreActions.RemoveUser);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-0.001931647947148285 -0.5831467598558726 286.0572555076589 91.08314675985588" width="2500" height="801">
<circle cx="238.236" cy="17.302" fill="#fff" r="10.647" />
<g fill="#fff">
<path d="M86.817 62.554c5.183 0 8.2-3.876 7.976-7.69a25.549 25.549 0 0 0-.534-4.292C91.081 36.8 79.879 26.619 66.546 26.619c-15.8 0-28.615 14.3-28.615 31.942S50.743 90.5 66.546 90.5c9.9 0 16.97-3.605 22.116-9.256a6.154 6.154 0 0 0-1.012-9.2c-2.485-1.727-5.631-1.145-7.943.807-2.207 1.863-6.423 5.676-13.161 5.676-8.048 0-14.761-6.859-16.3-15.971zM66.546 38.6c7.243 0 13.4 5.556 15.687 13.309H50.86C53.144 44.153 59.3 38.6 66.546 38.6zM38.6 32.81a5.986 5.986 0 0 0-5-5.9c-8.721-1.315-16.873 1.941-21.615 7.836v-.8A5.989 5.989 0 1 0 0 33.939v49.01a6.145 6.145 0 0 0 5.619 6.212 5.989 5.989 0 0 0 6.359-5.978V57.9c0-11.188 8.414-20.374 19.96-19.126a5.373 5.373 0 0 0 1.183 0A5.987 5.987 0 0 0 38.6 32.81zM244.225 39.262a5.989 5.989 0 0 0-11.978 0v43.921a5.989 5.989 0 0 0 11.978 0zM155.053 5.989A5.989 5.989 0 0 0 149.064 0a5.989 5.989 0 0 0-5.989 5.989v26.746a20.892 20.892 0 0 0-15.306-6.116c-15.8 0-28.615 14.3-28.615 31.942S111.965 90.5 127.769 90.5a21.154 21.154 0 0 0 15.415-6.193 5.988 5.988 0 0 0 11.869-1.127zm-27.284 72.536c-9.188 0-16.637-8.939-16.637-19.964S118.581 38.6 127.769 38.6s16.636 8.938 16.636 19.964-7.448 19.961-16.636 19.961zM217.606 5.989A5.989 5.989 0 0 0 211.617 0a5.989 5.989 0 0 0-5.989 5.989v26.746a20.889 20.889 0 0 0-15.306-6.116c-15.8 0-28.614 14.3-28.614 31.942S174.519 90.5 190.322 90.5a21.156 21.156 0 0 0 15.416-6.193 5.987 5.987 0 0 0 11.868-1.127zm-27.284 72.536c-9.188 0-16.636-8.939-16.636-19.964S181.134 38.6 190.322 38.6s16.637 8.938 16.637 19.964-7.448 19.961-16.637 19.961zM274.654 83.183V38.6h5.324a5.445 5.445 0 0 0 5.494-4.969 5.325 5.325 0 0 0-5.312-5.679h-5.506V19.5a6.126 6.126 0 0 0-5.591-6.182 5.989 5.989 0 0 0-6.387 5.976v8.651h-4.959a5.445 5.445 0 0 0-5.495 4.97 5.324 5.324 0 0 0 5.312 5.678h5.142v44.59a5.989 5.989 0 0 0 5.989 5.989 5.989 5.989 0 0 0 5.989-5.989z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="93" height="46" viewBox="0 0 93 46" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.07105 44.3975C7.22517 44.2572 7.36938 44.1052 7.50216 43.9424C9.34732 41.7938 12.2358 40.4302 16.9242 40.4302C21.3462 40.4302 25.1394 41.6634 28.4565 44.1004L28.5874 44.1982C30.3898 45.5447 32.8435 45.6003 34.7046 44.3366C38.6683 41.6452 42.5089 40.4302 46.2913 40.4302C50.0067 40.4302 53.6119 41.6012 57.1857 44.1474L57.2602 44.2009C59.244 45.6251 61.9413 45.5017 63.7876 43.9022C66.1481 41.8574 69.3784 40.6641 73.8728 40.6641C78.6007 40.6641 82.2664 41.9877 85.1615 44.4399C85.3032 44.565 85.4529 44.6804 85.6095 44.7852C85.9828 45.0361 86.3851 45.2201 86.8008 45.3385C87.4685 45.5297 88.1917 45.5581 88.9131 45.3897C89.2573 45.3098 89.5927 45.1865 89.9105 45.0205C91.0425 44.43 91.8346 43.3592 92.0936 42.1362C92.1977 41.6446 92.2158 41.1284 92.1351 40.6089C92.11 40.4458 92.0755 40.2839 92.0316 40.1243C88.6778 27.0856 83.1951 16.8769 75.274 9.9822C67.2682 3.01361 57.1764 -0.216542 45.3636 0.0112437C33.598 0.238118 23.6515 3.69135 15.8908 10.6589C8.19769 17.5658 3.04596 27.5723 0.128351 40.22C0.0858891 40.3896 0.0541059 40.5612 0.0329156 40.7336C-0.119581 41.9524 0.265853 43.1381 1.02211 44.0226C1.42799 44.4973 1.94069 44.8852 2.53436 45.1449C2.88562 45.2992 3.25231 45.4027 3.62389 45.4562C4.90782 45.6438 6.16179 45.225 7.07105 44.3975ZM45.526 8.49453C55.6217 8.29985 63.5696 11.0258 69.7345 16.392C74.2132 20.2904 77.9585 25.7637 80.855 32.9925C78.6479 32.4468 76.3152 32.1792 73.8728 32.1792C68.7063 32.1792 64.0697 33.3787 60.2067 35.9888C55.8788 33.3384 51.2229 31.9453 46.2913 31.9453C41.2475 31.9453 36.4057 33.4016 31.8104 36.1353C27.375 33.3351 22.3772 31.9453 16.9242 31.9453C14.9552 31.9453 13.0711 32.1287 11.2937 32.5121C13.8983 25.8638 17.3441 20.7387 21.5277 16.9826C27.5059 11.6155 35.3831 8.69011 45.526 8.49453Z" fill="#FFFFFF" />
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -6,94 +6,98 @@
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>https://ghostfol.io</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/blog</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/blog/2021/07/hallo-ghostfolio</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/de/pricing</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/about</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/about/changelog</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2021/07/hello-ghostfolio</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/01/ghostfolio-first-months-in-open-source</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/07/ghostfolio-meets-internet-identity</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/07/how-do-i-get-my-finances-in-order</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/08/500-stars-on-github</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/10/hacktoberfest-2022</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/11/black-friday-2022</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2022/12/the-importance-of-tracking-your-personal-finances</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/blog/2023/02/ghostfolio-meets-umbrel</loc>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/demo</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/faq</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/features</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/markets</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/pricing</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/register</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://ghostfol.io/en/resources</loc>
<lastmod>2023-01-30T00:00:00+00:00</lastmod>
<lastmod>2023-02-25T00:00:00+00:00</lastmod>
</url>
</urlset>

View File

@ -6,7 +6,7 @@
<target state="translated">Regististrieren</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -102,7 +102,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -122,7 +122,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -158,7 +158,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -198,7 +202,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -250,7 +254,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -342,7 +346,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -382,7 +386,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -414,7 +418,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -638,7 +642,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -657,12 +661,12 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="translated">Letzte Abfrage</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
@ -682,7 +686,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -694,7 +698,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
@ -710,7 +714,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -726,7 +730,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -738,7 +742,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -754,11 +758,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -770,7 +774,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
@ -778,7 +782,7 @@
<target state="translated">Ich</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
@ -786,7 +790,7 @@
<target state="translated">Mein Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
@ -794,7 +798,7 @@
<target state="translated">Über Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
@ -802,7 +806,7 @@
<target state="translated">Features</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
@ -810,7 +814,7 @@
<target state="translated">Märkte</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -898,7 +902,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -934,7 +938,7 @@
<target state="translated">Einloggen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -1098,7 +1102,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1146,11 +1154,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -1158,7 +1166,7 @@
<target state="translated">Datenfehler melden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -1566,7 +1574,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1866,7 +1874,7 @@
<target state="translate">Aktivität hinzufügen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
@ -1882,7 +1890,7 @@
<target state="translated">Name, Symbol oder ISIN</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
@ -1894,7 +1902,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1906,7 +1914,11 @@
<target state="translated">Stückpreis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1918,11 +1930,11 @@
<target state="translated">Gebühr</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1938,7 +1950,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
@ -1958,7 +1970,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="2309808536212982229" datatype="html">
@ -2042,7 +2054,7 @@
<target state="translated">Weiter mit Internet Identity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
@ -2050,7 +2062,7 @@
<target state="translated">Weiter mit Google</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -2174,7 +2186,7 @@
<target state="translated">Möchtest du diese Aktivität wirklich löschen?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2246,7 +2258,7 @@
<target state="translated">Registrieren</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -2342,7 +2354,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="936788a5ab949fe0d70098ba051ac7a44999ff08" datatype="html">
@ -2526,7 +2538,7 @@
<target state="translated">Filtern nach Konto, Währung, Symbol oder Typ...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="fbaaeb297e70b9a800acf841b9d26c19d60651ef" datatype="html">
@ -2698,7 +2710,7 @@
<target state="translated">Symbol</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
@ -2706,7 +2718,7 @@
<target state="translated">Tag</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
@ -2714,7 +2726,7 @@
<target state="translated">Bargeld</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
@ -2722,7 +2734,7 @@
<target state="translated">Rohstoff</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
@ -2730,7 +2742,7 @@
<target state="translated">Anteilskapital</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
@ -2738,7 +2750,7 @@
<target state="translated">Feste Einkünfte</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
@ -2746,7 +2758,7 @@
<target state="translated">Immobilien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
@ -2754,7 +2766,7 @@
<target state="translated">Anleihe</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
@ -2762,7 +2774,7 @@
<target state="translated">Kryptowährung</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
@ -2770,7 +2782,7 @@
<target state="translated">ETF</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="5734784563242233466" datatype="html">
@ -2778,7 +2790,7 @@
<target state="translated">Investmentfonds</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="1270654249046226808" datatype="html">
@ -2786,7 +2798,7 @@
<target state="translated">Edelmetall</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
@ -2794,7 +2806,7 @@
<target state="translated">Privates Beteiligungskapital</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4613338085351943838" datatype="html">
@ -2802,7 +2814,7 @@
<target state="translated">Aktie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="6268646680388419543" datatype="html">
@ -2810,7 +2822,7 @@
<target state="translated">Notfallfonds</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
@ -2818,7 +2830,7 @@
<target state="translated">Andere</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2842,7 +2854,7 @@
<target state="translated">Nordamerika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
@ -2850,7 +2862,7 @@
<target state="translated">Afrika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
@ -2858,7 +2870,7 @@
<target state="translated">Asien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
@ -2866,7 +2878,7 @@
<target state="translated">Europa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
@ -2874,7 +2886,7 @@
<target state="translated">Ozeanien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
@ -2882,7 +2894,7 @@
<target state="translated">Südamerika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
@ -3006,7 +3018,7 @@
<target state="translated">Wertschriften</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="3229595422546554334" datatype="html">
@ -3098,7 +3110,7 @@
<target state="translated">Zuwendung</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
@ -3106,7 +3118,7 @@
<target state="translated">Höheres Risiko</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -3114,7 +3126,7 @@
<target state="translated">Geringeres Risiko</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
@ -3122,7 +3134,7 @@
<target state="translated">Altersvorsorge</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
@ -3130,7 +3142,7 @@
<target state="translated">Satellit</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
@ -3186,7 +3198,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
@ -3202,7 +3214,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
@ -3218,7 +3230,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -3234,7 +3246,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3270,11 +3282,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -3286,11 +3298,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -3302,11 +3314,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
@ -3314,7 +3326,7 @@
<target state="translated">Selbst gehostet, manuelles Update.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
@ -3322,11 +3334,11 @@
<target state="translated">Kostenlos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
@ -3334,7 +3346,7 @@
<target state="translated"> Für Einsteiger, die gerade mit dem Börsenhandel beginnen. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
@ -3342,11 +3354,11 @@
<target state="translated">Vollständig verwaltetes Ghostfolio Cloud-Angebot.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
@ -3354,7 +3366,7 @@
<target state="translated"> Für ambitionierte Anleger, die den vollständigen Überblick über ihr Anlagevermögen benötigen. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
@ -3362,7 +3374,7 @@
<target state="translated"> Abonnement abschliessen </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
@ -3370,7 +3382,7 @@
<target state="translated">Einmalige Zahlung, keine automatische Erneuerung.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
@ -3378,7 +3390,7 @@
<target state="translated"> Jetzt loslegen </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
@ -3386,7 +3398,7 @@
<target state="translated">Es ist kostenlos.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3406,7 +3418,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3426,23 +3438,71 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="translated">Einfacher Wechsel zu Ghostfolio Premium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<target state="translated">Community Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<target state="translated">E-Mail und Chat Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="translated">Einfacher Wechsel zu Ghostfolio Premium oder Ghostfolio Open Source</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<target state="translated">Einfacher Wechsel zu Ghostfolio Open Source</target>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="translated">Einfacher Wechsel zu Ghostfolio Open Source oder Ghostfolio Basic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<target state="translated">Marktdaten bereitgestellt von</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<target state="translated">Ups! Der historische Wechselkurs konnte nicht abgerufen werden vom</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -7,7 +7,7 @@
<target state="translated">Crear una cuenta</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -103,7 +103,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -123,7 +123,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -159,7 +159,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -199,7 +203,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -251,7 +255,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -343,7 +347,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -383,7 +387,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -415,7 +419,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -639,7 +643,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -658,12 +662,12 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<target state="translated">Última petición</target>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="new">Última petición</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
@ -683,7 +687,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -695,7 +699,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
@ -711,7 +715,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -727,7 +731,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -739,7 +743,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -755,11 +759,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -771,7 +775,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
@ -779,7 +783,7 @@
<target state="translated">mí</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
@ -787,7 +791,7 @@
<target state="translated">Mi Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
@ -795,7 +799,7 @@
<target state="translated">Sobre Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
@ -803,7 +807,7 @@
<target state="translated">Funcionalidades</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
@ -811,7 +815,7 @@
<target state="translated">Mercados</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -899,7 +903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -935,7 +939,7 @@
<target state="translated">Iniciar sesión</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -1099,7 +1103,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1147,11 +1155,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -1159,7 +1167,7 @@
<target state="translated">Reporta un anomalía de los datos</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -1567,7 +1575,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1867,7 +1875,7 @@
<target state="translated">Añadir operación</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
@ -1883,7 +1891,7 @@
<target state="translated">Nombre, símbolo o ISIN</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
@ -1895,7 +1903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1907,7 +1915,11 @@
<target state="translated">Precio unitario</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1919,11 +1931,11 @@
<target state="translated">Comisión</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1939,7 +1951,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
@ -1959,7 +1971,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="2309808536212982229" datatype="html">
@ -2043,7 +2055,7 @@
<target state="translated">Continuar con Internet Identity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
@ -2051,7 +2063,7 @@
<target state="translated">Continuar con Google</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -2175,7 +2187,7 @@
<target state="translated">¿Estás seguro de eliminar esta operación?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2247,7 +2259,7 @@
<target state="translated">Comenzar</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -2323,7 +2335,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
@ -2527,7 +2539,7 @@
<target state="translated">Filtrar por cuenta, divisa, símbolo o tipo...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
@ -2699,7 +2711,7 @@
<target state="translated">Símbolo</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
@ -2707,7 +2719,7 @@
<target state="translated">Etiqueta</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
@ -2715,7 +2727,7 @@
<target state="translated">Efectivo</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
@ -2723,7 +2735,7 @@
<target state="translated">Bien</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
@ -2731,7 +2743,7 @@
<target state="translated">Capital</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
@ -2739,7 +2751,7 @@
<target state="translated">Renta fija</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
@ -2747,7 +2759,7 @@
<target state="translated">Propiedad inmobiliaria</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
@ -2755,7 +2767,7 @@
<target state="translated">Bono</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
@ -2763,7 +2775,7 @@
<target state="translated">Criptomoneda</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
@ -2771,7 +2783,7 @@
<target state="translated">ETF</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="5734784563242233466" datatype="html">
@ -2779,7 +2791,7 @@
<target state="translated">Fondo de inversión</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="1270654249046226808" datatype="html">
@ -2787,7 +2799,7 @@
<target state="translated">Metal precioso</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
@ -2795,7 +2807,7 @@
<target state="translated">Capital riesgo</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4613338085351943838" datatype="html">
@ -2803,7 +2815,7 @@
<target state="translated">Acción</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="6268646680388419543" datatype="html">
@ -2811,7 +2823,7 @@
<target state="translated">Fondo de emergencia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
@ -2819,7 +2831,7 @@
<target state="translated">Otros</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2843,7 +2855,7 @@
<target state="translated">América del Norte</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
@ -2851,7 +2863,7 @@
<target state="translated">África</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
@ -2859,7 +2871,7 @@
<target state="translated">Asia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
@ -2867,7 +2879,7 @@
<target state="translated">Europa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
@ -2875,7 +2887,7 @@
<target state="translated">Oceanía</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
@ -2883,7 +2895,7 @@
<target state="translated">América del Sur</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
@ -3007,7 +3019,7 @@
<target state="new">Securities</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="3229595422546554334" datatype="html">
@ -3099,7 +3111,7 @@
<target state="new">Grant</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
@ -3107,7 +3119,7 @@
<target state="new">Higher Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -3115,7 +3127,7 @@
<target state="new">Lower Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
@ -3123,7 +3135,7 @@
<target state="new">Retirement Provision</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
@ -3131,7 +3143,7 @@
<target state="new">Satellite</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
@ -3187,7 +3199,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
@ -3203,7 +3215,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
@ -3219,7 +3231,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -3235,7 +3247,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3271,11 +3283,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -3287,11 +3299,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -3303,11 +3315,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
@ -3315,7 +3327,7 @@
<target state="new">Self-hosted, update manually.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
@ -3323,11 +3335,11 @@
<target state="new">Free</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
@ -3335,7 +3347,7 @@
<target state="new"> For new investors who are just getting started with trading. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
@ -3343,11 +3355,11 @@
<target state="new">Fully managed Ghostfolio cloud offering.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
@ -3355,7 +3367,7 @@
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
@ -3363,7 +3375,7 @@
<target state="new"> Upgrade Plan </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
@ -3371,7 +3383,7 @@
<target state="new">One-time payment, no auto-renewal.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
@ -3379,7 +3391,7 @@
<target state="new"> Get Started </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
@ -3387,7 +3399,7 @@
<target state="new">Its free.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3407,7 +3419,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3427,23 +3439,71 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="new">Switch to Ghostfolio Premium easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<target state="new">Community Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<target state="new">Email and Chat Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Open Source easily</target>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<target state="new">Market data provided by</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<target state="new">Oops! Could not get the historical exchange rate from</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -126,7 +126,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -146,7 +146,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -186,7 +186,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -218,7 +218,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -258,7 +262,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -302,7 +306,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -402,7 +406,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -442,7 +446,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -474,7 +478,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -502,7 +506,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
@ -522,7 +526,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -698,7 +702,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="912825160188860007" datatype="html">
@ -798,11 +802,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="62f17fd50522539fd4c85854828db9d2e1c5330f" datatype="html">
@ -886,7 +890,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -910,7 +914,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -925,12 +929,12 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<target state="translated">Dernière Requête</target>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="new">Dernière Requête</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
@ -994,7 +998,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -1006,7 +1010,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="b0f210a3147d1b669e081dae1fcd0918fe7c3021" datatype="html">
@ -1018,7 +1022,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -1030,7 +1034,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -1046,11 +1050,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -1062,7 +1066,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
@ -1070,7 +1074,7 @@
<target state="translated">Moi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
@ -1078,7 +1082,7 @@
<target state="translated">Mon Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
@ -1086,7 +1090,7 @@
<target state="translated">À propos de Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
@ -1094,7 +1098,7 @@
<target state="translated">Fonctionnalités</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
@ -1102,7 +1106,7 @@
<target state="translated">Marchés</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -1114,7 +1118,7 @@
<target state="translated">Se connecter</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -1126,7 +1130,7 @@
<target state="translated">Démarrer</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="5207635742003539443" datatype="html">
@ -1258,7 +1262,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -1454,7 +1458,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1506,7 +1514,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1534,7 +1542,7 @@
<target state="translated">Signaler une Erreur de Données</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="6048892649018070225" datatype="html">
@ -2106,7 +2114,7 @@
<target state="translated">Ajouter activité</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
@ -2122,7 +2130,7 @@
<target state="translated">Nom, symbole, ou ISIN</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
@ -2130,7 +2138,11 @@
<target state="translated">Prix Unitaire</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -2142,11 +2154,11 @@
<target state="translated">Frais</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -2558,7 +2570,7 @@
<target state="translated">Creér Compte</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -2570,7 +2582,7 @@
<target state="translated">Continue avec Internet Identity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
@ -2578,7 +2590,7 @@
<target state="translated">Continuer avec Google</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -2710,7 +2722,7 @@
<target state="translated">Voulez-vous vraiment supprimer cette activité ?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="303469635941752458" datatype="html">
@ -2718,7 +2730,7 @@
<target state="translated">Filtrer par compte, devise, symbole, ou type...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2837,7 +2849,7 @@
<source>Emergency Fund</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
@ -2845,7 +2857,7 @@
<target state="translated">Autre</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2857,7 +2869,7 @@
<target state="translated">Titres</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="8106025670158480144" datatype="html">
@ -2865,7 +2877,7 @@
<target state="translated">Symbole</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
@ -2873,7 +2885,7 @@
<target state="translated">Étiquette</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
@ -2881,7 +2893,7 @@
<target state="translated">Cash</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
@ -2889,7 +2901,7 @@
<target state="translated">Marchandise</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
@ -2897,7 +2909,7 @@
<target state="translated">Capital</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
@ -2905,7 +2917,7 @@
<target state="translated">Revenu Fixe</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
@ -2913,7 +2925,7 @@
<target state="translated">Immobilier</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
@ -2921,7 +2933,7 @@
<target state="translated">Obligation</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
@ -2929,7 +2941,7 @@
<target state="translated">Cryptomonnaie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
@ -2937,7 +2949,7 @@
<target state="translated">ETF</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="5734784563242233466" datatype="html">
@ -2945,7 +2957,7 @@
<target state="translated">SICAV</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="1270654249046226808" datatype="html">
@ -2953,7 +2965,7 @@
<target state="translated">Métal Précieux</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
@ -2961,7 +2973,7 @@
<target state="translated">Capital Propre</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4613338085351943838" datatype="html">
@ -2969,7 +2981,7 @@
<target state="translated">Action</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
@ -2977,7 +2989,7 @@
<target state="translated">Afrique</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
@ -2985,7 +2997,7 @@
<target state="translated">Asie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
@ -2993,7 +3005,7 @@
<target state="translated">Europe</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="1228771048078164312" datatype="html">
@ -3001,7 +3013,7 @@
<target state="translated">Amérique du Nord</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
@ -3009,7 +3021,7 @@
<target state="translated">Océanie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
@ -3017,7 +3029,7 @@
<target state="translated">Amérique du Sud</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
@ -3097,7 +3109,7 @@
<target state="new">Grant</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
@ -3105,7 +3117,7 @@
<target state="new">Higher Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -3113,7 +3125,7 @@
<target state="new">Lower Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
@ -3121,7 +3133,7 @@
<target state="new">Retirement Provision</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
@ -3129,7 +3141,7 @@
<target state="new">Satellite</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
@ -3185,7 +3197,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
@ -3201,7 +3213,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
@ -3217,7 +3229,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -3233,7 +3245,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3269,11 +3281,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -3285,11 +3297,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -3301,11 +3313,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
@ -3313,7 +3325,7 @@
<target state="new">Self-hosted, update manually.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
@ -3321,11 +3333,11 @@
<target state="new">Free</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
@ -3333,7 +3345,7 @@
<target state="new"> For new investors who are just getting started with trading. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
@ -3341,11 +3353,11 @@
<target state="new">Fully managed Ghostfolio cloud offering.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
@ -3353,7 +3365,7 @@
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
@ -3361,7 +3373,7 @@
<target state="new"> Upgrade Plan </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
@ -3369,7 +3381,7 @@
<target state="new">One-time payment, no auto-renewal.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
@ -3377,7 +3389,7 @@
<target state="new"> Get Started </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
@ -3385,7 +3397,7 @@
<target state="new">Its free.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3405,7 +3417,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3425,23 +3437,71 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="new">Switch to Ghostfolio Premium easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<target state="new">Community Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<target state="new">Email and Chat Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Open Source easily</target>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<target state="new">Market data provided by</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<target state="new">Oops! Could not get the historical exchange rate from</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -7,7 +7,7 @@
<target state="translated">Crea un account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -103,7 +103,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -123,7 +123,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -159,7 +159,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -199,7 +203,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -251,7 +255,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -343,7 +347,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -383,7 +387,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -415,7 +419,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -639,7 +643,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -658,12 +662,12 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<target state="translated">Ultima richiesta</target>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="new">Ultima richiesta</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
@ -683,7 +687,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -695,7 +699,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
@ -711,7 +715,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -727,7 +731,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -739,7 +743,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -755,11 +759,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -771,7 +775,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
@ -779,7 +783,7 @@
<target state="translated">Io</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
@ -787,7 +791,7 @@
<target state="translated">Il mio Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
@ -795,7 +799,7 @@
<target state="translated">Informazioni su Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
@ -803,7 +807,7 @@
<target state="translated">Funzionalità</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
@ -811,7 +815,7 @@
<target state="translated">Mercati</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -899,7 +903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -935,7 +939,7 @@
<target state="translated">Accedi</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -1099,7 +1103,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1147,11 +1155,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -1159,7 +1167,7 @@
<target state="translated">Segnala un&apos;anomalia dei dati</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -1567,7 +1575,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1867,7 +1875,7 @@
<target state="translated">Aggiungi un&apos;attività</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
@ -1883,7 +1891,7 @@
<target state="translated">Nome, simbolo o ISIN</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
@ -1895,7 +1903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1907,7 +1915,11 @@
<target state="translated">Prezzo unitario</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1919,11 +1931,11 @@
<target state="translated">Commissione</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1939,7 +1951,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
@ -1959,7 +1971,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="2309808536212982229" datatype="html">
@ -2043,7 +2055,7 @@
<target state="translated">Continua con Internet Identity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
@ -2051,7 +2063,7 @@
<target state="translated">Continua con Google</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -2175,7 +2187,7 @@
<target state="translated">Vuoi davvero eliminare questa attività?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2247,7 +2259,7 @@
<target state="translated">Inizia</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -2323,7 +2335,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
@ -2527,7 +2539,7 @@
<target state="translated">Filtra per account, valuta, simbolo o tipo...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
@ -2699,7 +2711,7 @@
<target state="new">Symbol</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
@ -2707,7 +2719,7 @@
<target state="new">Tag</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
@ -2715,7 +2727,7 @@
<target state="new">Cash</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
@ -2723,7 +2735,7 @@
<target state="new">Commodity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
@ -2731,7 +2743,7 @@
<target state="new">Equity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
@ -2739,7 +2751,7 @@
<target state="new">Fixed Income</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
@ -2747,7 +2759,7 @@
<target state="new">Real Estate</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
@ -2755,7 +2767,7 @@
<target state="new">Bond</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
@ -2763,7 +2775,7 @@
<target state="new">Cryptocurrency</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
@ -2771,7 +2783,7 @@
<target state="new">ETF</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="5734784563242233466" datatype="html">
@ -2779,7 +2791,7 @@
<target state="new">Mutual Fund</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="1270654249046226808" datatype="html">
@ -2787,7 +2799,7 @@
<target state="new">Precious Metal</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
@ -2795,7 +2807,7 @@
<target state="new">Private Equity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4613338085351943838" datatype="html">
@ -2803,7 +2815,7 @@
<target state="new">Stock</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="6268646680388419543" datatype="html">
@ -2811,7 +2823,7 @@
<target state="new">Emergency Fund</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
@ -2819,7 +2831,7 @@
<target state="new">Other</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2843,7 +2855,7 @@
<target state="new">North America</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
@ -2851,7 +2863,7 @@
<target state="new">Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
@ -2859,7 +2871,7 @@
<target state="new">Asia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
@ -2867,7 +2879,7 @@
<target state="new">Europe</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
@ -2875,7 +2887,7 @@
<target state="new">Oceania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
@ -2883,7 +2895,7 @@
<target state="new">South America</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
@ -3007,7 +3019,7 @@
<target state="new">Securities</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="3229595422546554334" datatype="html">
@ -3099,7 +3111,7 @@
<target state="new">Grant</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
@ -3107,7 +3119,7 @@
<target state="new">Higher Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -3115,7 +3127,7 @@
<target state="new">Lower Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
@ -3123,7 +3135,7 @@
<target state="new">Retirement Provision</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
@ -3131,7 +3143,7 @@
<target state="new">Satellite</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
@ -3187,7 +3199,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
@ -3203,7 +3215,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
@ -3219,7 +3231,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -3235,7 +3247,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3271,11 +3283,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -3287,11 +3299,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -3303,11 +3315,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
@ -3315,7 +3327,7 @@
<target state="new">Self-hosted, update manually.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
@ -3323,11 +3335,11 @@
<target state="new">Free</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
@ -3335,7 +3347,7 @@
<target state="new"> For new investors who are just getting started with trading. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
@ -3343,11 +3355,11 @@
<target state="new">Fully managed Ghostfolio cloud offering.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
@ -3355,7 +3367,7 @@
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
@ -3363,7 +3375,7 @@
<target state="new"> Upgrade Plan </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
@ -3371,7 +3383,7 @@
<target state="new">One-time payment, no auto-renewal.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
@ -3379,7 +3391,7 @@
<target state="new"> Get Started </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
@ -3387,7 +3399,7 @@
<target state="new">Its free.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3407,7 +3419,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3427,23 +3439,71 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="new">Switch to Ghostfolio Premium easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<target state="new">Community Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<target state="new">Email and Chat Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Open Source easily</target>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<target state="new">Market data provided by</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<target state="new">Oops! Could not get the historical exchange rate from</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -6,7 +6,7 @@
<target state="translated">Account aanmaken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -102,7 +102,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -122,7 +122,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -158,7 +158,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -198,7 +202,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -250,7 +254,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -342,7 +346,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -382,7 +386,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -414,7 +418,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -638,7 +642,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -657,12 +661,12 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<target state="translated">Laatste verzoek</target>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="new">Laatste verzoek</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
@ -682,7 +686,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -694,7 +698,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
@ -710,7 +714,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -726,7 +730,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -738,7 +742,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -754,11 +758,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -770,7 +774,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
@ -778,7 +782,7 @@
<target state="translated">Ik</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
@ -786,7 +790,7 @@
<target state="translated">Mijn Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
@ -794,7 +798,7 @@
<target state="translated">Over Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
@ -802,7 +806,7 @@
<target state="translated">Kenmerken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
@ -810,7 +814,7 @@
<target state="translated">Markten</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -898,7 +902,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -934,7 +938,7 @@
<target state="translated">Aanmelden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -1098,7 +1102,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1146,11 +1154,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -1158,7 +1166,7 @@
<target state="translated">Gegevensstoring melden</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -1566,7 +1574,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1866,7 +1874,7 @@
<target state="translated">Activiteit toevoegen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
@ -1882,7 +1890,7 @@
<target state="translated">Naam, symbool of ISIN</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
@ -1894,7 +1902,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1906,7 +1914,11 @@
<target state="translated">Prijs per eenheid</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1918,11 +1930,11 @@
<target state="translated">Transactiekosten</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1938,7 +1950,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
@ -1958,7 +1970,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="2309808536212982229" datatype="html">
@ -2042,7 +2054,7 @@
<target state="translated">Ga verder met Internet Identity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
@ -2050,7 +2062,7 @@
<target state="translated">Verder met Google</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -2174,7 +2186,7 @@
<target state="translated">Wilt u deze activiteit echt verwijderen?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2246,7 +2258,7 @@
<target state="translated">Aan de slag</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -2322,7 +2334,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
@ -2526,7 +2538,7 @@
<target state="translated">Filter op rekening, valuta, symbool of type...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
@ -2698,7 +2710,7 @@
<target state="translated">Symbool</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
@ -2706,7 +2718,7 @@
<target state="translated">Label</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
@ -2714,7 +2726,7 @@
<target state="translated">Contant geld</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
@ -2722,7 +2734,7 @@
<target state="translated">Commodity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
@ -2730,7 +2742,7 @@
<target state="translated">Equity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
@ -2738,7 +2750,7 @@
<target state="translated">Vast inkomen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
@ -2746,7 +2758,7 @@
<target state="translated">Vastgoed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
@ -2754,7 +2766,7 @@
<target state="translated">Obligatie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
@ -2762,7 +2774,7 @@
<target state="translated">Cryptovaluta</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
@ -2770,7 +2782,7 @@
<target state="translated">ETF</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="5734784563242233466" datatype="html">
@ -2778,7 +2790,7 @@
<target state="translated">Beleggingsfonds</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="1270654249046226808" datatype="html">
@ -2786,7 +2798,7 @@
<target state="translated">Edel metaal</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
@ -2794,7 +2806,7 @@
<target state="translated">Private equity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4613338085351943838" datatype="html">
@ -2802,7 +2814,7 @@
<target state="translated">Aandeel</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="6268646680388419543" datatype="html">
@ -2810,7 +2822,7 @@
<target state="translated">Noodfonds</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
@ -2818,7 +2830,7 @@
<target state="translated">Anders</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2842,7 +2854,7 @@
<target state="translated">Noord Amerika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
@ -2850,7 +2862,7 @@
<target state="translated">Afrika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
@ -2858,7 +2870,7 @@
<target state="translated">Azië</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
@ -2866,7 +2878,7 @@
<target state="translated">Europa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
@ -2874,7 +2886,7 @@
<target state="translated">Oceanië</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
@ -2882,7 +2894,7 @@
<target state="translated">Zuid Amerika</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
@ -3006,7 +3018,7 @@
<target state="translated">Effecten</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="3229595422546554334" datatype="html">
@ -3098,7 +3110,7 @@
<target state="new">Grant</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
@ -3106,7 +3118,7 @@
<target state="new">Higher Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -3114,7 +3126,7 @@
<target state="new">Lower Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
@ -3122,7 +3134,7 @@
<target state="new">Retirement Provision</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
@ -3130,7 +3142,7 @@
<target state="new">Satellite</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
@ -3186,7 +3198,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
@ -3202,7 +3214,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
@ -3218,7 +3230,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -3234,7 +3246,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3270,11 +3282,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -3286,11 +3298,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -3302,11 +3314,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
@ -3314,7 +3326,7 @@
<target state="new">Self-hosted, update manually.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
@ -3322,11 +3334,11 @@
<target state="new">Free</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
@ -3334,7 +3346,7 @@
<target state="new"> For new investors who are just getting started with trading. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
@ -3342,11 +3354,11 @@
<target state="new">Fully managed Ghostfolio cloud offering.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
@ -3354,7 +3366,7 @@
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
@ -3362,7 +3374,7 @@
<target state="new"> Upgrade Plan </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
@ -3370,7 +3382,7 @@
<target state="new">One-time payment, no auto-renewal.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
@ -3378,7 +3390,7 @@
<target state="new"> Get Started </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
@ -3386,7 +3398,7 @@
<target state="new">Its free.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3406,7 +3418,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3426,23 +3438,71 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="new">Switch to Ghostfolio Premium easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<target state="new">Community Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<target state="new">Email and Chat Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Open Source easily</target>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<target state="new">Market data provided by</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<target state="new">Oops! Could not get the historical exchange rate from</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -126,7 +126,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -146,7 +146,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -186,7 +186,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -218,7 +218,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -258,7 +262,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -302,7 +306,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -402,7 +406,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -442,7 +446,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -474,7 +478,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -502,7 +506,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
@ -522,7 +526,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -770,7 +774,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -794,7 +798,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -809,12 +813,12 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<target state="new">Last Request</target>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<target state="new"> Last Request </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
@ -878,7 +882,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -890,7 +894,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="b0f210a3147d1b669e081dae1fcd0918fe7c3021" datatype="html">
@ -902,7 +906,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -914,7 +918,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -930,11 +934,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -946,7 +950,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
@ -954,7 +958,7 @@
<target state="new">Me</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
@ -962,7 +966,7 @@
<target state="new">My Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
@ -970,7 +974,7 @@
<target state="new">About Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
@ -978,7 +982,7 @@
<target state="new">Features</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
@ -986,7 +990,7 @@
<target state="new">Markets</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -998,7 +1002,7 @@
<target state="new">Sign in</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -1010,7 +1014,7 @@
<target state="new">Get started</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="5207635742003539443" datatype="html">
@ -1158,7 +1162,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -1354,7 +1358,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1406,7 +1414,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1494,11 +1502,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -1506,7 +1514,7 @@
<target state="new">Report Data Glitch</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -2046,7 +2054,7 @@
<target state="new">Add activity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="3229595422546554334" datatype="html">
@ -2070,7 +2078,7 @@
<target state="new">Name, symbol or ISIN</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
@ -2078,7 +2086,11 @@
<target state="new">Unit Price</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -2090,11 +2102,11 @@
<target state="new">Fee</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -2110,7 +2122,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="848497846891931418" datatype="html">
@ -2482,7 +2494,7 @@
<target state="new">Create Account</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -2494,7 +2506,7 @@
<target state="new">Continue with Internet Identity</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
@ -2502,7 +2514,7 @@
<target state="new">Continue with Google</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -2626,7 +2638,7 @@
<target state="new">Do you really want to delete this activity?</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="303469635941752458" datatype="html">
@ -2634,7 +2646,7 @@
<target state="new">Filter by account, currency, symbol or type...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2730,7 +2742,7 @@
<target state="new">Emergency Fund</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
@ -2738,7 +2750,7 @@
<target state="new">Other</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2750,7 +2762,7 @@
<target state="new">Symbol</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
@ -2758,7 +2770,7 @@
<target state="new">Tag</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
@ -2766,7 +2778,7 @@
<target state="new">Cash</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
@ -2774,7 +2786,7 @@
<target state="new">Commodity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
@ -2782,7 +2794,7 @@
<target state="new">Equity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
@ -2790,7 +2802,7 @@
<target state="new">Fixed Income</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
@ -2798,7 +2810,7 @@
<target state="new">Real Estate</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
@ -2806,7 +2818,7 @@
<target state="new">Bond</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
@ -2814,7 +2826,7 @@
<target state="new">Cryptocurrency</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
@ -2822,7 +2834,7 @@
<target state="new">ETF</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="5734784563242233466" datatype="html">
@ -2830,7 +2842,7 @@
<target state="new">Mutual Fund</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="1270654249046226808" datatype="html">
@ -2838,7 +2850,7 @@
<target state="new">Precious Metal</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
@ -2846,7 +2858,7 @@
<target state="new">Private Equity</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4613338085351943838" datatype="html">
@ -2854,7 +2866,7 @@
<target state="new">Stock</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
@ -2862,7 +2874,7 @@
<target state="new">Africa</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
@ -2870,7 +2882,7 @@
<target state="new">Asia</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
@ -2878,7 +2890,7 @@
<target state="new">Europe</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="1228771048078164312" datatype="html">
@ -2886,7 +2898,7 @@
<target state="new">North America</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
@ -2894,7 +2906,7 @@
<target state="new">Oceania</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
@ -2902,7 +2914,7 @@
<target state="new">South America</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
@ -3038,7 +3050,7 @@
<target state="new">Securities</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="0f845001c88b82c18535e6d44f5597061f506e42" datatype="html">
@ -3098,7 +3110,7 @@
<target state="new">Grant</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
@ -3106,7 +3118,7 @@
<target state="new">Higher Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
@ -3114,7 +3126,7 @@
<target state="new">Lower Risk</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
@ -3122,7 +3134,7 @@
<target state="new">Retirement Provision</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="8050244774979733855" datatype="html">
@ -3130,7 +3142,7 @@
<target state="new">Satellite</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="36f3a413e742253688f48766189344d6f52611d8" datatype="html">
@ -3186,7 +3198,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="7890f6d6655c7c77a038355622d8042f2bc1e5f2" datatype="html">
@ -3202,7 +3214,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="59ff3fc0819994af3ded42a88914305f1f7ad5ef" datatype="html">
@ -3218,7 +3230,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -3234,7 +3246,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3270,11 +3282,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -3286,11 +3298,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -3302,11 +3314,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
@ -3314,7 +3326,7 @@
<target state="new">Self-hosted, update manually.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
@ -3322,11 +3334,11 @@
<target state="new">Free</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="9afa1aa28394c7d207d398ca88d5c979d7c96278" datatype="html">
@ -3334,7 +3346,7 @@
<target state="new"> For new investors who are just getting started with trading. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="f799e268a8ec6ceb427287d7aa53fa9cc790a085" datatype="html">
@ -3342,11 +3354,11 @@
<target state="new">Fully managed Ghostfolio cloud offering.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="16d34e54be2fe7e5342cde5b07d098f32acdc3ee" datatype="html">
@ -3354,7 +3366,7 @@
<target state="new"> For ambitious investors who need the full picture of their financial assets. </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
@ -3362,7 +3374,7 @@
<target state="new"> Upgrade Plan </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
@ -3370,7 +3382,7 @@
<target state="new">One-time payment, no auto-renewal.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
@ -3378,7 +3390,7 @@
<target state="new"> Get Started </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
@ -3386,7 +3398,7 @@
<target state="new">Its free.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3406,7 +3418,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3426,23 +3438,71 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="new">Switch to Ghostfolio Premium easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<target state="new">Community Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<target state="new">Email and Chat Support</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Open Source easily</target>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<target state="new">Market data provided by</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<target state="new">Oops! Could not get the historical exchange rate from</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -6,7 +6,7 @@
<source>Create Account</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">27,29</context>
<context context-type="linenumber">26,28</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
@ -95,7 +95,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">240</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/activities-page.html</context>
@ -114,7 +114,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">72,74</context>
<context context-type="linenumber">77,79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -148,7 +148,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">119,120</context>
<context context-type="linenumber">124,125</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">171,172</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -186,7 +190,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">108</context>
<context context-type="linenumber">117</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -234,7 +238,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">88,90</context>
<context context-type="linenumber">93,95</context>
</context-group>
</trans-unit>
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
@ -315,7 +319,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">94,95</context>
<context context-type="linenumber">99,100</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -353,7 +357,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">250,254</context>
<context context-type="linenumber">302,306</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
@ -384,7 +388,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">257,262</context>
<context context-type="linenumber">309,314</context>
</context-group>
</trans-unit>
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
@ -583,7 +587,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">140</context>
</context-group>
</trans-unit>
<trans-unit id="7d6573fb998f3a1cf1356623b85850d9d10edaa9" datatype="html">
@ -600,11 +604,11 @@
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
<source>Last Request</source>
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
<source> Last Request </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
@ -622,7 +626,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">157</context>
<context context-type="linenumber">152</context>
</context-group>
</trans-unit>
<trans-unit id="323af13292ecc714ab3848b9dff48f923893be32" datatype="html">
@ -633,7 +637,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">167</context>
<context context-type="linenumber">162</context>
</context-group>
</trans-unit>
<trans-unit id="4fe84c1d0eef5726c017f64c691145db7a61f879" datatype="html">
@ -648,7 +652,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">175</context>
<context context-type="linenumber">170</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/accounts/accounts-page.html</context>
@ -663,7 +667,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">192</context>
<context context-type="linenumber">186</context>
</context-group>
</trans-unit>
<trans-unit id="452ef1b96854fe05618303ee601f8fed3b866c9f" datatype="html">
@ -674,7 +678,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">203</context>
<context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/resources-page.html</context>
@ -689,11 +693,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">214</context>
<context context-type="linenumber">208</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">271</context>
<context context-type="linenumber">265</context>
</context-group>
</trans-unit>
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
@ -704,42 +708,42 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">260</context>
<context context-type="linenumber">254</context>
</context-group>
</trans-unit>
<trans-unit id="28094f38aac43d3cb6edaf98a281fe443a930b5e" datatype="html">
<source>Me</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">127</context>
<context context-type="linenumber">123</context>
</context-group>
</trans-unit>
<trans-unit id="90d136a4e1f551f5de5340d443e0c95e49e95e1c" datatype="html">
<source>My Ghostfolio</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">183</context>
<context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="6313384ccd7be95272bc2113ee9dada12af79b9b" datatype="html">
<source>About Ghostfolio</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">222</context>
<context context-type="linenumber">216</context>
</context-group>
</trans-unit>
<trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">
<source>Features</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">249</context>
<context context-type="linenumber">243</context>
</context-group>
</trans-unit>
<trans-unit id="d3ad0babadabfa3e3b7f51637651822f3e56a7b1" datatype="html">
<source>Markets</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">277</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/home-market/home-market.html</context>
@ -819,7 +823,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">31,32</context>
<context context-type="linenumber">30,31</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
@ -851,7 +855,7 @@
<source>Sign in</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">292</context>
<context context-type="linenumber">286</context>
</context-group>
<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>
@ -998,7 +1002,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">117,119</context>
<context context-type="linenumber">122,124</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">169,171</context>
</context-group>
</trans-unit>
<trans-unit id="6785405835169448749" datatype="html">
@ -1042,18 +1050,18 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">253</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">261,263</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
<source>Report Data Glitch</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html</context>
<context context-type="linenumber">268</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
@ -1415,7 +1423,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">78,80</context>
<context context-type="linenumber">83,85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1682,7 +1690,7 @@
<source>Add activity</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">8,11</context>
<context context-type="linenumber">8,10</context>
</context-group>
</trans-unit>
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
@ -1696,7 +1704,7 @@
<source>Name, symbol or ISIN</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">39,42</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
@ -1707,7 +1715,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">108,109</context>
<context context-type="linenumber">113,114</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1718,7 +1726,11 @@
<source>Unit Price</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">120,123</context>
<context context-type="linenumber">125,128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">172,175</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1729,11 +1741,11 @@
<source>Fee</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">141,142</context>
<context context-type="linenumber">183,184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">158,159</context>
<context context-type="linenumber">208,209</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
@ -1748,7 +1760,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">167,170</context>
<context context-type="linenumber">217,220</context>
</context-group>
</trans-unit>
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
@ -1767,7 +1779,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">181,183</context>
<context context-type="linenumber">232,234</context>
</context-group>
</trans-unit>
<trans-unit id="2309808536212982229" datatype="html">
@ -1841,14 +1853,14 @@
<source>Continue with Internet Identity</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">41,44</context>
<context context-type="linenumber">40,43</context>
</context-group>
</trans-unit>
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
<source>Continue with Google</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
<context context-type="linenumber">51,56</context>
<context context-type="linenumber">50,55</context>
</context-group>
</trans-unit>
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
@ -1958,7 +1970,7 @@
<source>Do you really want to delete this activity?</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">200</context>
<context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="170f7de02b14690fb9c1999a16926c0044bfd5c1" datatype="html">
@ -2021,7 +2033,7 @@
<source>Get started</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/header/header.component.html</context>
<context context-type="linenumber">300</context>
<context context-type="linenumber">294</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -2091,7 +2103,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">196,198</context>
<context context-type="linenumber">248,250</context>
</context-group>
</trans-unit>
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
@ -2274,7 +2286,7 @@
<source>Filter by account, currency, symbol or type...</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.ts</context>
<context context-type="linenumber">389</context>
<context context-type="linenumber">390</context>
</context-group>
</trans-unit>
<trans-unit id="3d14940af7de691ac27efb67bef3e974cbe3281c" datatype="html">
@ -2411,35 +2423,35 @@
<source>Precious Metal</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">33</context>
<context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="1825829511397926879" datatype="html">
<source>Tag</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
<context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="1983771552391474467" datatype="html">
<source>Equity</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">24</context>
<context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="8432027249343784512" datatype="html">
<source>Real Estate</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
</trans-unit>
<trans-unit id="2893204435511484886" datatype="html">
<source>Cryptocurrency</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">31</context>
</context-group>
</trans-unit>
<trans-unit id="4086606389696938932" datatype="html">
@ -2453,14 +2465,14 @@
<source>Stock</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">35</context>
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="1346519036036997811" datatype="html">
<source>Private Equity</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
</trans-unit>
<trans-unit id="4574987680940794089" datatype="html">
@ -2474,49 +2486,49 @@
<source>Mutual Fund</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">32</context>
<context context-type="linenumber">33</context>
</context-group>
</trans-unit>
<trans-unit id="787798817533231355" datatype="html">
<source>Cash</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
<context context-type="linenumber">23</context>
</context-group>
</trans-unit>
<trans-unit id="8106025670158480144" datatype="html">
<source>Symbol</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="8431989971855844965" datatype="html">
<source>Commodity</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="8977365084844053365" datatype="html">
<source>Bond</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">29</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="9071695492820527473" datatype="html">
<source>ETF</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">32</context>
</context-group>
</trans-unit>
<trans-unit id="6124744839836623630" datatype="html">
<source>Fixed Income</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="4893616715766810081" datatype="html">
@ -2534,14 +2546,14 @@
<source>Emergency Fund</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
<context context-type="linenumber">11</context>
</context-group>
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
<source>Other</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
<context context-type="linenumber">15</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
@ -2552,42 +2564,42 @@
<source>North America</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
<trans-unit id="1413778527796351850" datatype="html">
<source>Africa</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">38</context>
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
<trans-unit id="3228811828827738441" datatype="html">
<source>Oceania</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">42</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="3345512471687795386" datatype="html">
<source>Asia</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">39</context>
<context context-type="linenumber">40</context>
</context-group>
</trans-unit>
<trans-unit id="5957846001261659229" datatype="html">
<source>South America</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">44</context>
</context-group>
</trans-unit>
<trans-unit id="8350109327144196614" datatype="html">
<source>Europe</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">40</context>
<context context-type="linenumber">41</context>
</context-group>
</trans-unit>
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
@ -2683,7 +2695,7 @@
<source>Securities</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
<context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="8763985977445247551" datatype="html">
@ -2764,21 +2776,21 @@
<source>Higher Risk</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
<source>Lower Risk</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">14</context>
</context-group>
</trans-unit>
<trans-unit id="5036857680734170026" datatype="html">
<source>Grant</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">11</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="7027401708987643293" datatype="html">
@ -2792,14 +2804,14 @@
<source>Satellite</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">16</context>
<context context-type="linenumber">17</context>
</context-group>
</trans-unit>
<trans-unit id="9219851060664514927" datatype="html">
<source>Retirement Provision</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
<context context-type="linenumber">16</context>
</context-group>
</trans-unit>
<trans-unit id="d82473cef3cd2258eab20223ffcdd5af0c0025cc" datatype="html">
@ -2841,25 +2853,25 @@
<source> For ambitious investors who need the full picture of their financial assets. </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">224,227</context>
<context context-type="linenumber">215,218</context>
</context-group>
</trans-unit>
<trans-unit id="3020849bc1c622a2c4bc1168afae093d44024fa2" datatype="html">
<source>Free</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">112</context>
<context context-type="linenumber">119</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">194</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="390f78d3224ba980143b63c21ca200b8ffa70683" datatype="html">
<source> Upgrade Plan </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">327,329</context>
<context context-type="linenumber">325,327</context>
</context-group>
</trans-unit>
<trans-unit id="435445e728dcf7fdf68fbae0e55e83f61591ac87" datatype="html">
@ -2870,18 +2882,18 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">145</context>
<context context-type="linenumber">152</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">234</context>
<context context-type="linenumber">225</context>
</context-group>
</trans-unit>
<trans-unit id="4a49b82a8921f43ccdee7943c2cc3c74395081b8" datatype="html">
<source>Self-hosted, update manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">111</context>
<context context-type="linenumber">118</context>
</context-group>
</trans-unit>
<trans-unit id="5472874dceac367df728fadcbb0757a3477935dc" datatype="html">
@ -2903,7 +2915,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">276</context>
<context context-type="linenumber">267</context>
</context-group>
</trans-unit>
<trans-unit id="60d7aee1c199a9995a318cfce24cbccbcfb52863" datatype="html">
@ -2914,11 +2926,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">159</context>
<context context-type="linenumber">166</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">248</context>
<context context-type="linenumber">239</context>
</context-group>
</trans-unit>
<trans-unit id="6dcab4069ec74eb21b38bd9f9678dc957c99618c" datatype="html">
@ -2940,7 +2952,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">269</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="897e322427107efb4a101afcc9641f0e81ce9643" datatype="html">
@ -2951,11 +2963,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">152</context>
<context context-type="linenumber">159</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">241</context>
<context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="9acb9343578075b93d3276a60f2a0bc8f89cccd2" datatype="html">
@ -2969,21 +2981,21 @@
<source> For new investors who are just getting started with trading. </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">136,138</context>
<context context-type="linenumber">143,145</context>
</context-group>
</trans-unit>
<trans-unit id="9fc169f3af45f638d4b304b828b640514b1d017c" datatype="html">
<source>Its free.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">344</context>
<context context-type="linenumber">342</context>
</context-group>
</trans-unit>
<trans-unit id="a9eaad1a5cb1b7a8d154ecb75fc613e3bd5adbf3" datatype="html">
<source>One-time payment, no auto-renewal.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">331</context>
<context context-type="linenumber">329</context>
</context-group>
</trans-unit>
<trans-unit id="ae3ddc340195a1b9564574fd757c0cd1ab5cd765" datatype="html">
@ -2998,14 +3010,14 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">297</context>
<context context-type="linenumber">288</context>
</context-group>
</trans-unit>
<trans-unit id="c3b1dd9b4529bd13e214d24584f4bc4fa411c106" datatype="html">
<source> Get Started </source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">341,343</context>
<context context-type="linenumber">339,341</context>
</context-group>
</trans-unit>
<trans-unit id="cb10143b41a58e68b0e5e8de3ab8aeb570fdaf88" datatype="html">
@ -3020,7 +3032,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">255</context>
<context context-type="linenumber">246</context>
</context-group>
</trans-unit>
<trans-unit id="eb075d0450deb6f381616f7da4b9244ced843053" datatype="html">
@ -3034,11 +3046,11 @@
<source>Fully managed Ghostfolio cloud offering.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">193</context>
<context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">301</context>
<context context-type="linenumber">299</context>
</context-group>
</trans-unit>
<trans-unit id="310aea3a64b9279726e047f196c097f4f3268d09" datatype="html">
@ -3056,7 +3068,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">253</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -3070,7 +3082,7 @@
<source>Switch to Ghostfolio Premium easily</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
<context context-type="linenumber">9</context>
</context-group>
</trans-unit>
<trans-unit id="4ed0cb02583e008888e614de4032f41d8abfc37e" datatype="html">
@ -3081,14 +3093,57 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">283</context>
<context context-type="linenumber">173</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">274</context>
</context-group>
</trans-unit>
<trans-unit id="921762941409901000" datatype="html">
<source>Switch to Ghostfolio Open Source easily</source>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">9</context>
<context context-type="linenumber">10</context>
</context-group>
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="391683dbab6ea339b23c8ff57a9cd09dae19d2d2" datatype="html">
<source>Community Support</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="fdfee1a7c44bc6d014323bf1f5b3d7fab6e1fb47" datatype="html">
<source>Email and Chat Support</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">295</context>
</context-group>
</trans-unit>
<trans-unit id="b74406fd93207c23bb840732ad2760ce0efaa2c5" datatype="html">
<source>Market data provided by</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
<source>Oops! Could not get the historical exchange rate from</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">147,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">199,201</context>
</context-group>
</trans-unit>
</body>

View File

@ -227,7 +227,7 @@ body {
}
ngx-skeleton-loader {
.loader {
.skeleton-loader {
background-color: #323232;
}
}
@ -256,10 +256,27 @@ body {
}
}
.mat-mdc-card {
--mdc-elevated-card-container-color: var(--dark-background);
}
.mat-mdc-fab {
&.mat-primary {
--mdc-fab-icon-color: rgba(var(--dark-primary-text));
--mat-mdc-fab-color: rgba(var(--dark-primary-text));
}
}
.mat-paginator {
background-color: rgba(var(--palette-foreground-base-dark), 0.02);
}
.mdc-button {
&.mat-primary {
--mdc-filled-button-label-text-color: rgba(var(--dark-primary-text));
}
}
.svgMap-tooltip {
background: var(--dark-background);
@ -302,7 +319,7 @@ ngx-skeleton-loader {
line-height: 0;
outline: 0;
.loader {
.skeleton-loader {
display: flex;
margin: 0 !important;
outline: 0;
@ -336,6 +353,10 @@ ngx-skeleton-loader {
visibility: hidden;
}
.line-height-1 {
line-height: 1;
}
.lead {
font-weight: unset;
}
@ -394,6 +415,24 @@ ngx-skeleton-loader {
}
}
.mat-mdc-fab {
color: var(--mat-mdc-fab-color, inherit) !important;
&.mat-primary {
--mdc-fab-icon-color: rgba(var(--light-primary-text));
--mat-mdc-fab-color: rgba(var(--light-primary-text));
}
}
.mat-mdc-menu-panel {
.mat-mdc-menu-item {
.mdc-list-item__primary-text {
align-items: center;
display: flex;
}
}
}
.mat-paginator {
background-color: rgba(var(--palette-foreground-base-light), 0.02);
@ -402,6 +441,12 @@ ngx-skeleton-loader {
}
}
.mdc-button {
&.mat-primary {
--mdc-filled-button-label-text-color: rgba(var(--light-primary-text));
}
}
.no-min-width {
min-width: unset !important;
}

View File

@ -69,6 +69,8 @@ $gf-secondary: (
)
);
$gf-typography: mat.define-typography-config();
@include mat.core();
@include mat.legacy-core();
@ -80,7 +82,7 @@ $gf-theme-default: mat.define-light-theme(
accent: mat.define-palette($gf-secondary, 500, 900, A100)
),
density: 0,
typography: mat.define-typography-config()
typography: $gf-typography
)
);
@include mat.all-component-themes($gf-theme-default);
@ -94,7 +96,7 @@ $gf-theme-dark: mat.define-dark-theme(
accent: mat.define-palette($gf-secondary, 500, 900, A100)
),
density: 0,
typography: mat.define-typography-config()
typography: $gf-typography
)
);
.is-dark-theme {
@ -107,4 +109,6 @@ $gf-theme-dark: mat.define-dark-theme(
--gf-theme-primary-500-rgb: 0, 187, 255;
--gf-theme-secondary-500: #3686cf;
--gf-theme-secondary-500-rgb: 78, 208, 94;
--mdc-typography-button-letter-spacing: normal;
}

View File

@ -2,8 +2,6 @@ import { DataSource } from '@prisma/client';
import { JobOptions, JobStatus } from 'bull';
import ms from 'ms';
export const DEMO_USER_ID = '9b112b4d-3b7d-4bad-9bdd-3b0f7b4dac2f';
export const ghostfolioPrefix = 'GF';
export const ghostfolioScraperApiSymbolPrefix = `_${ghostfolioPrefix}_`;
export const ghostfolioCashSymbol = `${ghostfolioScraperApiSymbolPrefix}CASH`;
@ -69,12 +67,17 @@ export const GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS: JobOptions = {
}
};
export const HEADER_KEY_IMPERSONATION = 'Impersonation-Id';
export const HEADER_KEY_TIMEZONE = 'Timezone';
export const HEADER_KEY_TOKEN = 'Authorization';
export const MAX_CHART_ITEMS = 365;
export const PROPERTY_BENCHMARKS = 'BENCHMARKS';
export const PROPERTY_COUNTRIES_OF_SUBSCRIBERS = 'COUNTRIES_OF_SUBSCRIBERS';
export const PROPERTY_COUPONS = 'COUPONS';
export const PROPERTY_CURRENCIES = 'CURRENCIES';
export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS';

View File

@ -0,0 +1,4 @@
export interface DataProviderInfo {
name: string;
url: string;
}

View File

@ -10,6 +10,7 @@ import {
import { BenchmarkMarketDataDetails } from './benchmark-market-data-details.interface';
import { Benchmark } from './benchmark.interface';
import { Coupon } from './coupon.interface';
import { DataProviderInfo } from './data-provider-info.interface';
import { EnhancedSymbolProfile } from './enhanced-symbol-profile.interface';
import { Export } from './export.interface';
import { FilterGroup } from './filter-group.interface';
@ -54,6 +55,7 @@ export {
BenchmarkMarketDataDetails,
BenchmarkResponse,
Coupon,
DataProviderInfo,
EnhancedSymbolProfile,
Export,
Filter,

View File

@ -1,426 +0,0 @@
export const timezoneCitiesToCountries = {
Abidjan: 'CI',
Accra: 'GH',
Adak: 'US',
Addis_Ababa: 'ET',
Adelaide: 'AU',
Aden: 'YE',
Algiers: 'DZ',
Almaty: 'KZ',
Amman: 'JO',
Amsterdam: 'NL',
Anadyr: 'RU',
Anchorage: 'US',
Andorra: 'AD',
Anguilla: 'AI',
Antananarivo: 'MG',
Antigua: 'AG',
Apia: 'WS',
Aqtau: 'KZ',
Aqtobe: 'KZ',
Araguaina: 'BR',
Aruba: 'AW',
Ashgabat: 'TM',
Asmara: 'ER',
Astrakhan: 'RU',
Asuncion: 'PY',
Athens: 'GR',
Atikokan: 'CA',
Atyrau: 'KZ',
Auckland: 'NZ',
Azores: 'PT',
Baghdad: 'IQ',
Bahia: 'BR',
Bahia_Banderas: 'MX',
Bahrain: 'BH',
Baku: 'AZ',
Bamako: 'ML',
Bangkok: 'TH',
Bangui: 'CF',
Banjul: 'GM',
Barbados: 'BB',
Barnaul: 'RU',
Beirut: 'LB',
Belem: 'BR',
Belgrade: 'RS',
Belize: 'BZ',
Berlin: 'DE',
Bermuda: 'BM',
Beulah: 'US',
Bishkek: 'KG',
Bissau: 'GW',
'Blanc-Sablon': 'CA',
Blantyre: 'MW',
Boa_Vista: 'BR',
Bogota: 'CO',
Boise: 'US',
Bougainville: 'PG',
Bratislava: 'SK',
Brazzaville: 'CG',
Brisbane: 'AU',
Broken_Hill: 'AU',
Brunei: 'BN',
Brussels: 'BE',
Bucharest: 'RO',
Budapest: 'HU',
Buenos_Aires: 'AR',
Bujumbura: 'BI',
Busingen: 'DE',
Cairo: 'EG',
Cambridge_Bay: 'CA',
Campo_Grande: 'BR',
Canary: 'ES',
Cancun: 'MX',
Cape_Verde: 'CV',
Caracas: 'VE',
Casablanca: 'MA',
Casey: 'AQ',
Catamarca: 'AR',
Cayenne: 'GF',
Cayman: 'KY',
Center: 'US',
Ceuta: 'ES',
Chagos: 'IO',
Chatham: 'NZ',
Chicago: 'US',
Chihuahua: 'MX',
Chisinau: 'MD',
Chita: 'RU',
Choibalsan: 'MN',
Christmas: 'CX',
Chuuk: 'FM',
Cocos: 'CC',
Colombo: 'LK',
Comoro: 'KM',
Conakry: 'GN',
Copenhagen: 'DK',
Cordoba: 'AR',
Costa_Rica: 'CR',
Creston: 'CA',
Cuiaba: 'BR',
Curacao: 'CW',
Dakar: 'SN',
Damascus: 'SY',
Danmarkshavn: 'GL',
Dar_es_Salaam: 'TZ',
Darwin: 'AU',
Davis: 'AQ',
Dawson: 'CA',
Dawson_Creek: 'CA',
Denver: 'US',
Detroit: 'US',
Dhaka: 'BD',
Dili: 'TL',
Djibouti: 'DJ',
Dominica: 'DM',
Douala: 'CM',
Dubai: 'AE',
Dublin: 'IE',
DumontDUrville: 'AQ',
Dushanbe: 'TJ',
Easter: 'CL',
Edmonton: 'CA',
Efate: 'VU',
Eirunepe: 'BR',
El_Aaiun: 'EH',
El_Salvador: 'SV',
Eucla: 'AU',
Fakaofo: 'TK',
Famagusta: 'CY',
Faroe: 'FO',
Fiji: 'FJ',
Fort_Nelson: 'CA',
Fortaleza: 'BR',
Freetown: 'SL',
Funafuti: 'TV',
Gaborone: 'BW',
Galapagos: 'EC',
Gambier: 'PF',
Gaza: 'PS',
Gibraltar: 'GI',
Glace_Bay: 'CA',
Goose_Bay: 'CA',
Grand_Turk: 'TC',
Grenada: 'GD',
Guadalcanal: 'SB',
Guadeloupe: 'GP',
Guam: 'GU',
Guatemala: 'GT',
Guayaquil: 'EC',
Guernsey: 'GG',
Guyana: 'GY',
Halifax: 'CA',
Harare: 'ZW',
Havana: 'CU',
Hebron: 'PS',
Helsinki: 'FI',
Hermosillo: 'MX',
Ho_Chi_Minh: 'VN',
Hobart: 'AU',
Hong_Kong: 'HK',
Honolulu: 'US',
Hovd: 'MN',
Indianapolis: 'US',
Inuvik: 'CA',
Iqaluit: 'CA',
Irkutsk: 'RU',
Isle_of_Man: 'IM',
Istanbul: 'TR',
Jakarta: 'ID',
Jamaica: 'JM',
Jayapura: 'ID',
Jersey: 'JE',
Jerusalem: 'IL',
Johannesburg: 'ZA',
Juba: 'SS',
Jujuy: 'AR',
Juneau: 'US',
Kabul: 'AF',
Kaliningrad: 'RU',
Kamchatka: 'RU',
Kampala: 'UG',
Kanton: 'KI',
Karachi: 'PK',
Kathmandu: 'NP',
Kerguelen: 'TF',
Khandyga: 'RU',
Khartoum: 'SD',
Kiev: 'UA',
Kigali: 'RW',
Kinshasa: 'CD',
Kiritimati: 'KI',
Kirov: 'RU',
Knox: 'US',
Kolkata: 'IN',
Kosrae: 'FM',
Kralendijk: 'NL',
Krasnoyarsk: 'RU',
Kuala_Lumpur: 'MY',
Kuching: 'MY',
Kuwait: 'KW',
Kwajalein: 'MH',
La_Paz: 'BO',
La_Rioja: 'AR',
Lagos: 'NG',
Libreville: 'GA',
Lima: 'PE',
Lindeman: 'AU',
Lisbon: 'PT',
Ljubljana: 'SI',
Lome: 'TG',
London: 'GB',
Longyearbyen: 'SJ',
Lord_Howe: 'AU',
Los_Angeles: 'US',
Louisville: 'US',
Lower_Princes: 'SX',
Luanda: 'AO',
Lubumbashi: 'CD',
Lusaka: 'ZM',
Luxembourg: 'LU',
Macau: 'MO',
Maceio: 'BR',
Macquarie: 'AU',
Madeira: 'PT',
Madrid: 'ES',
Magadan: 'RU',
Mahe: 'SC',
Majuro: 'MH',
Makassar: 'ID',
Malabo: 'GQ',
Maldives: 'MV',
Malta: 'MT',
Managua: 'NI',
Manaus: 'BR',
Manila: 'PH',
Maputo: 'MZ',
Marengo: 'US',
Mariehamn: 'AX',
Marigot: 'MF',
Marquesas: 'PF',
Martinique: 'MQ',
Maseru: 'LS',
Matamoros: 'MX',
Mauritius: 'MU',
Mawson: 'AQ',
Mayotte: 'YT',
Mazatlan: 'MX',
Mbabane: 'SZ',
McMurdo: 'AQ',
Melbourne: 'AU',
Mendoza: 'AR',
Menominee: 'US',
Merida: 'MX',
Metlakatla: 'US',
Mexico_City: 'MX',
Midway: 'UM',
Minsk: 'BY',
Miquelon: 'PM',
Mogadishu: 'SO',
Monaco: 'MC',
Moncton: 'CA',
Monrovia: 'LR',
Monterrey: 'MX',
Montevideo: 'UY',
Monticello: 'US',
Montserrat: 'MS',
Moscow: 'RU',
Muscat: 'OM',
Nairobi: 'KE',
Nassau: 'BS',
Nauru: 'NR',
Ndjamena: 'TD',
New_Salem: 'US',
New_York: 'US',
Niamey: 'NE',
Nicosia: 'CY',
Nipigon: 'CA',
Niue: 'NU',
Nome: 'US',
Norfolk: 'NF',
Noronha: 'BR',
Nouakchott: 'MR',
Noumea: 'NC',
Novokuznetsk: 'RU',
Novosibirsk: 'RU',
Nuuk: 'GL',
Ojinaga: 'MX',
Omsk: 'RU',
Oral: 'KZ',
Oslo: 'NO',
Ouagadougou: 'BF',
Pago_Pago: 'AS',
Palau: 'PW',
Palmer: 'AQ',
Panama: 'PA',
Pangnirtung: 'CA',
Paramaribo: 'SR',
Paris: 'FR',
Perth: 'AU',
Petersburg: 'US',
Phnom_Penh: 'KH',
Phoenix: 'US',
Pitcairn: 'PN',
Podgorica: 'ME',
Pohnpei: 'FM',
Pontianak: 'ID',
'Port-au-Prince': 'HT',
Port_Moresby: 'PG',
Port_of_Spain: 'TT',
'Porto-Novo': 'BJ',
Porto_Velho: 'BR',
Prague: 'CZ',
Puerto_Rico: 'PR',
Punta_Arenas: 'CL',
Pyongyang: 'KP',
Qatar: 'QA',
Qostanay: 'KZ',
Qyzylorda: 'KZ',
Rainy_River: 'CA',
Rankin_Inlet: 'CA',
Rarotonga: 'CK',
Recife: 'BR',
Regina: 'CA',
Resolute: 'CA',
Reunion: 'RE',
Reykjavik: 'IS',
Riga: 'LV',
Rio_Branco: 'BR',
Rio_Gallegos: 'AR',
Riyadh: 'SA',
Rome: 'IT',
Rothera: 'AQ',
Saipan: 'MP',
Sakhalin: 'RU',
Salta: 'AR',
Samara: 'RU',
Samarkand: 'UZ',
San_Juan: 'AR',
San_Luis: 'AR',
San_Marino: 'SM',
Santarem: 'BR',
Santiago: 'CL',
Santo_Domingo: 'DO',
Sao_Paulo: 'BR',
Sao_Tome: 'ST',
Sarajevo: 'BA',
Saratov: 'RU',
Scoresbysund: 'GL',
Seoul: 'KR',
Shanghai: 'CN',
Simferopol: 'RU',
Singapore: 'SG',
Sitka: 'US',
Skopje: 'MK',
Sofia: 'BG',
South_Georgia: 'GS',
Srednekolymsk: 'RU',
St_Barthelemy: 'BL',
St_Helena: 'SH',
St_Johns: 'CA',
St_Kitts: 'KN',
St_Lucia: 'LC',
St_Thomas: 'VI',
St_Vincent: 'VC',
Stanley: 'FK',
Stockholm: 'SE',
Swift_Current: 'CA',
Sydney: 'AU',
Syowa: 'AQ',
Tahiti: 'PF',
Taipei: 'TW',
Tallinn: 'EE',
Tarawa: 'KI',
Tashkent: 'UZ',
Tbilisi: 'GE',
Tegucigalpa: 'HN',
Tehran: 'IR',
Tell_City: 'US',
Thimphu: 'BT',
Thule: 'GL',
Thunder_Bay: 'CA',
Tijuana: 'MX',
Tirane: 'AL',
Tokyo: 'JP',
Tomsk: 'RU',
Tongatapu: 'TO',
Toronto: 'CA',
Tortola: 'VI (UK)',
Tripoli: 'LY',
Troll: 'AQ',
Tucuman: 'AR',
Tunis: 'TN',
Ulaanbaatar: 'MN',
Ulyanovsk: 'RU',
Urumqi: 'CN',
Ushuaia: 'AR',
'Ust-Nera': 'RU',
Uzhgorod: 'UA',
Vaduz: 'LI',
Vancouver: 'CA',
Vatican: 'VA',
Vevay: 'US',
Vienna: 'AT',
Vientiane: 'LA',
Vilnius: 'LT',
Vincennes: 'US',
Vladivostok: 'RU',
Volgograd: 'RU',
Vostok: 'AQ',
Wake: 'UM',
Wallis: 'WF',
Warsaw: 'PL',
Whitehorse: 'CA',
Winamac: 'US',
Windhoek: 'NA',
Winnipeg: 'CA',
Yakutat: 'US',
Yakutsk: 'RU',
Yangon: 'MM',
Yekaterinburg: 'RU',
Yellowknife: 'CA',
Yerevan: 'AM',
Zagreb: 'HR',
Zaporozhye: 'UA',
Zurich: 'CH'
};

View File

@ -10,7 +10,7 @@ module.exports = {
'../src/lib/**/*.stories.mdx',
'../src/lib/**/*.stories.@(js|jsx|ts|tsx)'
],
addons: [...rootMain.addons],
addons: ['@storybook/addon-essentials', ...rootMain.addons],
webpackFinal: async (config, { configType }) => {
// apply any global webpack configs that might have been specified in .storybook/main.js
if (rootMain.webpackFinal) {

View File

@ -164,7 +164,7 @@
>
<ng-container i18n>Name</ng-container>
</th>
<td *matCellDef="let element" class="px-1" mat-cell>
<td *matCellDef="let element" class="line-height-1 px-1" mat-cell>
<div class="d-flex align-items-center">
<div>
<span class="text-truncate">{{ element.SymbolProfile?.name }}</span>

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