Browse Source

Feature/migrate from Angular Material design 2 to 3 (#6158)

* Task/extract footer to component (#5702)

* Extract footer to component

* Update changelog

* Feature/improve currency validation in search functionality of data provider service (#5745)

* Improve currency validation

* Update changelog

* Feature/use asset profile resolutions in getQuotes() of FMP service (part 2) (#5750)

* Use asset profile resolutions in getQuotes()

* Bugfix/respect includeIndices flag in search functionality of FMP service (#5746)

* Respect includeIndices in search()

* Update changelog

* Feature/improve currency validation in getAssetProfiles() functionality of data provider service (#5747)

* Improve currency validation

* Update changelog

* Bugfix/reset scroll position on page change (#5753)

* Reset scroll position on page change

* Update changelog

* Feature/add Stealth Wealth to glossary (#5754)

* Add Stealth Wealth

* Update changelog

* Bugfix/dark mode in logo carousel component (#5758)

* Fix dark mode

* Update changelog

* Task/refactor interest to interestInBaseCurrency in portfolio summary interface (#5763)

* Refactor interest to interestInBaseCurrency

* Feature/extend pricing page (#5761)

* Extend pricing page

* Update changelog

* Bugfix/fix word wrap in menus of activities table (#5764)

* Fix word wrap

* Update changelog

* Feature/improve portfolio calculator unit tests by loading currency from user settings (#5765)

* Use currency from user settings

* Update changelog

* Task/migrate blog page component to standalone (#5742)

* Migrate blog page component to standalone

* Update changelog

* Task/refactor PortfolioDividends interface to PortfolioDividendsResponse interface (#5773)

* Refactor PortfolioDividends to PortfolioDividendsResponse

* Bugfix/total buy and sell calculation in summary (#5759)

* Fix total buy and sell calculation related to activities in custom currency

* Update changelog

* Bugfix/import of activity with MANUAL data source (CSV file) (#5749)

* Fix import of activity with MANUAL data source

* Update changelog

---------

Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Bugfix/fix penthouse-apartment.json (#5775)

* Fix penthouse-apartment.json

* Feature/update locales (#5714)

* Update locales

* Update translations

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/refactor PortfolioInvestments interface to PortfolioInvestmentsResponse interface (#5774)

* Refactor PortfolioInvestments to PortfolioInvestmentsResponse

* Task/refactor BenchmarkMarketDataDetails to BenchmarkMarketDataDetailsResponse (#5771)

* Refactor BenchmarkMarketDataDetails to BenchmarkMarketDataDetailsResponse

* Release 2.209.0 (#5780)

* Feature/allow data gathering by date range (#5762)

* Allow data gathering by date range

* Update changelog

* Feature/update locales (#5788)

* Update locales

* Update translations

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/auto-pad holdings table in AI prompt using tablemark (#5772)

* Auto-pad holdings table in AI prompt using tablemark

* Update changelog

* Task/improve changelog entry (#5790)

* Update changelog

* Task/harmonize wording in glossary (#5781)

* Harmonize wording

* Task/improve typings of getInfo() functionality (#5803)

* Improve typings

* Task/harmonize interfaces naming (#5796)

* Harmonize interfaces naming

* Task/improve typings of getAsset() functionality (#5804)

* Improve typings of getAsset() functionality

* Task/extract portfolio filter sub form of assistant to reusable component (#5618)

* Extract portfolio filter sub form of assistant to reusable component

* Update changelog

* Task/extend rule settings interface by locale (#5802)

* Extend rule settings interface by locale

* Task/refactor Export interface to ExportResponse interface (#5805)

* Refactor Export interface to ExportResponse interface

* Task/improve typings of getOrderById() functionality (#5810)

* Improve typings of getOrderById() functionality

* Bugfix/database seed (#5792)

* Fix database seed

* Update changelog

---------

Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/upgrade ioredis to forfeit overriding defaults (#5813)

* Upgrade ioredis to forfeit overriding defaults

* Update changelog

* Bugfix/submit form of login with access token dialog with enter key press (#5751)

* Fix form submit with enter key press

* Update changelog

* Task/introduce interface for create Stripe checkout session response (#5791)

* Introduce interface

* Task/clean up unused eslint-disable-next-line directives (#5782)

* Clean up unused eslint-disable-next-line directives

* Release 2.210.0 (#5814)

* Bugfix/include missing dotenv packages (#5817)

* Include missing dotenv packages

* Release 2.210.1 (#5818)

* Task/upgrade prisma to version 6.18.0 (#5823)

* Upgrade prisma to version 6.18.0

* Update changelog

* Task/format value in Buying Power rule (#5824)

* Format value in Buying Power rule

* Update changelog

* Task/move prisma.config.ts to .config/prisma.ts (#5821)

* Move prisma.config.ts to .config/prisma.ts

* Update changelog

* Task/extend export response by performanceCalculationType (#5816)

* Extend export response by performanceCalculationType

* Update changelog

* Bugfix/footer row style of accounts table component (#5826)

* Fix style of footer row

* Update changelog

* Task/migrate tablemark to v4 (#5809)

* Migrate tablemark to v4

* Update changelog

* Bugfix/custom asset name rendering in import activities dialog (#5787)

* Fix custom asset name rendering in import activities dialog 

* Update changelog

* Release 2.211.0-beta.0 (#5829)

* Feature/set up user detail dialog in admin control panel (#5819)

* Set up user detail dialog

* Update changelog

* Feature/update locales (#5807)

* Update locales

* Update translations

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/refactor Activities interface to ActivitiesResponse interface (#5835)

* Refactor Activities interface to ActivitiesResponse interface

* Feature/integrate SelfhostedHub into logo carousel (#5786)

* Add SelfhostedHub

* Update changelog

---------

Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Bugfix/market price in base currency during the portfolio snapshot calculation (#5828)

* Add fallback for market price in base currency

* Update changelog

* Release 2.211.0 (#5837)

* Release 2.211.0 (#5838)

* Bugfix/provide missing locale to rule settings dialog (#5845)

* Provide locale to rule settings dialog

* Update changelog

* Feature/extend user detail dialog (#5844)

* Extend user detail dialog

* Update changelog

* Feature/add close holding button to holding detail dialog (#5832)

* Add close holding button to holding detail dialog

* Update changelog

* Feature/update locales (#5847)

* Update locales

* Update translations

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/improve typings of dialogs (#5846)

* Improve typings

* Task/extend Contributing section in README.md (#5864)

* Add GitHub Sponsors

* Task/add LambdaTest to Sponsors in README.md (#5861)

* Add LambdaTest

* Task/refactor column definitions in AI service (#5834)

* Refactor column definitions in AI service

* Update changelog

* Feature/set up sponsors section on about page (#5862)

* Set up sponsors section

* Update changelog

* Bugfix/fix typography hierarchy in resources pages (#5863)

* Fix hierarchy

* Feature/improve usability of user detail dialog (#5868)

* Do not reload on close

* Update changelog

* Release 2.212.0 (#5871)

* Feature/extend menu in activities table component (#5855)

* Extend menu in activities table component

* Update changelog

* Feature/improve icon of holdings tabs (#5842)

* Improve icon of holdings tabs

* Update changelog

* Feature/update locales (#5852)

* Update locales

* Update translation

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/add error logging to symbol lookup in Trackinsight data enhancer (#5872)

* Add error logging

* Update changelog

* Bugfix/LambdaTest logo (#5873)

* Fix LambdaTest logo

* Task/migrate tags selector component in holding detail dialog to form control (#5850)

* Migrate tags selector component to form control

* Update changelog

* Feature/upgrade NestJS to version 11.1.8 (#5874)

* Upgrade nestjs to version 11.1.8

* Update changelog

* Release 2.213.0 (#5876)

* Feature/refresh cryptocurrencies list 20251031 (#5880)

* Update cryptocurrencies.json

* Update changelog

* Task/conditionally show Sponsors section on about page (#5882)

* Conditionally show sponsors section

* Feature/update OSS friends 20251031 (#5879)

* Update OSS friends

* Feature/improve icon of View Holding menu item in activities table (#5881)

* Improve icon

* Update changelog

* Task/resolve @typescript-eslint/prefer-regexp-exec ESLint rule (#5885)

* fix(lint): remove @typescript-eslint/prefer-regexp-exec override

* fix(lint): resolve eslint errors

* Task/upgrade ng-extract-i18n-merge to version 3.1.0 (#5886)

* Upgrade ng-extract-i18n-merge to version 3.1.0

* Update changelog

* Task/resolve @typescript-eslint/no-unsafe-function-type ESLint rule (#5889)

* fix(lint): remove @typescript-eslint/no-unsafe-function-type override

* fix(lint): resolve eslint errors

* Task/resolve no-constant-binary-expression ESLint rule (#5890)

* fix(lint): remove no-constant-binary-expression override

* fix(lint): resolve eslint errors

* Task/extend user settings in test files (#5836)

* Extend user settings by performance calculation type

* Feature/set up unit test for BTCEUR in base currency EUR (#5778)

* Set up test

* Feature/atomic data replacement during historical market data gathering (#5858)

* Atomic data replacement during historical market data gathering

* Update changelog

* Task/remove Internet Identity as social login provider (#5891)

* Remove Internet Identity

* Update changelog

* Task/upgrade countries-list to version 3.2.0 (#5888)

* Upgrade countries-list to version 3.2.0

* Update changelog

* Task/upgrade twitter-api-v2 to version 1.27.0 (#5892)

* Upgrade twitter-api-v2 to version 1.27.0

* Update changelog

* Release 2.214.0 (#5893)

* Feature/migrate client build executor to @nx/angular:browser-esbuild (#5883)

* Migrate client build executor to @nx/angular:browser-esbuild

* Update changelog

* Bugfix/fix style of safe withdrawal rate selector (#5899)

* Fix style of selector

* Update changelog

* Task/introduce interface for get admin users response (#5903)

* Introduce interface for get admin users response

* Task/improve localization in lib components (#5907)

* Improve localization

* Task/improve localization of get started buttons (#5913)

* Improve localization

* Feature/update locales (#5875)

* Update locales

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Feature/improve usability for benchmark and markets management in asset profile dialog (#5911)

* Improve usability for benchmark and markets management

* Update changelog

* Feature/update locales (#5916)

* Update locales

* Update translation

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Bugfix/header alignment in admin platform and tag tables (#5908)

* Fix header alignment

* Update changelog

* Task/migrate app component to standalone (#5906)

* Migrate app component to standalone

* Update changelog

* Bugfix/assign admin role to first user signing up (#5914)

* Assign admin role to first user signing up

* Update changelog

* Release 2.215.0-beta.1 (#5918)

* Feature/add endpoint to get user by id (#5910)

* Add endpoint to get user by id

* Update changelog

---------

Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/upgrade @ionic/angular to version 8.7.8 (#5909)

* Upgrade @ionic/angular to version 8.7.8

* Update changelog

* Release 2.215.0 (#5922)

* Task/reorder lifecycle hooks in various components (#5919)

* Reorder lifecycle hooks

* Task/upgrade chart.js to version 4.5.1 (#5905)

* Upgrade chart.js to version 4.5.1

* Update changelog

* Task/upgrade svgmap to version 2.14.0 (#5904)

* Upgrade svgmap to version 2.14.0

* Update changelog

* Task/introduce interface for get account response (#5902)

* Introduce interface for get account response

* Feature/improve language localization for ZH 20251110 (#5928)

* Improve language localization for ZH

* Update changelog

* Task/improve localization of limited offer (#5929)

* Improve localization

* Task/improve promotion system (#5930)

* Add fallback to promotion logic

* Task/refactor primary text colors (#5900)

* Refactor primary text colors

* Release 2.216.0 (#5932)

* Task/improve localization of auto-renewal (#5933)

* Improve localization

* Task/refactor getHolding() in portfolio service (#5898)

* Refactor getHolding() if no holding has been found

* Update changelog

* Feature/update locales (#5931)

* Update locales

* Update translation

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/upgrade prisma to version 6.19.0 (#5937)

* Upgrade prisma to version 6.19.0

* Update changelog

* Task/fetch user data on demand in user detail dialog (#5923)

* Fetch user data on demand in user detail dialog

* Update changelog

* Task/enforce module boundaries for api and common modules (#5925)

* feat(lint): allow circular self deps

* feat(lint): enforce module boundaries

* feat(lib): move data provider response interface to common

* feat(lib): move symbol item interface to common

* feat(lib): move activity interface to common

* feat(lint): temporarily disable @nx/enforce-module-boundaries for ui files

* feat(lint): temporarily disable @nx/enforce-module-boundaries for client files

* feat(lint): ignore circular deps between client and ui

* feat(common): implement barrel export for data provider response interface

* feat(common): implement barrel export for activity interface

* feat(common): implement barrel export for symbol item interface

* Feature/separate Google OAuth and token authentication (#5915)

* Separate Google OAuth and token authentication

* Update changelog

* Feature/automatically gather required exchange rates (#5917)

* Automatically gather required exchange rates

* Update changelog

* Task/enforce module boundaries for client module (#5944)

* feat(lib): move SymbolPipe to common lib

* feat(lib): move CreateAccountBalanceDto to common lib

* feat(lib): move IsCurrencyCode validator to common lib

* feat(lib): move UpdateAssetProfileDto to common lib

* feat(lib): move UpdateUserSettingDto to common lib

* feat(lib): move CreateAccessDto to common lib

* feat(lib): move UpdateAccessDto to common lib

* feat(lib): move CreateTagDto to common lib

* feat(lib): move UpdateTagDto to common lib

* feat(lib): move CreatePlatformDto to common lib

* feat(lib): move UpdatePlatformDto to common lib

* feat(lib): move CreateOrderDto to common lib

* feat(lib): move UpdateOrderDto to common lib

* feat(lib): move RuleSettings interface to common lib

* feat(lib): move CreateAccountDto TransferBalanceDto UpdateAccountDto to common lib

* feat(lib): move CreateAccountWithBalancesDto to common lib

* feat(lib): move CreateAssetProfileDto and CreateAssetProfileWithMarketDataDto to common lib

* feat(lib): move AuthDeviceDto to common lib

* feat(lib): move simplewebauthn interfaces to common lib

This includes AssertionCredentialJSON, AttestationCredentialJSON, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON.

* feat(lib): move UpdateMarketDataDto to common lib

* feat(lib): move UpdateBulkMarketDataDto to common lib

* feat(lib): move CreateWatchlistItemDto to common lib

* feat(lib): move DeleteOwnUserDto to common lib

* feat(lib): move UserItem interface to common lib

* feat(lib): move UpdateOwnAccessTokenDto to common lib

* feat(lib): move PropertyDto to common lib

* Bugfix/fix type error in CreateAccountWithBalancesDto (#5945)

* Refactor import

* Feature/add black weeks 2025 blog post (#5942)

* Add Black Weeks 2025 blog post

* Update changelog

* Release 2.217.0 (#5946)

* Bugfix/missing reflect-metadata polyfill in apps/client (#5952)

* Add reflect-metadata to polyfill

* Task/ignore forex in search results of FMP service (#5951)

* Ignore forex in search

* Update changelog

* Release 2.217.1 (#5954)

* Task/enforce module boundaries for ui module (#5947)

* feat(lib): move ConfirmationDialogType to common lib

* fix(lib): move SubscriptionType to enums

* feat(lib): move validateObjectForForm util to common lib

* feat(lib): move GfDialogFooterComponent to ui lib

* feat(lib): move GfDialogHeaderComponent to ui lib

* Task/integrate OSS Gallery into logo carousel (#5959)

* Integrate OSS Gallery

* Update changelog

* Task/upgrade yahoo-finance2 to version 3.10.1 (#5956)

* Upgrade yahoo-finance2 to version 3.10.1

* Update changelog

* Feature/extend menu in accounts table component (#5960)

* Extend menu

* Update changelog

* Feature/simplify portfolio summary on mobile (#5962)

* Simplify portfolio summary on mobile

* Improve numerical precision
* Hide hints

* Update changelog

* Feature/extend portfolio summary by percentage values (#5964)

* Extend summary by percentage values

* Update changelog

* Release 2.218.0 (#5965)

* Feature/add authentication method to user detail dialog (#5970)

* Extend user detail dialog

* Update changelog

* Feature/improve transform data source in request and response interceptor (#5972)

* Resolve data source of GHOSTFOLIO data provider

* Update changelog

* Feature/update locales (#5940)

* Update locales

* Update translation

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Feature/disable delete activities action if empty table (#5971)

* Disable delete activities action

* Update changelog

* Bugfix/edit of draft activities (#5974)

* Fix edit of draft activities

* Update changelog

* Task/refresh cryptocurrencies list 20251121 (#5967)

* Update cryptocurrencies.json

* Update changelog

* Task/improve validation of currency management in Admin Control panel (#5973)

* Improve validation (disallow GBp)

* Update changelog

* Feature/various improvements on pricing page (#5982)

* Various improvements

* Update changelog

* Task/update OSS friends (#5968)

* Update OSS friends

* Feature/update locales (#5977)

* Update locales

* Update translation

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/upgrade yahoo-finance2 to version 3.10.2 (#5978)

* Upgrade yahoo-finance2 to version 3.10.2

* Update changelog

* Release 2.219.0 (#5983)

* Bugfix/exchange rate calculation when converting derived currencies (#5961)

* Fix exchange rate calculation when converting derived currencies

* Update changelog

* Task/refactor from v4 as uuidv4 from uuid to crypto.randomUUID() (#5990)

* Refactor from v4 as uuidv4 from uuid to randomUUID() from node:crypto

* Update changelog

* Task/restructure user detail dialog (#5985)

* Restructure user detail dialog

* Task/upgrade color to version 5.0.3 (#5984)

* Upgrade color to version 5.0.3

* Update changelog

* Task/remove obsolete includeDrafts attribute in public controller (#5975)

* Remove obsolete includeDrafts attribute

* Feature/improve asset profile data gathering (#5997)

* Improve asset profile data gathering

* Update changelog

* Task/remove Cypress setup (#5995)

* Remove Cypress setup

* Update changelog

* Task/improve usability of actions in various tables (#5992)

* Improve usability of actions

* Task/upgrade prettier to version 3.7.2 (#5999)

* Upgrade prettier to version 3.7.2

* Update changelog

* Release 2.220.0 (#6001)

* Feature/extend Storybook story of portfolio proportion chart component by story in percentage (#6007)

* Extend Storybook story

* Update changelog

* Bugfix/countries in FMP service (#6005)

* Introduce countries mapping

* Update changelog

* Task/upgrade @internationalized/number to version 3.6.5 (#6000)

* Upgrade @internationalized/number to version 3.6.5

* Update changelog

* Task/refactor query parameters in data provider services (#6011)

* Refactor query parameters

* Update changelog

* Task/upgrade prettier to version 3.7.3 (#6014)

* Upgrade prettier to version 3.7.3

* Update changelog

* Bugfix/improve search by name in FMP service (#6012)

* Improve search by name

* Update changelog

* Task/extend subscription offer key type (#6022)

* Extend SubscriptionOfferKey

* Bugfix/user endpoint of admin control panel (#6021)

* Fix user endpoint

* Update changelog

* Release 2.221.0 (#6024)

* Task/upgrade envalid to version 8.1.1 (#6026)

* Upgrade envalid to version 8.1.1

* Update changelog

* Bugfix/clean up CHANGELOG.md (#5976)

* Clean up

* Task/remove return type in parseSector() of YahooFinanceService (#6006)

* Remove return type

* Task/upgrade prettier to version 3.7.4 (#6031)

* Upgrade prettier to version 3.7.4

* Update changelog

* Task/prettify files 20251204 (#6033)

* Prettify files

* Task/restructure pricing page (#6037)

* Restructure pricing page

* Task/increase numerical precision for cryptocurrency quantities in holding detail dialog (#6038)

* Increase numerical precision for cryptocurrency quantities

* Update changelog

* Feature/data source transformation in import for self-hosted environments (#6032)

* Introduce data source transformation support for self-hosted environments

* Update changelog

* Feature/add 3D hover effect to membership card component (#5966)

* Add 3D hover effect to membership card component

* Update changelog

* Feature/OIDC authentication (#5981)

* Set up OIDC authentication

* Update changelog

* Task/activate 3d hover effect in account membership overview (#6039)

* Activate 3d hover effect

* Release 2.222.0 (#6041)

* Task/improve OIDC login button label (#6043)

* Improve label

* Feature/update locales (#5993)

* Update locales

* Update translation

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/add OpenID Connect (OIDC) configuration details to README (#6044)

* Add OpenID Connect (OIDC) configuration details

* Task/move notification service to UI library (#6048)

* Move notification service to UI library

* Update changelog

* Task/update OSS Friends (#6047)

* Update OSS Friends

* Task/update VS Code extension of Prettier (#6010)

* Update VS Code extension of Prettier

* Bugfix/allocate remaining percentage to unknown data in portfolio proportion chart (#6054)

* Allocate remaining percentage to unknown data in portfolio proportion chart

* Update changelog

* Feature/extend FIRE page with projection information at retirement date (#6034)

* Extend FIRE page with projection information at retirement date

* Update changelog

---------

Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/update note in personal finance tools (#6053)

* Update note

* Feature/update locales (#6049)

* Update locales

* Update translations

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/improve language localization for de 20251214 (#6066)

* Improve language localization

* Feature/update locales (#6065)

* Update locales

* Update translations

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Release 2.223.0 (#6067)

* Task/refresh cryptocurrencies list 20251215 (#6073)

* Update cryptocurrencies.json

* Update changelog

* Task/remove deprecated Angular CLI decorator (#6071)

* Remove deprecated Angular CLI decorator

* Update changelog

* Task/include first and last date of each calendar year in getChartDateMap() (#6069)

* Include first and last date of each calendar year in getChartDateMap()

* Update changelog

* Task/improve localization of various components (#6074)

* Improve localization

* Bugfix/localize date formatting in FIRE calculator (#6077)

* Localize date formatting

* Update changelog

* Feature/add ISIN number to asset profile dialog (#6076)

* Add ISIN number

* Update changelog

* Task/refactor language in various components (#6078)

* Refactor language

* Feature/restore support for specific calendar year date ranges in assistant (#6079)

* Restore specific calendar year date ranges

* Update changelog

* Update locales (#6068)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Release 2.224.0 (#6080)

* Revert "Task/refactor language in various components (#6078)" (#6081)

This reverts commit 80c278555c.

* Release 2.224.1 (#6084)

* Release 2.224.2 (#6086)

* Feature/extend personal finance tools 20251220 (#6087)

* Add BlueBudget, Moneyspire and Pennies

* Task/refactor href in user account settings component (#6085)

* Refactoring

* Task/upgrade shx to version 0.4.0 (#6088)

* Upgrade shx to version 0.4.0

* Update changelog

* Bugfix/add missing currency suffix to cash balance field in create or update account dialog (#6092)

* Add missing currency suffix to cash balance field in create or update account dialog

* Update changelog

* Bugfix/fix asset profile deletion and allow editing asset profile identifiers with MANUAL data source (#6090)

* Fix asset profile deletion and allow editing asset profile identifiers with MANUAL data source

* Update changelog

* Task/refactor read platforms permission (#6095)

* Refactor read platforms permission

* Task/upgrade to Nx 22.0.4 and Angular 20.3 (#6098)

* feat(nx): migrate to v22.0.4

* fix(deps): install with Node.js 22

* Update changelog

* Task/upgrade to Nx 22.1.3 and Storybook 10.1.10 (#6105)

* chore(deps): bump nx from 22.0 to 22.1

* fix(ts): set moduleResolution to bundler

This is a requirement for Storybook 10 migration. See https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#require-tsconfigjson-moduleresolution-set-to-value-that-supports-types-condition.

* feat(sb): change main.js to ESM

See https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#the-storybookmain-file-and-other-presets-must-be-valid-esm.

* fix(ts): set target to es2022

This resolves the warning: TypeScript compiler options "target" and "useDefineForClassFields" are set to "ES2022" and "false" respectively by the Angular CLI. To control ECMA version and features use the Browserslist configuration. For more information, see https://angular.dev/tools/cli/build#configuring-browser-compatibility.

* fix(ts): set esModuleInterop to true

* feat(docs): update changelog

* fix(ts): set moduleResolution to bundler

* fix(ts): revert target changes

* Update changelog

* Task/upgrade ng-extract-i18n-merge from 3.1.0 to 3.2.1 (#6106)

* chore(deps): bump ng-extract-i18n-merge from 3.1.0 to 3.2.1

* feat(docs): update changelog

* Task/revert adding styles to ui:storybook target (#6107)

* fix(sb): revert adding styles to ui:storybook target

* Task/upgrade jest to version 30.2.0 (#6110)

* chore(deps): bump jest to 30.2.0

* fix(test): update setup test scripts

* fix(deps): resolve vulns

* Bugfix/time in market for impersonation mode (#6103)

* Fix time in market for impersonation mode

* Update changelog

* Task/improve language localization for de 20251229 (#6108)

* Update translations

* Update changelog

* Feature/create endpoint to get all platforms (#6097)

* Create endpoint to get all platforms

* Update changelog

* Task/improve user detail dialog routing in Admin Control panel (#6104)

* Improve user detail dialog routing in Admin Control panel

* Update changelog

* Task/deprecate platforms in info item (#6114)

* Deprecate platforms

* Task/eliminate ngx-stripe (#6116)

* Eliminate ngx-stripe

* Update changelog

* Task/upgrade to marked 16.4.2 and ngx-markdown 20.1.0 (#6117)

* chore(deps): bump marked and ngx-markdown

* fix(client): change marked script file

* fix(client): change umd to esm

* fix(client): remove marked script file from project.json

* feat(docs): update changelog

* Task/upgrade to Nx 22.3.3 and Angular 21.0 (#6109)

* chore(deps): upgrade to Nx 22.3.3 and Angular 21.0

* feat(nx): run migrations

* fix(ts): change module and moduleResolution for api

* feat(ts): remove duplicates of bundler module resolution

* fix(ts): enable ESM interoperability

* fix(api): update imports

* fix(ts): set module to preserve in api spec

* fix(ts): update target

* resolve comments

* fix(api): set jest moduleNameMapper

* fix(ts): update tsconfig in api spec

* fix(api): revert import changes

* fix(apps): revert unnecessary changes

* fix(client): change marked js file

* fix(deps): remove duplicates

* Release 2.225.0 (#6120)

* Task/upgrade class-validator to version 0.14.3 (#6091)

* Upgrade class-validator to version 0.14.3

* Update changelog

* Task/update year to 2026 (#6119)

* Update year

* Task/extend data providers content in self-hosting FAQ (#6123)

* Extend data providers content

* Update changelog

* Task/upgrade yahoo-finance2 to version 3.11.2 (#6126)

* Upgrade yahoo-finance2 to version 3.11.2

* Update changelog

* Release 2.226.0 (#6127)

* Bugfix/jsonpath import in manual service (#6129)

* Fix jsonpath import

* Update changelog

* Bugfix/initialize input properties in fire calculator (#6122)

* Initialize input properties

* Update changelog

* Task/upgrade stripe to version 20.1.0 (#6132)

* Upgrade stripe to version 20.1.0

* Update changelog

* Task/remove deprecated public Stripe key (#6124)

* Remove deprecated public Stripe key

* Update changelog

* Release 2.227.0 (#6134)

* Task/move scraper configuration to tab in asset profile dialog (#6094)

* Move scraper configuration to tab in asset profile dialog

* Update changelog

* Task/lazy load platforms via API in create or update account dialog (#6130)

* Lazy load platforms via API

* Update changelog

* Task/remove deprecated public Stripe key (part 2) (#6138)

* Remove deprecated public Stripe key

* Feature/update locales (#6083)

* Update locales

* Update translations

* Update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>

* Task/rename branch and title in extract locales GitHub action (#6142)

* Rename branch and title

* Feature/extend holdings endpoint to include performance with currency effects for cash positions (#5650)

* Extend holdings endpoint to include performance with currency effects for cash positions

* Update changelog

* Bugfix/header alignment in accounts table on mobile (#6143)

* Fix header alignment

* Update changelog

* Task/upgrade @date-fns/utc to version 2.1.1 (#6141)

* Upgrade @date-fns/utc to version 2.1.1

* Update changelog

* Release 2.228.0 (#6146)

* Task/deprecate activities in portfolio holding response (#6147)

* Deprecate activities

* Update changelog

* Task/move data service to UI library (#6154)

* feat(lib): move data service

* feat(client): update imports

* feat(lib): update imports

* Update changelog

* Task/refactor dividend import (#6150)

* Refactor dividend import

* Update changelog

---------

Co-authored-by: Aditya Pawar <143347456+JustAdi10@users.noreply.github.com>
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Co-authored-by: Mariam Saeed <69825646+Mariam-Saeed@users.noreply.github.com>
Co-authored-by: Dibyendu Sahoo <dibyendusahoo03@gmail.com>
Co-authored-by: H_S <81474463+HarjobandeepSingh@users.noreply.github.com>
Co-authored-by: Umesh Pal <127204670+72umesh@users.noreply.github.com>
Co-authored-by: Sven Günther <sven.guenther@it-agile.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Aman <142656811+Amanthisside@users.noreply.github.com>
Co-authored-by: Google <53668973+GooglyBlox@users.noreply.github.com>
Co-authored-by: s-vamshi <62489114+s-vamshi@users.noreply.github.com>
Co-authored-by: David Requeno <108202767+DavidReque@users.noreply.github.com>
Co-authored-by: vitalymatyushik <vitaly_matyushik@outlook.com>
Co-authored-by: Vansh <140736931+Vansh-Parate@users.noreply.github.com>
Co-authored-by: Germán Martín <github@gmartin.net>
Co-authored-by: Ani07-05 <86768646+Ani07-05@users.noreply.github.com>
Co-authored-by: Harsh Santwani <96873014+HydrallHarsh@users.noreply.github.com>
Co-authored-by: Arshad Jamal <arshad.jamal@vlinkinfo.com>
Co-authored-by: Szymon Łągiewka <slagiewka@users.noreply.github.com>
Co-authored-by: jjs2099 <140512982+jjs2099@users.noreply.github.com>
Co-authored-by: danielochinasa <danielochinasa@gmail.com>
Co-authored-by: Vaishnavi Parabkar <parabkarvaishnavi24@gmail.com>
Co-authored-by: Abhishek Singla <singlaabhishek849@gmail.com>
Co-authored-by: Arghya Das <alfaarghya.dev@gmail.com>
Co-authored-by: TMs <tms@live.cn>
Co-authored-by: Johnson Towoju <johnsontodimu@gmail.com>
Co-authored-by: Eshaan Gupta <146680427+Eshaan-byte@users.noreply.github.com>
Co-authored-by: Karel De Smet <karel.de.smet@outlook.com>
Co-authored-by: Eduardo Almeida <edualm@users.noreply.github.com>
Co-authored-by: Vahant Sharma <vahantofficials12315@gmail.com>
Co-authored-by: Paul van der lei <54599584+0pilatos0@users.noreply.github.com>
Co-authored-by: Omkar Gujja <67428719+omkarg01@users.noreply.github.com>
pull/5432/head
Kenrick Tandrian 1 week ago
committed by GitHub
parent
commit
56cd29ba2e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 568
      CHANGELOG.md
  2. 1
      apps/api/src/app/import/import.controller.ts
  3. 2
      apps/api/src/app/import/import.module.ts
  4. 73
      apps/api/src/app/import/import.service.ts
  5. 2
      apps/client/src/app/app.component.ts
  6. 2
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
  7. 2
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  8. 2
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  9. 2
      apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
  10. 2
      apps/client/src/app/components/admin-overview/admin-overview.component.ts
  11. 2
      apps/client/src/app/components/admin-platform/admin-platform.component.ts
  12. 2
      apps/client/src/app/components/admin-settings/admin-settings.component.ts
  13. 2
      apps/client/src/app/components/admin-tag/admin-tag.component.ts
  14. 2
      apps/client/src/app/components/admin-users/admin-users.component.ts
  15. 2
      apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
  16. 2
      apps/client/src/app/components/header/header.component.ts
  17. 2
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  18. 2
      apps/client/src/app/components/home-holdings/home-holdings.component.ts
  19. 2
      apps/client/src/app/components/home-market/home-market.component.ts
  20. 2
      apps/client/src/app/components/home-overview/home-overview.component.ts
  21. 2
      apps/client/src/app/components/home-summary/home-summary.component.ts
  22. 2
      apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
  23. 2
      apps/client/src/app/components/markets/markets.component.ts
  24. 2
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
  25. 2
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  26. 2
      apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
  27. 2
      apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
  28. 2
      apps/client/src/app/core/auth.guard.ts
  29. 2
      apps/client/src/app/core/http-response.interceptor.ts
  30. 2
      apps/client/src/app/pages/about/about-page.component.ts
  31. 2
      apps/client/src/app/pages/about/overview/about-overview-page.component.ts
  32. 2
      apps/client/src/app/pages/accounts/accounts-page.component.ts
  33. 2
      apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
  34. 2
      apps/client/src/app/pages/blog/blog-page.component.ts
  35. 2
      apps/client/src/app/pages/demo/demo-page.component.ts
  36. 2
      apps/client/src/app/pages/faq/faq-page.component.ts
  37. 2
      apps/client/src/app/pages/features/features-page.component.ts
  38. 2
      apps/client/src/app/pages/landing/landing-page.component.ts
  39. 2
      apps/client/src/app/pages/open/open-page.component.ts
  40. 2
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  41. 2
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  42. 2
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  43. 2
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
  44. 2
      apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
  45. 2
      apps/client/src/app/pages/portfolio/fire/fire-page.component.ts
  46. 2
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
  47. 2
      apps/client/src/app/pages/pricing/pricing-page.component.ts
  48. 2
      apps/client/src/app/pages/public/public-page.component.ts
  49. 2
      apps/client/src/app/pages/register/register-page.component.ts
  50. 2
      apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts
  51. 2
      apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
  52. 2
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  53. 2
      apps/client/src/app/services/admin.service.ts
  54. 2
      libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
  55. 2
      libs/ui/src/lib/assistant/assistant.component.ts
  56. 3
      libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts
  57. 2
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts
  58. 3
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
  59. 0
      libs/ui/src/lib/services/data.service.ts
  60. 1
      libs/ui/src/lib/services/index.ts
  61. 3
      libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts

568
CHANGELOG.md

@ -575,6 +575,574 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Deprecated `activities` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol`
- Moved the data service to `@ghostfolio/ui/services`
- Refactored the dividend import
## 2.228.0 - 2026-01-03
### Added
- Extended the portfolio holdings to include performance with currency effects for cash positions
### Changed
- Integrated the endpoint to get all platforms (`GET api/v1/platforms`) into the create or update account dialog
- Extracted the scraper configuration to a dedicated tab in the asset profile details dialog of the admin control panel
- Improved the language localization for German (`de`)
- Upgraded `@date-fns/utc` from version `2.1.0` to `2.1.1`
### Fixed
- Improved the table headers’ alignment of the accounts table on mobile
## 2.227.0 - 2026-01-02
### Changed
- Initialized the input properties in the _FIRE_ calculator
- Removed the deprecated public _Stripe_ key
- Upgraded `stripe` from version `18.5.0` to `20.1.0`
### Fixed
- Fixed the import of `jsonpath` to support REST APIs (`JSON`) via the scraper configuration
## 2.226.0 - 2026-01-01
### Added
- Extended the content of the _Self-Hosting_ section by information about additional data providers on the Frequently Asked Questions (FAQ) page
### Changed
- Upgraded `class-validator` from version `0.14.2` to `0.14.3`
- Upgraded `yahoo-finance2` from version `3.10.2` to `3.11.2`
## 2.225.0 - 2025-12-31
### Added
- Added a new endpoint to get all platforms (`GET api/v1/platforms`)
- Added the session url to the endpoint response of the _Stripe_ checkout
### Changed
- Improved the routing of the user detail dialog in the users section of the admin control panel
- Lifted the asset profile identifier editing restriction for `MANUAL` data sources in the asset profile details dialog of the admin control panel
- Deprecated the public _Stripe_ key
- Improved the language localization for German (`de`)
- Eliminated `ngx-stripe`
- Upgraded `angular` from version `20.2.4` to `21.0.6`
- Upgraded `marked` from version `15.0.4` to `17.0.1`
- Upgraded `ngx-device-detector` from version `10.1.0` to `11.0.0`
- Upgraded `ng-extract-i18n-merge` from `3.1.0` to `3.2.1`
- Upgraded `ngx-markdown` from version `20.0.0` to `21.0.1`
- Upgraded `Nx` from version `21.5.1` to `22.3.3`
- Upgraded `shx` from version `0.3.4` to `0.4.0`
- Upgraded `storybook` from version `9.1.5` to `10.1.10`
- Upgraded `zone.js` from version `0.15.1` to `0.16.0`
### Fixed
- Added the missing currency suffix to the cash balance field in the create or update account dialog
- Fixed the time in market display of the portfolio summary tab on the home page for the impersonation mode
- Fixed the delete button in the asset profile details dialog of the admin control panel by providing the missing `watchedByCount` parameter
## 2.224.2 - 2025-12-20
### Added
- Included the calendar year boundaries in the portfolio calculations
- Added the ISIN number to the asset profile details dialog of the admin control panel
### Changed
- Restored the support for specific calendar year date ranges (`2024`, `2023`, `2022`, etc.) in the assistant (experimental)
- Removed the deprecated _Angular CLI_ decorator (`decorate-angular-cli.js`)
- Refreshed the cryptocurrencies list
### Fixed
- Localized date formatting across the _FIRE_ section
## 2.223.0 - 2025-12-14
### Added
- Included wealth projection data calculated for the retirement date in the _FIRE_ section (experimental)
### Changed
- Moved the notification module to `@ghostfolio/ui`
- Improved the language localization for German (`de`)
### Fixed
- Fixed a calculation issue that resulted in the incorrect assignment of unknown data in the portfolio proportion chart component
## 2.222.0 - 2025-12-07
### Added
- Introduced data source transformation support in the import functionality for self-hosted environments
- Added _OpenID Connect_ (`OIDC`) as a new login provider for self-hosted environments (experimental)
- Added an optional 3D hover effect to the membership card component
### Changed
- Increased the numerical precision for cryptocurrency quantities in the holding detail dialog
- Upgraded `envalid` from version `8.1.0` to `8.1.1`
- Upgraded `prettier` from version `3.7.3` to `3.7.4`
## 2.221.0 - 2025-12-01
### Changed
- Refactored the API query parameters in various data provider services
- Extended the _Storybook_ stories of the portfolio proportion chart component by a story using percentage values
- Upgraded `@internationalized/number` from version `3.6.3` to `3.6.5`
- Upgraded `prettier` from version `3.7.2` to `3.7.3`
### Fixed
- Improved the country weightings in the _Financial Modeling Prep_ service
- Improved the search functionality by name in the _Financial Modeling Prep_ service
- Resolved an issue in the user endpoint where the list was returning empty in the admin control panel’s users section
## 2.220.0 - 2025-11-29
### Changed
- Restricted the asset profile data gathering on Sundays to only process outdated asset profiles
- Removed the _Cypress_ testing setup
- Eliminated `uuid` in favor of using `randomUUID` from `node:crypto`
- Upgraded `color` from version `5.0.0` to `5.0.3`
- Upgraded `prettier` from version `3.6.2` to `3.7.2`
### Fixed
- Fixed an issue with the exchange rate calculation when converting between derived currencies and their root currencies
## 2.219.0 - 2025-11-23
### Added
- Extended the user detail dialog of the admin control panel’s users section by the authentication method
### Changed
- Disabled the action to delete activities if the activities table is empty
- Improved the validation of the currency management in the admin control panel
- Improved the content of the pricing page
- Resolved the data source of the `GHOSTFOLIO` data provider in the export functionality
- Resolved the data source of the `GHOSTFOLIO` data provider in the import functionality
- Refreshed the cryptocurrencies list
- Improved the language localization for German (`de`)
- Upgraded `yahoo-finance2` from version `3.10.1` to `3.10.2`
### Fixed
- Fixed an issue with the edit of future activities (drafts)
## 2.218.0 - 2025-11-20
### Added
- Extended the accounts table menu with a _View Details_ item
- Extended the portfolio summary tab on the home page by percentage values (experimental)
- Added the _OSS Gallery_ logo to the logo carousel on the landing page
### Changed
- Improved the dynamic numerical precision for various values in the portfolio summary tab on the home page
- Upgraded `yahoo-finance2` from version `3.10.0` to `3.10.1`
## 2.217.1 - 2025-11-16
### Added
- Introduced support for automatically gathering required exchange rates, exposed as an environment variable (`ENABLE_FEATURE_GATHER_NEW_EXCHANGE_RATES`)
- Added a blog post: _Black Weeks 2025_
### Changed
- Refactored the get holding functionality in the portfolio service
- Changed the user data loading in the user detail dialog of the admin control panel’s users section to fetch data on demand
- Exposed the authentication with access token as an environment variable (`ENABLE_FEATURE_AUTH_TOKEN`)
- Improved the search functionality of the _Financial Modeling Prep_ service
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `6.18.0` to `6.19.0`
### Todo
- Rename the environment variable from `ENABLE_FEATURE_SOCIAL_LOGIN` to `ENABLE_FEATURE_AUTH_GOOGLE`
## 2.216.0 - 2025-11-10
### Changed
- Improved the language localization for Chinese (`zh`)
- Upgraded `chart.js` from version `4.5.0` to `4.5.1`
- Upgraded `svgmap` from version `2.12.2` to `2.14.0`
## 2.215.0 - 2025-11-06
### Added
- Added the endpoint `GET /api/v1/admin/user/:id`
### Changed
- Improved the _Self-Hosting_ section content for the _Compare with..._ concept on the Frequently Asked Questions (FAQ) page
- Improved the _Self-Hosting_ section content for the _Markets_ concept on the Frequently Asked Questions (FAQ) page
- Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild`
- Refactored the app component to standalone
- Improved the language localization for German (`de`)
- Upgraded `@ionic/angular` from version `8.7.3` to `8.7.8`
### Fixed
- Fixed the style of the safe withdrawal rate selector in the _FIRE_ section (experimental)
- Assigned the `ADMIN` role to the first user signing up via a social login provider if no administrator existed
- Improved the table headers’ alignment in the platform management of the admin control panel
- Improved the table headers’ alignment in the tag management of the admin control panel
## 2.214.0 - 2025-11-01
### Changed
- Improved the icon of the _View Holding_ menu item in the activities table
- Ensured atomic data replacement during historical market data gathering
- Removed _Internet Identity_ as a social login provider
- Refreshed the cryptocurrencies list
- Upgraded `countries-list` from version `3.1.1` to `3.2.0`
- Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0`
- Upgraded `twitter-api-v2` from version `1.23.0` to `1.27.0`
## 2.213.0 - 2025-10-30
### Added
- Extended the activities table menu with a _View Holding_ item
- Added the error logging to the symbol lookup in the _Trackinsight_ data enhancer
### Changed
- Improved the icon of the holdings tab on the home page
- Improved the icon of the holdings tab on the home page for the _Zen Mode_
- Improved the icon of the holdings tab in the account detail dialog
- Migrated the tags selector component in the holding detail dialog to form control
- Improved the language localization for German (`de`)
- Upgraded `nestjs` from version `11.1.3` to `11.1.8`
## 2.212.0 - 2025-10-29
### Added
- Added a close holding button to the holding detail dialog
- Added the _Sponsors_ section to the about page
- Extended the user detail dialog in the users section of the admin control panel
### Changed
- Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental)
- Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental)
- Improved the usability of the user detail dialog in the users section of the admin control panel
- Improved the language localization for German (`de`)
### Fixed
- Ensured the locale is available in the settings dialog to customize the rule thresholds of the _X-ray_ page
## 2.211.0 - 2025-10-25
### Added
- Extended the export functionality by the user account’s performance calculation type
- Added the _SelfhostedHub_ logo to the logo carousel on the landing page
- Added a user detail dialog to the users section of the admin control panel
### Changed
- Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power)
- Moved the _Prisma Configuration File_ from `prisma.config.ts` to `.config/prisma.ts`
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `6.17.1` to `6.18.0`
- Upgraded `tablemark` from version `3.1.0` to `4.1.0`
### Fixed
- Fixed the style in the footer row of the accounts table
- Fixed the rendering of names and symbols for custom assets in the import activities dialog
- Fixed an issue with the market price in base currency during the portfolio snapshot calculation
## 2.210.1 - 2025-10-22
### Added
- Added support for data gathering by date range in the asset profile details dialog of the admin control panel
### Changed
- Extracted the portfolio filter form of the assistant to a reusable component
- Formatted the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental)
- Formatted the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental)
- Reverted the explicit configuration of the _Redis_ address family in the job queue module
- Improved the language localization for German (`de`)
- Upgraded `ioredis` from version `5.6.1` to `5.8.2`
### Fixed
- Fixed the enter key press to submit the form of the login with access token dialog
- Fixed an issue in the database seeding process caused by unresolved environment variables in `DATABASE_URL`
## 2.209.0 - 2025-10-18
### Added
- Extended the glossary of the resources page by _Stealth Wealth_
- Extended the content of the pricing page
- Added a _Storybook_ story for the holdings table component
### Changed
- Disabled the zoom functionality in the _Progressive Web App_ (PWA)
- Improved the currency validation in the get asset profiles functionality of the data provider service
- Improved the currency validation in the search functionality of the data provider service
- Optimized the get quotes functionality by utilizing the asset profile resolutions in the _Financial Modeling Prep_ service
- Extracted the footer to a component
- Refactored the blog page component to standalone
- Improved the portfolio calculator unit tests to load the user currency from the exported file
- Improved the language localization for German (`de`)
### Fixed
- Fixed an issue in the `csv` file import where custom asset profiles failed due to validation errors
- Fixed an issue with the total buy and sell calculation in the summary related to activities in a custom currency
- Respected the include indices flag in the search functionality of the _Financial Modeling Prep_ service
- Fixed an issue where the scroll position was not restored when changing pages
- Fixed the word wrap in the menus of the activities table component
- Fixed the dark mode in the _As seen in_ section on the landing page
## 2.208.0 - 2025-10-11
### Added
- Added support for configuring the safe withdrawal rate in the _FIRE_ section (experimental)
### Changed
- Changed the _As seen in_ section on the landing page to an animated carousel
- Refactored `transactionCount` to `activitiesCount` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol`
- Refactored various components to use self-closing tags
- Removed the deprecated endpoint `GET api/v1/portfolio/position/:dataSource/:symbol`
- Removed the deprecated endpoint `PUT api/v1/portfolio/position/:dataSource/:symbol/tags`
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `6.16.1` to `6.17.1`
### Fixed
- Fixed the server startup message to properly display IPv6 addresses
- Enabled IPv6 connectivity for _Redis_ in the job queue module by setting the address family
- Fixed an issue where importing custom asset profiles failed due to validation errors
## 2.207.0 - 2025-10-08
### Added
- Added support to edit a granted access (experimental)
- Introduced tabs to the asset profile details dialog in the admin control panel
- Added support for a date range query parameter in the data gathering endpoint
- Added a _Storybook_ story for the activities table component
### Changed
- Improved the spacing around the buttons in the holding detail dialog
- Extended the _Storybook_ stories of the accounts table component by a loading state story
- Refactored the auth page to standalone
- Improved the language localization for German (`de`)
### Fixed
- Fixed the word wrap in the menu of the access table component
- Fixed the word wrap in the menu of the activities table component
- Fixed the word wrap in the menu of the asset profile details dialog in the admin control panel
## 2.206.0 - 2025-10-04
### Changed
- Localized the number formatting in the settings dialog to customize the rule thresholds of the _X-ray_ page
- Improved the usability of the assistant by preselecting the first search result
- Improved the usability of the _Cancel_ / _Close_ buttons in the create watchlist item dialog
- Refactored the `fireWealth` from `number` type to a structured object in the summary of the portfolio details endpoint
- Refactored the _Open Startup_ (`/open`) page to standalone
- Refactored the file drop directive to standalone
- Refactored the symbol pipe to standalone
### Fixed
- Handled an exception in the get asset profile functionality of the _Financial Modeling Prep_ service
- Added the missing `CommonModule` import in the import activities dialog
## 2.205.0 - 2025-10-01
### Changed
- Restricted the selection of the retirement date picker in the _FIRE_ calculator to a future date
- Improved the support for mutual funds in the _Financial Modeling Prep_ service (get asset profiles)
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `6.16.1` to `6.16.3`
## 2.204.0 - 2025-09-30
### Added
- Added the safe withdrawal rate to the user settings (experimental)
### Changed
- Improved the number formatting of the y-axis labels in the investment chart component
- Localized the number formatting of the y-axis labels in the line chart component
- Improved the wording of the 4% rule in the _FIRE_ section
- Improved the usability of the create asset profile dialog in the market data section of the admin control panel
- Improved the language localization for German (`de`)
### Fixed
- Improved the table headers’ alignment of the activities table
## 2.203.0 - 2025-09-27
### Added
- Added support for column sorting to the queue jobs table in the admin control panel
- Added a blog post: _Hacktoberfest 2025_
### Changed
- Removed the deprecated `ITEM` activity type
## 2.202.0 - 2025-09-26
### Added
- Added `settings` to the `Access` model
### Changed
- Extended the tags selector component to support form control
- Changed the deprecated `ITEM` activity type to `VALUABLE` in the create or update activity dialog
### Fixed
- Fixed an issue where the save button was not enabled after editing tags in the create or update activity dialog
- Fixed an issue in the investment calculation when selling all units of a holding
## 2.201.0 - 2025-09-24
### Added
- Added the symbol to the benchmark component
- Added the latest activities to the public page (experimental)
- Added pagination to the activities table of the activities import dialog
- Added an option to configure the account column of the activities table component
### Changed
- Hid the account column from the activities table of the account detail dialog to avoid redundant information
- Renamed the show access token dialog component to user account registration dialog component
- Refreshed the cryptocurrencies list
- Improved the language localization for German (`de`)
- Upgraded `countup.js` from version `2.8.2` to `2.9.0`
### Fixed
- Fixed an issue with `unitPriceInAssetProfileCurrency` in the value redaction interceptor for the impersonation mode
## 2.200.0 - 2025-09-17
### Changed
- Refactored the show access token dialog component to standalone
- Upgraded `prisma` from version `6.15.0` to `6.16.1`
### Fixed
- Removed a temporary element from the activities table component
## 2.199.0 - 2025-09-14
### Added
- Extended the content of the performance calculation method by dividends on the Frequently Asked Questions (FAQ) page
- Added a _Storybook_ story for the entity logo image component
### Changed
- Improved the search in the _Yahoo Finance_ service
- Moved the holdings table into the holdings section on the public page
- Migrated to the _Prisma Configuration File_ approach (`prisma.config.ts`)
- Refactored the login with access token dialog component to standalone
- Prefixed the `crypto`, `fs` and `path` imports with `node:`
- Upgraded `yahoo-finance2` from version `3.8.0` to `3.10.0`
### Fixed
- Fixed a pagination issue in the market data endpoint by adding `id` as a secondary sort criterion to ensure consistent ordering in the admin control panel
- Fixed a pagination issue in the user endpoint by adding `id` as a secondary sort criterion to ensure consistent ordering in the admin control panel
## 2.198.0 - 2025-09-11
### Changed
- Extended the variations of the interstitials for the subscription
- Renamed the job identifier column in the jobs queue view of the admin control panel
- Refactored the markets page to standalone
- Refactored the fear and greed index component to standalone
- Refactored the header component to standalone
- Refactored the investment chart component to standalone
- Refactored the rule component to standalone
- Refactored the rules component to standalone
- Refactored the subscription interstitial dialog component to standalone
- Removed the `IonIcon` import from the landing page
- Improved the language localization for German (`de`)
- Upgraded `angular` from version `20.1.3` to `20.2.4`
- Upgraded `eslint` dependencies
- Upgraded `Nx` from version `21.3.9` to `21.5.1`
- Upgraded `storybook` from version `9.0.17` to `9.1.5`
### Fixed
- Fixed the holdings table on the public page
## 2.197.0 - 2025-09-07
### Added
- Enabled automatic data gathering for custom currencies added via the currency management in the admin control panel
- Added a _Storybook_ story for the world map chart component
### Changed
- Restructured the response of the portfolio report endpoint (_X-ray_)
- Modernized the templates with untagged template literals
- Moved the world map chart component to `@ghostfolio/ui`
- Refactored the create or update access dialog component to standalone
- Improved the language localization for German (`de`)
- Upgraded `envalid` from version `8.0.0` to `8.1.0`
- Upgraded `prisma` from version `6.14.0` to `6.15.0`
### Fixed
- Improved the handling of `0` buying power in the static portfolio analysis rule: _Liquidity_ (Buying Power)
- Fixed an issue related to the error handling in the data provider status component
## 2.196.0 - 2025-09-04
### Changed
- Localized the content of the about page
- Refactored the public page to standalone
- Refactored the dialog footer component

1
apps/api/src/app/import/import.controller.ts

@ -103,6 +103,7 @@ export class ImportController {
const activities = await this.importService.getDividends({
dataSource,
symbol,
userCurrency: this.request.user.settings.settings.baseCurrency,
userId: this.request.user.id
});

2
apps/api/src/app/import/import.module.ts

@ -6,6 +6,7 @@ import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module'
import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { ApiModule } from '@ghostfolio/api/services/api/api.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
@ -24,6 +25,7 @@ import { ImportService } from './import.service';
controllers: [ImportController],
imports: [
AccountModule,
ApiModule,
CacheModule,
ConfigurationModule,
DataGatheringModule,

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

@ -2,6 +2,7 @@ import { AccountService } from '@ghostfolio/api/app/account/account.service';
import { OrderService } from '@ghostfolio/api/app/order/order.service';
import { PlatformService } from '@ghostfolio/api/app/platform/platform.service';
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
@ -25,7 +26,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import {
AccountWithPlatform,
AccountWithValue,
OrderWithAccount,
UserWithSettings
} from '@ghostfolio/common/types';
@ -43,6 +44,7 @@ import { ImportDataDto } from './import-data.dto';
export class ImportService {
public constructor(
private readonly accountService: AccountService,
private readonly apiService: ApiService,
private readonly configurationService: ConfigurationService,
private readonly dataGatheringService: DataGatheringService,
private readonly dataProviderService: DataProviderService,
@ -57,8 +59,12 @@ export class ImportService {
public async getDividends({
dataSource,
symbol,
userCurrency,
userId
}: AssetProfileIdentifier & { userId: string }): Promise<Activity[]> {
}: AssetProfileIdentifier & {
userCurrency: string;
userId: string;
}): Promise<Activity[]> {
try {
const holding = await this.portfolioService.getHolding({
dataSource,
@ -71,36 +77,45 @@ export class ImportService {
return [];
}
const { activities, firstBuyDate, historicalData } = holding;
const filters = this.apiService.buildFiltersFromQueryParams({
filterByDataSource: dataSource,
filterBySymbol: symbol
});
const [[assetProfile], dividends] = await Promise.all([
this.symbolProfileService.getSymbolProfiles([
{
dataSource,
symbol
}
]),
await this.dataProviderService.getDividends({
dataSource,
symbol,
from: parseDate(firstBuyDate),
granularity: 'day',
to: new Date()
})
]);
const { firstBuyDate, historicalData } = holding;
const accounts = activities
.filter(({ account }) => {
return !!account;
})
.map(({ account }) => {
return account;
});
const [{ accounts }, { activities }, [assetProfile], dividends] =
await Promise.all([
this.portfolioService.getAccountsWithAggregations({
filters,
userId,
withExcludedAccounts: true
}),
this.orderService.getOrders({
filters,
userCurrency,
userId,
startDate: parseDate(firstBuyDate)
}),
this.symbolProfileService.getSymbolProfiles([
{
dataSource,
symbol
}
]),
await this.dataProviderService.getDividends({
dataSource,
symbol,
from: parseDate(firstBuyDate),
granularity: 'day',
to: new Date()
})
]);
const account = this.isUniqueAccount(accounts) ? accounts[0] : undefined;
return await Promise.all(
Object.entries(dividends).map(async ([dateString, { marketPrice }]) => {
Object.entries(dividends).map(([dateString, { marketPrice }]) => {
const quantity =
historicalData.find((historicalDataItem) => {
return historicalDataItem.date === dateString;
@ -695,11 +710,11 @@ export class ImportService {
);
}
private isUniqueAccount(accounts: AccountWithPlatform[]) {
private isUniqueAccount(accounts: AccountWithValue[]) {
const uniqueAccountIds = new Set<string>();
for (const account of accounts) {
uniqueAccountIds.add(account.id);
for (const { id } of accounts) {
uniqueAccountIds.add(id);
}
return uniqueAccountIds.size === 1;

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

@ -4,6 +4,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { ColorScheme } from '@ghostfolio/common/types';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,
@ -36,7 +37,6 @@ import { GfFooterComponent } from './components/footer/footer.component';
import { GfHeaderComponent } from './components/header/header.component';
import { GfHoldingDetailDialogComponent } from './components/holding-detail-dialog/holding-detail-dialog.component';
import { HoldingDetailDialogParams } from './components/holding-detail-dialog/interfaces/interfaces';
import { DataService } from './services/data.service';
import { ImpersonationStorageService } from './services/impersonation-storage.service';
import { TokenStorageService } from './services/token-storage.service';
import { UserService } from './services/user/user.service';

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

@ -1,5 +1,4 @@
import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config';
import { CreateAccountBalanceDto } from '@ghostfolio/common/dtos';
@ -19,6 +18,7 @@ import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header';
import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';

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

@ -1,5 +1,4 @@
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
DEFAULT_PAGE_SIZE,
@ -18,6 +17,7 @@ import { GfSymbolPipe } from '@ghostfolio/common/pipes';
import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter';
import { translate } from '@ghostfolio/ui/i18n';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { SelectionModel } from '@angular/cdk/collections';

2
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -1,6 +1,5 @@
import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
ASSET_CLASS_MAPPING,
@ -25,6 +24,7 @@ import { translate } from '@ghostfolio/ui/i18n';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
import { DataService } from '@ghostfolio/ui/services';
import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete';
import { GfValueComponent } from '@ghostfolio/ui/value';

2
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts

@ -1,10 +1,10 @@
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import {
DEFAULT_CURRENCY,
ghostfolioPrefix,
PROPERTY_CURRENCIES
} from '@ghostfolio/common/config';
import { DataService } from '@ghostfolio/ui/services';
import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete';
import {

2
apps/client/src/app/components/admin-overview/admin-overview.component.ts

@ -1,6 +1,5 @@
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { CacheService } from '@ghostfolio/client/services/cache.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
PROPERTY_COUPONS,
@ -20,6 +19,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';

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

@ -1,10 +1,10 @@
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

2
apps/client/src/app/components/admin-settings/admin-settings.component.ts

@ -2,7 +2,6 @@ import { GfAdminPlatformComponent } from '@ghostfolio/client/components/admin-pl
import { GfAdminTagComponent } from '@ghostfolio/client/components/admin-tag/admin-tag.component';
import { GfDataProviderStatusComponent } from '@ghostfolio/client/components/data-provider-status/data-provider-status.component';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { PROPERTY_API_KEY_GHOSTFOLIO } from '@ghostfolio/common/config';
import { ConfirmationDialogType } from '@ghostfolio/common/enums';
@ -16,6 +15,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';

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

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

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

@ -1,7 +1,6 @@
import { UserDetailDialogParams } from '@ghostfolio/client/components/user-detail-dialog/interfaces/interfaces';
import { GfUserDetailDialogComponent } from '@ghostfolio/client/components/user-detail-dialog/user-detail-dialog.component';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
@ -21,6 +20,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';

2
apps/client/src/app/components/data-provider-status/data-provider-status.component.ts

@ -1,4 +1,4 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

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

@ -1,7 +1,6 @@
import { LoginWithAccessTokenDialogParams } from '@ghostfolio/client/components/login-with-access-token-dialog/interfaces/interfaces';
import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component';
import { LayoutService } from '@ghostfolio/client/core/layout.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import {
KEY_STAY_SIGNED_IN,
@ -18,6 +17,7 @@ import { GfAssistantComponent } from '@ghostfolio/ui/assistant/assistant.compone
import { GfLogoComponent } from '@ghostfolio/ui/logo';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

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

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
NUMERICAL_PRECISION_THRESHOLD_3_FIGURES,
@ -26,6 +25,7 @@ import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical
import { translate } from '@ghostfolio/ui/i18n';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
import { DataService } from '@ghostfolio/ui/services';
import { GfTagsSelectorComponent } from '@ghostfolio/ui/tags-selector';
import { GfValueComponent } from '@ghostfolio/ui/value';

2
apps/client/src/app/components/home-holdings/home-holdings.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
@ -11,6 +10,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { HoldingType, HoldingsViewMode } from '@ghostfolio/common/types';
import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table';
import { DataService } from '@ghostfolio/ui/services';
import { GfToggleComponent } from '@ghostfolio/ui/toggle';
import { GfTreemapChartComponent } from '@ghostfolio/ui/treemap-chart';

2
apps/client/src/app/components/home-market/home-market.component.ts

@ -1,5 +1,4 @@
import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { ghostfolioFearAndGreedIndexSymbol } from '@ghostfolio/common/config';
import { resetHours } from '@ghostfolio/common/helper';
@ -12,6 +11,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectorRef,

2
apps/client/src/app/components/home-overview/home-overview.component.ts

@ -1,6 +1,5 @@
import { GfPortfolioPerformanceComponent } from '@ghostfolio/client/components/portfolio-performance/portfolio-performance.component';
import { LayoutService } from '@ghostfolio/client/core/layout.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config';
@ -13,6 +12,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

2
apps/client/src/app/components/home-summary/home-summary.component.ts

@ -1,5 +1,4 @@
import { GfPortfolioSummaryComponent } from '@ghostfolio/client/components/portfolio-summary/portfolio-summary.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
@ -8,6 +7,7 @@ import {
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectorRef,

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

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
@ -9,6 +8,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

2
apps/client/src/app/components/markets/markets.component.ts

@ -1,5 +1,4 @@
import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { resetHours } from '@ghostfolio/common/helper';
import {
@ -12,6 +11,7 @@ import {
import { FearAndGreedIndexMode } from '@ghostfolio/common/types';
import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { DataService } from '@ghostfolio/ui/services';
import { GfToggleComponent } from '@ghostfolio/ui/toggle';
import {

2
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { CreateAccessDto, UpdateAccessDto } from '@ghostfolio/common/dtos';
import { validateObjectForForm } from '@ghostfolio/common/utils';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

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

@ -1,5 +1,4 @@
import { GfAccessTableComponent } from '@ghostfolio/client/components/access-table/access-table.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { CreateAccessDto } from '@ghostfolio/common/dtos';
@ -8,6 +7,7 @@ import { Access, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

2
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { getDateFormatString } from '@ghostfolio/common/helper';
@ -8,6 +7,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfMembershipCardComponent } from '@ghostfolio/ui/membership-card';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

2
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import {
KEY_STAY_SIGNED_IN,
KEY_TOKEN,
@ -13,6 +12,7 @@ import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

2
apps/client/src/app/core/auth.guard.ts

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import { Injectable } from '@angular/core';
import {

2
apps/client/src/app/core/http-response.interceptor.ts

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import {
HTTP_INTERCEPTORS,

2
apps/client/src/app/pages/about/about-page.component.ts

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectorRef,

2
apps/client/src/app/pages/about/overview/about-overview-page.component.ts

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

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

@ -1,6 +1,5 @@
import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component';
import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
@ -12,6 +11,7 @@ import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';

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

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos';
import { validateObjectForForm } from '@ghostfolio/common/utils';
import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule, NgClass } from '@angular/common';
import {

2
apps/client/src/app/pages/blog/blog-page.component.ts

@ -1,5 +1,5 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { DataService } from '@ghostfolio/ui/services';
import { Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core';
import { MatCardModule } from '@angular/material/card';

2
apps/client/src/app/pages/demo/demo-page.component.ts

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
import { Component, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';

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

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TabConfiguration } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import {
CUSTOM_ELEMENTS_SCHEMA,

2
apps/client/src/app/pages/features/features-page.component.ts

@ -1,9 +1,9 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';

2
apps/client/src/app/pages/landing/landing-page.component.ts

@ -1,10 +1,10 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Statistics } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfCarouselComponent } from '@ghostfolio/ui/carousel';
import { GfLogoComponent } from '@ghostfolio/ui/logo';
import { GfLogoCarouselComponent } from '@ghostfolio/ui/logo-carousel';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart';

2
apps/client/src/app/pages/open/open-page.component.ts

@ -1,6 +1,6 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { Statistics, User } from '@ghostfolio/common/interfaces';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import {

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

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { IcsService } from '@ghostfolio/client/services/ics/ics.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
@ -12,6 +11,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { DataService } from '@ghostfolio/ui/services';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';

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

@ -10,6 +10,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { validateObjectForForm } from '@ghostfolio/common/utils';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { translate } from '@ghostfolio/ui/i18n';
import { DataService } from '@ghostfolio/ui/services';
import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete';
import { GfTagsSelectorComponent } from '@ghostfolio/ui/tags-selector';
import { GfValueComponent } from '@ghostfolio/ui/value';
@ -48,7 +49,6 @@ import { calendarClearOutline, refreshOutline } from 'ionicons/icons';
import { EMPTY, Subject } from 'rxjs';
import { catchError, delay, takeUntil } from 'rxjs/operators';
import { DataService } from '../../../../services/data.service';
import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces';
import { ActivityType } from './types/activity-type.type';

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

@ -1,5 +1,4 @@
import { GfFileDropDirective } from '@ghostfolio/client/directives/file-drop/file-drop.directive';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service';
import {
CreateAccountWithBalancesDto,
@ -11,6 +10,7 @@ import { GfSymbolPipe } from '@ghostfolio/common/pipes';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header';
import { DataService } from '@ghostfolio/ui/services';
import {
StepperOrientation,

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

@ -1,6 +1,5 @@
import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component';
import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config';
@ -17,6 +16,7 @@ import { Market, MarketAdvanced } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { GfTopHoldingsComponent } from '@ghostfolio/ui/top-holdings';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart';

2
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts

@ -1,6 +1,5 @@
import { GfBenchmarkComparatorComponent } from '@ghostfolio/client/components/benchmark-comparator/benchmark-comparator.component';
import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
@ -16,6 +15,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import type { AiPromptMode, GroupBy } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { GfToggleComponent } from '@ghostfolio/ui/toggle';
import { GfValueComponent } from '@ghostfolio/ui/value';

2
apps/client/src/app/pages/portfolio/fire/fire-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
@ -9,6 +8,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfFireCalculatorComponent } from '@ghostfolio/ui/fire-calculator';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule, NgStyle } from '@angular/common';

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

@ -1,5 +1,4 @@
import { GfRulesComponent } from '@ghostfolio/client/components/rules/rules.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { UpdateUserSettingDto } from '@ghostfolio/common/dtos';
@ -10,6 +9,7 @@ import {
import { User } from '@ghostfolio/common/interfaces/user.interface';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { NgClass } from '@angular/common';
import { ChangeDetectorRef, Component } from '@angular/core';

2
apps/client/src/app/pages/pricing/pricing-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@ -6,6 +5,7 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { translate } from '@ghostfolio/ui/i18n';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

2
apps/client/src/app/pages/public/public-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UNKNOWN_KEY } from '@ghostfolio/common/config';
import { prettifySymbol } from '@ghostfolio/common/helper';
import {
@ -11,6 +10,7 @@ import { Market } from '@ghostfolio/common/types';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table/activities-table.component';
import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table/holdings-table.component';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart/portfolio-proportion-chart.component';
import { DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { GfWorldMapChartComponent } from '@ghostfolio/ui/world-map-chart';

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

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { InfoItem, LineChartItem } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfLogoComponent } from '@ghostfolio/ui/logo';
import { DataService } from '@ghostfolio/ui/services';
import {
Component,

2
apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts

@ -1,5 +1,5 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import { ClipboardModule } from '@angular/cdk/clipboard';
import { TextFieldModule } from '@angular/cdk/text-field';

2
apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { DataService } from '@ghostfolio/ui/services';
import { Component, OnInit } from '@angular/core';
import { RouterModule } from '@angular/router';

2
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts

@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Product } from '@ghostfolio/common/interfaces';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { translate } from '@ghostfolio/ui/i18n';
import { DataService } from '@ghostfolio/ui/services';
import { Component, OnInit } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';

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

@ -21,6 +21,7 @@ import {
Filter
} from '@ghostfolio/common/interfaces';
import { DateRange } from '@ghostfolio/common/types';
import { DataService } from '@ghostfolio/ui/services';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
@ -29,7 +30,6 @@ import { DataSource, MarketData, Platform } from '@prisma/client';
import { JobStatus } from 'bull';
import { environment } from '../../environments/environment';
import { DataService } from './data.service';
@Injectable({
providedIn: 'root'

2
libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts

@ -9,7 +9,9 @@ import {
import { Tag } from '@prisma/client';
export interface PortfolioHoldingResponse {
/** @deprecated */
activities: Activity[];
activitiesCount: number;
averagePrice: number;
dataProviderInfo: DataProviderInfo;

2
libs/ui/src/lib/assistant/assistant.component.ts

@ -1,11 +1,11 @@
/* eslint-disable @nx/enforce-module-boundaries */
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces';
import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { AccountWithPlatform, DateRange } from '@ghostfolio/common/types';
import { DataService } from '@ghostfolio/ui/services';
import { FocusKeyManager } from '@angular/cdk/a11y';
import {

3
libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts

@ -1,5 +1,3 @@
/* eslint-disable @nx/enforce-module-boundaries */
import { DataService } from '@ghostfolio/client/services/data.service';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
AdminMarketDataDetails,
@ -7,6 +5,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header';
import { DataService } from '@ghostfolio/ui/services';
import {
CUSTOM_ELEMENTS_SCHEMA,

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

@ -1,6 +1,6 @@
/* eslint-disable @nx/enforce-module-boundaries */
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { DataService } from '@ghostfolio/ui/services';
import {
ChangeDetectionStrategy,

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

@ -1,5 +1,3 @@
/* eslint-disable @nx/enforce-module-boundaries */
import { DataService } from '@ghostfolio/client/services/data.service';
import { UpdateMarketDataDto } from '@ghostfolio/common/dtos';
import {
DATE_FORMAT,
@ -7,6 +5,7 @@ import {
getLocale
} from '@ghostfolio/common/helper';
import { LineChartItem, User } from '@ghostfolio/common/interfaces';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
import {

0
apps/client/src/app/services/data.service.ts → libs/ui/src/lib/services/data.service.ts

1
libs/ui/src/lib/services/index.ts

@ -0,0 +1 @@
export * from './data.service';

3
libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts

@ -1,7 +1,6 @@
/* eslint-disable @nx/enforce-module-boundaries */
import { DataService } from '@ghostfolio/client/services/data.service';
import { LookupItem } from '@ghostfolio/common/interfaces';
import { GfSymbolPipe } from '@ghostfolio/common/pipes';
import { DataService } from '@ghostfolio/ui/services';
import { FocusMonitor } from '@angular/cdk/a11y';
import {

Loading…
Cancel
Save