deckhearth/components
varutasu 31da384a9d
fix(scanner): import useFocusTrap in ScanDisambiguationDialog (#144)
Production runtime ReferenceError on the scan flow:

    ReferenceError: useFocusTrap is not defined
        at ScanDisambiguationDialog (...)

`components/ScanDisambiguationDialog.js` calls `useFocusTrap(...)` on
line 14 but never imports it. The file previously had `import { useRef
} from 'react'` (unused since the focus-trap refactor in PR #67
`071a3dc`); the `useFocusTrap` import was never added when the hook
was introduced. The bug only manifests at runtime when the scan flow
reaches a disambiguation result (i.e. when the OCR/match returns
multiple candidate cards), which is why neither smoke nor visual diff
caught it — the dialog never renders in the homepage smoke path.

Lint also missed it because the project's flat ESLint config does NOT
extend `eslint:recommended` / `@eslint/js`'s `no-undef` rule. The
`react/jsx-no-undef` rule catches undefined JSX components but not
plain JS identifier references. Hardening that gap is the queued
`enable-no-undef-eslint-rule` follow-up — out of scope for this hotfix.

Replaces the dead `useRef` import with the missing `useFocusTrap`
named import from `lib/use-focus-trap.js` (parallel to how
`components/ui/Modal.js` imports `useFocusTrapContainer` as the
default export — see Modal.js:3 + use-focus-trap.js:21 / :87 for the
two-export shape).

Test plan:
- [x] `npm run lint` — clean (1 pre-existing unrelated warning)
- [x] `npm run test:run` — 123 tests pass (24 files)
- [ ] CI on this PR
- [ ] Post-merge: re-trigger a scan that disambiguates (ambiguous OCR
      hit) and confirm the modal renders without console errors.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 01:00:47 -05:00
..
ui refactor(glass): migrate Button.secondary + Input + MobileNav off bespoke glass-surface (#131) 2026-06-05 06:23:55 -05:00
AdminProtected.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
AnimatedFireLogo.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
AuthLayout.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
BulkSelectionToolbar.js refactor(bulk-toolbar): migrate to .glass-panel-strong + token sweep (#125) 2026-06-04 16:25:17 -05:00
CameraScanner.js refactor(scanner): extract CameraScannerView presentational component (#73) 2026-06-02 16:04:02 -05:00
CameraScannerView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardDetailDeckModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CardDetailQuantityModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CardDetailView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorForm.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorPreview.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorSearchPanel.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardItem.js refactor(card-item): tokenize list-mode palette (Brief 1) (#128) 2026-06-04 16:55:36 -05:00
CardsPageView.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
CollaboratorFacepile.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
CollectionDeleteModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CollectionEditModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionPageView.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
CollectionsCreateModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CollectionsEditModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionSelectionModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionsPageView.js refactor(styles): retire .card; migrate 7 consumers to .glass-panel (#122) 2026-06-04 15:30:29 -05:00
CollectionsSuccessModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionsThumbnail.js refactor(collections): useCollectionsPage + view (Brief 3) (#87) 2026-06-03 17:10:17 -05:00
DailyEmberWidget.js feat(design-system): redesign v2 #2 + #5 — sidebar pill, wordmark, Daily Ember (#103) 2026-06-04 10:59:44 -05:00
DashboardCardSpotlight.js feat(design-system): redesign v2 #7 + #8 — dashboard rebuild + right-rail Card Spotlight (#107) 2026-06-04 11:21:58 -05:00
DashboardFeaturedCollection.js feat(design-system): redesign v2 #7 + #8 — dashboard rebuild + right-rail Card Spotlight (#107) 2026-06-04 11:21:58 -05:00
DashboardRecentActivity.js feat(design-system): redesign v2 #7 + #8 — dashboard rebuild + right-rail Card Spotlight (#107) 2026-06-04 11:21:58 -05:00
DeckBuilderCardBrowser.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckBuilderDeckList.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckBuilderStatsBar.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckBuilderView.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckDetailStatsSidebar.js refactor(deck): extract grouping lib and stats sidebar (Brief 1) (#137) 2026-06-13 00:44:16 -05:00
DecksCreateModal.js refactor(decks): extract format utils and create modal (Brief 1) (#136) 2026-06-13 00:44:13 -05:00
Layout.js refactor(layout): migrate 3 floating popovers to .glass-panel-strong (#124) 2026-06-04 16:25:14 -05:00
Layout.js.backup 🚀 Implement Mobile-First Navigation System 2025-08-01 18:18:21 -05:00
LoginCTA.js Align UI copy: My Collection vs Lists (#54) 2026-05-29 09:53:40 -05:00
ManaSymbols.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
ManaSymbolSettings.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
MobileNavigation.js refactor(glass): migrate Button.secondary + Input + MobileNav off bespoke glass-surface (#131) 2026-06-05 06:23:55 -05:00
OCRSettings.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
PermissionIndicator.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ProtectedRoute.js Major Scanner Improvements 2025-07-29 14:19:48 -05:00
PublicCardsView.js Extract PublicCardsView from pages/cards.js (Brief 2). (#78) 2026-06-03 12:06:24 -05:00
ScanDisambiguationDialog.js fix(scanner): import useFocusTrap in ScanDisambiguationDialog (#144) 2026-06-13 01:00:47 -05:00
ScannedCardItem.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannerDestinationPicker.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannerPageView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ShareModal.js refactor(share-modal): tokenize interior palette (Brief 2) (#129) 2026-06-04 16:55:39 -05:00
UploadImageModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00