Commit Graph

2260 Commits

Author SHA1 Message Date
Juulz
bcbcd6ad9f 🎨 Add new theme 'Theme from 1970' to customThemeCatalog (#6730)
* Add new theme 'Theme from 1970' to customThemeCatalog

* Add release notes for 1970-inspired light theme

Added release notes for a new custom light theme inspired by 1970 colors.
2026-01-20 20:57:06 +00:00
Matiss Janis Aboltins
c9a0ffa91c Replace theme screenshots with color palette preview (#6722)
* Replace theme screenshots with color palette preview

- Replace screenshot images in theme installer with 3x2 color palette grid
- Add colors array to catalog themes in customThemeCatalog.json
- Update CatalogTheme type to include optional colors property
- Remove getThemeScreenshotUrl function
- Extract ColorPalette component to separate file
- Update documentation to reflect color palette instead of screenshots
- Update tests to verify color palettes instead of images
- Extract actual theme colors from GitHub repositories

* Update ColorPalette component to use data-swatch attribute for color swatches in ThemeInstaller tests

* Update packages/desktop-client/src/data/customThemeCatalog.json

Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>

* Update color palettes for Simple Dark and Okabe Ito themes

Co-authored-by: matiss <matiss@mja.lv>

---------

Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-01-20 18:00:34 +00:00
Matiss Janis Aboltins
6a9df6562c Fix AuthSettings - hide when no server configured and show warning when offline (#6723)
* Fix AuthSettings - hide if no server configured and show warning if offline

* Add release notes for auth settings fix

* Refactor AuthSettings component to always display OpenID label hint and remove offline condition check in tests
2026-01-20 18:00:07 +00:00
Matiss Janis Aboltins
176336e7f3 Upgrade oxfmt/oxlint and migrate import sorting to oxfmt (#6719)
* Upgrade oxfmt/oxlint and migrate import sorting to oxfmt

Upgrade oxfmt from 0.22.0 to 0.26.0 and oxlint from 1.38.0 to 1.41.0.

Move import sorting configuration from oxlint (perfectionist/sort-imports)
to oxfmt's new experimentalSortImports feature, which provides native
import sorting support in the formatter.

* Add release notes for maintenance updates including oxlint and oxfmt upgrades
2026-01-19 21:46:24 +00:00
Matt Fiddaman
de0f4e9440 ⬆️ upgrade react deps (#6717)
* react & react-dom

* react-virtualized-auto-sizer v2

* react-grid-layout v2

* note

* Update table.tsx

Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6717

---------

Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-19 18:53:15 +00:00
Matiss Janis Aboltins
65dee4c627 lint: a11y issue fixes (#6679)
* Fix accessibility issues: use semantic HTML and correct tab indices

- Replace View with semantic h1 in ModalHeader
- Fix tabIndex from 1 to 0 in Menu component
- Remove disabled oxlint accessibility rules
- Update components to use proper semantic HTML elements

* Refactor button elements to semantic HTML in Autocomplete and CategoryAutocomplete components

- Replace button elements with div/View while maintaining role="button" for accessibility.
- Update styles and props accordingly to ensure consistent behavior.
- Adjust onClick types in Item and SecondaryItem components for better type safety.

* Add release notes for upcoming maintenance updates addressing various accessibility issues

* Refactor autocomplete components to improve text alignment and button semantics

- Added textAlign: 'left' style to AccountItem and PayeeItem for consistent text alignment.
- Removed type="button" from CategoryItem to streamline button semantics.
- Updated ItemContent to use the Button component instead of a button element, enhancing accessibility and consistency.

* Refactor budget and report components to improve text alignment

- Removed font: 'inherit' style from EnvelopeBudgetComponents and TrackingBudgetComponents for cleaner styling.
- Updated ActionableGridListItem and ReportCard components to replace font: 'inherit' with textAlign: 'left' for consistent text alignment.

* Update ActionableGridListItem to include font inheritance for improved styling consistency

* Refactor button elements to use the Button component for consistency and improved semantics

- Updated various components (EnvelopeBudgetComponents, IncomeCategoryMonth, CategoryMonth, ActionableGridListItem, ReportCard, DesktopLinkedNotes) to replace native button elements with the custom Button component.
- Adjusted styles and event handlers to align with the new Button implementation, ensuring consistent behavior and accessibility across the application.

* Update Button and ActionableGridListItem styles for consistency

- Set a fixed borderRadius of 4 for the Button component, ensuring uniformity across variants.
- Adjusted ActionableGridListItem to have a borderRadius of 0 for a cleaner design.

* Update CategoryAutocomplete to include button type attribute for improved semantics

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6679

* Update VRT screenshot for Payees search functionality

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-19 18:19:13 +00:00
Copilot
9376217c5e Fix mobile Calendar crash from missing DisplayPayeeProvider (#6698)
* 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>
2026-01-19 18:05:02 +00:00
Matiss Janis Aboltins
e6e108ffbd Add error styling to ThemeInstaller component (#6689)
* Add error styling to ThemeInstaller component

* Add upcoming release notes for theme enhancements, including improved error handling and expanded theme catalog.

* Update upcoming-release-notes/6689.md

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update ThemeInstaller to set selected catalog theme on click

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-01-19 18:04:45 +00:00
Matt Fiddaman
517b1b4a81 fix "show completed schedules" toggle being persisted (#6716)
* make mobile consistent with desktop

* remove old option and modal

* note

* remove some useMemos

* coderabbit
2026-01-19 17:37:42 +00:00
Matt Fiddaman
cdae09e554 fix HyperFormula custom functions and add FIXED formula (#6645)
* fix custom HyperFormula functions

* add FIXED formula

* note

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-19 17:00:40 +00:00
Juulz
59233c4786 🎨 Add Simple Dark and Okabe Ito custom themes to catalog (#6696)
* Update customThemeCatalog.json

Add Simple Dark and Okabe Ito themes

* Add Simple Dark and Okabe Ito themes to theme catalog

* Update customThemeCatalog.json
2026-01-19 16:54:45 +00:00
Matt Fiddaman
3c302b3af9 apply tabular number styles more consistently (#6661)
* reports/reports

* reports/graphs

* account balance

* budgets

* goals

* reports stragglers

* rules

* schedules

* table

* bank sync modal

* spreadsheet

* inputs

* cover menu

* note

* agent configs, and coderabbit review rule

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6661

* fix test

* rename to FinancialText

* lint

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6661

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-19 16:39:16 +00:00
Copilot
b50d48a31a Fix sidebar link highlighting for nested routes (#6669)
* Initial plan

* Add release notes for PR #6669

* Fix Reports link highlighting in sidebar for nested routes

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Simplify by hardcoding end={false} in InternalLink

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6669

* Fix All accounts link to use exact matching

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6669

* Merge master and accept incoming screenshot changes

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Remove screenshot changes from current branch

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Revert all remaining screenshots to master versions

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Rename 'end' prop to 'isExactPathMatch' for clarity

Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6669

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
2026-01-18 18:11:07 +00:00
Matiss Janis Aboltins
9289932af9 Fix flaky mobile payees VRT test by waiting for navbar animation (#6699)
* 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>
2026-01-18 18:10:35 +00:00
Matthias Benaets
58b1420c60 fix: limit custom css textarea to resize vertically (#6695) 2026-01-18 13:54:57 +00:00
Michael Clark
7035b32f26 🎨 Custom theme: Black Gold (#6688)
* black gold theme

* release notes

* release note typo

* release note
2026-01-18 09:42:00 +00:00
Matiss Janis Aboltins
ee0e7ed3e0 Refactor theme catalog fetching to use custom hook (#6681)
* 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>
2026-01-17 10:06:16 +00:00
Matiss Janis Aboltins
b6452f930b lint: add perfectionist/sort-named-imports rule (#6680)
* 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
2026-01-16 23:41:45 +00:00
Joel Jeremy Marquez
bf814a6873 Update category schedule indicator to honor the upcoming days length setting (#6559)
* Update category schedule indicator to honor the upcoming days length setting

* [autofix.ci] apply automated fixes

* Update filter

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-16 17:40:05 +00:00
Matt Fiddaman
81c5dd347f fix inaccurate net payment/deposit calculations (#6675)
* fix net calculations

* note
2026-01-16 17:22:16 +00:00
Asherah Connor
f5e1d5eab4 Only reverse import preview transactions if they appear to be sorted by date ascending (#6543)
* Sort import preview transactions by (parsed) date, descending

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6543

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 14:50:54 +00:00
Matiss Janis Aboltins
6bf119786c lint: re-enable some react rules (#6667)
* Remove hooks disable in electron fixtures

Co-authored-by: matiss <matiss@mja.lv>

* Add release notes for PR #6667

* Re-enable exhaustive-deps for low-risk hooks

Co-authored-by: matiss <matiss@mja.lv>

* Reduce exhaustive-deps overrides

Co-authored-by: matiss <matiss@mja.lv>

* Format useQuery hook

Co-authored-by: matiss <matiss@mja.lv>

* Fix exhaustive-deps warnings in hooks

Co-authored-by: matiss <matiss@mja.lv>

* Format useQuery dependencies

Co-authored-by: matiss <matiss@mja.lv>

* Document dynamic hook dependencies

Co-authored-by: matiss <matiss@mja.lv>

* Use react exhaustive-deps disables

Co-authored-by: matiss <matiss@mja.lv>

* Adjust exhaustive-deps disables

Co-authored-by: matiss <matiss@mja.lv>

* Refactor React hooks to address exhaustive-deps linting issues

- Updated multiple components to use `useEffectEvent` for better handling of dependencies.
- Adjusted dependencies in various hooks to improve code quality and maintainability.
- Removed unnecessary `useCallback` and `useRef` usages where applicable.
- Consolidated linting rules for React hooks to enhance consistency across the codebase.

* Refactor useEffect hooks to improve dependency management

- Updated ManageRules component to correctly return the init function in useEffect.
- Adjusted Modals component to disable exhaustive-deps linting for specific dependencies, enhancing clarity and maintainability.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 08:45:29 +00:00
Juulz
14d4c7748d add missing theme variable for custom theming (#6665)
* Update BudgetName color to use sidebarBudgetName 

New theme variable sidebarBudgetName

* Update dark.ts to add sidebarBudgetName variable

* Update development.ts to add sidebarBudgetName variable

* Update light.ts to add sidebarBudgetName variable

* Update midnight.ts to add sidebarBudgetName variable

* Update dark.ts

* Update development.ts

* Update light.ts

* Update midnight.ts

* Update theme.ts

* Create 6665.md

Add `sidebarBudgetName` color variable
2026-01-16 00:19:30 +00:00
Matiss Janis Aboltins
d01d0eacb8 Add custom themes installation feature (#6612)
* 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.
2026-01-15 18:04:35 +00:00
Juulz
d01f38d480 Copy all old colors from colors.ts to palette.ts (#6627)
* 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>
2026-01-14 20:48:04 +00:00
Stephen Brown II
f5377ac7b7 chore: migrate from inter-ui to @fontsource-variable/inter (#6436)
* 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>
2026-01-14 20:36:43 +00:00
Matt Fiddaman
826ad86ada ⬆️ mid month dependency bump (#6656)
* @types/node (^22.19.1 → ^22.19.3)

* oxlint (^1.37.0 → ^1.38.0)

* better-sqlite3 (^12.4.1 → ^12.5.0)

* vitest (^4.0.9 → ^4.0.16)

* react-aria-components (^1.13.0 → ^1.14.0)

* @codemirror/autocomplete (^6.19.1 → ^6.20.0)

* @codemirror/language (^6.11.3 → ^6.12.1)

* @codemirror/state (^6.5.2 → ^6.5.3)

* @swc/core (^1.15.2 → ^1.15.8)

* @uiw/react-codemirror (^4.25.3 → ^4.25.4)

* @vitejs/plugin-basic-ssl (^2.1.0 → ^2.1.3)

* @vitejs/plugin-react (^5.1.1 → ^5.1.2)

* hyperformula (^3.1.0 → ^3.1.1)

* i18next (^25.6.2 → ^25.7.4)

* jsdom (^27.2.0 → ^27.4.0)

* react-aria (^3.44.0 → ^3.45.0)

* @swc/helpers (^0.5.17 → ^0.5.18)

* react-error-boundary (^6.0.0 → ^6.0.3)

* react-grid-layout (^1.5.2 → ^1.5.3)

* react-i18next (^16.3.3 → ^16.5.1)

* react-simple-pull-to-refresh (^1.3.3 → ^1.3.4)

* sass (^1.94.0 → ^1.97.2)

* vite (^7.2.2 → ^7.3.1)

* vite-plugin-pwa (^1.1.0 → ^1.2.0)

* fs-extra (^11.3.2 → ^11.3.3)

* @easyops-cn/docusaurus-search-local (^0.52.1 → ^0.52.2)

* react (^19.2.0 → ^19.2.3)

* react-dom (^19.2.0 → ^19.2.3)

* @reduxjs/toolkit (^2.10.1 → ^2.11.2)

* lru-cache (^11.2.2 → ^11.2.4)

* ua-parser-js (^2.0.6 → ^2.0.7)

* workbox-precaching (^7.3.0 → ^7.4.0)

* winston (^3.18.3 → ^3.19.0)

* supertest (^7.1.4 → ^7.2.2)

* playwright (^1.56.0 → ^1.57.0)

* stragglers

* note

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-14 20:17:55 +00:00
Will Thomas
c1720f35fd Add Report pages (#6411)
* Adding multiple report pages

* Adding release notes

* Updating release note number

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6411

* Fixing deletion id, allowing empty dashboard name, adding custom report dashboard saving, new dashboard default to empty

* Update VRT snapshots for command bar, payees, and schedules tests

* Update VRT snapshots for payees page visuals and search functionality tests

* Towards move/copy logic (need widget meta copy still!)

* refactor move widget to use add and remove

* Move/Copy modal

* fixes for rename duplicate calls, rename focus issue, and deletion undefined issue

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6411

* some bug/clarity fixes

* better type discipline, dashboard_pages schema, PR review fixes

* re-org of dashboard pages into dropdown, better mobile support, rename moved to title icon

* dashboard spacing fix (even for ridiculously long names), widget type-checking function

* Fix translation interpolation

* Fixing copy vs. move filename, removing old rename modal, minor review tweaks

* overview change simplification, routing error handling, move -> copy migration

* renaming for dashboard pages and error handling

* abstracting out `isWidgetType` function

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6411

* Reorganizing dashboard selector and vertical separator, fix widget tombstoning and undoability

* [autofix.ci] apply automated fixes

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6411

* fix dashboard not found spinner, fix dashboard deletion redirect, add SaveReportWrapper

* fix some deletion navigation issues and idioms

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6411

* Translate 'modified' status in SaveReport component

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-13 22:41:47 +00:00
Stephen Brown II
93cce07542 fix(privacy): hide currency symbols in redacted overlay (#6438)
* 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
2026-01-13 22:19:19 +00:00
Matiss Janis Aboltins
b88feb9336 lint: patch some no-empty-function violations & delete unused code (#6642)
* 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
2026-01-13 22:05:24 +00:00
Matiss Janis Aboltins
0c3a515e29 Update linting rules and replace @ts-ignore with @ts-expect-error (#6636)
* 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>
2026-01-13 21:53:14 +00:00
Jonathon Jongsma
6d8cba1564 Crossover report: Remove leftover help text referring to linear trend. (#6638)
Accidentally forgotten in https://github.com/actualbudget/actual/pull/6589

Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
2026-01-13 20:24:00 +00:00
Joel Jeremy Marquez
914074d4b6 Fix transactions table payee schedule icon not showing if linked schedule has a different account configured (#6561)
* 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>
2026-01-13 20:21:48 +00:00
lif
2b8a15f51c fix: skip schedule prompt for transactions already linked to schedule (#6569)
* 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>
2026-01-13 20:20:29 +00:00
Jonathon Jongsma
0467b13848 Update the projection types in crossover report (#6589)
* 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>
2026-01-13 16:34:19 +00:00
Matiss Janis Aboltins
843e957757 Remove force reload feature (#6626)
* Remove force reload feature flag and related code

Co-authored-by: matiss <matiss@mja.lv>

* Add release notes for PR #6626

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-12 08:39:04 +00:00
RMcGhee
073725e270 Bug/1617 rules modal error (#6625)
* Remove error thrown and nonprod check

* Formatting

* Added release notes

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-11 22:11:08 +00:00
Çağdaş Şenel
0e20e17fa4 enable include current month option for last month (#6577) 2026-01-11 20:32:19 +00:00
RMcGhee
cf3a42792f Bug/5679 payee filter (#6594)
* Fix filters, added tests

* Added release notes

* [autofix.ci] apply automated fixes

* Fix missing awaits in test, use placeholder locator

* Added release notes file

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6594

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-10 10:16:08 +00:00
dependabot[bot]
d41af58daf chore(deps-dev): bump react-router from 7.9.6 to 7.12.0 in /packages/desktop-client (#6608)
* chore(deps-dev): bump react-router in /packages/desktop-client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.9.6 to 7.12.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.12.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.12.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add release notes for PR #6608

* fix release notes

Updated authors field to remove bot notation.

* yarn lock

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
2026-01-10 09:50:36 +00:00
lelemm
fed1cd7d30 Added Global Synced Prefs (#6234)
* Added Global Synced Prefs

* [autofix.ci] apply automated fixes

* Add release notes for PR #6234

* typecheck

* lint fix

* Refactor global synced preferences to server preferences

- Removed global synced preferences implementation and related files.
- Introduced server preferences with a new slice and hooks for managing user settings.
- Updated components and hooks to utilize server preferences instead of global synced preferences.
- Adjusted Redux store and mock configurations to reflect the changes.
- Enhanced user settings consistency across devices with the new server preferences structure.

* Implement server preferences for feature flags and enhance admin permissions

- Updated the Experimental component to conditionally display based on user permissions and login method.
- Refactored feature flag handling to use 'flags.plugins' instead of 'plugins'.
- Introduced server-side checks to restrict access to server preferences for admin users only.
- Added comprehensive tests for server preferences management, ensuring proper handling of user roles and preferences.

* Enhance error handling in saveServerPrefs thunk

- Updated the saveServerPrefs async thunk to handle potential errors from the server response.
- Added a check for the presence of an error in the result and return it accordingly.
- Ensured that preferences are still dispatched to the store upon successful save.

* Feedback: strict "flags.plugins" typing

* Feedback: move state slice

* Feedback: localstorage pref

* Feedback: move serverPrefsSlide into prefsSlice

* Refactor: Remove duplicate import of PostError in app.ts

* Rename serverPrefs state slice property to server (#6596)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2026-01-09 08:17:36 +00:00
Juulz
da1a2457ba Tags: add light colors to tag color picker, update tag hover depending on tag background brightness (#6448)
* Add matching light tints to color picker

* Update ColorPicker light colors

* Update light colors to color wheel

* Update P.10

* Update light theme tag colors

* Create 6396.md Add light tints to tag color picker.

* Update development.ts to match light.ts

Because the Code bunny wanted them to match.

* Update palette.ts

* Update development.ts

* Update light.ts

* Update ColorPicker.tsx

Moved light colors under original dark colors.

* [autofix.ci] apply automated fixes

* Update ColorPicker.tsx

Remove comment.

* Update colors.ts

* Update useTagCSS.ts

* [autofix.ci] apply automated fixes

* Update useTagCSS.ts

* Adjust color mix percentages and add !important to text

* [autofix.ci] apply automated fixes

* Refactor color mix logic in useTagCSS hook

* Change noteTagBackgroundHover color back to purple150

* Remove purple75 from palette

Remove unused purple75 color definition. No longer needed.

* Change noteTagBackgroundHover back to color to purple150

* [autofix.ci] apply automated fixes

* Modify color mixing logic in useTagCSS hook

updated the percentage for the color-mix function - light theme. Added text comment for later reference.

* [autofix.ci] apply automated fixes

* Add release notes for tag color picker enhancements

* [autofix.ci] apply automated fixes

* Add purple125 color to palette

* Update color value for purple tint in ColorPicker

* Change noteTagDefault color to purple125

* Change noteTagDefault color to purple125

* Fix syntax for purple125 color definition

* Update noteTagBackground color to purple125

* Update noteTagBackground color to purple125

* Delete upcoming-release-notes/6396.md

#6396 was closed in favor of #6448

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
2026-01-08 16:31:41 +00:00
FictionFics
5673ca5049 Fix/stacked bar graph crash 6406 (#6554)
* fix: remove responsive prop from StackedBarGraph to prevent infinite loop

Fixes #6406

The 'responsive' prop on BarChart was conflicting with explicit width/height
props provided by AutoSizer, causing recharts' useElementOffset hook to
trigger an infinite re-render loop. This manifested as React Error #185
(Maximum update depth exceeded) when displaying stacked bar graphs with
many months of data.

Removing the redundant 'responsive' prop resolves the issue since explicit
dimensions are already provided by the Container component.

* docs: add release notes for #6406

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Salva <spenamedina@Salvas-MacBook-Pro.local>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-08 16:30:18 +00:00
FictionFics
fd42705c75 Fix/saved filters position (#6552)
* fix: move saved filters to end of dropdown with separator

- Reorganized filter menu items to place 'saved filters' at the end
- Added separator before 'saved filters' to distinguish from regular filters
- Maintained alphabetical sorting for regular filter options

Fixes #6535

* docs: add release notes

* [autofix.ci] apply automated fixes

* fixing typos

* fix: use Menu.line for proper separator rendering

* refactor: remove duplication by extracting saved filter from array

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Salva <spenamedina@Salvas-MacBook-Pro.local>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-07 18:50:24 +00:00
Daniel Kerwin
36a3586648 [fix] improves UX of notifications for mobile devices (#6551)
* fix: implements z-axis stacked notifications and style improvements, resolves #6539

* [autofix.ci] apply automated fixes

* chore: add release notes

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6551

* chore: remove opacity

* [autofix.ci] apply automated fixes

* fix: get first notification text (behind the latest notification)

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6551

* chore: add implicit interactive prop

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-07 18:07:19 +00:00
Juulz
ea551608df fix: Keyboard shortcuts modal: Rearrange and add date shortcut "E" (#6573)
* Refactor keyboard shortcuts in KeyboardShortcutModal

Updated keyboard shortcuts for various actions in the KeyboardShortcutModal component. Changed shortcut names and IDs for better clarity and organization.

* Update keyboard shortcuts modal text from 'General' to 'Global'

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #6573

* Add release notes for bugfix in KeybordShortcutModal

Update KeybordShortcutModal.tsx to set date for selected transactions and reorganize the list to match documentation.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-07 16:21:42 +00:00
Matiss Janis Aboltins
9e7a4cde36 Remove ESLint and complete migration to oxlint (#6584)
* Remove ESLint and migrate fully to oxlint

* Add release notes for PR #6584

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-06 23:19:03 +00:00
Ilia Skliaruk
a2a82e90d6 fix: Update autoDecimals behavior based on hideFraction preference (#6572) 2026-01-06 17:55:25 +00:00
Ilia Skliaruk
4055725106 fix(web): Close popover on Escape press (#6570)
* fix(web): Close popover on second Escape press when autocomplete options are closed

* [autofix.ci] apply automated fixes

* fix(web): use more accurate approach with isOpen

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-06 17:44:50 +00:00
Jonathon Jongsma
31349b7bc8 Add target income adjustment factor to crossover report (#6373)
* Add target income adjustment factor to crossover report

Allow the user to specify an adjustment factor to apply to their target
retirement income. This allows them to be a little more conservative
or aggressive on their retirement goals rather than relying only on the
calculated expense projection.

For example, if you want to spend more in retirement (or are simply more
risk-averse), you could set the target income adjustment to 120%. Or if
you expect some retirement income from a defined-benefit pension and
don't need to rely only on the income sources in your budget, you could
set this to 80% to account for that external income.

Originally discussed at https://github.com/actualbudget/actual/issues/6134#issuecomment-3608247467

Co-authored-by: Claude <noreply@anthropic.com>

* [autofix.ci] apply automated fixes

* Add null check in crossover report

Review finding from PR

Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>

---------

Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-06 16:36:49 +00:00