diff --git a/CHANGELOG.md b/CHANGELOG.md index c3cf969b8..b1f881dc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,16 +11,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a chart to the account detail dialog -## Unreleased +## 2.12.0 - 2023-10-17 + +### Added + +- Added the endpoint `GET api/v1/account/:id/balances` which provides historical cash balances +- Added support to search for an asset profile by `isin`, `name` and `symbol` as an administrator (experimental) +- Added support for creating asset profiles with `MANUAL` data source + +### Changed + +- Changed the checkboxes to slide toggles in the user settings of the user account page +- Extended the `copy-assets` `Nx` target to copy the locales to the server’s assets +- Upgraded `@simplewebauthn/browser` and `@simplewebauthn/server` from version `5.2.1` to `8.3` + +### Fixed + +- Displayed the transfer cash balance button based on a permission +- Fixed the biometric authentication +- Fixed the query to get asset profiles that match both the `dataSource` and `symbol` values + +## 2.11.0 - 2023-10-14 ### Added +- Added support to transfer a part of the cash balance from one to another account - Extended the markets overview by benchmarks (date of last all time high) +- Added support to import historical market data in the admin control panel ### Changed - Harmonized the style of the create button on the page for granting and revoking public access to share the portfolio - Improved the language localization for German (`de`) +- Upgraded `prisma` from version `5.3.1` to `5.4.2` + +### Fixed + +- Fixed `FEE` and `INTEREST` types in the activities import of `csv` files +- Fixed the displayed currency of the cash balance in the create or update account dialog ## 2.10.0 - 2023-10-09 @@ -124,13 +152,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Improved the preselected currency based on the account's currency in the create or edit activity dialog +- Improved the preselected currency based on the account’s currency in the create or edit activity dialog - Unlocked the experimental features setting for all users - Upgraded `prisma` from version `5.2.0` to `5.3.1` ### Fixed -- Fixed a memory leak related to the server's timezone (behind UTC) in the data gathering +- Fixed a memory leak related to the server’s timezone (behind UTC) in the data gathering ## 2.3.0 - 2023-09-17 @@ -281,7 +309,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Optimized the activities import by allowing a different currency than the asset's official one +- Optimized the activities import by allowing a different currency than the asset’s official one - Added a timeout to the _EOD Historical Data_ requests - Migrated the requests from `bent` to `got` in the _EOD Historical Data_ service @@ -788,7 +816,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Persisted today's market data continuously +- Persisted today’s market data continuously ### Fixed @@ -1022,7 +1050,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Filtered activities with type `ITEM` from search results -- Considered the user's language in the _Stripe_ checkout +- 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` @@ -2696,7 +2724,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Moved the countries and sectors charts in the position detail dialog -- Distinguished today's data point of historical data in the admin control panel +- Distinguished today’s data point of historical data in the admin control panel - Restructured the server modules ### Fixed diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index bf15d998f..4666e5084 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -1,8 +1,12 @@ import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response.interceptor'; +import { AccountBalanceService } from '@ghostfolio/api/services/account-balance/account-balance.service'; import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; -import { Accounts } from '@ghostfolio/common/interfaces'; +import { + AccountBalancesResponse, + Accounts +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import type { AccountWithValue, @@ -29,11 +33,13 @@ import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { AccountService } from './account.service'; import { CreateAccountDto } from './create-account.dto'; +import { TransferBalanceDto } from './transfer-balance.dto'; import { UpdateAccountDto } from './update-account.dto'; @Controller('account') export class AccountController { public constructor( + private readonly accountBalanceService: AccountBalanceService, private readonly accountService: AccountService, private readonly impersonationService: ImpersonationService, private readonly portfolioService: PortfolioService, @@ -115,6 +121,18 @@ export class AccountController { return accountsWithAggregations.accounts[0]; } + @Get(':id/balances') + @UseGuards(AuthGuard('jwt')) + @UseInterceptors(RedactValuesInResponseInterceptor) + public async getAccountBalancesById( + @Param('id') id: string + ): Promise { + return this.accountBalanceService.getAccountBalances({ + accountId: id, + userId: this.request.user.id + }); + } + @Post() @UseGuards(AuthGuard('jwt')) public async createAccount( @@ -154,6 +172,58 @@ export class AccountController { } } + @Post('transfer-balance') + @UseGuards(AuthGuard('jwt')) + public async transferAccountBalance( + @Body() { accountIdFrom, accountIdTo, balance }: TransferBalanceDto + ) { + if ( + !hasPermission(this.request.user.permissions, permissions.updateAccount) + ) { + throw new HttpException( + getReasonPhrase(StatusCodes.FORBIDDEN), + StatusCodes.FORBIDDEN + ); + } + + const accountsOfUser = await this.accountService.getAccounts( + this.request.user.id + ); + + const currentAccountIds = accountsOfUser.map(({ id }) => { + return id; + }); + + if ( + ![accountIdFrom, accountIdTo].every((accountId) => { + return currentAccountIds.includes(accountId); + }) + ) { + throw new HttpException( + getReasonPhrase(StatusCodes.NOT_FOUND), + StatusCodes.NOT_FOUND + ); + } + + const { currency } = accountsOfUser.find(({ id }) => { + return id === accountIdFrom; + }); + + await this.accountService.updateAccountBalance({ + currency, + accountId: accountIdFrom, + amount: -balance, + userId: this.request.user.id + }); + + await this.accountService.updateAccountBalance({ + currency, + accountId: accountIdTo, + amount: balance, + userId: this.request.user.id + }); + } + @Put(':id') @UseGuards(AuthGuard('jwt')) public async update(@Param('id') id: string, @Body() data: UpdateAccountDto) { diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts index dc049108c..bc6abcc7a 100644 --- a/apps/api/src/app/account/account.service.ts +++ b/apps/api/src/app/account/account.service.ts @@ -109,7 +109,7 @@ export class AccountService { }); } - public async getAccounts(aUserId: string) { + public async getAccounts(aUserId: string): Promise { const accounts = await this.accounts({ include: { Order: true, Platform: true }, orderBy: { name: 'asc' }, @@ -218,13 +218,13 @@ export class AccountService { accountId, amount, currency, - date, + date = new Date(), userId }: { accountId: string; amount: number; currency: string; - date: Date; + date?: Date; userId: string; }) { const { balance, currency: currencyOfAccount } = await this.account({ diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 67e106ff8..a19b17d4a 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -1,9 +1,9 @@ import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor'; +import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { DataGatheringService } from '@ghostfolio/api/services/data-gathering/data-gathering.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { PropertyDto } from '@ghostfolio/api/services/property/property.dto'; import { - DEFAULT_PAGE_SIZE, GATHER_ASSET_PROFILE_PROCESS, GATHER_ASSET_PROFILE_PROCESS_OPTIONS } from '@ghostfolio/common/config'; @@ -12,8 +12,7 @@ import { AdminData, AdminMarketData, AdminMarketDataDetails, - EnhancedSymbolProfile, - Filter + EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import type { @@ -43,12 +42,14 @@ import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { AdminService } from './admin.service'; import { UpdateAssetProfileDto } from './update-asset-profile.dto'; +import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto'; import { UpdateMarketDataDto } from './update-market-data.dto'; @Controller('admin') export class AdminController { public constructor( private readonly adminService: AdminService, + private readonly apiService: ApiService, private readonly dataGatheringService: DataGatheringService, private readonly marketDataService: MarketDataService, @Inject(REQUEST) private readonly request: RequestWithUser @@ -254,6 +255,7 @@ export class AdminController { public async getMarketData( @Query('assetSubClasses') filterByAssetSubClasses?: string, @Query('presetId') presetId?: MarketDataPreset, + @Query('query') filterBySearchQuery?: string, @Query('skip') skip?: number, @Query('sortColumn') sortColumn?: string, @Query('sortDirection') sortDirection?: Prisma.SortOrder, @@ -271,16 +273,10 @@ export class AdminController { ); } - const assetSubClasses = filterByAssetSubClasses?.split(',') ?? []; - - const filters: Filter[] = [ - ...assetSubClasses.map((assetSubClass) => { - return { - id: assetSubClass, - type: 'ASSET_SUB_CLASS' - }; - }) - ]; + const filters = this.apiService.buildFiltersFromQueryParams({ + filterByAssetSubClasses, + filterBySearchQuery + }); return this.adminService.getMarketData({ filters, @@ -313,6 +309,43 @@ export class AdminController { return this.adminService.getMarketDataBySymbol({ dataSource, symbol }); } + @Post('market-data/:dataSource/:symbol') + @UseGuards(AuthGuard('jwt')) + public async updateMarketData( + @Body() data: UpdateBulkMarketDataDto, + @Param('dataSource') dataSource: DataSource, + @Param('symbol') symbol: string + ) { + if ( + !hasPermission( + this.request.user.permissions, + permissions.accessAdminControl + ) + ) { + throw new HttpException( + getReasonPhrase(StatusCodes.FORBIDDEN), + StatusCodes.FORBIDDEN + ); + } + + const dataBulkUpdate: Prisma.MarketDataUpdateInput[] = data.marketData.map( + ({ date, marketPrice }) => ({ + dataSource, + date, + marketPrice, + symbol, + state: 'CLOSE' + }) + ); + + return this.marketDataService.updateMany({ + data: dataBulkUpdate + }); + } + + /** + * @deprecated + */ @Put('market-data/:dataSource/:symbol/:dateString') @UseGuards(AuthGuard('jwt')) public async update( @@ -365,8 +398,11 @@ export class AdminController { StatusCodes.FORBIDDEN ); } - - return this.adminService.addAssetProfile({ dataSource, symbol }); + return this.adminService.addAssetProfile({ + dataSource, + symbol, + currency: this.request.user.Settings.settings.baseCurrency + }); } @Delete('profile-data/:dataSource/:symbol') diff --git a/apps/api/src/app/admin/admin.module.ts b/apps/api/src/app/admin/admin.module.ts index 500af69db..079af87fa 100644 --- a/apps/api/src/app/admin/admin.module.ts +++ b/apps/api/src/app/admin/admin.module.ts @@ -1,4 +1,5 @@ import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module'; +import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { DataGatheringModule } from '@ghostfolio/api/services/data-gathering/data-gathering.module'; import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; @@ -15,6 +16,7 @@ import { QueueModule } from './queue/queue.module'; @Module({ imports: [ + ApiModule, ConfigurationModule, DataGatheringModule, DataProviderModule, diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index dd9e3f9ce..84ae5934c 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -41,10 +41,19 @@ export class AdminService { ) {} public async addAssetProfile({ + currency, dataSource, symbol - }: UniqueAsset): Promise { + }: UniqueAsset & { currency?: string }): Promise { try { + if (dataSource === 'MANUAL') { + return this.symbolProfileService.add({ + currency, + dataSource, + symbol + }); + } + const assetProfiles = await this.dataProviderService.getAssetProfiles([ { dataSource, symbol } ]); @@ -131,10 +140,14 @@ export class AdminService { filters = [{ id: 'ETF', type: 'ASSET_SUB_CLASS' }]; } + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + const { ASSET_SUB_CLASS: filtersByAssetSubClass } = groupBy( filters, - (filter) => { - return filter.type; + ({ type }) => { + return type; } ); @@ -147,6 +160,14 @@ export class AdminService { where.assetSubClass = AssetSubClass[filtersByAssetSubClass[0].id]; } + if (searchQuery) { + where.OR = [ + { isin: { mode: 'insensitive', startsWith: searchQuery } }, + { name: { mode: 'insensitive', startsWith: searchQuery } }, + { symbol: { mode: 'insensitive', startsWith: searchQuery } } + ]; + } + if (sortColumn) { orderBy = [{ [sortColumn]: sortDirection }]; @@ -173,7 +194,9 @@ export class AdminService { assetSubClass: true, comment: true, countries: true, + currency: true, dataSource: true, + name: true, Order: { orderBy: [{ date: 'asc' }], select: { date: true }, @@ -194,7 +217,9 @@ export class AdminService { assetSubClass, comment, countries, + currency, dataSource, + name, Order, sectors, symbol @@ -213,8 +238,10 @@ export class AdminService { assetClass, assetSubClass, comment, + currency, countriesCount, dataSource, + name, symbol, marketDataItemCount, sectorsCount, @@ -341,6 +368,8 @@ export class AdminService { symbol, assetClass: 'CASH', countriesCount: 0, + currency: symbol.replace(DEFAULT_CURRENCY, ''), + name: symbol, sectorsCount: 0 }; }); diff --git a/apps/api/src/app/admin/update-bulk-market-data.dto.ts b/apps/api/src/app/admin/update-bulk-market-data.dto.ts new file mode 100644 index 000000000..5177263a6 --- /dev/null +++ b/apps/api/src/app/admin/update-bulk-market-data.dto.ts @@ -0,0 +1,11 @@ +import { Type } from 'class-transformer'; +import { ArrayNotEmpty, IsArray, isNotEmptyObject } from 'class-validator'; + +import { UpdateMarketDataDto } from './update-market-data.dto'; + +export class UpdateBulkMarketDataDto { + @ArrayNotEmpty() + @IsArray() + @Type(() => UpdateMarketDataDto) + marketData: UpdateMarketDataDto[]; +} diff --git a/apps/api/src/app/admin/update-market-data.dto.ts b/apps/api/src/app/admin/update-market-data.dto.ts index 79779a318..c0463de31 100644 --- a/apps/api/src/app/admin/update-market-data.dto.ts +++ b/apps/api/src/app/admin/update-market-data.dto.ts @@ -1,6 +1,10 @@ -import { IsNumber } from 'class-validator'; +import { IsDate, IsNumber, IsOptional } from 'class-validator'; export class UpdateMarketDataDto { + @IsDate() + @IsOptional() + date?: Date; + @IsNumber() marketPrice: number; } diff --git a/apps/api/src/app/auth/web-auth.service.ts b/apps/api/src/app/auth/web-auth.service.ts index 471b77709..8d5c91a74 100644 --- a/apps/api/src/app/auth/web-auth.service.ts +++ b/apps/api/src/app/auth/web-auth.service.ts @@ -64,7 +64,7 @@ export class WebAuthService { } }; - const options = generateRegistrationOptions(opts); + const options = await generateRegistrationOptions(opts); await this.userService.updateUser({ data: { @@ -88,10 +88,16 @@ export class WebAuthService { let verification: VerifiedRegistrationResponse; try { const opts: VerifyRegistrationResponseOpts = { - credential, expectedChallenge, expectedOrigin: this.expectedOrigin, - expectedRPID: this.rpID + expectedRPID: this.rpID, + response: { + clientExtensionResults: credential.clientExtensionResults, + id: credential.id, + rawId: credential.rawId, + response: credential.response, + type: 'public-key' + } }; verification = await verifyRegistrationResponse(opts); } catch (error) { @@ -117,8 +123,8 @@ export class WebAuthService { */ existingDevice = await this.deviceService.createAuthDevice({ counter, - credentialPublicKey, - credentialId: credentialID, + credentialId: Buffer.from(credentialID), + credentialPublicKey: Buffer.from(credentialPublicKey), User: { connect: { id: user.id } } }); } @@ -152,7 +158,7 @@ export class WebAuthService { userVerification: 'preferred' }; - const options = generateAuthenticationOptions(opts); + const options = await generateAuthenticationOptions(opts); await this.userService.updateUser({ data: { @@ -181,7 +187,6 @@ export class WebAuthService { let verification: VerifiedAuthenticationResponse; try { const opts: VerifyAuthenticationResponseOpts = { - credential, authenticator: { credentialID: device.credentialId, credentialPublicKey: device.credentialPublicKey, @@ -189,9 +194,16 @@ export class WebAuthService { }, expectedChallenge: `${user.authChallenge}`, expectedOrigin: this.expectedOrigin, - expectedRPID: this.rpID + expectedRPID: this.rpID, + response: { + clientExtensionResults: credential.clientExtensionResults, + id: credential.id, + rawId: credential.rawId, + response: credential.response, + type: 'public-key' + } }; - verification = verifyAuthenticationResponse(opts); + verification = await verifyAuthenticationResponse(opts); } catch (error) { Logger.error(error, 'WebAuthService'); throw new InternalServerErrorException({ error: error.message }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index de366908f..fcd2cb13c 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1088,6 +1088,7 @@ export class PortfolioService { return { ...position, assetClass: symbolProfileMap[position.symbol].assetClass, + assetSubClass: symbolProfileMap[position.symbol].assetSubClass, averagePrice: new Big(position.averagePrice).toNumber(), grossPerformance: position.grossPerformance?.toNumber() ?? null, grossPerformancePercentage: diff --git a/apps/api/src/services/account-balance/account-balance.service.ts b/apps/api/src/services/account-balance/account-balance.service.ts index 9cd2d31ac..9995bbc3e 100644 --- a/apps/api/src/services/account-balance/account-balance.service.ts +++ b/apps/api/src/services/account-balance/account-balance.service.ts @@ -1,4 +1,5 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; +import { AccountBalancesResponse } from '@ghostfolio/common/interfaces'; import { Injectable } from '@nestjs/common'; import { AccountBalance, Prisma } from '@prisma/client'; @@ -13,4 +14,29 @@ export class AccountBalanceService { data }); } + + public async getAccountBalances({ + accountId, + userId + }: { + accountId: string; + userId: string; + }): Promise { + const balances = await this.prismaService.accountBalance.findMany({ + orderBy: { + date: 'asc' + }, + select: { + date: true, + id: true, + value: true + }, + where: { + accountId, + userId + } + }); + + return { balances }; + } } diff --git a/apps/api/src/services/api/api.service.ts b/apps/api/src/services/api/api.service.ts index 204aa030e..8ef0df7b3 100644 --- a/apps/api/src/services/api/api.service.ts +++ b/apps/api/src/services/api/api.service.ts @@ -8,16 +8,19 @@ export class ApiService { public buildFiltersFromQueryParams({ filterByAccounts, filterByAssetClasses, + filterByAssetSubClasses, filterBySearchQuery, filterByTags }: { filterByAccounts?: string; filterByAssetClasses?: string; + filterByAssetSubClasses?: string; filterBySearchQuery?: string; filterByTags?: string; }): Filter[] { const accountIds = filterByAccounts?.split(',') ?? []; const assetClasses = filterByAssetClasses?.split(',') ?? []; + const assetSubClasses = filterByAssetSubClasses?.split(',') ?? []; const searchQuery = filterBySearchQuery?.toLowerCase(); const tagIds = filterByTags?.split(',') ?? []; @@ -34,6 +37,12 @@ export class ApiService { type: 'ASSET_CLASS' }; }), + ...assetSubClasses.map((assetClass) => { + return { + id: assetClass, + type: 'ASSET_SUB_CLASS' + }; + }), { id: searchQuery, type: 'SEARCH_QUERY' diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts index 99244c352..b861ccf8f 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -52,20 +52,12 @@ export class SymbolProfileService { SymbolProfileOverrides: true }, where: { - AND: [ - { - dataSource: { - in: aUniqueAssets.map(({ dataSource }) => { - return dataSource; - }) - }, - symbol: { - in: aUniqueAssets.map(({ symbol }) => { - return symbol; - }) - } - } - ] + OR: aUniqueAssets.map(({ dataSource, symbol }) => { + return { + dataSource, + symbol + }; + }) } }) .then((symbolProfiles) => this.getSymbols(symbolProfiles)); diff --git a/apps/client/project.json b/apps/client/project.json index 2e36f7144..0d2e589dc 100644 --- a/apps/client/project.json +++ b/apps/client/project.json @@ -124,6 +124,9 @@ { "command": "shx cp apps/client/src/assets/site.webmanifest dist/apps/client" }, + { + "command": "shx cp -r apps/client/src/locales dist/apps/api/assets" + }, { "command": "shx cp node_modules/ionicons/dist/index.js dist/apps/client" }, diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index f82bad864..26080e884 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -73,6 +73,11 @@ const routes: Routes = [ loadChildren: () => import('./pages/home/home-page.module').then((m) => m.HomePageModule) }, + { + path: 'i18n', + loadChildren: () => + import('./pages/i18n/i18n-page.module').then((m) => m.I18nPageModule) + }, { path: paths.markets, loadChildren: () => diff --git a/apps/client/src/app/components/accounts-table/accounts-table.component.html b/apps/client/src/app/components/accounts-table/accounts-table.component.html index 664694735..bfe5a667a 100644 --- a/apps/client/src/app/components/accounts-table/accounts-table.component.html +++ b/apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -1,4 +1,4 @@ -
+
+
+
, public readonly formBuilder: FormBuilder ) {} public ngOnInit() { - this.createAssetProfileForm = this.formBuilder.group({ - searchSymbol: new FormControl(null, [Validators.required]) - }); + this.createAssetProfileForm = this.formBuilder.group( + { + addSymbol: new FormControl(null, [Validators.required]), + searchSymbol: new FormControl(null, [Validators.required]) + }, + { + validators: this.atLeastOneValid + } + ); + + this.mode = 'auto'; } public onCancel() { this.dialogRef.close(); } + public onRadioChange(mode: 'auto' | 'manual') { + this.mode = mode; + } + public onSubmit() { - this.dialogRef.close({ - dataSource: - this.createAssetProfileForm.controls['searchSymbol'].value.dataSource, - symbol: this.createAssetProfileForm.controls['searchSymbol'].value.symbol - }); + this.mode === 'auto' + ? this.dialogRef.close({ + dataSource: + this.createAssetProfileForm.controls['searchSymbol'].value + .dataSource, + symbol: + this.createAssetProfileForm.controls['searchSymbol'].value.symbol + }) + : this.dialogRef.close({ + dataSource: 'MANUAL', + symbol: this.createAssetProfileForm.controls['addSymbol'].value + }); } public ngOnDestroy() {} + + private atLeastOneValid(control: AbstractControl): ValidationErrors { + const addSymbolControl = control.get('addSymbol'); + const searchSymbolControl = control.get('searchSymbol'); + + if (addSymbolControl.valid && searchSymbolControl.valid) { + return { atLeastOneValid: true }; + } + + if ( + addSymbolControl.valid || + !addSymbolControl || + searchSymbolControl.valid || + !searchSymbolControl + ) { + return { atLeastOneValid: false }; + } + + return { atLeastOneValid: true }; + } } diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html index 43eadf93e..e7ed9352a 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6,13 +6,35 @@ >

