* feat(lib): resolve typescript errors
* feat(lib): make input a view child signal
* feat(lib): remove unsubscribe subject
* feat(lib): remove ngOnDestroy
* feat(lib): make currencies an input signal
* feat(lib): make formControlName an input signal
* fix(lib): resolve typescript errors
* feat(lib): migrate to takeUntilDestroyed
* fix(lib): resolve type errors
* feat(lib): implement output signal
* feat(lib): clean up variables
* fix(lib): resolve input is deprecated
* feat(lib): implement input signal on placeholder
* feat(lib): implement input signal on isLoading
* fix(lib): add type annotations for date adapter
* fix(lib): handle form value possibly null
* fix(lint): use arrow fn for validators
* fix(lib): accounts table typings
* fix(lib): remove unsubscribeSubject due to lack of observable
* fix(lib): remove validators variable
* feat(lib): implement inject functions
* feat(lib): make locale an input signal
* feat(lib): make showActions an input signal
* feat(lib): make accountId an input signal
* feat(lib): make accountCurrency an input signal
* feat(lib): make accountBalances an input signal
* feat(lib): make sort a viewChild signal
* feat(lib): implement isNil
* feat(lib): resolve ts errors
* feat(lib): make days protected and readonly
* feat(lib): create formatDay helper function
* fix(lib): remove unused eslint-disable
* feat(lib): change locale to input signal
* feat(lib): change defaultDateFormat to computed signal
* feat(lib): change deviceType to computed signal
* feat(lib): change marketData to input signal
* feat(lib): change historicalDataItems to computed signal
* feat(nx): run ui test
* feat(lib): update days to improve readability
* feat(nx): revert test changes
* fix(lib): change logic for locale
* fix(lib): disable mutating the injected readonly data
* fix(lib): implement takeUntilDestroyed
* fix(lib): implement takeUntilDestroyed
* fix(lib): organize imports
- Fix [class] binding overwriting CSS classes (use [ngClass] instead)
- Fix activities fetch returning wrong data for older dates (use year range)
- Add @HasPermission(readJournalEntry) to GET endpoints
- Apply delta adjustment to netPerformanceInPercentage (was cumulative)
- Fix realized profit to only include dividend/interest income (exclude SELL gross proceeds)
- Fix formatCurrency hiding $0 values (only hide null/undefined)
- Localize monthLabel, weekday headers, and dateLabel using Intl.DateTimeFormat
- Add snackbar feedback on note save/delete success and failure
- Remove unused date field from DTO, add @IsNotEmpty to note
- Add DEFAULT_CURRENCY fallback for userCurrency
- Add month/year range validation
- Fix January baseline by fetching previous year performance
- Add maxWidth to dialog for mobile
- Only reload calendar data when dialog reports changes
- Remove unused GfActivitiesTableComponent and user subscription from dialog
- Handle empty note save gracefully (skip API call if no existing note)
- Add dark mode support to dialog SCSS
- Add route title for browser tab
https://claude.ai/code/session_01XEieh1hHrXc1fcbnA7oBHn
Add a Tradezella-inspired trading journal feature to the Portfolio section.
This provides a monthly calendar view showing daily P&L (total portfolio change
as primary, realized P&L as secondary), color-coded days (green/red/grey),
activity counts, trading statistics, and a full day detail dialog with
activities list and journal notes.
Key changes:
- Database: JournalEntry model with Prisma migration
- Backend: Journal module with REST API (GET/PUT/DELETE /api/v1/journal)
- Frontend: GfJournalCalendarComponent (UI library), journal page with
day detail dialog, new "Journal" tab in Portfolio section
- Shared: Permissions, DTOs, response interfaces, route definitions
https://claude.ai/code/session_01XEieh1hHrXc1fcbnA7oBHn
* fix(lib): update displayedColumns type
* feat(lib): use input function for holdings
* feat(lib): make isLoading a computed signal
* feat(lib): make paginator and sort viewchild signals
* feat(lib): make dataSource a computed signal
* feat(lib): use input function for hasPermission fields
* feat(lib): make displayedColumns a computed signal
* feat(lib): remove ngOnChanges
* feat(lib): update types in holdings mock
* fix(lib): update imports for treemap chart component
* fix(lib): remove unused routeQueryParams variable
* fix(lib): prevent creating new table data source every time the signal changes
* fix(lib): remove unused unsubscribe subject as there is no observable subscription
* fix(lib): revert changes to dataSource in the template
* fix(lib): changed locale to input signal
* fix(lib): change ignoreAssetSubClasses to protected
* fix(lib): create canShowDetails function
* fix(lib): remove unused baseCurrency and deviceType inputs
* fix(lib): remove unused baseCurrency and deviceType inputs from stories
* feat(lib): make constructor as public
* fix(lib): prevent table data source to be created every time
* fix(lib): remove unused unsubscribeSubject variable
* fix(lib): change to protected methods
* feat(lib): change locale to signal input
* feat(lib): remove unused deviceType input
* feat(lib): change hasPermissionToOpenDetails to signal input
* feat(lib): change showFooter to signal input
* feat(lib): change activitiesCount to signal input
* feat(lib): change baseCurrency to signal input
* feat(lib): change totalBalanceInBaseCurrency to signal input
* feat(lib): change totalValueInBaseCurrency to signal input
* feat(lib): change outputs to signal outputs
* fix(lib): replace null with undefined in activities table stories
* feat(lib): implement inject functions in accounts table
* feat(lib): change to input functions
* feat(lib): change displayedColumns to a computed field
* feat(lib): change accounts to use input function
* feat(lib): change isLoading to a computed field
* fix(lib): remove unused routeQueryParams variable
* feat(lib): change sort to use viewChild function
* feat(lib): change dataSource to a computed field
* feat(lib): remove ngOnChanges
* Extend FIRE page with projection information at retirement date
* Update changelog
---------
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
* 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
* 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