* feat(client): implement default date range
* feat(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation
* fix(client): remove dead code
* feat(client): enforce immutability
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert errors to signal
* feat(client): convert hasImpersonationId to signal
* feat(client): convert user to signal
* feat(client): convert to computed signals
* feat(client): convert historicalDataItems and isLoadingPerformance to signals
* feat(client): convert performance and precision to signals
* feat(client): implement OnPush change detection strategy
* fix(common): revert DateRange type change
* fix(client): format file
* fix(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation
* fix(client): remove dead code
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert isLoading to signal
* feat(client): convert hasImpersonationId to signal
* feat(client): convert summary to signal
* feat(client): convert user and hasPermissionToUpdateUserSettings to signals
* feat(client): implement OnPush change detection strategy
* fix(client): remove nested subscription
* feat(client): resolve error
* feat(client): enforce encapsulation
* feat(client): enforce immutability
* feat(client): replace constructor based DI with inject function
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert benchmarks to signal
* feat(client): convert historicalDataItems to signal
* feat(client): convert fearAndGreedIndex to signal
* feat(client): resolve errors
* feat(client): migrate constructor based DI to inject function
* feat(client): implement view child signal
* feat(client): replace deprecated getDeviceInfo
* fix(client): enforce encapsulation and immutability
* fix(client): make tag as optional to cover tag creation use case
* feat(client): migrate constructor based DI to inject function
* feat(client): implement view child signal
* feat(client): replace deprecated getDeviceInfo
* feat(client): implement input signal
* fix(client): enforce encapsulation
* fix(client): make platform as optional for platform creation
* feat(client): resolve errors
* feat(client): migrate constructor based DI to inject function
* feat(client): implement view child signal
* feat(client): replace deprecated getDeviceInfo
* fix(client): enforce encapsulation
* feat(client): implement input signal
* fix(common): accept undefined for value in update property DTO
* fix(common): accept undefined for language code parameter
* fix(client): enforce encapsulation and immutability
* feat(client): migrate constructor based DI to inject function
* fix(client): info and getter encapsulation
* Upgrade ai
* @openrouter/ai-sdk-provider to version 2.9.0
* ai to version 6.0.174
* Add AI service health check and improve layout
* Update changelog
fix: preserve existing symbol when cloning a manual asset activity
When cloning an activity linked to a manual asset (VALUABLE, FEE,
INTEREST, LIABILITY), the symbol field in onSubmit() was explicitly
set to undefined for these types, causing the backend to generate a
new UUID and create a duplicate SymbolProfile instead of reusing the
existing one.
Simplify the symbol assignment to always prefer searchSymbol.value.symbol
(which correctly holds the existing asset's identifier when cloning)
and fall back to name.value only when no symbol exists (i.e. when
creating a brand-new manual asset).
Fixes#5324