From 896e96c9afaf3bcb49c7305afeb1e0d9cc8021d8 Mon Sep 17 00:00:00 2001
From: Akash Negi <95514575+AkashNegi1@users.noreply.github.com>
Date: Fri, 3 Jul 2026 23:31:21 +0530
Subject: [PATCH 1/4] Bugfix/missing navigation on landing page for
unauthenticated users (#7192)
Fix missing navigation on landing page for unauthenticated users
---
apps/client/src/app/components/header/header.component.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/client/src/app/components/header/header.component.html b/apps/client/src/app/components/header/header.component.html
index ae3121861..35f072d72 100644
--- a/apps/client/src/app/components/header/header.component.html
+++ b/apps/client/src/app/components/header/header.component.html
@@ -332,7 +332,7 @@
}
- @if (user() === null) {
+ @if (!user()) {
Date: Fri, 3 Jul 2026 20:03:38 +0200
Subject: [PATCH 2/4] Bugfix/handling of values rounding to zero (#7201)
* Fix handling of values rounding to zero
* Update changelog
---
CHANGELOG.md | 8 ++++++++
.../src/services/benchmark/benchmark.service.spec.ts | 12 ++++++++++++
apps/api/src/services/benchmark/benchmark.service.ts | 8 +++++---
libs/ui/src/lib/benchmark/benchmark.component.html | 10 ++++++++--
libs/ui/src/lib/benchmark/benchmark.component.ts | 3 ++-
libs/ui/src/lib/value/value.component.ts | 4 +++-
6 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8be159930..c14452d4b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,14 @@ 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
+
+### Fixed
+
+- Fixed the colorization of the change from all time high in the benchmark component when values round to zero
+- Fixed the market condition of the benchmarks when values round to zero
+- Fixed an issue where values incorrectly rounded to negative zero in the value component
+
## 3.19.0 - 2026-07-02
### Added
diff --git a/apps/api/src/services/benchmark/benchmark.service.spec.ts b/apps/api/src/services/benchmark/benchmark.service.spec.ts
index 833dbcdfc..0e7119b04 100644
--- a/apps/api/src/services/benchmark/benchmark.service.spec.ts
+++ b/apps/api/src/services/benchmark/benchmark.service.spec.ts
@@ -12,4 +12,16 @@ describe('BenchmarkService', () => {
expect(benchmarkService.calculateChangeInPercentage(2, 2)).toEqual(0);
expect(benchmarkService.calculateChangeInPercentage(2, 1)).toEqual(-0.5);
});
+
+ it('getMarketCondition', async () => {
+ expect(benchmarkService.getMarketCondition(0)).toEqual('ALL_TIME_HIGH');
+ expect(benchmarkService.getMarketCondition(-5.90736454893e-9)).toEqual(
+ 'ALL_TIME_HIGH'
+ );
+ expect(benchmarkService.getMarketCondition(-0.1)).toEqual('NEUTRAL_MARKET');
+ expect(benchmarkService.getMarketCondition(-0.19996)).toEqual(
+ 'BEAR_MARKET'
+ );
+ expect(benchmarkService.getMarketCondition(-0.2)).toEqual('BEAR_MARKET');
+ });
});
diff --git a/apps/api/src/services/benchmark/benchmark.service.ts b/apps/api/src/services/benchmark/benchmark.service.ts
index 56a629163..99ceaf21e 100644
--- a/apps/api/src/services/benchmark/benchmark.service.ts
+++ b/apps/api/src/services/benchmark/benchmark.service.ts
@@ -24,7 +24,7 @@ import { Injectable, Logger } from '@nestjs/common';
import { SymbolProfile } from '@prisma/client';
import { Big } from 'big.js';
import { addHours, isAfter, subDays } from 'date-fns';
-import { uniqBy } from 'lodash';
+import { round, uniqBy } from 'lodash';
import ms from 'ms';
import { BenchmarkValue } from './interfaces/benchmark-value.interface';
@@ -220,9 +220,11 @@ export class BenchmarkService {
public getMarketCondition(
aPerformanceInPercent: number
): Benchmark['marketCondition'] {
- if (aPerformanceInPercent >= 0) {
+ const performanceInPercent = round(aPerformanceInPercent, 4);
+
+ if (performanceInPercent >= 0) {
return 'ALL_TIME_HIGH';
- } else if (aPerformanceInPercent <= -0.2) {
+ } else if (performanceInPercent <= -0.2) {
return 'BEAR_MARKET';
} else {
return 'NEUTRAL_MARKET';
diff --git a/libs/ui/src/lib/benchmark/benchmark.component.html b/libs/ui/src/lib/benchmark/benchmark.component.html
index a950f0c44..d60eba7c4 100644
--- a/libs/ui/src/lib/benchmark/benchmark.component.html
+++ b/libs/ui/src/lib/benchmark/benchmark.component.html
@@ -135,9 +135,15 @@
class="d-inline-block justify-content-end"
[class]="{
'text-danger':
- element?.performances?.allTimeHigh?.performancePercent < 0,
+ round(
+ element?.performances?.allTimeHigh?.performancePercent,
+ 4
+ ) < 0,
'text-success':
- element?.performances?.allTimeHigh?.performancePercent === 0
+ round(
+ element?.performances?.allTimeHigh?.performancePercent,
+ 4
+ ) === 0
}"
[isPercent]="true"
[locale]="locale()"
diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts
index 0b78ffa0d..0d9aba0ca 100644
--- a/libs/ui/src/lib/benchmark/benchmark.component.ts
+++ b/libs/ui/src/lib/benchmark/benchmark.component.ts
@@ -33,7 +33,7 @@ import { ActivatedRoute, Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons';
import { ellipsisHorizontal, trashOutline } from 'ionicons/icons';
-import { isNumber } from 'lodash';
+import { isNumber, round } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { GfEntityLogoComponent } from '../entity-logo/entity-logo.component';
@@ -92,6 +92,7 @@ export class GfBenchmarkComponent {
protected isLoading = true;
protected readonly isNumber = isNumber;
protected readonly resolveMarketCondition = resolveMarketCondition;
+ protected readonly round = round;
protected readonly translate = translate;
private readonly destroyRef = inject(DestroyRef);
diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts
index 9c3330466..dffcb89e7 100644
--- a/libs/ui/src/lib/value/value.component.ts
+++ b/libs/ui/src/lib/value/value.component.ts
@@ -168,7 +168,9 @@ export class GfValueComponent implements AfterViewInit, OnChanges {
}
}
- if (this.formattedValue === '0.00') {
+ if (/^-?0([.,]0*)?$/.test(this.formattedValue)) {
+ // Remove algebraic sign of values rounding to zero
+ this.formattedValue = this.formattedValue.replace(/^-/, '');
this.useAbsoluteValue = true;
}
}
From 5609aaa98c50e956bbe6676bf15f58d73a983d42 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 3 Jul 2026 20:04:37 +0200
Subject: [PATCH 3/4] Task/harmonize date picker styling (#7194)
* Harmonize date picker styling
* Update changelog
---
CHANGELOG.md | 1 +
.../create-or-update-activity-dialog.html | 2 +-
.../account-balances.component.html | 2 +-
.../fire-calculator.component.html | 19 +++++++++++++------
.../fire-calculator.component.ts | 6 ++++++
5 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c14452d4b..807180092 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Harmonized the date picker styling across various components
- Updated the _Privacy Policy_
- Updated the _Terms of Service_
- Improved the parsing of integer query parameters (`skip` and `take`) in the `GET api/v1/activities` endpoint
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
index 20c50d0fe..8f2dfebfd 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -167,7 +167,7 @@
name="calendar-clear-outline"
/>
-
+
-
+
+ [for]="date"
+ >
+
+
diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
index c8e281609..fa998778d 100644
--- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
+++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
@@ -34,6 +34,7 @@ import {
} from '@angular/material/datepicker';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
+import { IonIcon } from '@ionic/angular/standalone';
import {
BarController,
BarElement,
@@ -56,6 +57,8 @@ import {
startOfMonth,
sub
} from 'date-fns';
+import { addIcons } from 'ionicons';
+import { calendarClearOutline } from 'ionicons/icons';
import { isNumber } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { debounceTime } from 'rxjs';
@@ -67,6 +70,7 @@ import { FireCalculatorService } from './fire-calculator.service';
imports: [
CommonModule,
FormsModule,
+ IonIcon,
MatButtonModule,
MatDatepickerModule,
MatFormFieldModule,
@@ -136,6 +140,8 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
Tooltip
);
+ addIcons({ calendarClearOutline });
+
this.calculatorForm.valueChanges
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
From 156b6e2d7fbb032553134e8039c789cdd7df246a Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 3 Jul 2026 20:09:08 +0200
Subject: [PATCH 4/4] Release 3.19.1 (#7203)
---
CHANGELOG.md | 13 ++++---------
package-lock.json | 4 ++--
package.json | 2 +-
3 files changed, 7 insertions(+), 12 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 807180092..06fe37822 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,15 +5,7 @@ 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
-
-### Fixed
-
-- Fixed the colorization of the change from all time high in the benchmark component when values round to zero
-- Fixed the market condition of the benchmarks when values round to zero
-- Fixed an issue where values incorrectly rounded to negative zero in the value component
-
-## 3.19.0 - 2026-07-02
+## 3.19.1 - 2026-07-03
### Added
@@ -33,6 +25,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
+- Fixed an issue where values incorrectly rounded to negative zero in the value component
+- Fixed the colorization of the change from all time high in the benchmark component when values round to zero
+- Fixed the market condition of the benchmarks when values round to zero
- Fixed the validation of the data source field of an asset profile with market data
- Fixed a recurring issue where single-value fields were incorrectly validated as arrays in various endpoints
diff --git a/package-lock.json b/package-lock.json
index 4c7357b51..8370a5765 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.19.0",
+ "version": "3.19.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.19.0",
+ "version": "3.19.1",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 1599fc447..4585d34ca 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.19.0",
+ "version": "3.19.1",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",