whisper-money/resources/js/components/ui
Víctor Falcón 2a1286e98a
chore(frontend): add orphan component detection and remove dead components (#181)
## 🚪 Why?

### Problem

Dead frontend components were accumulating in the codebase with no
automated way to detect them. Unused code increases maintenance burden,
confuses contributors, and inflates bundle analysis noise. Additionally,
several React hooks had incorrect dependency arrays causing stale
closures or unnecessary re-renders, and an unused variable was left in
the new test file.

## 🔑 What?

### Changes

- Add `resources/js/lib/orphan-components.test.ts` — a Vitest test that
scans every file under `resources/js/components/` and fails if any
component is never imported anywhere in the codebase (supports `@/`
alias imports, relative imports, and barrel `index.*` re-exports)
- Delete 14 orphan components identified by the new test:
-
`accounts/import-balances/import-balance-step-{account,mapping,preview,upload}`
  - `app-mobile-nav`
  - `appearance-dropdown`
  - `dashboard/stat-card`
  - `landing/encryption-video-player`
  - `sync-status-button`
  - `transactions/date-header`
  - `ui/{icon,input-group,navigation-menu,placeholder-pattern}`
- Restore `ui/avatar.tsx` which was incorrectly included in the deletion
(it is imported via relative path in `user-info.tsx`)
- Fix ESLint warnings across 5 files:
- `orphan-components.test.ts` — remove unused `componentDir` variable in
`importStrings()`
- `transaction-list.tsx` — remove `categories`, `accounts`, `banks`,
`automationRules` from `useCallback` deps (none referenced in callback
body)
- `amount-input.tsx` — add missing `locale` dep to `useEffect` (used in
`formatCurrency`)
- `use-dashboard-data.ts` — wrap `fetchData` in `useCallback([locale])`
and add to `useEffect` deps to prevent stale closure on locale
- `dashboard.tsx` — wrap `netWorthEvolution` fallback in
`useMemo([props.netWorthEvolution])` to stabilise the reference passed
to the downstream `useMemo`

##  Verification

### Tests

The new test runs as part of `bun run test` (Vitest), already executed
in the `linter` CI job. All 48 tests pass:

```
✓ resources/js/lib/chart-calculations.test.ts (32 tests)
✓ resources/js/lib/file-parser.test.ts (15 tests)
✓ resources/js/lib/orphan-components.test.ts (1 test)
```

`bun run lint` and `bun run build` now exit clean.

Going forward, any new component added to `resources/js/components/`
that is not imported anywhere will fail CI automatically.
2026-03-02 12:43:27 +01:00
..
alert-dialog.tsx Accounts: new pages to list, and see account details (#13) 2025-12-05 14:33:18 +01:00
alert.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
amount-display.tsx feat(privacy): enable privacy mode for all users and extend amount masking (#182) 2026-03-02 10:48:45 +00:00
amount-input.tsx chore(frontend): add orphan component detection and remove dead components (#181) 2026-03-02 12:43:27 +01:00
avatar.tsx chore(frontend): add orphan component detection and remove dead components (#181) 2026-03-02 12:43:27 +01:00
badge.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
breadcrumb.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
button-group.tsx Bulk actions on transactions 2025-11-10 10:02:28 +00:00
button.tsx ui: add cursor pointer to the buttons 2026-01-07 11:12:03 +01:00
card.tsx feat(ui): add glowing effect to all card components (#170) 2026-03-01 10:56:59 +00:00
chart.tsx feat(privacy): enable privacy mode for all users and extend amount masking (#182) 2026-03-02 10:48:45 +00:00
checkbox.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
collapsible.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
command.tsx fix: scroll category combobox to top while searching 2026-01-09 10:02:25 +01:00
context-menu.tsx Context menu to tables 2025-11-15 13:57:10 +01:00
create-button.tsx feat: Integrate EnableBanking as open banking provider (#106) 2026-02-12 09:09:28 +01:00
data-table-pagination.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
data-table-view-options.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
data-table.tsx Refactor: Transaction Table Layout and Styling Improvements (#26) 2025-12-14 12:56:05 +01:00
dialog.tsx ui(fix): add hasKeyboard prop to dialogs 2025-12-30 07:22:19 +01:00
drawer.tsx Import CSV 2025-11-08 14:17:11 +00:00
dropdown-menu.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
glowing-effect.tsx chore(frontend): add orphan component detection and remove dead components (#181) 2026-03-02 12:43:27 +01:00
input-otp.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
input.tsx Add Budgeting Feature to Track and Manage Spending (#36) 2026-01-21 15:25:50 +01:00
kbd.tsx Adapt for mobile screen 2025-12-09 16:44:56 +01:00
label.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
popover.tsx Settings: add account view 2025-11-07 21:38:23 +00:00
progress.tsx Dashboard: Top spending categories (#9) 2025-12-03 16:34:13 +01:00
radio-group.tsx Import CSV 2025-11-08 14:17:11 +00:00
select.tsx fix(ui): app icon visible on light wallpapers + country select overflow on mobile (#162) 2026-02-28 13:41:41 +00:00
separator.tsx Bulk actions on transactions 2025-11-10 10:02:28 +00:00
sheet.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
sidebar.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
skeleton.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
spinner.tsx feat: Spanish localization (#74) 2026-02-08 11:58:08 +01:00
stacked-area-chart.tsx feat: Add multi-currency conversion for net worth charts (#138) 2026-02-20 10:45:23 +01:00
stacked-bar-chart.tsx feat: Add multi-currency conversion for net worth charts (#138) 2026-02-20 10:45:23 +01:00
table.tsx Refactor: Transaction Table Layout and Styling Improvements (#26) 2025-12-14 12:56:05 +01:00
textarea.tsx Transactions page 2025-11-08 23:38:35 +00:00
toggle-group.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
toggle.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
tooltip.tsx Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00