* Update typography rule to disallow curly quotes with auto-fix
- Reverse typography rule to detect and flag curly quotes instead of straight quotes
- Add auto-fixer that converts curly quotes to straight quotes
- Fix auto-fixer to properly escape quotes when they match string delimiters
* Fix quotation marks in error messages and formatting strings across multiple files
- Standardize quotation marks from curly to straight in error messages and string formatting for consistency.
- Update various components and utility files to ensure proper string handling and improve readability.
* Standardize quotation marks across multiple files
- Replace curly quotes with straight quotes in various documentation and code files for consistency and improved readability.
- Update error messages, comments, and documentation to ensure uniformity in string formatting.
* Standardize month formatting across multiple components
- Update month formatting strings from "MMMM 'yy" to "MMMM ''yy" in various components and utility files for consistency.
- Ensure uniformity in how months are displayed throughout the application.
* Refactor typography rule to enhance curly quote handling
- Simplify the error reporting mechanism for curly quotes by creating a shared fix function.
- Update test cases to include various curly quote scenarios for improved coverage.
- Ensure consistent handling of curly quotes in formatting functions across multiple files.
* Refactor typography handling and update tests for curly quotes
- Replace curly quotes with their Unicode equivalents in typography rule and related test cases for consistency.
- Remove unnecessary eslint-disable comments to improve code clarity.
- Ensure proper handling of quotes in arithmetic and utility tests to align with updated typography standards.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6454
* Fix: Correct typo in budget cell notification message
Co-authored-by: matiss <matiss@mja.lv>
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6454
* Temporarily disable i18n string extraction workflow
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Update linting configuration and fix related issues
* Fix type coercion for comment ID in check-first-comment.js to ensure proper comparison with summary comment IDs
This change updates the minimum allowed date for transactions from
2000-01-01 to 1995-01-01, allowing users to enter older transaction
dates without crashes. This addresses the date validation bug that
was causing issues with old dates.
- Updated date validation in schema-helpers.ts
- Updated corresponding tests in schema-helpers.test.ts
* Simplify ESLint config and add oxlint configuration
- Switch from typescript-eslint recommended to base config
- Remove redundant TypeScript-specific rules that are handled by base config
- Add oxlint configuration with appropriate rules
- Simplify globals configuration using globals package
- Add coverage directory to ESLint ignores
- Clean up various TypeScript rule configurations
* Add release notes for PR #6443
* [autofix.ci] apply automated fixes
* Refactor release note generator and update CLI argument parsing
- Adjusted the release note generator to fix string formatting.
- Refactored CLI argument parsing in migrate/cli.ts to use parseSync for improved clarity and consistency.
---------
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>
* Fix schedule upcoming length years off-by-1 calculation
- Replace addYears with addMonths(value * 12) to preserve day precision
- Fixes issue where year-based upcoming schedules always calculated from Jan 1st
- Add test cases for mid-year dates to prevent regression
Fixes#6435
* Fix syntax error in schedules.test.ts and add release notes
* fix(transactions): preserve split categories when merging with imported uncategorized tx; avoid orphaned subtransactions
When merging a split-categorized manual transaction with an uncategorized
imported one, keep the split lines (including categoryId) and avoid leaving
orphaned subtransactions by properly transferring parent_id references.
Fixes#5801.
* docs: add release note for PR #5856
* fix: resolve lint and typecheck errors
- Rename unused variables sub1, sub2 to _sub1, _sub2 to fix lint warnings
- Fix typecheck error by using double type assertion (unknown) in merge.ts
* refactor: optimize subtransaction queries and test db access
Address code review feedback:
- Merge two SQL queries into one using IN clause for better performance
- Use db.first in test to avoid conversion path and match db.all semantics
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [autofix.ci] apply automated fixes
* refactor: apply code review feedback with stable branch logic
- Revert test to use db.getTransaction (not db.first) to preserve type conversion
- Refactor SQL query to use explicit branches (IN for 2 parents, = for 1, skip for 0)
- This approach is more stable across different SQL drivers
Addresses: #5856 (review feedback from @joel-jeremy)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(release-notes): set category to Enhancements and shorten text; fix(merge): use shared deleteTransaction with grouped fetch + batchUpdateTransactions
* resolving lint warnings and recommendation on the test query
* switching to use the getTransaction helper
* corrected is_parent assertion to be true
* updated the PR number
---------
Co-authored-by: Golenspade <2023004079@mails.cust.edu.cn>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: fankex <2112325885@qq.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Add conditions for transfer field in dashboard for Calendar card
Adding default filter for calendar dashboard card to remove transfers
* Add release notes for calendar summary card bugfix
When using the @actual-app/api package, if authentication failed during
init() (e.g., wrong password, network issue), the error was silently
ignored. This led to confusing 'Could not get remote files' errors later
when calling downloadBudget().
This fix ensures init() properly throws an error when authentication
fails, providing clear feedback like 'Authentication failed: invalid-password'.
Fixes#6320
* Fix lint violations
* Refactor code for clarity and consistency
- Updated various components to improve readability and maintainability, including:
- Changed `while (1)` to `while (true)` for better clarity.
- Simplified conditional checks by removing unnecessary boolean casts.
- Added missing `key` props in mapped elements to ensure proper rendering in lists.
- Adjusted the handling of hidden states in budget components for clearer logic.
- Cleaned up linting rules in `.oxlintrc.json` to streamline configuration.
* Fix unused variable warning in electronApp fixture
* Fix linting comment in fixtures.ts
* Add link detection in transaction notes
* update release notes
* Fix trailing punctuation from URLs and add space between segments
* rename openFileInExplorer to openInFileManager
* fix(reports): exclude transfers from dashboard summary cards
The income and expense summary cards were incorrectly including transfer transactions, which inflated the displayed values.
Added 'payee.transfer_acct': null filter to the AQL queries to exclude transfers.
Fixes#6258
* Add release notes for PR #6263
* Revert "fix(reports): exclude transfers from dashboard summary cards"
This reverts commit ba9baa5c6d.
* fix(reports): exclude transfers from summary cards in the default dashboard
* Update release notes for PR #6263
* Add mobile schedules pages and fix routing issues
- Add MobileSchedulesPage with list view and search functionality
- Add MobileScheduleEditPage for creating/editing schedules
- Add supporting components: SchedulesList, SchedulesListItem, AddScheduleButton
- Fix MobileNavTabs routing to include /schedules route
- Fix wide view routing: wrap schedule edit route with WideNotSupported
- Update MobileNavTabs to enable schedules navigation
- Add responsive exports for mobile schedules components
* Refactor MobileScheduleEditPage and SchedulesListItem for improved layout and navigation
- Remove modal dispatch for editing rules, replacing it with direct navigation to the rule edit page.
- Update SchedulesListItem to streamline the display of payee and account information using SpaceBetween for better alignment.
- Enhance ScheduleEditForm with responsive design adjustments for narrow widths, ensuring a more flexible layout.
- Replace Account and Payee autocomplete components with a more generic input approach for better reusability.
* Enhance MobileScheduleEditPage and ScheduleEditForm with improved footer and optional callbacks
- Add a footer to MobileScheduleEditPage with a Save button for better user interaction.
- Update ScheduleEditForm to make onSave and onCancel props optional, allowing for more flexible usage.
- Adjust layout and styling for better responsiveness and user experience.
* Improve error message styling in ScheduleEditForm by adding margin for better visibility
* Refactor ScheduleEditForm and MobileScheduleEditPage for improved layout and functionality
- Simplify the structure of ScheduleEditForm by removing unnecessary wrapper elements and enhancing responsiveness.
- Update MobileScheduleEditPage to include padding adjustments for better visual consistency.
- Introduce a footer with Save and Cancel buttons in ScheduleEditModal for improved user interaction.
- Ensure optional callbacks for onSave and onCancel in ScheduleEditForm for greater flexibility.
* Add aria-label for accessibility in PayeeAutocomplete component
- Introduced translation support for the 'Payee' label using useTranslation.
- Enhanced accessibility by adding an aria-label to the input field in PayeeAutocomplete.
* [autofix.ci] apply automated fixes
* Refactor MobileScheduleEditPage and related components for improved functionality and structure
- Simplified the MobileScheduleEditPage by removing unnecessary imports and restructuring state management with the new useScheduleEdit hook.
- Extracted updateScheduleConditions logic into a separate utility file for better reusability and clarity.
- Enhanced ScheduleEditModal to utilize the new form dispatch mechanism, improving state management and error handling.
- Updated ScheduleEditForm to streamline field management and improve overall responsiveness.
* Enhance AccountAutocomplete component with accessibility improvements
- Added aria-label for the input field in AccountAutocomplete using translation support for better accessibility.
* Refactor imports in MobileScheduleEditPage, ScheduleEditModal, and useScheduleEdit for consistency
- Reintroduced the ScheduleEditForm import in MobileScheduleEditPage and ScheduleEditModal for clarity.
- Moved the updateScheduleConditions import in useScheduleEdit to maintain a consistent import structure across components.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
* Refactor MobileScheduleEditPage and useScheduleEdit for improved loading state management
- Removed local loading state from MobileScheduleEditPage and integrated it into the useScheduleEdit hook for better state handling.
- Enhanced error handling by displaying a "Schedule not found" message when the schedule is null.
- Streamlined the loading state check in the component to improve user experience.
* Remove unused import of 't' from ScheduleEditModal.tsx
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
* Refactor schedule edit dispatch handling in MobileScheduleEditPage and ScheduleEditModal
- Replace formDispatch with a unified dispatch in MobileScheduleEditPage and ScheduleEditModal for handling form errors and transaction switches.
- Update useScheduleEdit hook to remove the formDispatch wrapper, simplifying the dispatch mechanism.
- Change the type of the date field in DiscoverScheduleEntity from ScheduleEntity['_date'] to RecurConfig for better type accuracy.
* Refactor ScheduleEditModal and useScheduleEdit for improved schedule initialization
- Utilize useMemo in ScheduleEditModal to streamline initial schedule creation based on transaction data.
- Introduce useEffectEvent in useScheduleEdit to enhance schedule loading logic on component mount.
- Simplify the handling of initial schedule conditions and actions, improving code readability and maintainability.
* Add mobile schedules functionality with comprehensive tests
- Introduced Mobile Schedules page and navigation integration.
- Created end-to-end tests for various functionalities including visual checks, empty state handling, schedule creation, editing, and search/filter capabilities.
- Added necessary page model classes to support the new features.
- Updated existing components to accommodate new mobile schedules functionality and ensure proper layout and user experience.
- Included visual regression test snapshots for the new features.
* Refactor navigation method in MobileNavigation class for improved readability
- Simplified the goToSchedulesPage method by removing unnecessary await, enhancing code clarity.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
* Remove deprecated test for schedule creation and associated visual regression test snapshots
* Add Schedules Page Menu Modal and enhance Mobile Schedules Page
- Introduced SchedulesPageMenuModal to the modals system.
- Updated MobileSchedulesPage to include a button that opens the new Schedules Page Menu.
- Refactored schedule filtering logic to incorporate a local preference for showing completed schedules.
- Added local preference for 'schedules.showCompleted' to manage completed schedule visibility.
- Updated SchedulesTable to utilize the new local preference for completed schedules.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
---------
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>
* fix(core): handle unicode minus in number parsing
Fixes#6206. Added support for Unicode minus (U+2212) in looselyParseAmount, currencyToAmount, and stringToInteger. Added unit tests.
* Refactor: Improve currency parsing logic
Co-authored-by: matiss <matiss@mja.lv>
* Refactor: Simplify currency parsing logic
Co-authored-by: matiss <matiss@mja.lv>
* [autofix.ci] apply automated fixes
* fix: Handle Unicode minus inside parentheses correctly
Fixed bug where amounts with both parentheses and Unicode minus (e.g.,
(−3.45)) were parsed as null instead of negative numbers. The Unicode minus
is now removed from within parentheses before the parentheses-to-minus
conversion, preventing double minus signs that caused parseFloat to return NaN.
Added test cases for parenthesized amounts containing Unicode minus.
* Add release notes for PR #6247
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
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>
* feat(currency): add currency support to templates and goals
* fix: linting
* fix: add weekly guard as per coderabbit suggestion
* fix: add decimalPlaces to removeFraction
* test: add tests for JPY
* simplify currency usage in template
* Add Crossover Report
* Fix lint and typecheck
* Use useFormat hook for formatting, make spreadsheet always return cents
* Change defaults to all categories and accounts. Return 0 when no categories selected
* Change error handling to use addNotification
* Detect if crossover has already happened before projecting
* [autofix.ci] apply automated fixes
* lint:fix. Only get first crossoverIdx
* Annualize historical return via compounding, not multiplication
Use effective monthly rate from annual return
Guard against undefined starting balance
* Optional guard in median helper for future-proofing
Use consistent rounding when checking the projected crossover
Avoid O(n^2) lookups when aggregating balances by month
* Add Crossover Report Feature Flag
* Add option to show hidden categories
* Remove estimated return placeholder text since the formatting was unclear
* Initialize defaults when widget meta is absent
* Hidden categories remain in expense totals
* [autofix.ci] apply automated fixes
* Update packages/loot-core/src/types/prefs.ts
Fix merge conflict semi-colon
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Update prefs.ts
Try again to fix merge conflict.
* Fix percentage inputs showing trailing zeros for some numbers
* Fix projection not happening if crossover happens historically but then reverts
* some tweaks for consideration. Remove if undesired
* go back to original math
* Fix change in percentage formatting for CrossoverCard
* Optimize date range calculation and add cleanup to CrossoverCard
Use format utility for years to retire
Replaced hardcoded color with theme token
* [autofix.ci] apply automated fixes
* Try again to standardize display and storage of percentages without repeating decimals
* Add tooltips with descriptions to crossover chart inputs
* Refactor Crossover component to use translation for 'N/A' strings and simplify estimatedReturn assignment
* Refactor Crossover components to improve date range calculations and ensure proper handling of the latest month
* Fix typo in Crossover component: corrected "retirment" to "retirement" in user instructions
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>