* Initial plan
* Fix mobile Calendar fatal error by correcting height constraint
The Virtualizer component in TransactionList requires its parent to have a defined height. Changed the View wrapper from height: '100%' to flex: 1 to properly distribute space within the flex container, accounting for the chevron button.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add DisplayPayeeProvider to fix mobile Calendar error
The TransactionListItem component uses useDisplayPayee hook which requires DisplayPayeeProvider context. Wrapped TransactionListMobile with DisplayPayeeProvider to fix "useDisplayPayee must be used within a DisplayPayeeContextProvider" error on mobile.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Change flex to height for View component
* Add release notes for PR #6698
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Update customThemeCatalog.json
Add Simple Dark and Okabe Ito themes
* Add Simple Dark and Okabe Ito themes to theme catalog
* Update customThemeCatalog.json
* Fix flaky mobile payees VRT test by waiting for navbar animation to complete
Add wait timeout after dragNavbarDown() to ensure react-spring animation finishes before screenshots are taken.
* Add release notes for reducing payees e2e test flakiness
* Fix release note formatting: use sentence case and add period
Co-authored-by: matiss <matiss@mja.lv>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Refactor theme catalog fetching to use custom hook
- Move catalog fetching logic from ThemeInstaller to useThemeCatalog hook
- Fetch catalog asynchronously from GitHub instead of direct import
- Update tests to mock useThemeCatalog hook for faster test execution
- Remove catalog validation and translation dependencies from hook
* Remove redundant visibility checks for 'Demo Theme' button in ThemeInstaller tests and add assertion to verify presence of images.
* Refactor ThemeInstaller component to improve error handling and loading state display
- Change conditional rendering for catalog error to use ternary operator for clarity
- Simplify loading state display logic within the theme catalog view
- Ensure consistent styling and structure for theme items in the catalog
* Initialize loading state in useThemeCatalog hook to true
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Apply import sorting with perfectionist/sort-named-imports rule
- Add perfectionist/sort-named-imports oxlint rule
- Sort named imports: value imports before type imports
- Update component-library and desktop-client files to match new rule
* Add release notes for linting updates on named imports
* Add custom themes feature with GitHub installation support
- Add ThemeInstaller component for installing themes from GitHub
- Implement custom theme validation and CSS parsing
- Add support for installed custom themes in preferences
- Add CustomThemeStyle component with CSS validation
- Update theme system to support custom overlay backgrounds
- Add comprehensive tests for theme installation and validation
- Add documentation and release notes for custom themes feature
* Update custom theme catalog: remove several themes and add 'Miami Beach' from a new repository.
* Enhance CSS validation in custom themes
- Refactor `validatePropertyValue` to implement an allowlist approach for CSS property values, rejecting complex constructs and functions except for rgb/rgba/hsl/hsla.
- Add comprehensive tests for various invalid CSS scenarios, including function calls and at-rules.
- Improve error messages for better clarity on validation failures.
- Ensure property name validation checks for format and allowed characters.
* Update custom theme catalog: rename theme from 'Miami Beach' to 'Shades of Coffee'.
* Remove 'forceReload' feature flag and related code from the application settings and feature flag definitions.
* Enhance ThemeInstaller component to support installed themes
- Add `installedTheme` prop to `ThemeInstaller` for managing custom themes.
- Implement logic to populate the text box with installed custom theme CSS when reopening.
- Update tests to verify behavior for installed themes with and without repositories.
- Improve CSS validation to allow additional CSS keywords and ensure proper structure.
* fix: disable oneOf and notOneOf operations for Notes filter
The Notes field is a free-text field and should not support "one of" /
"not one of" filter operations, as these require predefined values.
Attempting to use these operations with the Notes filter caused the app
to crash with a TypeError.
This change:
- Adds 'oneOf' and 'notOneOf' to disallowedOps for the notes field
- Updates the TypeScript type definitions to reflect this constraint
- Updates existing tests to use imported_payee field for oneOf tests
- Adds unit tests for the isValidOp and getValidOps functions
Fixes#6325
Signed-off-by: majiayu000 <1835304752@qq.com>
* move note
---------
Signed-off-by: majiayu000 <1835304752@qq.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* add session token authentication to API init()
Allow users to authenticate using a session token directly instead of
username/password when initializing the API. This is useful for
scenarios where a token has already been obtained through other means.
Changes:
- Refactor InitConfig to use union types for type-safe auth method selection
- Add sessionToken option that validates token on init
- Use TypeScript `never` types to make auth methods mutually exclusive
* add release notes for session token authentication
* Update color palette with old color values
* Update color palette with new values
* Replace old color imports with old color definitions
* Update color exports to use consistent casing
Done in bulk in MS-Word
* Fix export statements for color constants
* Clean up palette.ts by removing old import comment
Removed commented-out import statement for old colors.
* Add oldColor hex color definitions to palette.ts
Copy hex color definitions from colors.ts into palette.ts.
* Delete packages/desktop-client/src/style/colors.ts
no longer needed
* Disable colors export due to file deletion
* [autofix.ci] apply automated fixes
* Remove restricted import comment from index.ts
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Update inter-ui to latest npm package: ^4.1.1
* chore: migrate from inter-ui to @fontsource-variable/inter
- Replace inter-ui v3.19.3 with @fontsource-variable/inter v5.2.8
- Import variable font CSS directly via @import statements
- Update font-family declarations to use 'Inter Variable' to match Fontsource naming
- Simplifies path resolution and removes custom SCSS overrides
* Add release notes
* Enable Inter font features
Add ss04 to styles.tnum
Remove font feature settings and always apply in tnum style
Always enable alternate digits (ss01) and slashed zero (zero) font features
instead of making them user-configurable preferences.
* Add font feature settings to mobile financial amounts
Apply styles.tnum to mobile components displaying financial amounts
to enable OpenType features (tnum, ss01, ss04) for proper number styling:
- TransactionListItem: transaction amounts and running balance
- BudgetTable: header totals, ToBudget, and Saved amounts
- ExpenseGroupListItem: expense group totals
- BudgetCell, SpentCell, BalanceCell: category amounts
- IncomeGroup: income group amounts
- SchedulesListItem: schedule amounts
This ensures consistent digit rendering with serifs on "1" and open
digit forms across all mobile transaction, budget, and schedule views.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
* revert VRT changes
* remove lint line
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* fix(privacy): hide currency symbols in redacted overlay
Add RedactedContent component that uses useLayoutEffect to walk the DOM
and replace non-alphanumeric characters (like currency symbols) with spaces.
This ensures characters not rendered by Redacted Script font are hidden,
regardless of how deeply nested they are in the component tree.
* refactor: simplify RedactedContent text node processing loop
* lint: patch some no-empty-function violations
* docs: update ESLint rules and remove unused loadOwner function in UserAccess component
* refactor: remove getRemoteFile function and associated method from budget file handlers
* chore: disable docstring checks in coderabbit configuration
* Update linting rules and replace @ts-ignore with @ts-expect-error
* Add release notes for PR #6636
* Fix TypeScript linting issue by adding @ts-ignore for electron types in server start message
* Change category to Maintenance and update linting rules
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix transactions table payee schedule icon not showing if linked schedule has a different account configured
* [autofix.ci] apply automated fixes
* Move SchedulesProvider higher in component tree
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix: skip schedule prompt for transactions already linked to schedule
When editing a future-dated transaction on mobile that is already linked
to a schedule, the app was incorrectly showing the "convert to schedule"
prompt. This was confusing since the transaction was already associated
with a schedule.
This change adds a check for `unserializedTransaction.schedule` to skip
showing the schedule prompt if the transaction is already linked to a
schedule.
Fixes#6357
Signed-off-by: majiayu000 <1835304752@qq.com>
* fix: resolve build and lint issues in TransactionEdit.tsx
* docs: add release notes for PR #6569
* chore: remove duplicate release note file
Signed-off-by: majiayu000 <1835304752@qq.com>
* chore: rename release note file to match PR number
Signed-off-by: majiayu000 <1835304752@qq.com>
* fix: apply schedule prompt fix to desktop version
Signed-off-by: majiayu000 <1835304752@qq.com>
---------
Signed-off-by: majiayu000 <1835304752@qq.com>
* Add unfiltered median projection type to crossover report
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Add a new 'mean' projection type to crossover report
Some people may want to use the average monthly expenses rather than
median expenses.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Remove 'linear trend' from crossover report
The linear projection type almost never provides any useful information
for projecting future expenses. For example, if my expenses have been
declining for the past several months, that doesn't mean that they will
continue to decline until they reach 0 in retirement. It's way too easy
to receive a nonsense projection with the linear projection type. Just
remove it.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Add release notes for crossover point projections
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* [autofix.ci] apply automated fixes
---------
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Add blog post for Actual Budget Wrapped 2025
* Add release notes for PR #6580
* Delete upcoming-release-notes/6580.md
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>