* 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>
* Small fix
* Add release notes for PR #6610
* Apply suggestions from code review
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* review
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* 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>
* 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>
* 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>
* Add custom checks to CodeRabbit configuration
- Add settings check to evaluate new setting toggles against core design principles
- Add linting check to prevent oxlint-disable lines
- Add typecheck check to prevent @ts-strict-ignore in new components/utilities
* Add release notes for custom checks in CodeRabbit configuration
* Refactor custom checks in CodeRabbit configuration for clarity and consistency
- Consolidate custom checks under a single list format for better readability
- Maintain existing checks for settings, linting, and typecheck with unchanged instructions
* 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>
* Fix iOS keyboard suddenly hiding while editing budget amounts
The react-aria-components Buttons calls the onHoverStart even if there
is no fine pointing device attached to the client (iOS 26+), causing the
amount input to loose its focus.
This commits checks if there is any input with focus before auto focus
the menu Container.
* [autofix.ci] apply automated fixes
* Fix menu aria pattern by making excluding menu buttons from tab order
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* 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>
* Add Wallos schedule importer to community repos
Added a new entry for Wallos schedule importer with a brief description.
* Add Wallos to expected words
* Update CodeRabbit configuration with review workflow and labeling
* Add release notes for PR #6582
* Update CodeRabbit configuration to change label descriptions to instructions and modify release notes category from Enhancements to Maintenance.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix LHV bank adapter not being loaded due to filename mismatch
The bank-factory.js loads bank adapters by filtering for files containing
underscores, but lhv-lhvbee22.js used a hyphen. This caused the LHV adapter
to never be loaded, falling back to the generic IntegrationBank handler
which doesn't extract payee names from card transaction remittance info.
Rename lhv-lhvbee22.js to lhv_lhvbee22.js to match the naming convention
used by all other bank adapters.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add release notes for PR #6533🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* 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>
* 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>
The month filter edit popup was always displaying dates in mm/yyyy format
regardless of user's date format preference. Now respects the configured
date format setting.
Fixes#6341
* fix: prevent renaming category groups to existing names
* fix: prevent category group duplication by ignoring current group in checks
* fix: rename 6498.md to 6499.md to reflect updated content
* Update goal templates documentation for clarity
Add updated images for category and group dropdown. Update docs to reflect actual behavior.
* Add files via upload
* Delete packages/docs/static/img/goal-template/apply-template-group.webp
Remove replaced images
* Refine goal templates documentation
Removed unnecessary note and clarified template behavior.
* Fix formatting and warning notes.
* Fix typos and improve clarity in goal templates
Resolving (some of) the AI bunny's suggestions.
* Delete packages/docs/static/img/goal-template/apply-template-category.webp
* Update note on 'up to' template limits
Clarified the note about category limits for templates using 'up to'.
* lint: clean up unnecessary config and disables
* fix: update package import path in browser preload script
* lint: create custom ESLint rules for rules not in oxlint
- Add object-shorthand-properties rule (replaces object-shorthand)
- Add prefer-const rule (replaces prefer-const)
- Add no-anchor-tag rule (replaces no-restricted-syntax for <a> tags)
- Add no-react-default-import rule (replaces no-restricted-syntax for React.*)
These custom rules are needed because oxlint doesn't support these rules yet.
All rules are properly tested and integrated into the ESLint config.
* refactor: enhance prefer-const rule to track variable reassignments by scope
- Introduced a mapping of scopes to reassigned variable names, improving the accuracy of the prefer-const rule.
- Added helper functions to determine variable scopes and reassignment status.
- Updated logic to check variable reassignments during declaration analysis.
- Adjusted test cases to reflect changes in variable handling.
* fix-nginx-header-collision
Added a note on Cross-Origin Isolation and header collisions for Nginx configuration, including a sample Nginx configuration to prevent header duplication.
* Fix formatting of headers in NGINX documentation
* Add new terms to spelling expectations
* Fix placement of 'COOP' in expect.txt
* Update reverse-proxies.md doc display