Add Asset Profile

- - Name, symbol or ISIN - - +
+ + + + + + + +
+ +
+ + Name, symbol or ISIN + + +
+
+ + Symbol + + +
@@ -20,7 +42,7 @@ color="primary" mat-flat-button type="submit" - [disabled]="!createAssetProfileForm.valid" + [disabled]="createAssetProfileForm.hasError('atLeastOneValid')" > Save diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts index e99d8f788..2d50200c4 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts @@ -4,6 +4,8 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatRadioModule } from '@angular/material/radio'; import { GfSymbolAutocompleteModule } from '@ghostfolio/ui/symbol-autocomplete'; import { CreateAssetProfileDialog } from './create-asset-profile-dialog.component'; @@ -17,6 +19,8 @@ import { CreateAssetProfileDialog } from './create-asset-profile-dialog.componen MatDialogModule, MatButtonModule, MatFormFieldModule, + MatInputModule, + MatRadioModule, ReactiveFormsModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA] diff --git a/apps/client/src/app/components/header/header.component.html b/apps/client/src/app/components/header/header.component.html index 45986df95..4d606f591 100644 --- a/apps/client/src/app/components/header/header.component.html +++ b/apps/client/src/app/components/header/header.component.html @@ -131,6 +131,9 @@ diff --git a/apps/client/src/app/components/header/header.component.scss b/apps/client/src/app/components/header/header.component.scss index ce43c55ab..2e5b583c2 100644 --- a/apps/client/src/app/components/header/header.component.scss +++ b/apps/client/src/app/components/header/header.component.scss @@ -22,7 +22,7 @@ } .mdc-button { - height: unset; + height: 100%; &:not(.mat-primary) { background-color: transparent; diff --git a/apps/client/src/app/components/user-account-access/user-account-access.module.ts b/apps/client/src/app/components/user-account-access/user-account-access.module.ts index 0388dd244..fb3346ae0 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.module.ts +++ b/apps/client/src/app/components/user-account-access/user-account-access.module.ts @@ -1,5 +1,6 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule } from '@angular/material/dialog'; import { RouterModule } from '@angular/router'; import { GfPortfolioAccessTableModule } from '@ghostfolio/client/components/access-table/access-table.module'; @@ -7,7 +8,6 @@ import { GfPremiumIndicatorModule } from '@ghostfolio/ui/premium-indicator'; import { GfCreateOrUpdateAccessDialogModule } from './create-or-update-access-dialog/create-or-update-access-dialog.module'; import { UserAccountAccessComponent } from './user-account-access.component'; -import { MatButtonModule } from '@angular/material/button'; @NgModule({ declarations: [UserAccountAccessComponent], diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts index a52812ed3..3fb3592e0 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -3,10 +3,9 @@ import { ChangeDetectorRef, Component, OnDestroy, - OnInit, - ViewChild + OnInit } from '@angular/core'; -import { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox'; +import { MatSlideToggleChange } from '@angular/material/slide-toggle'; import { DataService } from '@ghostfolio/client/services/data.service'; import { STAY_SIGNED_IN, @@ -29,14 +28,12 @@ import { catchError, takeUntil } from 'rxjs/operators'; templateUrl: './user-account-settings.html' }) export class UserAccountSettingsComponent implements OnDestroy, OnInit { - @ViewChild('toggleSignInWithFingerprintEnabledElement') - signInWithFingerprintElement: MatCheckbox; - public appearancePlaceholder = $localize`Auto`; public baseCurrency: string; public currencies: string[] = []; public hasPermissionToUpdateViewMode: boolean; public hasPermissionToUpdateUserSettings: boolean; + public isWebAuthnEnabled: boolean; public language = document.documentElement.lang; public locales = [ 'de', @@ -120,7 +117,7 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit { }); } - public onExperimentalFeaturesChange(aEvent: MatCheckboxChange) { + public onExperimentalFeaturesChange(aEvent: MatSlideToggleChange) { this.dataService .putUserSetting({ isExperimentalFeatures: aEvent.checked }) .pipe(takeUntil(this.unsubscribeSubject)) @@ -158,7 +155,7 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit { }); } - public onRestrictedViewChange(aEvent: MatCheckboxChange) { + public onRestrictedViewChange(aEvent: MatSlideToggleChange) { this.dataService .putUserSetting({ isRestrictedView: aEvent.checked }) .pipe(takeUntil(this.unsubscribeSubject)) @@ -176,7 +173,7 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit { }); } - public onSignInWithFingerprintChange(aEvent: MatCheckboxChange) { + public onSignInWithFingerprintChange(aEvent: MatSlideToggleChange) { if (aEvent.checked) { this.registerDevice(); } else { @@ -192,7 +189,7 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit { } } - public onViewModeChange(aEvent: MatCheckboxChange) { + public onViewModeChange(aEvent: MatSlideToggleChange) { this.dataService .putUserSetting({ viewMode: aEvent.checked === true ? 'ZEN' : 'DEFAULT' }) .pipe(takeUntil(this.unsubscribeSubject)) @@ -250,9 +247,8 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit { } private update() { - if (this.signInWithFingerprintElement) { - this.signInWithFingerprintElement.checked = - this.webAuthnService.isEnabled() ?? false; - } + this.isWebAuthnEnabled = this.webAuthnService.isEnabled() ?? false; + + this.changeDetectorRef.markForCheck(); } } diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html index 12f3da458..87762d449 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.html +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -11,12 +11,13 @@
- + >
@@ -139,12 +140,13 @@
- + >
@@ -153,12 +155,13 @@
Sign in with fingerprint
- + >
- + >
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.module.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.module.ts index 24e57ff20..7a40cf641 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.module.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.module.ts @@ -3,9 +3,9 @@ import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatSelectModule } from '@angular/material/select'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { RouterModule } from '@angular/router'; import { GfValueModule } from '@ghostfolio/ui/value'; @@ -20,9 +20,9 @@ import { UserAccountSettingsComponent } from './user-account-settings.component' GfValueModule, MatButtonModule, MatCardModule, - MatCheckboxModule, MatFormFieldModule, MatSelectModule, + MatSlideToggleModule, ReactiveFormsModule, RouterModule ] diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 18d5d1e2a..61db47577 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -30,7 +30,7 @@ export class AccountsPageComponent implements OnDestroy, OnInit { public deviceType: string; public hasImpersonationId: boolean; public hasPermissionToCreateAccount: boolean; - public hasPermissionToDeleteAccount: boolean; + public hasPermissionToUpdateAccount: boolean; public routeQueryParams: Subscription; public totalBalanceInBaseCurrency = 0; public totalValueInBaseCurrency = 0; @@ -95,9 +95,9 @@ export class AccountsPageComponent implements OnDestroy, OnInit { this.user.permissions, permissions.createAccount ); - this.hasPermissionToDeleteAccount = hasPermission( + this.hasPermissionToUpdateAccount = hasPermission( this.user.permissions, - permissions.deleteAccount + permissions.updateAccount ); this.changeDetectorRef.markForCheck(); @@ -295,9 +295,16 @@ export class AccountsPageComponent implements OnDestroy, OnInit { const { accountIdFrom, accountIdTo, balance }: TransferBalanceDto = data?.account; - console.log( - `Transfer cash balance of ${balance} from account ${accountIdFrom} to account ${accountIdTo}` - ); + this.dataService + .transferAccountBalance({ + accountIdFrom, + accountIdTo, + balance + }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + this.fetchAccounts(); + }); } this.router.navigate(['.'], { relativeTo: this.route }); diff --git a/apps/client/src/app/pages/accounts/accounts-page.html b/apps/client/src/app/pages/accounts/accounts-page.html index a7d5901bb..c67323b1a 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.html +++ b/apps/client/src/app/pages/accounts/accounts-page.html @@ -8,7 +8,7 @@ [baseCurrency]="user?.settings?.baseCurrency" [deviceType]="deviceType" [locale]="user?.settings?.locale" - [showActions]="!hasImpersonationId && hasPermissionToDeleteAccount && !user.settings.isRestrictedView" + [showActions]="!hasImpersonationId && hasPermissionToUpdateAccount && !user.settings.isRestrictedView" [totalBalanceInBaseCurrency]="totalBalanceInBaseCurrency" [totalValueInBaseCurrency]="totalValueInBaseCurrency" [transactionCount]="transactionCount" diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html index 91efd0972..d44693436 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -36,7 +36,9 @@ type="number" (keydown.enter)="$event.stopPropagation()" /> - {{ data.account.currency }} + {{ accountForm.controls['currency'].value }}
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts index 0f8b8ecb8..22ec5e1f8 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.module.ts @@ -1,13 +1,13 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; -import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { GfSymbolIconModule } from '@ghostfolio/client/components/symbol-icon/symbol-icon.module'; import { CreateOrUpdateAccountDialog } from './create-or-update-account-dialog.component'; diff --git a/apps/client/src/app/pages/i18n/i18n-page-routing.module.ts b/apps/client/src/app/pages/i18n/i18n-page-routing.module.ts new file mode 100644 index 000000000..9965121ca --- /dev/null +++ b/apps/client/src/app/pages/i18n/i18n-page-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { I18nPageComponent } from './i18n-page.component'; + +const routes: Routes = [ + { + canActivate: [AuthGuard], + component: I18nPageComponent, + path: '' + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class I18nPageRoutingModule {} diff --git a/apps/client/src/app/pages/i18n/i18n-page.component.ts b/apps/client/src/app/pages/i18n/i18n-page.component.ts new file mode 100644 index 000000000..46837fa57 --- /dev/null +++ b/apps/client/src/app/pages/i18n/i18n-page.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from '@angular/core'; +import { Subject } from 'rxjs'; + +@Component({ + host: { class: 'page' }, + selector: 'gf-i18n-page', + styleUrls: ['./i18n-page.scss'], + templateUrl: './i18n-page.html' +}) +export class I18nPageComponent implements OnInit { + private unsubscribeSubject = new Subject(); + + public constructor() {} + + public ngOnInit() {} + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } +} diff --git a/apps/client/src/app/pages/i18n/i18n-page.html b/apps/client/src/app/pages/i18n/i18n-page.html new file mode 100644 index 000000000..1ace8e297 --- /dev/null +++ b/apps/client/src/app/pages/i18n/i18n-page.html @@ -0,0 +1,10 @@ +
+
+
    +
  • + Ghostfolio is a personal finance dashboard to keep track of your assets + like stocks, ETFs or cryptocurrencies across multiple platforms. +
  • +
+
+
diff --git a/apps/client/src/app/pages/i18n/i18n-page.module.ts b/apps/client/src/app/pages/i18n/i18n-page.module.ts new file mode 100644 index 000000000..5b5580ebf --- /dev/null +++ b/apps/client/src/app/pages/i18n/i18n-page.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; + +import { I18nPageRoutingModule } from './i18n-page-routing.module'; +import { I18nPageComponent } from './i18n-page.component'; + +@NgModule({ + declarations: [I18nPageComponent], + imports: [CommonModule, I18nPageRoutingModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class I18nPageModule {} diff --git a/apps/client/src/app/pages/i18n/i18n-page.scss b/apps/client/src/app/pages/i18n/i18n-page.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/pages/i18n/i18n-page.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/app/services/admin.service.ts b/apps/client/src/app/services/admin.service.ts index e62641db7..79923a3aa 100644 --- a/apps/client/src/app/services/admin.service.ts +++ b/apps/client/src/app/services/admin.service.ts @@ -1,6 +1,7 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { UpdateAssetProfileDto } from '@ghostfolio/api/app/admin/update-asset-profile.dto'; +import { UpdateBulkMarketDataDto } from '@ghostfolio/api/app/admin/update-bulk-market-data.dto'; import { UpdateMarketDataDto } from '@ghostfolio/api/app/admin/update-market-data.dto'; import { CreatePlatformDto } from '@ghostfolio/api/app/platform/create-platform.dto'; import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.dto'; @@ -214,6 +215,20 @@ export class AdminService { ); } + public postMarketData({ + dataSource, + marketData, + symbol + }: { + dataSource: DataSource; + marketData: UpdateBulkMarketDataDto; + symbol: string; + }) { + const url = `/api/v1/admin/market-data/${dataSource}/${symbol}`; + + return this.http.post(url, marketData); + } + public postPlatform(aPlatform: CreatePlatformDto) { return this.http.post(`/api/v1/platform`, aPlatform); } diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index d5dce6159..f5cafb57a 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -2,6 +2,7 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { CreateAccessDto } from '@ghostfolio/api/app/access/create-access.dto'; import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto'; +import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto'; import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { Activities } from '@ghostfolio/api/app/order/interfaces/activities.interface'; @@ -505,6 +506,18 @@ export class DataService { }); } + public transferAccountBalance({ + accountIdFrom, + accountIdTo, + balance + }: TransferBalanceDto) { + return this.http.post('/api/v1/account/transfer-balance', { + accountIdFrom, + accountIdTo, + balance + }); + } + public updateInfo() { this.http.get('/api/v1/info').subscribe((info) => { const utmSource = <'ios' | 'trusted-web-activity'>( diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 0a58e3cdd..760871922 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -337,6 +337,10 @@ export class ImportActivitiesService { return Type.BUY; case 'dividend': return Type.DIVIDEND; + case 'fee': + return Type.FEE; + case 'interest': + return Type.INTEREST; case 'item': return Type.ITEM; case 'liability': diff --git a/apps/client/src/app/services/web-authn.service.ts b/apps/client/src/app/services/web-authn.service.ts index eb033884c..5075d036d 100644 --- a/apps/client/src/app/services/web-authn.service.ts +++ b/apps/client/src/app/services/web-authn.service.ts @@ -88,7 +88,9 @@ export class WebAuthnService { { deviceId } ) .pipe( - switchMap(startAuthentication), + switchMap((requestOptionsJSON) => + startAuthentication(requestOptionsJSON, true) + ), switchMap((assertionResponse) => { return this.http.post<{ authToken: string }>( `/api/v1/auth/webauthn/verify-assertion`, diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index e4e1223ea..21c260c5d 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -30,7 +30,7 @@ Empfänger apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -38,7 +38,7 @@ Typ apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -62,7 +62,7 @@ Details apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -70,7 +70,7 @@ Widerrufen apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -78,7 +78,7 @@ Möchtest du diese Zugangsberechtigung wirklich widerrufen? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -98,7 +98,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -282,7 +282,7 @@ Jobs löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 @@ -290,7 +290,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -298,7 +298,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -306,7 +310,7 @@ Datenquelle apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -322,7 +326,7 @@ Versuche apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -330,7 +334,7 @@ Erstellt apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -338,7 +342,7 @@ Abgeschlossen apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -346,23 +350,23 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 - - Asset Profile - Anlageprofil + + Asset Profiles + Anlageprofile - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data + + Historical Market Data Historische Marktdaten apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -370,7 +374,7 @@ Daten anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -378,7 +382,7 @@ Stacktrace anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -386,7 +390,7 @@ Job löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -434,11 +438,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -454,7 +458,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -478,11 +482,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -498,7 +502,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -514,7 +518,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -536,6 +540,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Please add a currency: @@ -710,7 +718,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -754,7 +762,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -766,7 +774,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -786,7 +794,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -802,7 +810,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -818,7 +826,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -838,11 +846,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -974,7 +982,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -982,7 +990,7 @@ Ich apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -990,7 +998,7 @@ Mein Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -998,7 +1006,7 @@ Über Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1014,7 +1022,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -1030,7 +1038,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -1166,7 +1174,7 @@ Einloggen apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1356,7 +1364,7 @@ Sektoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1372,7 +1380,7 @@ Länder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1700,7 +1708,7 @@ Möchtest du diese Anmeldemethode wirklich löschen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -1772,7 +1780,7 @@ Basiswährung apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -1780,7 +1788,7 @@ Lokalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -1788,7 +1796,7 @@ Datums- und Zahlenformat apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -1796,7 +1804,7 @@ Zen Modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -1808,7 +1816,7 @@ Einloggen mit Fingerabdruck apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -1816,7 +1824,7 @@ Benutzer ID apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -1884,7 +1892,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1928,7 +1936,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -1936,7 +1944,7 @@ Konto ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -2252,7 +2260,7 @@ Name, Symbol oder ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2312,11 +2320,11 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2332,7 +2340,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2572,7 +2580,7 @@ Änderung vom Allzeithoch libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -2580,7 +2588,7 @@ vom AZH libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -2604,7 +2612,7 @@ Sprache apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -2612,7 +2620,7 @@ Registrieren apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -2700,7 +2708,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2716,7 +2724,7 @@ Sektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2728,7 +2736,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -2872,7 +2880,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -2904,7 +2912,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2924,7 +2932,7 @@ Experimentelle Funktionen apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -2964,7 +2972,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -2972,7 +2980,7 @@ Aussehen apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -2980,7 +2988,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -2988,7 +2996,7 @@ Hell apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -2996,7 +3004,7 @@ Dunkel apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -3260,27 +3268,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -3308,7 +3316,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -3358,6 +3366,10 @@ Import Importieren + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -3516,7 +3528,7 @@ Unbeschwertes Erlebnis für turbulente Zeiten apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -3524,7 +3536,7 @@ Vorschau auf kommende Funktionalität apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -4372,7 +4384,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -7672,7 +7684,7 @@ Biometrische Authentifizierung apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -7756,7 +7768,7 @@ Daten exportieren apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -10159,14 +10171,6 @@ 7 - - Add Access - Zugang hinzufügen - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Choose or drop a file here Wählen Sie eine Datei aus oder ziehen Sie sie hierhin @@ -10316,7 +10320,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10396,7 +10400,7 @@ Finde Position... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10404,7 +10408,59 @@ Keine Einträge vorhanden... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Anlageprofil + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Möchtest du dieses Anlageprofil wirklich löschen? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Suche + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Manuell hinzufügen + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Mit dem Finanz-Dashboard Ghostfolio können Sie Ihr Vermögen in Form von Aktien, ETFs oder Kryptowährungen verteilt über mehrere Finanzinstitute überwachen. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Letztes Allzeithoch + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index f9c69808f..935b6605d 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -31,7 +31,7 @@ Beneficiario apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -39,7 +39,7 @@ Tipo apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -63,7 +63,7 @@ Detalles apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -71,7 +71,7 @@ Revoca apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -79,7 +79,7 @@ ¿Quieres revocar el acceso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -99,7 +99,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -283,7 +283,7 @@ Elimina los trabajos apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 @@ -291,7 +291,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -299,7 +299,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -307,7 +311,7 @@ Fuente de datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -323,7 +327,7 @@ Intentos apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -331,7 +335,7 @@ Creado apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -339,7 +343,7 @@ Finalizado apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -347,23 +351,23 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 - - Asset Profile - Perfil del activo + + Asset Profiles + Perfil del activo - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data - Datos históricos del mercado + + Historical Market Data + Datos históricos del mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -371,7 +375,7 @@ Visualiza los datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -379,7 +383,7 @@ Visualiza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -387,7 +391,7 @@ Elimina el trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -435,11 +439,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -455,7 +459,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -479,11 +483,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -499,7 +503,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -515,7 +519,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -537,6 +541,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Please add a currency: @@ -711,7 +719,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -755,7 +763,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -767,7 +775,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -787,7 +795,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -803,7 +811,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -819,7 +827,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -839,11 +847,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -975,7 +983,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -983,7 +991,7 @@ apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -991,7 +999,7 @@ Mi Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -999,7 +1007,7 @@ Sobre Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1015,7 +1023,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -1031,7 +1039,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -1167,7 +1175,7 @@ Iniciar sesión apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1354,7 +1362,7 @@ Sectores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1370,7 +1378,7 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1698,7 +1706,7 @@ ¿Estás seguro de eliminar este método de acceso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -1770,7 +1778,7 @@ Divisa base apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -1778,7 +1786,7 @@ Ubicación apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -1786,7 +1794,7 @@ Formato de fecha y número apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -1794,7 +1802,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -1806,7 +1814,7 @@ Accede con huella digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -1814,7 +1822,7 @@ ID usuario apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -1882,7 +1890,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1926,7 +1934,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -1934,7 +1942,7 @@ ID cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -2250,7 +2258,7 @@ Nombre, símbolo o ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2310,11 +2318,11 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2330,7 +2338,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2570,7 +2578,7 @@ Variación respecto al máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -2578,7 +2586,7 @@ desde el máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -2602,7 +2610,7 @@ Idioma apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -2610,7 +2618,7 @@ Comenzar apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -2678,7 +2686,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2734,7 +2742,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2746,7 +2754,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -2886,7 +2894,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -2910,7 +2918,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2922,7 +2930,7 @@ Funcionalidades experimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -2962,7 +2970,7 @@ Automático apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -2970,7 +2978,7 @@ Apariencia apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -2978,7 +2986,7 @@ Automático apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -2986,7 +2994,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -2994,7 +3002,7 @@ Oscuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -3258,27 +3266,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -3306,7 +3314,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -3356,6 +3364,10 @@ Import Import + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -3514,7 +3526,7 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -3522,7 +3534,7 @@ Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -4370,7 +4382,7 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -7670,7 +7682,7 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -7754,7 +7766,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -10157,14 +10169,6 @@ 7 - - Add Access - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Choose or drop a file here Choose or drop a file here @@ -10314,7 +10318,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10394,7 +10398,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10402,7 +10406,59 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Ghostfolio es un dashboard de finanzas personales para hacer un seguimiento de tus activos como acciones, ETFs o criptodivisas a través de múltiples plataformas. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 68994b48e..be8a8b10b 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -14,7 +14,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -26,7 +26,7 @@ Bénéficiaire apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -34,7 +34,7 @@ Type apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -58,7 +58,7 @@ Détails apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -66,7 +66,7 @@ Révoquer apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -74,7 +74,7 @@ Voulez-vous vraiment révoquer cet accès ? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -90,7 +90,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -110,7 +110,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -190,7 +190,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -334,7 +334,7 @@ Symbole apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -342,7 +342,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -350,7 +354,7 @@ Source Données apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -366,7 +370,7 @@ Tentatives apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -374,7 +378,7 @@ Créé apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -382,7 +386,7 @@ Terminé apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -390,7 +394,7 @@ Statut apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 @@ -398,23 +402,23 @@ Supprimer Tâches apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 - - Asset Profile - Profil d'Actifs + + Asset Profiles + Profil d'Actifs - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data - Données de Marché Historiques + + Historical Market Data + Données de Marché Historiques apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -422,7 +426,7 @@ Voir Données apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -430,7 +434,7 @@ Voir la Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -438,7 +442,7 @@ Supprimer Tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -486,11 +490,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -506,7 +510,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -530,11 +534,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -550,7 +554,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -562,7 +566,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -574,7 +578,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -594,7 +598,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -614,7 +618,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -636,6 +640,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Sectors Count @@ -694,7 +702,7 @@ Secteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -706,7 +714,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -722,7 +730,7 @@ Secteurs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -738,7 +746,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -750,7 +758,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -758,11 +766,11 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -946,7 +954,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -974,7 +982,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -1058,7 +1066,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -1070,7 +1078,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -1082,7 +1090,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -1098,7 +1106,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -1118,11 +1126,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -1254,7 +1262,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -1262,7 +1270,7 @@ Moi apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -1270,7 +1278,7 @@ Mon Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -1278,7 +1286,7 @@ À propos de Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1294,7 +1302,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -1310,7 +1318,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -1326,7 +1334,7 @@ Se connecter apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1338,7 +1346,7 @@ Démarrer apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -1925,7 +1933,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -1965,7 +1973,7 @@ Voulez-vous vraiment supprimer cette méthode de connexion ? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -2037,7 +2045,7 @@ Devise de Base apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -2045,7 +2053,7 @@ Langue apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -2057,27 +2065,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -2089,7 +2097,7 @@ Paramètres régionaux apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -2097,7 +2105,7 @@ Format de date et d'heure apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -2105,7 +2113,7 @@ Apparence apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -2113,7 +2121,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -2121,7 +2129,7 @@ Clair apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -2129,7 +2137,7 @@ Sombre apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -2137,7 +2145,7 @@ Mode Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -2149,7 +2157,7 @@ Se connecter avec empreinte apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -2157,7 +2165,7 @@ Fonctionnalités expérimentales apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -2165,7 +2173,7 @@ ID d'utilisateur apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -2229,7 +2237,7 @@ ID du compte apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -2485,7 +2493,7 @@ Nom, symbole, ou ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2571,6 +2579,10 @@ Import Importer + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -3125,7 +3137,7 @@ Différence avec le Record Historique libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -3133,7 +3145,7 @@ par rapport au record historique libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -3513,7 +3525,7 @@ Expérience sans distraction pour les périodes tumultueuses apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -3521,7 +3533,7 @@ Avant-première de fonctionnalités futures apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -4369,7 +4381,7 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -7669,7 +7681,7 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -7753,7 +7765,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -10156,14 +10168,6 @@ 7 - - Add Access - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Choose or drop a file here Choose or drop a file here @@ -10313,7 +10317,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10393,7 +10397,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10401,7 +10405,59 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Ghostfolio est un dashboard de finances personnelles qui permet de suivre vos actifs comme les actions, les ETF ou les crypto-monnaies sur plusieurs plateformes. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 248d3f9ec..1712694d3 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -31,7 +31,7 @@ Beneficiario apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -39,7 +39,7 @@ Tipo apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -63,7 +63,7 @@ Dettagli apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -71,7 +71,7 @@ Revoca apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -79,7 +79,7 @@ Vuoi davvero revocare l'accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -99,7 +99,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -283,7 +283,7 @@ Elimina i lavori apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 @@ -291,7 +291,7 @@ Simbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -299,7 +299,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -307,7 +311,7 @@ Sorgente dei dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -323,7 +327,7 @@ Tentativi apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -331,7 +335,7 @@ Creato apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -339,7 +343,7 @@ Finito apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -347,23 +351,23 @@ Stato apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 - - Asset Profile - Profilo dell'asset + + Asset Profiles + Profilo dell'asset - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data - Dati storici del mercato + + Historical Market Data + Dati storici del mercato apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -371,7 +375,7 @@ Visualizza i dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -379,7 +383,7 @@ Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -387,7 +391,7 @@ Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -435,11 +439,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -455,7 +459,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -479,11 +483,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -499,7 +503,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -515,7 +519,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -537,6 +541,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Please add a currency: @@ -711,7 +719,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -755,7 +763,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -767,7 +775,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -787,7 +795,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -803,7 +811,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -819,7 +827,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -839,11 +847,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -975,7 +983,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -983,7 +991,7 @@ Io apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -991,7 +999,7 @@ Il mio Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -999,7 +1007,7 @@ Informazioni su Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1015,7 +1023,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -1031,7 +1039,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -1167,7 +1175,7 @@ Accedi apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1354,7 +1362,7 @@ Settori apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1370,7 +1378,7 @@ Paesi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1698,7 +1706,7 @@ Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -1770,7 +1778,7 @@ Valuta base apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -1778,7 +1786,7 @@ Locale apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -1786,7 +1794,7 @@ Formato data e numero apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -1794,7 +1802,7 @@ Modalità Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -1806,7 +1814,7 @@ Accesso con impronta digitale apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -1814,7 +1822,7 @@ ID utente apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -1882,7 +1890,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1926,7 +1934,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -1934,7 +1942,7 @@ ID account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -2250,7 +2258,7 @@ Nome, simbolo o ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2310,11 +2318,11 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2330,7 +2338,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2570,7 +2578,7 @@ Variazione rispetto al massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -2578,7 +2586,7 @@ dal massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -2602,7 +2610,7 @@ Lingua apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -2610,7 +2618,7 @@ Inizia apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -2678,7 +2686,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2734,7 +2742,7 @@ Settore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2746,7 +2754,7 @@ Paese apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -2886,7 +2894,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -2910,7 +2918,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2922,7 +2930,7 @@ Funzionalità sperimentali apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -2962,7 +2970,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -2970,7 +2978,7 @@ Aspetto apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -2978,7 +2986,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -2986,7 +2994,7 @@ Chiaro apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -2994,7 +3002,7 @@ Scuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -3258,27 +3266,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -3306,7 +3314,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -3356,6 +3364,10 @@ Import Importa + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -3514,7 +3526,7 @@ Esperienza priva di distrazioni per i periodi più turbolenti apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -3522,7 +3534,7 @@ Un'anteprima delle funzionalità in arrivo apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -4370,7 +4382,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -7670,7 +7682,7 @@ Autenticazione biometrica apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -7754,7 +7766,7 @@ Esporta dati apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -10157,14 +10169,6 @@ 7 - - Add Access - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Choose or drop a file here Choose or drop a file here @@ -10314,7 +10318,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10394,7 +10398,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10402,7 +10406,59 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Ghostfolio è un dashboard di finanza personale per tenere traccia delle vostre attività come azioni, ETF o criptovalute su più piattaforme. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 649f07f15..f424ee349 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -30,7 +30,7 @@ Ontvanger apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -38,7 +38,7 @@ Type apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -62,7 +62,7 @@ Details apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -70,7 +70,7 @@ Intrekken apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -78,7 +78,7 @@ Wil je deze verleende toegang echt intrekken? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -98,7 +98,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -282,7 +282,7 @@ Taken verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 @@ -290,7 +290,7 @@ Symbool apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -298,7 +298,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -306,7 +310,7 @@ Gegevensbron apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -322,7 +326,7 @@ Pogingen apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -330,7 +334,7 @@ Aangemaakt apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -338,7 +342,7 @@ Voltooid apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -346,23 +350,23 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 - - Asset Profile - Asset Profiel + + Asset Profiles + Asset Profiel - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data - Historische marktgegevens + + Historical Market Data + Historische marktgegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -370,7 +374,7 @@ Bekijk gegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -378,7 +382,7 @@ Bekijk Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -386,7 +390,7 @@ Taak verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -434,11 +438,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -454,7 +458,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -478,11 +482,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -498,7 +502,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -514,7 +518,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -536,6 +540,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Please add a currency: @@ -710,7 +718,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -754,7 +762,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -766,7 +774,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -786,7 +794,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -802,7 +810,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -818,7 +826,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -838,11 +846,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -974,7 +982,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -982,7 +990,7 @@ Ik apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -990,7 +998,7 @@ Mijn Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -998,7 +1006,7 @@ Over Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1014,7 +1022,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -1030,7 +1038,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -1166,7 +1174,7 @@ Aanmelden apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1353,7 +1361,7 @@ Sectoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1369,7 +1377,7 @@ Landen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1697,7 +1705,7 @@ Wil je deze aanmeldingsmethode echt verwijderen? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -1769,7 +1777,7 @@ Basisvaluta apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -1777,7 +1785,7 @@ Locatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -1785,7 +1793,7 @@ Datum- en getalnotatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -1793,7 +1801,7 @@ Zen-modus apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -1805,7 +1813,7 @@ Aanmelden met vingerafdruk apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -1813,7 +1821,7 @@ Gebruikers-ID apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -1881,7 +1889,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1925,7 +1933,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -1933,7 +1941,7 @@ Rekening-ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -2249,7 +2257,7 @@ Naam, symbool of ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2309,11 +2317,11 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2329,7 +2337,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2569,7 +2577,7 @@ Verandering van All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -2577,7 +2585,7 @@ van ATH libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -2601,7 +2609,7 @@ Taal apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -2609,7 +2617,7 @@ Aan de slag apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -2677,7 +2685,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2733,7 +2741,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -2745,7 +2753,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -2885,7 +2893,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -2909,7 +2917,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2921,7 +2929,7 @@ Experimentele functies apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -2961,7 +2969,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -2969,7 +2977,7 @@ Weergave apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -2977,7 +2985,7 @@ Automatisch apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -2985,7 +2993,7 @@ Licht apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -2993,7 +3001,7 @@ Donker apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -3257,27 +3265,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -3305,7 +3313,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -3355,6 +3363,10 @@ Import Importeren + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -3513,7 +3525,7 @@ Afleidingsvrije ervaring voor roerige tijden apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -3521,7 +3533,7 @@ Voorproefje van nieuwe functionaliteit apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -4369,7 +4381,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -7669,7 +7681,7 @@ Biometrische authenticatie apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -7753,7 +7765,7 @@ Exporteer Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -10156,14 +10168,6 @@ 7 - - Add Access - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Choose or drop a file here Choose or drop a file here @@ -10313,7 +10317,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10393,7 +10397,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10401,7 +10405,59 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Ghostfolio is een persoonlijk financieel dashboard om uw activa zoals aandelen, ETF’s of cryptocurrencies over meerdere platforms bij te houden. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index f5050eab8..15db8b5c7 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -14,7 +14,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -26,7 +26,7 @@ Beneficiário (a) apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -34,7 +34,7 @@ Tipo apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -58,7 +58,7 @@ Detalhes apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -66,7 +66,7 @@ Revogar apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -74,7 +74,7 @@ Pretende realmente revogar este acesso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -90,7 +90,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -110,7 +110,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -190,7 +190,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -334,7 +334,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -342,7 +342,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -350,7 +354,7 @@ Fonte de dados apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -366,7 +370,7 @@ Tentativas apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -374,7 +378,7 @@ Criado apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -382,7 +386,7 @@ Terminado apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -390,7 +394,7 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 @@ -398,23 +402,23 @@ Eliminar Tarefas apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 - - Asset Profile - Perfil de Ativos + + Asset Profiles + Perfil de Ativos - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data - Histórico de Dados de Mercado + + Historical Market Data + Histórico de Dados de Mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -422,7 +426,7 @@ Visualizar dados apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -430,7 +434,7 @@ Ver Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -438,7 +442,7 @@ Apagar Tarefa apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -486,11 +490,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -506,7 +510,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -530,11 +534,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -550,7 +554,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -562,7 +566,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -574,7 +578,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -594,7 +598,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -614,7 +618,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -636,6 +640,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Countries Count @@ -826,7 +834,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -854,7 +862,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -938,7 +946,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -950,7 +958,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -962,7 +970,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -978,7 +986,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -998,11 +1006,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -1134,7 +1142,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -1142,7 +1150,7 @@ Eu apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -1150,7 +1158,7 @@ O meu Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -1158,7 +1166,7 @@ Sobre o Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1174,7 +1182,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -1190,7 +1198,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -1206,7 +1214,7 @@ Iniciar sessão apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1218,7 +1226,7 @@ Começar apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -1653,7 +1661,7 @@ Setor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1665,7 +1673,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -1681,7 +1689,7 @@ Setores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1697,7 +1705,7 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1909,7 +1917,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -1949,7 +1957,7 @@ Deseja realmente remover este método de início de sessão? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -2021,7 +2029,7 @@ Moeda Base apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -2029,7 +2037,7 @@ Língua apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -2049,7 +2057,7 @@ Localidade apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -2057,7 +2065,7 @@ Formato de números e datas apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -2065,7 +2073,7 @@ Modo Zen apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -2077,7 +2085,7 @@ Aparência apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -2085,7 +2093,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -2093,7 +2101,7 @@ Claro apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -2101,7 +2109,7 @@ Escuro apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -2109,7 +2117,7 @@ Iniciar sessão com impressão digital apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -2117,7 +2125,7 @@ Funcionalidades Experimentais apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -2125,7 +2133,7 @@ ID do Utilizador apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -2189,7 +2197,7 @@ ID da Conta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -2405,7 +2413,7 @@ Nome, símbolo or ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2449,11 +2457,11 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -3009,7 +3017,7 @@ Diferença desde o Máximo Histórico libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -3017,7 +3025,7 @@ a partir do ATH (All Time High) libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -3293,7 +3301,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -3313,27 +3321,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -3375,6 +3383,10 @@ Import Importar + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -3513,7 +3525,7 @@ Experiência sem distrações para tempos turbulentos apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -3521,7 +3533,7 @@ Acesso antecipado a funcionalidades futuras apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -4369,7 +4381,7 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -7669,7 +7681,7 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -7753,7 +7765,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -10156,14 +10168,6 @@ 7 - - Add Access - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Choose or drop a file here Choose or drop a file here @@ -10313,7 +10317,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10393,7 +10397,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10401,7 +10405,59 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Ghostfolio é um dashboard de finanças pessoais para acompanhar os seus activos como acções, ETFs ou criptomoedas em múltiplas plataformas. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 6c9b733c5..e0ca1f05f 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -722,7 +722,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -746,7 +746,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -766,7 +766,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -870,7 +870,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -910,11 +910,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -1054,27 +1054,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -1094,7 +1094,7 @@ Takma Ad apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -1106,7 +1106,7 @@ Hibe Alan / Alıcı apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 @@ -1114,7 +1114,7 @@ Tip apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -1138,7 +1138,7 @@ Ayrıntılar apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 @@ -1146,7 +1146,7 @@ Geri Al apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 @@ -1154,7 +1154,7 @@ Bu erişim iznini geri almayı gerçekten istiyor musunuz? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -1194,7 +1194,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -1214,7 +1214,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -1294,7 +1294,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1422,7 +1422,7 @@ Sembol apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -1430,7 +1430,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 @@ -1438,7 +1442,7 @@ Veri Kaynağı apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -1454,7 +1458,7 @@ Deneme apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 @@ -1462,7 +1466,7 @@ Oluşturuldu apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 @@ -1470,7 +1474,7 @@ Tamamlandı apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 @@ -1478,7 +1482,7 @@ Durum apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 @@ -1486,23 +1490,23 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 - - Asset Profile - Varlık Profili + + Asset Profiles + Varlık Profili - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data - Tarihsel Piyasa Verisi + + Historical Market Data + Tarihsel Piyasa Verisi apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 @@ -1510,7 +1514,7 @@ Veri Gör apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 @@ -1518,7 +1522,7 @@ Hata İzini Görüntüle apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 @@ -1526,7 +1530,7 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -1574,11 +1578,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -1594,7 +1598,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -1618,11 +1622,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -1638,7 +1642,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1674,7 +1678,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -1686,7 +1690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1706,7 +1710,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1726,7 +1730,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1748,6 +1752,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Sectors Count @@ -1814,7 +1822,7 @@ Sektör apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1826,7 +1834,7 @@ Ülke apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -1842,7 +1850,7 @@ Sektörler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1858,7 +1866,7 @@ Ülkeler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1870,7 +1878,7 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 @@ -1878,7 +1886,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 @@ -1886,11 +1894,11 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1910,7 +1918,7 @@ Ad, sembol ya da ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2114,7 +2122,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -2170,7 +2178,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -2282,7 +2290,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -2294,7 +2302,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -2306,7 +2314,7 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 @@ -2314,7 +2322,7 @@ Ben apps/client/src/app/components/header/header.component.html - 170 + 173 @@ -2322,7 +2330,7 @@ Ghostfolio'm apps/client/src/app/components/header/header.component.html - 228 + 231 @@ -2330,7 +2338,7 @@ Ghostfolio Hakkında apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -2342,7 +2350,7 @@ Giriş apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -2354,7 +2362,7 @@ Haydi Başlayalım apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -3237,7 +3245,7 @@ Account ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -3457,7 +3465,7 @@ Zen Mode apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -4167,6 +4175,10 @@ Import Import + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -9261,7 +9273,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -9301,7 +9313,7 @@ Do you really want to remove this sign in method? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -9385,7 +9397,7 @@ Base Currency apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 @@ -9393,7 +9405,7 @@ Language apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 @@ -9401,7 +9413,7 @@ Locale apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 @@ -9409,7 +9421,7 @@ Date and number format apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 @@ -9417,7 +9429,7 @@ Appearance apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 @@ -9425,7 +9437,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 @@ -9433,7 +9445,7 @@ Light apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 @@ -9441,7 +9453,7 @@ Dark apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 @@ -9449,7 +9461,7 @@ Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 @@ -9457,7 +9469,7 @@ Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 @@ -9465,7 +9477,7 @@ Sign in with fingerprint apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 @@ -9473,7 +9485,7 @@ Experimental Features apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 @@ -9481,7 +9493,7 @@ Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 @@ -9489,7 +9501,7 @@ User ID apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 @@ -9497,7 +9509,7 @@ Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -9641,7 +9653,7 @@ Change from All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 @@ -9649,7 +9661,7 @@ from ATH libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -10128,14 +10140,6 @@ 17 - - Add Access - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - Interest Interest @@ -10313,7 +10317,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -10393,7 +10397,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -10401,7 +10405,59 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 + + + + Asset Profile + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Do you really want to delete this asset profile? + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Add Manually + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + Ghostfolio, hisse senetleri, ETF’ler veya kripto para birimleri gibi varlıklarınızı birden fazla platformda takip etmenizi sağlayan bir kişisel finans panosudur. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + + + Last All Time High + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 512ad60e2..1edb3b26a 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -712,7 +712,7 @@ apps/client/src/app/components/header/header.component.html - 345 + 348 apps/client/src/app/components/home-market/home-market.html @@ -735,7 +735,7 @@ apps/client/src/app/components/header/header.component.html - 248 + 251 apps/client/src/app/pages/resources/resources-page.html @@ -754,7 +754,7 @@ apps/client/src/app/components/header/header.component.html - 316 + 319 @@ -855,7 +855,7 @@ apps/client/src/app/components/header/header.component.html - 303 + 306 apps/client/src/app/pages/features/features-page.html @@ -892,11 +892,11 @@ apps/client/src/app/components/header/header.component.html - 260 + 263 apps/client/src/app/components/header/header.component.html - 329 + 332 apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -1034,27 +1034,27 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html - 61 + 62 apps/client/src/app/components/user-account-settings/user-account-settings.html - 65 + 66 apps/client/src/app/components/user-account-settings/user-account-settings.html - 69 + 70 apps/client/src/app/components/user-account-settings/user-account-settings.html - 73 + 74 apps/client/src/app/components/user-account-settings/user-account-settings.html - 77 + 78 apps/client/src/app/components/user-account-settings/user-account-settings.html - 81 + 82 apps/client/src/app/pages/features/features-page.html @@ -1072,7 +1072,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 15 + 3 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -1083,14 +1083,14 @@ Grantee apps/client/src/app/components/access-table/access-table.component.html - 22 + 10 Type apps/client/src/app/components/access-table/access-table.component.html - 29 + 17 apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -1113,21 +1113,21 @@ Details apps/client/src/app/components/access-table/access-table.component.html - 39 + 27 Revoke apps/client/src/app/components/access-table/access-table.component.html - 66 + 54 Do you really want to revoke this granted access? apps/client/src/app/components/access-table/access-table.component.ts - 50 + 49 @@ -1164,7 +1164,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 44 + 46 @@ -1183,7 +1183,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 81 + 111 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -1260,7 +1260,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 62 + 92 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1383,7 +1383,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 50 + 45 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -1391,14 +1391,18 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 57 + 87 + + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 34 Data Source apps/client/src/app/components/admin-jobs/admin-jobs.html - 59 + 54 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -1413,70 +1417,70 @@ Attempts apps/client/src/app/components/admin-jobs/admin-jobs.html - 68 + 63 Created apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 72 Finished apps/client/src/app/components/admin-jobs/admin-jobs.html - 86 + 81 Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 95 + 90 Delete Jobs apps/client/src/app/components/admin-jobs/admin-jobs.html - 140 + 135 - - Asset Profile + + Asset Profiles - apps/client/src/app/components/admin-jobs/admin-jobs.html - 37 + libs/ui/src/lib/assistant/assistant.html + 67 - - Historical Market Data + + Historical Market Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 42 + 37,39 View Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 155 + 150 View Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 162 + 157 Delete Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 165 + 160 @@ -1520,11 +1524,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 195 + 225 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 18 + 40 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -1540,7 +1544,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 97 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -1563,11 +1567,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 202 + 232 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 25 + 47 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -1583,7 +1587,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 102 + 104 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1615,7 +1619,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 269 + 279 @@ -1626,7 +1630,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 86 + 116 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1645,7 +1649,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 125 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1664,7 +1668,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 72 + 102 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1684,6 +1688,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html 78 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 58 + Sectors Count @@ -1742,7 +1750,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 110 + 140 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1753,7 +1761,7 @@ Country apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 119 + 149 apps/client/src/app/components/admin-users/admin-users.html @@ -1768,7 +1776,7 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 125 + 155 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1783,7 +1791,7 @@ Countries apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 165 apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html @@ -1794,25 +1802,25 @@ Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 160 + 190 Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 171 + 201 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 182 + 212 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 72 + 74 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1830,7 +1838,7 @@ Name, symbol or ISIN apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 10 + 25 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2012,7 +2020,7 @@ apps/client/src/app/components/header/header.component.html - 221 + 224 apps/client/src/app/pages/accounts/accounts-page.html @@ -2062,7 +2070,7 @@ apps/client/src/app/components/header/header.component.html - 189 + 192 @@ -2162,7 +2170,7 @@ apps/client/src/app/components/header/header.component.html - 203 + 206 @@ -2173,7 +2181,7 @@ apps/client/src/app/components/header/header.component.html - 213 + 216 @@ -2184,28 +2192,28 @@ apps/client/src/app/components/header/header.component.html - 237 + 240 Me apps/client/src/app/components/header/header.component.html - 170 + 173 My Ghostfolio apps/client/src/app/components/header/header.component.html - 228 + 231 About Ghostfolio apps/client/src/app/components/header/header.component.html - 268 + 271 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -2216,7 +2224,7 @@ Sign in apps/client/src/app/components/header/header.component.html - 358 + 361 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -2227,7 +2235,7 @@ Get started apps/client/src/app/components/header/header.component.html - 370 + 373 @@ -3022,7 +3030,7 @@ Account ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 89 + 91 @@ -3219,7 +3227,7 @@ Zen Mode apps/client/src/app/components/user-account-settings/user-account-settings.html - 136 + 137 apps/client/src/app/pages/features/features-page.html @@ -3883,6 +3891,10 @@ Import + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 80 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 150 @@ -8872,7 +8884,7 @@ Auto apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 35 + 31 @@ -8907,7 +8919,7 @@ Do you really want to remove this sign in method? apps/client/src/app/components/user-account-settings/user-account-settings.component.ts - 184 + 181 @@ -8970,105 +8982,105 @@ Base Currency apps/client/src/app/components/user-account-settings/user-account-settings.html - 26 + 27 Language apps/client/src/app/components/user-account-settings/user-account-settings.html - 47 + 48 Locale apps/client/src/app/components/user-account-settings/user-account-settings.html - 90 + 91 Date and number format apps/client/src/app/components/user-account-settings/user-account-settings.html - 92 + 93 Appearance apps/client/src/app/components/user-account-settings/user-account-settings.html - 113 + 114 Auto apps/client/src/app/components/user-account-settings/user-account-settings.html - 125 + 126 Light apps/client/src/app/components/user-account-settings/user-account-settings.html - 126 + 127 Dark apps/client/src/app/components/user-account-settings/user-account-settings.html - 127 + 128 Distraction-free experience for turbulent times apps/client/src/app/components/user-account-settings/user-account-settings.html - 137,139 + 138,140 Biometric Authentication apps/client/src/app/components/user-account-settings/user-account-settings.html - 152 + 154 Sign in with fingerprint apps/client/src/app/components/user-account-settings/user-account-settings.html - 153 + 155 Experimental Features apps/client/src/app/components/user-account-settings/user-account-settings.html - 169 + 172 Sneak peek at upcoming functionality apps/client/src/app/components/user-account-settings/user-account-settings.html - 170,172 + 173,175 User ID apps/client/src/app/components/user-account-settings/user-account-settings.html - 184 + 188 Export Data apps/client/src/app/components/user-account-settings/user-account-settings.html - 191 + 195 @@ -9196,14 +9208,14 @@ Change from All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 31 from ATH libs/ui/src/lib/benchmark/benchmark.component.html - 14 + 33 @@ -9624,13 +9636,6 @@ 85 - - Add Access - - apps/client/src/app/components/access-table/access-table.component.html - 8,10 - - You are using the Live Demo. @@ -9744,7 +9749,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 154 + 184 @@ -9769,7 +9774,7 @@ Find holding... libs/ui/src/lib/assistant/assistant.component.ts - 87 + 89 @@ -9826,7 +9831,11 @@ No entries... libs/ui/src/lib/assistant/assistant.html - 62 + 63 + + + libs/ui/src/lib/assistant/assistant.html + 84 @@ -9836,6 +9845,48 @@ 11 + + Asset Profile + + apps/client/src/app/components/admin-jobs/admin-jobs.html + 31,33 + + + + Last All Time High + + libs/ui/src/lib/benchmark/benchmark.component.html + 15 + + + + Add Manually + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 19 + + + + Do you really want to delete this asset profile? + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 182 + + + + Search + + apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html + 16 + + + + Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms. + + apps/client/src/app/pages/i18n/i18n-page.html + 4,7 + + diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 8e79de778..175194cac 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -462,6 +462,15 @@ ngx-skeleton-loader { } } +/** + * Fix for https://github.com/angular/components/issues/26818 + */ +.mat-mdc-slide-toggle { + .mdc-switch__track { + background-color: rgba(var(--palette-primary-500), 1); + } +} + .mat-stepper-vertical, .mat-stepper-horizontal { background: transparent !important; @@ -510,7 +519,9 @@ ngx-skeleton-loader { padding-bottom: constant(safe-area-inset-bottom); .fab-container { - bottom: 5rem; + @media (max-width: 575.98px) { + bottom: 5rem; + } } .mat-mdc-tab-nav-bar { diff --git a/libs/common/src/lib/interfaces/admin-market-data.interface.ts b/libs/common/src/lib/interfaces/admin-market-data.interface.ts index d53562a23..08838d4bc 100644 --- a/libs/common/src/lib/interfaces/admin-market-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-market-data.interface.ts @@ -9,9 +9,11 @@ export interface AdminMarketDataItem { assetClass?: AssetClass; assetSubClass?: AssetSubClass; countriesCount: number; + currency: string; dataSource: DataSource; date?: Date; marketDataItemCount: number; + name: string; sectorsCount: number; symbol: string; } diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index e33b6b55f..47df3d2f9 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -33,6 +33,7 @@ import type { PortfolioReport } from './portfolio-report.interface'; import type { PortfolioSummary } from './portfolio-summary.interface'; import type { Position } from './position.interface'; import type { Product } from './product'; +import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; import type { BenchmarkResponse } from './responses/benchmark-response.interface'; import type { ResponseError } from './responses/errors.interface'; import type { ImportResponse } from './responses/import-response.interface'; @@ -49,6 +50,7 @@ import type { User } from './user.interface'; export { Access, + AccountBalancesResponse, Accounts, AdminData, AdminJobs, diff --git a/libs/common/src/lib/interfaces/position.interface.ts b/libs/common/src/lib/interfaces/position.interface.ts index 6d94e3443..1df07e0ce 100644 --- a/libs/common/src/lib/interfaces/position.interface.ts +++ b/libs/common/src/lib/interfaces/position.interface.ts @@ -1,9 +1,9 @@ -import { AssetClass, DataSource } from '@prisma/client'; - -import { MarketState } from '../types'; +import { MarketState } from '@ghostfolio/common/types'; +import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; export interface Position { assetClass: AssetClass; + assetSubClass: AssetSubClass; averagePrice: number; currency: string; dataSource: DataSource; diff --git a/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts b/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts new file mode 100644 index 000000000..9b4ec2f6d --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts @@ -0,0 +1,5 @@ +import { AccountBalance } from '@prisma/client'; + +export interface AccountBalancesResponse { + balances: Pick[]; +} diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts index 53a72206d..d00977c18 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts @@ -7,10 +7,12 @@ import { EventEmitter, HostBinding, Input, + OnChanges, Output, ViewChild } from '@angular/core'; -import { Position } from '@ghostfolio/common/interfaces'; +import { Params } from '@angular/router'; +import { ISearchResultItem } from '@ghostfolio/ui/assistant/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -18,22 +20,46 @@ import { Position } from '@ghostfolio/common/interfaces'; templateUrl: './assistant-list-item.html', styleUrls: ['./assistant-list-item.scss'] }) -export class AssistantListItemComponent implements FocusableOption { +export class AssistantListItemComponent implements FocusableOption, OnChanges { @HostBinding('attr.tabindex') tabindex = -1; @HostBinding('class.has-focus') get getHasFocus() { return this.hasFocus; } - @Input() holding: Position; + @Input() item: ISearchResultItem; + @Input() mode: 'assetProfile' | 'holding'; @Output() clicked = new EventEmitter(); @ViewChild('link') public linkElement: ElementRef; public hasFocus = false; + public queryParams: Params; + public routerLink: string[]; public constructor(private changeDetectorRef: ChangeDetectorRef) {} + public ngOnChanges() { + const dataSource = this.item?.dataSource; + const symbol = this.item?.symbol; + + if (this.mode === 'assetProfile') { + this.queryParams = { + dataSource, + symbol, + assetProfileDialog: true + }; + this.routerLink = ['/admin', 'market-data']; + } else if (this.mode === 'holding') { + this.queryParams = { + dataSource, + symbol, + positionDetailDialog: true + }; + this.routerLink = ['/portfolio', 'holdings']; + } + } + public focus() { this.hasFocus = true; diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html index 5e078241d..d75db3c8a 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html @@ -1,12 +1,16 @@ {{ holding?.name }}{{ item?.name }} +
+ {{ item?.symbol | gfSymbol }} · {{ item?.currency }} + · {{ item?.assetSubClassString }} diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.module.ts b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.module.ts index 9a88fc919..0c2e89726 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.module.ts +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.module.ts @@ -1,12 +1,13 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; +import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module'; import { AssistantListItemComponent } from './assistant-list-item.component'; @NgModule({ declarations: [AssistantListItemComponent], exports: [AssistantListItemComponent], - imports: [CommonModule, RouterModule] + imports: [CommonModule, GfSymbolModule, RouterModule] }) export class GfAssistantListItemModule {} diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 30db8f2e0..2cfd9eff2 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -16,9 +16,10 @@ import { } from '@angular/core'; import { FormControl } from '@angular/forms'; import { MatMenuTrigger } from '@angular/material/menu'; +import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; -import { Position } from '@ghostfolio/common/interfaces'; -import { EMPTY, Subject, lastValueFrom } from 'rxjs'; +import { translate } from '@ghostfolio/ui/i18n'; +import { EMPTY, Observable, Subject, lastValueFrom } from 'rxjs'; import { catchError, debounceTime, @@ -29,13 +30,13 @@ import { } from 'rxjs/operators'; import { AssistantListItemComponent } from './assistant-list-item/assistant-list-item.component'; -import { ISearchResults } from './interfaces/interfaces'; +import { ISearchResultItem, ISearchResults } from './interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'gf-assistant', - templateUrl: './assistant.html', - styleUrls: ['./assistant.scss'] + styleUrls: ['./assistant.scss'], + templateUrl: './assistant.html' }) export class AssistantComponent implements OnDestroy, OnInit { @HostListener('document:keydown', ['$event']) onKeydown( @@ -71,6 +72,7 @@ export class AssistantComponent implements OnDestroy, OnInit { } @Input() deviceType: string; + @Input() hasPermissionToAccessAdminControl: boolean; @Output() closed = new EventEmitter(); @@ -87,6 +89,7 @@ export class AssistantComponent implements OnDestroy, OnInit { public placeholder = $localize`Find holding...`; public searchFormControl = new FormControl(''); public searchResults: ISearchResults = { + assetProfiles: [], holdings: [] }; @@ -94,6 +97,7 @@ export class AssistantComponent implements OnDestroy, OnInit { private unsubscribeSubject = new Subject(); public constructor( + private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, private dataService: DataService ) {} @@ -104,6 +108,7 @@ export class AssistantComponent implements OnDestroy, OnInit { map((searchTerm) => { this.isLoading = true; this.searchResults = { + assetProfiles: [], holdings: [] }; @@ -115,6 +120,7 @@ export class AssistantComponent implements OnDestroy, OnInit { distinctUntilChanged(), mergeMap(async (searchTerm) => { const result = { + assetProfiles: [], holdings: [] }; @@ -140,6 +146,7 @@ export class AssistantComponent implements OnDestroy, OnInit { this.isLoading = true; this.keyManager = new FocusKeyManager(this.assistantListItems).withWrap(); this.searchResults = { + assetProfiles: [], holdings: [] }; @@ -180,10 +187,23 @@ export class AssistantComponent implements OnDestroy, OnInit { } private async getSearchResults(aSearchTerm: string) { - let holdings: Position[] = []; + let assetProfiles: ISearchResultItem[] = []; + let holdings: ISearchResultItem[] = []; + + if (this.hasPermissionToAccessAdminControl) { + try { + assetProfiles = await lastValueFrom( + this.searchAssetProfiles(aSearchTerm) + ); + assetProfiles = assetProfiles.slice( + 0, + AssistantComponent.SEARCH_RESULTS_DEFAULT_LIMIT + ); + } catch {} + } try { - holdings = await lastValueFrom(this.searchHolding(aSearchTerm)); + holdings = await lastValueFrom(this.searchHoldings(aSearchTerm)); holdings = holdings.slice( 0, AssistantComponent.SEARCH_RESULTS_DEFAULT_LIMIT @@ -191,11 +211,46 @@ export class AssistantComponent implements OnDestroy, OnInit { } catch {} return { + assetProfiles, holdings }; } - private searchHolding(aSearchTerm: string) { + private searchAssetProfiles( + aSearchTerm: string + ): Observable { + return this.adminService + .fetchAdminMarketData({ + filters: [ + { + id: aSearchTerm, + type: 'SEARCH_QUERY' + } + ], + take: AssistantComponent.SEARCH_RESULTS_DEFAULT_LIMIT + }) + .pipe( + catchError(() => { + return EMPTY; + }), + map(({ marketData }) => { + return marketData.map( + ({ assetSubClass, currency, dataSource, name, symbol }) => { + return { + currency, + dataSource, + name, + symbol, + assetSubClassString: translate(assetSubClass) + }; + } + ); + }), + takeUntil(this.unsubscribeSubject) + ); + } + + private searchHoldings(aSearchTerm: string): Observable { return this.dataService .fetchPositions({ filters: [ @@ -211,7 +266,17 @@ export class AssistantComponent implements OnDestroy, OnInit { return EMPTY; }), map(({ positions }) => { - return positions; + return positions.map( + ({ assetSubClass, currency, dataSource, name, symbol }) => { + return { + currency, + dataSource, + name, + symbol, + assetSubClassString: translate(assetSubClass) + }; + } + ); }), takeUntil(this.unsubscribeSubject) ); diff --git a/libs/ui/src/lib/assistant/assistant.html b/libs/ui/src/lib/assistant/assistant.html index c5db29658..0644c945e 100644 --- a/libs/ui/src/lib/assistant/assistant.html +++ b/libs/ui/src/lib/assistant/assistant.html @@ -45,8 +45,9 @@
Holdings
@@ -62,5 +63,26 @@
No entries...
+
+
Asset Profiles
+ + + +
No entries...
+
+
diff --git a/libs/ui/src/lib/assistant/interfaces/interfaces.ts b/libs/ui/src/lib/assistant/interfaces/interfaces.ts index 922091fb5..99f70dbe1 100644 --- a/libs/ui/src/lib/assistant/interfaces/interfaces.ts +++ b/libs/ui/src/lib/assistant/interfaces/interfaces.ts @@ -1,5 +1,12 @@ -import { Position } from '@ghostfolio/common/interfaces'; +import { UniqueAsset } from '@ghostfolio/common/interfaces'; + +export interface ISearchResultItem extends UniqueAsset { + assetSubClassString: string; + currency: string; + name: string; +} export interface ISearchResults { - holdings: Position[]; + assetProfiles: ISearchResultItem[]; + holdings: ISearchResultItem[]; } diff --git a/package.json b/package.json index bbbb99907..3b5247252 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.10.0", + "version": "2.12.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -81,9 +81,9 @@ "@nestjs/platform-express": "10.1.3", "@nestjs/schedule": "3.0.2", "@nestjs/serve-static": "4.0.0", - "@prisma/client": "5.3.1", - "@simplewebauthn/browser": "5.2.1", - "@simplewebauthn/server": "5.2.1", + "@prisma/client": "5.4.2", + "@simplewebauthn/browser": "8.3.1", + "@simplewebauthn/server": "8.3.2", "@stripe/stripe-js": "1.47.0", "alphavantage": "2.2.0", "big.js": "6.2.1", @@ -122,7 +122,7 @@ "passport": "0.6.0", "passport-google-oauth20": "2.0.0", "passport-jwt": "4.0.0", - "prisma": "5.3.1", + "prisma": "5.4.2", "reflect-metadata": "0.1.13", "rxjs": "7.5.6", "stripe": "11.12.0", @@ -157,7 +157,7 @@ "@nx/web": "16.7.4", "@nx/workspace": "16.7.4", "@schematics/angular": "16.2.0", - "@simplewebauthn/typescript-types": "5.2.1", + "@simplewebauthn/typescript-types": "8.0.0", "@storybook/addon-essentials": "7.3.2", "@storybook/angular": "7.3.2", "@storybook/core-server": "7.3.2", diff --git a/test/import/ok.csv b/test/import/ok.csv index 9f1f1c768..8be69ee90 100644 --- a/test/import/ok.csv +++ b/test/import/ok.csv @@ -1,5 +1,6 @@ -Date,Code,Currency,Price,Quantity,Action,Fee,Note -16-09-2021,MSFT,USD,298.580,5,buy,19.00,My first order 🤓 -17/11/2021,MSFT,USD,0.62,5,dividend,0.00 -01.01.2022,Penthouse Apartment,USD,500000.0,1,item,0.00 -20500606,MSFT,USD,0.00,0,buy,0.00 +Date,Code,DataSource,Currency,Price,Quantity,Action,Fee,Note +01-09-2021,Account Opening Fee,MANUAL,USD,0,0,fee,49, +16-09-2021,MSFT,YAHOO,USD,298.580,5,buy,19.00,My first order 🤓 +17/11/2021,MSFT,YAHOO,USD,0.62,5,dividend,0.00 +01.01.2022,Penthouse Apartment,MANUAL,USD,500000.0,1,item,0.00 +20500606,MSFT,YAHOO,USD,0.00,0,buy,0.00 diff --git a/yarn.lock b/yarn.lock index 69f995b5d..3c798bb15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1819,6 +1819,36 @@ resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== +"@cbor-extract/cbor-extract-darwin-arm64@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.1.1.tgz#5721f6dd3feae0b96d23122853ce977e0671b7a6" + integrity sha512-blVBy5MXz6m36Vx0DfLd7PChOQKEs8lK2bD1WJn/vVgG4FXZiZmZb2GECHFvVPA5T7OnODd9xZiL3nMCv6QUhA== + +"@cbor-extract/cbor-extract-darwin-x64@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.1.1.tgz#c25e7d0133950d87d101d7b3afafea8d50d83f5f" + integrity sha512-h6KFOzqk8jXTvkOftyRIWGrd7sKQzQv2jVdTL9nKSf3D2drCvQB/LHUxAOpPXo3pv2clDtKs3xnHalpEh3rDsw== + +"@cbor-extract/cbor-extract-linux-arm64@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.1.1.tgz#48f78e7d8f0fcc84ed074b6bfa6d15dd83187c63" + integrity sha512-SxAaRcYf8S0QHaMc7gvRSiTSr7nUYMqbUdErBEu+HYA4Q6UNydx1VwFE68hGcp1qvxcy9yT5U7gA+a5XikfwSQ== + +"@cbor-extract/cbor-extract-linux-arm@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.1.1.tgz#7507d346389cb682e44fab8fae9534edd52e2e41" + integrity sha512-ds0uikdcIGUjPyraV4oJqyVE5gl/qYBpa/Wnh6l6xLE2lj/hwnjT2XcZCChdXwW/YFZ1LUHs6waoYN8PmK0nKQ== + +"@cbor-extract/cbor-extract-linux-x64@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.1.1.tgz#b7c1d2be61c58ec18d58afbad52411ded63cd4cd" + integrity sha512-GVK+8fNIE9lJQHAlhOROYiI0Yd4bAZ4u++C2ZjlkS3YmO6hi+FUxe6Dqm+OKWTcMpL/l71N6CQAmaRcb4zyJuA== + +"@cbor-extract/cbor-extract-win32-x64@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.1.1.tgz#21b11a1a3f18c3e7d62fd5f87438b7ed2c64c1f7" + integrity sha512-2Niq1C41dCRIDeD8LddiH+mxGlO7HJ612Ll3D/E73ZWBmycued+8ghTr/Ho3CMOWPUEr08XtyBMVXAjqF+TcKw== + "@codewithdan/observable-store@2.2.15": version "2.2.15" resolved "https://registry.yarnpkg.com/@codewithdan/observable-store/-/observable-store-2.2.15.tgz#6d27e0988e182853def59a714b712f4389e558d2" @@ -2540,6 +2570,11 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== +"@hexagon/base64@^1.1.27": + version "1.1.28" + resolved "https://registry.yarnpkg.com/@hexagon/base64/-/base64-1.1.28.tgz#7d306a97f1423829be5b27c9d388fe50e3099d48" + integrity sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw== + "@humanwhocodes/config-array@^0.11.8": version "0.11.10" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" @@ -4252,7 +4287,7 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@peculiar/asn1-android@^2.1.7": +"@peculiar/asn1-android@^2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@peculiar/asn1-android/-/asn1-android-2.3.6.tgz#20363c23bc5b9a91f7ffd80d7c3842dccff8c20b" integrity sha512-zkYh4DsiRhiNfg6tWaUuRc+huwlb9XJbmeZLrjTz9v76UK1Ehq3EnfJFED6P3sdznW/nqWe46LoM9JrqxcD58g== @@ -4261,7 +4296,27 @@ asn1js "^3.0.5" tslib "^2.4.0" -"@peculiar/asn1-schema@^2.1.7", "@peculiar/asn1-schema@^2.3.6": +"@peculiar/asn1-ecc@^2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.3.6.tgz#f155f33f5c61df463d9b33b911d25578a19694b7" + integrity sha512-Hu1xzMJQWv8/GvzOiinaE6XiD1/kEhq2C/V89UEoWeZ2fLUcGNIvMxOr/pMyL0OmpRWj/mhCTXOZp4PP+a0aTg== + dependencies: + "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/asn1-x509" "^2.3.6" + asn1js "^3.0.5" + tslib "^2.4.0" + +"@peculiar/asn1-rsa@^2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.3.6.tgz#e2af2c52a914c60f33853a86a48905ec555b29c2" + integrity sha512-DswjJyAXZnvESuImGNTvbNKvh1XApBVqU+r3UmrFFTAI23gv62byl0f5OFKWTNhCf66WQrd3sklpsCZc/4+jwA== + dependencies: + "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/asn1-x509" "^2.3.6" + asn1js "^3.0.5" + tslib "^2.4.0" + +"@peculiar/asn1-schema@^2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz#3dd3c2ade7f702a9a94dfb395c192f5fa5d6b922" integrity sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA== @@ -4270,7 +4325,7 @@ pvtsutils "^1.3.2" tslib "^2.4.0" -"@peculiar/asn1-x509@^2.1.7": +"@peculiar/asn1-x509@^2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.3.6.tgz#e50154a460cdf43da8a41b23ee807a53e0036af0" integrity sha512-dRwX31R1lcbIdzbztiMvLNTDoGptxdV7HocNx87LfKU0fEWh7fTWJjx4oV+glETSy6heF/hJHB2J4RGB3vVSYg== @@ -4293,22 +4348,22 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@prisma/client@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.3.1.tgz#fc7fc2d91e814cc4fe18a4bc5e78bf851c26985e" - integrity sha512-ArOKjHwdFZIe1cGU56oIfy7wRuTn0FfZjGuU/AjgEBOQh+4rDkB6nF+AGHP8KaVpkBIiHGPQh3IpwQ3xDMdO0Q== +"@prisma/client@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.4.2.tgz#786f9c1d8f06d955933004ac638d14da4bf14025" + integrity sha512-2xsPaz4EaMKj1WS9iW6MlPhmbqtBsXAOeVttSePp8vTFTtvzh2hZbDgswwBdSCgPzmmwF+tLB259QzggvCmJqA== dependencies: - "@prisma/engines-version" "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59" + "@prisma/engines-version" "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" -"@prisma/engines-version@5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59": - version "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59.tgz#7eb6f5c6b7628b8b39df55c903f411528a6f761c" - integrity sha512-y5qbUi3ql2Xg7XraqcXEdMHh0MocBfnBzDn5GbV1xk23S3Mq8MGs+VjacTNiBh3dtEdUERCrUUG7Z3QaJ+h79w== +"@prisma/engines-version@5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574": + version "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574.tgz#ff14f2926890edee47e8f1d08df7b4f392ee34bf" + integrity sha512-wvupDL4AA1vf4TQNANg7kR7y98ITqPsk6aacfBxZKtrJKRIsWjURHkZCGcQliHdqCiW/hGreO6d6ZuSv9MhdAA== -"@prisma/engines@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.3.1.tgz#53cc72a5ed176dc27d22305fe5569c64cc78b381" - integrity sha512-6QkILNyfeeN67BNEPEtkgh3Xo2tm6D7V+UhrkBbRHqKw9CTaz/vvTP/ROwYSP/3JT2MtIutZm/EnhxUiuOPVDA== +"@prisma/engines@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.4.2.tgz#ba2b7faeb227c76e423e88f962afe6a031319f3f" + integrity sha512-fqeucJ3LH0e1eyFdT0zRx+oETLancu5+n4lhiYECyEz6H2RDskPJHJYHkVc0LhkU4Uv7fuEnppKU3nVKNzMh8g== "@radix-ui/number@1.0.1": version "1.0.1" @@ -4638,38 +4693,32 @@ "@sigstore/protobuf-specs" "^0.1.0" tuf-js "^1.1.7" -"@simplewebauthn/browser@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@simplewebauthn/browser/-/browser-5.2.1.tgz#569252a9f235a99aae90c4d1cc6c441f42637b8e" - integrity sha512-TxL3OPHJf57hmnfQoF3zRIQWEdsJLxrA9NcGdRK0sB/h3jd13kpGQonBtMnj4YBQnWTtRDZ804wlpI9IEMaJ9g== - -"@simplewebauthn/server@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@simplewebauthn/server/-/server-5.2.1.tgz#49038d2951ad2ac065bdf8342fdb13f78ee4df1c" - integrity sha512-+CQ8oJf9Io8y4ReYLagX5JG9ShntIkdeCPkMoyHLBSRPlNY0N/Yv3Iun4YPQ8d4LJUU9f8S1eD5bibIEMjWDRg== - dependencies: - "@peculiar/asn1-android" "^2.1.7" - "@peculiar/asn1-schema" "^2.1.7" - "@peculiar/asn1-x509" "^2.1.7" - "@simplewebauthn/typescript-types" "^5.2.1" - base64url "^3.0.1" - cbor "^5.1.0" - debug "^4.3.2" - elliptic "^6.5.3" - jsrsasign "^10.4.0" - jwk-to-pem "^2.0.4" - node-fetch "^2.6.0" - node-rsa "^1.1.1" +"@simplewebauthn/browser@8.3.1": + version "8.3.1" + resolved "https://registry.yarnpkg.com/@simplewebauthn/browser/-/browser-8.3.1.tgz#f5c1aed6313d61944a9e13f16ae4495750bddf93" + integrity sha512-bMW7oOkxX4ydRAkkPtJ1do2k9yOoIGc/hZYebcuEOVdJoC6wwVpu97mYY7Mz8B9hLlcaR5WFgBsLl5tSJVzm8A== + dependencies: + "@simplewebauthn/typescript-types" "^8.0.0" -"@simplewebauthn/typescript-types@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@simplewebauthn/typescript-types/-/typescript-types-5.2.1.tgz#a8229ce4f71be7edafe3bfdce062b332ef494f0d" - integrity sha512-t/NzbjaD0zu4ivUmiof2cPA8X5LHhFX+DflBBl71/dzEhl15qepDI2rxWdjB+Hc0FfOT1fBQnb1uP19fPcDUiA== +"@simplewebauthn/server@8.3.2": + version "8.3.2" + resolved "https://registry.yarnpkg.com/@simplewebauthn/server/-/server-8.3.2.tgz#dfdbe7af4c1258e786c4a0b1c83c54743ba7568c" + integrity sha512-ceo8t5gdO5W/JOePQWPDH+rAd8tO6QNalLU56rc9ItdzaTjk+qcYwQg/BKXDDg6117P3HKrRBkZwBrMJl4dOdA== + dependencies: + "@hexagon/base64" "^1.1.27" + "@peculiar/asn1-android" "^2.3.6" + "@peculiar/asn1-ecc" "^2.3.6" + "@peculiar/asn1-rsa" "^2.3.6" + "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/asn1-x509" "^2.3.6" + "@simplewebauthn/typescript-types" "^8.0.0" + cbor-x "^1.5.2" + cross-fetch "^4.0.0" -"@simplewebauthn/typescript-types@^5.2.1": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@simplewebauthn/typescript-types/-/typescript-types-5.4.0.tgz#533b28e7cabcc092396ecd07bbb953b71e7696b6" - integrity sha512-LeJq6Jx+o7D6iIlCy8CH5jCjwVcUvAReEo66VcF3nysfc/yKW5yCAPLSRmPITF4CRZTfnVPxUBUcveUQL6aBMA== +"@simplewebauthn/typescript-types@8.0.0", "@simplewebauthn/typescript-types@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@simplewebauthn/typescript-types/-/typescript-types-8.0.0.tgz#1698a7228aba880c5c1deba1f13a4f9fd8851cb3" + integrity sha512-d7Izb2H+LZJteXMkS8DmpAarD6mZdpIOu/av/yH4/u/3Pd6DKFLyBM3j8BMmUvUqpzvJvHARNrRfQYto58mtTQ== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -7122,17 +7171,7 @@ arrify@^2.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asn1.js@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@^0.2.4, asn1@~0.2.3: +asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== @@ -7461,7 +7500,7 @@ base64-js@^1.2.0, base64-js@^1.3.0, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64url@3.x.x, base64url@^3.0.1: +base64url@3.x.x: version "3.0.1" resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== @@ -7527,7 +7566,7 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@^9.0.0, bignumber.js@^9.0.1: +bignumber.js@^9.0.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -7556,11 +7595,6 @@ bluebird@^3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -7689,11 +7723,6 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - browser-assert@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" @@ -7953,13 +7982,26 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -cbor@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== +cbor-extract@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cbor-extract/-/cbor-extract-2.1.1.tgz#f154b31529fdb6b7c70fb3ca448f44eda96a1b42" + integrity sha512-1UX977+L+zOJHsp0mWFG13GLwO6ucKgSmSW6JTl8B9GUvACvHeIVpFqhU92299Z6PfD09aTXDell5p+lp1rUFA== dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" + node-gyp-build-optional-packages "5.0.3" + optionalDependencies: + "@cbor-extract/cbor-extract-darwin-arm64" "2.1.1" + "@cbor-extract/cbor-extract-darwin-x64" "2.1.1" + "@cbor-extract/cbor-extract-linux-arm" "2.1.1" + "@cbor-extract/cbor-extract-linux-arm64" "2.1.1" + "@cbor-extract/cbor-extract-linux-x64" "2.1.1" + "@cbor-extract/cbor-extract-win32-x64" "2.1.1" + +cbor-x@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/cbor-x/-/cbor-x-1.5.4.tgz#8f0754fa8589cbd7339b613b2b5717d133508e98" + integrity sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw== + optionalDependencies: + cbor-extract "^2.1.1" chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" @@ -8691,6 +8733,13 @@ cross-fetch@^3.0.5: dependencies: node-fetch "^2.6.12" +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -9741,19 +9790,6 @@ elkjs@^0.8.2: resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.8.2.tgz#c37763c5a3e24e042e318455e0147c912a7c248e" integrity sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ== -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" @@ -11673,14 +11709,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - hdr-histogram-js@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz#0b860534655722b6e3f3e7dca7b78867cf43dcb5" @@ -11710,15 +11738,6 @@ helmet@7.0.0: resolved "https://registry.yarnpkg.com/helmet/-/helmet-7.0.0.tgz#ac3011ba82fa2467f58075afa58a49427ba6212d" integrity sha512-MsIgYmdBh460ZZ8cJC81q4XJknjG567wzEmv46WOBblDb6TUd3z8/GhgmsM9pn8g2B80tAJ4m5/d3Bi1KrSUBQ== -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -13490,11 +13509,6 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -jsrsasign@^10.4.0: - version "10.8.6" - resolved "https://registry.yarnpkg.com/jsrsasign/-/jsrsasign-10.8.6.tgz#ebf7f3c812c6517af84f0d8a10115e0dbfabe145" - integrity sha512-bQmbVtsfbgaKBTWCKiDCPlUPbdlRIK/FzSwT3BzIgZl/cU6TqXu6pZJsCI/dJVrZ9Gir5GC4woqw9shH/v7MBw== - jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -13513,15 +13527,6 @@ jwa@^2.0.0: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jwk-to-pem@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/jwk-to-pem/-/jwk-to-pem-2.0.5.tgz#151310bcfbcf731adc5ad9f379cbc8b395742906" - integrity sha512-L90jwellhO8jRKYwbssU9ifaMVqajzj3fpRjDKcsDzrslU9syRbFqfkXtT4B89HYAap+xsxNcxgBSB09ig+a7A== - dependencies: - asn1.js "^5.3.0" - elliptic "^6.5.4" - safe-buffer "^5.0.1" - jws@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" @@ -14226,16 +14231,11 @@ mini-css-extract-plugin@~2.4.7: dependencies: schema-utils "^4.0.0" -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - minimatch@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" @@ -14600,7 +14600,7 @@ node-fetch-native@^1.0.2: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.2.0.tgz#13ec6df98f33168958dbfb6945f10aedf42e7ea8" integrity sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ== -node-fetch@^2.0.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: +node-fetch@^2.0.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: version "2.6.12" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== @@ -14612,6 +14612,11 @@ node-forge@^1, node-forge@^1.3.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-gyp-build-optional-packages@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz#92a89d400352c44ad3975010368072b41ad66c17" + integrity sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA== + node-gyp-build-optional-packages@5.0.7: version "5.0.7" resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" @@ -14654,18 +14659,6 @@ node-releases@^2.0.12: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -node-rsa@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/node-rsa/-/node-rsa-1.1.1.tgz#efd9ad382097782f506153398496f79e4464434d" - integrity sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw== - dependencies: - asn1 "^0.2.4" - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - non-layered-tidy-tree-layout@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804" @@ -15918,12 +15911,12 @@ pretty-hrtime@^1.0.3: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== -prisma@5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.3.1.tgz#a0932c1c1a5ed4ff449d064b193d9c7e94e8bf77" - integrity sha512-Wp2msQIlMPHe+5k5Od6xnsI/WNG7UJGgFUJgqv/ygc7kOECZapcSz/iU4NIEzISs3H1W9sFLjAPbg/gOqqtB7A== +prisma@5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.4.2.tgz#7eac9276439ec7073ec697c6c0dfa259d96e955e" + integrity sha512-GDMZwZy7mysB2oXU+angQqJ90iaPFdD0rHaZNkn+dio5NRkGLmMqmXs31//tg/qXT3iB0cTQwnGGQNuirhSTZg== dependencies: - "@prisma/engines" "5.3.1" + "@prisma/engines" "5.4.2" prismjs@^1.28.0: version "1.29.0"