From c105f50ca029974082d281d00706fe4327387ed8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 16 Sep 2026 17:41:15 +0200 Subject: [PATCH 01/14] Task/upgrade @internationalized/number to version 3.6.8 (#7876) * Update @internationalized/number to version 3.6.8 * Update changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1437d1bdaf..ed5ce677e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `@internationalized/number` from version `3.6.7` to `3.6.8` + ## 3.70.1 - 2026-09-14 ### Added diff --git a/package-lock.json b/package-lock.json index 69a7496f86..aa23192815 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@bull-board/nestjs": "9.8.0", "@codewithdan/observable-store": "3.0.0", "@date-fns/utc": "2.1.1", - "@internationalized/number": "3.6.7", + "@internationalized/number": "3.6.8", "@ionic/angular": "8.8.12", "@keyv/redis": "5.1.6", "@modelcontextprotocol/core": "2.0.0", @@ -7555,9 +7555,9 @@ } }, "node_modules/@internationalized/number": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.7.tgz", - "integrity": "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==", + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.8.tgz", + "integrity": "sha512-8UmMFia46DUt+k97zKd9fKWXcWHR+k8ae3eYzILETuT2KbIvLyOfac7zesw+sJdRAAZ7Q9pM1Mk22aXp2LD0Ig==", "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" diff --git a/package.json b/package.json index 830a4f8b79..9811c5062b 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@bull-board/nestjs": "9.8.0", "@codewithdan/observable-store": "3.0.0", "@date-fns/utc": "2.1.1", - "@internationalized/number": "3.6.7", + "@internationalized/number": "3.6.8", "@ionic/angular": "8.8.12", "@keyv/redis": "5.1.6", "@modelcontextprotocol/core": "2.0.0", From 6e677145604ab17d4b6aeb69bb0ee23ca4080aef Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 17 Sep 2026 11:59:37 +0200 Subject: [PATCH 02/14] Task/improve color of selected state in options (#7889) Improve color --- apps/client/src/styles/theme.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss index d3c9e6022b..0aeae72f7b 100644 --- a/apps/client/src/styles/theme.scss +++ b/apps/client/src/styles/theme.scss @@ -360,6 +360,12 @@ $_dense-form-field-theme: mat.define-theme( ) ); + @include mat.option-overrides( + ( + selected-state-label-text-color: var(--gf-theme-primary-500) + ) + ); + @include mat.paginator-overrides( ( container-background-color: transparent From 71db6efe07dd2c5398af61bbbb5471fb648315dc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 18 Sep 2026 08:14:11 +0200 Subject: [PATCH 03/14] Feature/add previous and next navigation to personal finance tools (#7899) Add previous and next navigation --- .../personal-finance-tools-page.component.ts | 5 +- .../product-page.component.ts | 33 + .../personal-finance-tools/product-page.html | 29 +- libs/common/src/lib/personal-finance-tools.ts | 5446 +++++++++-------- 4 files changed, 2786 insertions(+), 2727 deletions(-) diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts index 27a4f32658..0bc7602ccd 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts @@ -23,9 +23,8 @@ export class PersonalFinanceToolsPageComponent { public pathResources = publicRoutes.resources.path; public pathPersonalFinanceTools = publicRoutes.resources.subRoutes.personalFinanceTools.path; - public personalFinanceTools = personalFinanceTools.sort((a, b) => { - return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); - }); + + public personalFinanceTools = personalFinanceTools; public routerLinkAbout = publicRoutes.about.routerLink; public constructor() { diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts index d33ec17d67..beda3e3fc2 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1,4 +1,5 @@ import { getCountryName } from '@ghostfolio/common/helper'; +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'; @@ -91,9 +92,20 @@ export class GfProductPageComponent { protected readonly routerLinkAbout = publicRoutes.about.routerLink; protected readonly routerLinkFeatures = publicRoutes.features.routerLink; + protected readonly routerLinkResourcesPersonalFinanceTools = publicRoutes.resources.subRoutes.personalFinanceTools.routerLink; + protected readonly titlePrefix = $localize`The Open Source Alternative to`; + + protected readonly nextProduct = computed(() => { + return personalFinanceTools[this.getCurrentProductIndex() + 1]; + }); + + protected readonly previousProduct = computed(() => { + return personalFinanceTools[this.getCurrentProductIndex() - 1]; + }); + protected readonly tags = computed(() => { const product1 = this.product1(); const product2 = this.product2(); @@ -139,6 +151,27 @@ export class GfProductPageComponent { private readonly dataService = inject(DataService); private readonly route = inject(ActivatedRoute); + protected getProductRouterLink(product?: Product) { + if (!product) { + return this.routerLinkResourcesPersonalFinanceTools; + } + + return [ + ...this.routerLinkResourcesPersonalFinanceTools, + `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.path}-${product.alias ?? product.key}` + ]; + } + + protected getProductTitle(product?: Product) { + return `Ghostfolio: ${this.titlePrefix} ${product?.name ?? ''}`; + } + + private getCurrentProductIndex() { + return personalFinanceTools.findIndex(({ key }) => { + return key === this.product2().key; + }); + } + private getSortedTranslations(values?: string[]) { return values ?.map((value) => { diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html index 192b3cadbb..01fb9a39d0 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -4,9 +4,8 @@

- Ghostfolio: - The Open Source Alternative to {{ product2().name }} + Ghostfolio: {{ titlePrefix }} + {{ product2().name }}

@if (product2().isArchived) { @@ -379,7 +378,7 @@ > -
+
    @for (tag of tags(); track tag) {
  • @@ -388,9 +387,29 @@ }
+