mirror of
https://github.com/actualbudget/actual.git
synced 2026-11-14 21:15:41 -06:00
[Feature] Utilize an existing component library to replace loot-design components #262
Closed
opened 2026-02-28 18:54:37 -06:00 by GiteaMirror
·
15 comments
No Branch/Tag Specified
master
matiss/enable-banking-pending-and-rate-limit
claude/lucid-turing-br8zwl
jfdoming/api-key-shared-bank-sync
worktree-pr-description-rules
ios-ci-launch-test
worktree-count-points-gh-bot
theme-number-contrast
theme-contrast-test
fix/automatic-bank-sync-mobile-app
future-buffer
carryover-chain
copilot/fix-failing-github-actions-job
copilot/fix-failing-github-actions-job-compare
fix/hide-sab-warning-in-capacitor
release
tabedzki/feat/docker-non-root
ios-home-screen-widgets
mobile-budget-redesign
ai/fix-mobile-carryover-arrow-alignment
jfdoming/provider-identity-update
jfdoming/electron-signin-update
jfdoming/openid-flow-update
release-update/26.10.1
release-notes/26.10.1
matiss/dazzling-babbage-b9rjwi
react-query-rules
ai/add-loan-formula-autocomplete
claude/pr-8519-regression-testing-fhvrrh
speed-up-transaction-list-and-schedules
fix-slow-balance-recompute-on-transaction-edit
jfdoming/opfs-sahpool-mobile
jfdoming/opfs-sahpool
fix-8612-schedule-delete-menu
jfdoming/api-tokens-part-8
jfdoming/api-tokens-part-7
jfdoming/api-tokens-part-6
jfdoming/api-tokens-part-5
jfdoming/mobile-safe-area-header
jfdoming/api-tokens-part-4
jfdoming/mobile-splash-lifecycle
jfdoming/api-tokens-part-3
jfdoming/mobile-shared-array-buffer
jfdoming/api-tokens-part-2
jfdoming/api-tokens-part-1
persist-transaction-filters
claude/modernize-transactions-tanstack-orgrze
bank-sync-per-file-03-pluggy-loot-core
claude/auto-close-prs-no-profile-pic-mjqpsy
cross-version-sync-stage2
claude/react-table-library-research-afx83z
tolerate-newer-migrations
claude/verify-migration-guardrails-i82c8m
tabedzki/feat/replacing-month-picker-with-day-picker
delay-initial-sync-until-loaded
cross-version-sync-compat
jfdoming/mobile-app-updates
claude/budget-version-migration-compat-151jlr
claude/worker-error-serialization-9iqtl7
claude/issue-8401-regression-test-9nw9l3
jfdoming/mobile-app-foundation-part-1
jfdoming/mobile-app-scaffold
ai-fix-cleanup-def-8290
claude/relaxed-shannon-jusywa
claude/fervent-keller-s6f2fq
claude/determined-feynman-st1y9z
claude/wizardly-einstein-vi2wce
claude/sweet-albattani-7nseio
feat/bank-sync-per-budget-file
claude/affectionate-cannon-y0kc82
claude/dependabot-findings-m9pgmb
claude/mac-app-ios-publish-zjs1lz
claude/vigilant-tesla-aiiyos
claude/quirky-cerf-v5qck7
claude/animation-removal-alternative-2etfh1
claude/netlify-preview-comments-consolidate-9XPYa
osc/7391-error-boundaries-reports
claude/pensive-dijkstra-7DYui
claude/server-app-version-mismatch-HTCGv
claude/pr-8027-review-feedback-mELuO
claude/zealous-wozniak-e5pO0
claude/intelligent-heisenberg-BSHJq
claude/translation-download-refactor-jFRsO
claude/mobile-performance-ideas-G9PAO
claude/github-issue-7988-5A5ly
blacksmith-migration-ff70d2d
claude/great-mayer-KRvOk
claude/react-native-ios-compilation-fcJh5
claude/serene-goldberg-58xv0
claude/kind-euler-LVG3K
release-automation/edge-nightly
7710-bundle-migrations
claude/fix-docker-build-error-WMfed
claude/llm-compatible-release-notes-t20Nr
7710-tests-tdd
cursor/transaction-table-rewrite-f077
claude/plan-ci-secure-context-OtEe1
claude/fix-issue-7667-DPXi3
cursor/resolve-pr-7449-ee11
claude/fix-typescript-build-error-JPtZ5
copilot/add-repository-configs-to-packages
worktree-compressed-drifting-ritchie
claude/api-consumer-verification-kfz1K
pr-7454
claude/fix-issue-7410-LLLQ4
revert-7281-generate-icons
react-query-useSchedules
copilot/sub-pr-6140
package-upgrades
v26.11.0
v26.10.0
v26.9.0
v26.8.1
v26.8.0
v26.7.0
v26.6.0
v26.5.2
v26.5.1
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
tech-support
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
No labels
tech debt
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#262
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.
Originally created by @gsumpster on GitHub (Feb 4, 2023).
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: https://github.com/actualbudget/actual/blob/bc3bb6f2812d2f9f17a2ea8d9cf7c37894b95e88/CONTRIBUTING.md#adopt-an-existing-component-libraryI 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.