mirror of
https://github.com/actualbudget/actual.git
synced 2026-05-06 07:01:45 -05:00
[GH-ISSUE #631] [Feature] Utilize an existing component library to replace loot-design components #7202
Closed
opened 2026-04-10 16:54:18 -05:00 by GiteaMirror
·
15 comments
No Branch/Tag Specified
master
claude/hide-default-categories-1cwBZ
matiss/crdt-source-loading
youngcw/unlock-duplicates
matiss/crdt-protobuf
release/26.5.0
claude/update-issue-template-ykMNn
claude/fix-issue-7667-DPXi3
cursor/formula-feedback-improvements-4223
cursor/resolve-pr-7449-ee11
claude/fix-typescript-build-error-JPtZ5
jfdoming/api-tokens-part-3
jfdoming/api-tokens-part-2
jfdoming/api-tokens-part-1
claude/speed-up-vrt-workflow-ZAyI5
claude/crdt-version-auto-publish-Ph1BH
copilot/add-repository-configs-to-packages
worktree-compressed-drifting-ritchie
worktree-mellow-strolling-dawn
matiss/browser-api
claude/api-consumer-verification-kfz1K
feature/enable-banking
cursor/transaction-table-rewrite-f077
pr-7454
claude/fix-issue-7410-LLLQ4
release/v100.0.0
revert-7350-trim-deps
revert-7220-sankey-report
revert-7242-fix/split-parent-update-corruption
revert-7281-generate-icons
claude/electron-to-tauri-migration-LjBN8
worktree-remotion
release/vv26.4.0-pre
claude/browser-compatible-api-QbhHh
claude/improve-cli-transactions-waTUY
claude/publish-react-native-ios-j8qoT
js-proxy
claude/fix-flaky-ci-job-5gDdz
react-query-rules
react-query-useSchedules
claude/nightly-theme-validation-scan-DzOGD
claude/debug-simplefin-error-ZuKzB
matiss/desktop-client-subpath-imports
claude/fix-simplefin-ssrf-T31gX
claude/release-notes-validation-X7rvR
add-claude-github-actions-1772738270730
cursor/sync-performance-notification-9899
react-query-prefs
matiss/chunked-sync-and-progress-ux
v26.2.1
copilot/sub-pr-6880
fix-react-query-clear-on-close-budget
copilot/sub-pr-6140
feat/auto-note
feat/scoped-bank-sync
cursor/desktop-transactions-react-table-1d0c
fix-exhaustive-deps-App
copilot/fix-find-replace-bug
release/v26.2.0-pre
matiss/browser-tests
mobile-fix-drag-and-drop-across-groups
budget-table-v2
PayeeAutocomplete2
pglite
bugfix/plugins/fix-plugins-sw
feat/plugins/plugins-core-package
prerelease
matiss/unicode-minus-fix
cursor/fix-actual-github-issue-6206-gemini-3-pro-preview-9c37
TransactionFormPage
cursor/implement-mortgage-and-loan-account-type-78ca
tests-update-fill-with-pressSequentially
mobile/link-modal
deps/25.11
cursor/fix-update-vrt-apply-ci-job-dispatch-b324
sync-server-plugins
cursor/propose-patch-for-github-issue-5680-2a18
fix/compiler-preserve-inner-dollar-escapes
cursor/analyze-actual-budget-issue-and-propose-fix-5b70
coderabbitai/docstrings/0c070e5
cursor/add-wip-prefix-and-comment-to-prs-d78d
jfdoming/08-21-auto-focus-on-navigate-in-all-browsers
show-totals-on-mobile-budget-banners
allow-child-transactions-make-transfer
mobile-calculator-keyboard
payee-geolocation
enhance/restore_scroll_position
dm-fix-second-click-on-mobile-new-transaction-2
scrollToLocationBudget
alert-autofix-38
tsconfig-composite
mobile-fix-uncategorized-transactions-on-tracking-budgets
server-budget-handlers
fix-sql-injection-in-cleanup-template
non-chrome-draggable-workaround
mobile-budget-page-swipe-navigation
ts-db-all
stable
dark-theme-with-brand-colors
fix-mobile-delete-group
ts-db-select
UnderKoen/reconcile-context-menu
master-before-server-merge
v25.2.1
ts-runQuery
rename-redux-hooks
UnderKoen/3557-persist-state-in-history
remove-redux-CLOSE_BUDGET
fix-exhaustive-deps-errors-FinancesApp
redux-toolkit-createSlice-backup
accounts-function-component
ts-useSplitsExpanded
loot-core-server-package
useTransactios-in-TransactionEdit
react-aria-input
move-redux-to-desktop-client
QueryState-type
fix-themes-applied-late
mobile-vrts
revert-3295-spendingCardFix
react-aria-button-4
split-payee-on-mobile
twk3/pin-apis-crdt
notes-tag-autocomplete
ts-LoadBackup
dnd-kit
package-upgrades
v26.5.0
v26.4.0
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
No Label
tech debt
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#7202
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @gsumpster on GitHub (Feb 4, 2023).
Original GitHub issue: https://github.com/actualbudget/actual/issues/631
Verified feature request does not already exist?
💻
Pitch: what problem are you trying to solve?
Hey! I wanted to kick off some discussion around how we can replace some of the existing generic front-end components with those from an existing library. This is directly related to this note in the
Contributing.mdfile here:bc3bb6f281/CONTRIBUTING.md (adopt-an-existing-component-library)I think it'd be great to establish consensus on what we're looking for in terms of component libraries and what are some components that we'd like to target.
Describe your ideal solution to this problem
I personally love the approach that both react-aria and Radix take. I don't have any personal experience with react-aria but I do with Radix and found it super nice to use.
As far as target components, I'm relatively new to the codebase but I think the
Tooltipcomponent is potentially a good one (though potentially split into multiple components to avoid overloading it – what is a Tooltip, anyway 😉).Autocompleteis another one that I believe we could dramatically simplify by changing existing implementations to use a different 'core' component.@j-f1 commented on GitHub (Feb 4, 2023):
Those both look great! And they seem like they’re unstyled, so the UI can keep its existing looks. Radix seems to be from a startup (WorkOS) while React Aria is by Adobe. I don’t really know what that means in term of future lifespan (since I could easily see WorkOS going under in a few years, or Adobe abandoning React). I haven’t used either so I don’t have any opinions in that area.
@gsumpster commented on GitHub (Feb 5, 2023):
Yep, definitely a valid concern with regard to lifespan. It's worth mentioning that Radix is used by some relatively large startups (Linear, Vercel, etc), but I think trying to make judgements on either is difficult either way.
I think with either library, we'll end up running into situations where one doesn't fit in quite the way we want it to, for example, I think if we were to stick with react-aria, we'd need to look elsewhere for a Tooltip implementation, and I'm sure the same will apply with Radix. Maybe the focus here is less about which library, and how can we generally reduce the amount of code that has to be maintained with the Actual codebase. For both the Tooltip and Autocomplete components, there's a lot in there that something like react-popper or react-select could replace.
With that said, after taking a closer look at both, I think a combination might be the best way to go with these things. Radix offers a somewhat larger set of functional components, whereas I think react-aria provides a better set of utilities for managing things like keyboard shortcuts and focus.
@j-f1 commented on GitHub (Feb 5, 2023):
That sounds great! There are definitely a bunch of parts of the app that are fairly standard UI components (e.g. the menu buttons and some of the text fields) and others that are very much not standard (e.g. the budget and account spreadsheets).
@j-f1 commented on GitHub (Feb 5, 2023):
It’s been bugging me for a while that the menu buttons can’t be clicked again to close the menu and that you can’t click+drag on a menu button to quickly select an item, and it seems like Radix does both of those interactions very well!
@j-f1 commented on GitHub (Mar 5, 2023):
Related: in https://github.com/actualbudget/actual/pull/727 we found that
<Tooltip>doesn’t track the position of the element it’s attached to if that element animates, but hopefully any library we switch to will handle that case@MatissJanis commented on GitHub (Mar 23, 2023):
For inspiration: https://javascript.plainenglish.io/best-react-ui-frameworks-and-component-libraries-408df66a1f31
@j-f1 commented on GitHub (Apr 16, 2023):
It looks like Radix UI doesn’t have support for autocomplete/combo box components, so React Aria is the one we should be using if we want to be consistent across everything.
@trevdor commented on GitHub (Apr 16, 2023):
I’d lean toward react-aria at this point, myself, all things being equal.
I used react-aria for the mobile lists because @jlongster had mentioned it in his initial open sourcing dev notes. It worked very nicely, I thought.
James mentioned not liking their table component. Although I’ve noticed Devon Govett is doing a ton of work on react-aria, prepping a new major version. So things could change. Either way, it’s a very active lib.
@j-f1 commented on GitHub (Apr 16, 2023):
We could grab the table component from somewhere else or just keep our existing one in that case, while adopting the rest of the components.
@trevdor commented on GitHub (Apr 16, 2023):
For sure. James has called out how carefully his existing table was optimized for speed. That’s not to say no 3rd party table will cut it—there are certainly new ones out there that weren’t around back then—but obviously something to keep an eye on.
@everettraven commented on GitHub (Jun 11, 2023):
Hello 👋 - I am starting to dabble with React & JS to learn something new and would be interested in helping with this. Is there a particular breakdown of the components that would be good to start with one at a time or are the
TooltipandAutocompleteones initially mentioned by @gsumpster a good starting point?Also just noting that I haven't even began looking at the code base, but figured chipping away at some of the smaller component changes would be a good way to get started contributing.
@j-f1 commented on GitHub (Jun 11, 2023):
Hi! I think the tooltip could be a good place to start. We made an attempt to port the autocompletes over to a different package a few months ago and ended up ripping it all out because it just didn’t work right, so I would not recommend working on that as a starter project. That said, porting the tooltips would be a fairly large task since they are used pervasively for lots of different effects so you may want to start off on another, smaller issue.
@everettraven commented on GitHub (Jun 11, 2023):
@j-f1 Thanks for the response and additional information! I was looking around the code a bit more and I'll plan to try and find a component that is smaller task. I was taking a look and something like the
DateSelectorseems fairly straightforward to port over to an existing component library. Is that a component that you think would be good to start with?@j-f1 commented on GitHub (Jun 11, 2023):
@everettraven That’s a good option!
@MatissJanis commented on GitHub (Sep 23, 2024):
We've moved many things to react-aria already and plan to continue the work.
Closing this ticket, but feel free to continue discussing this.