v4.1.3: favorite collections, quick tab switcher refinements - #110
Open
gilgold wants to merge 33 commits into
Open
v4.1.3: favorite collections, quick tab switcher refinements#110gilgold wants to merge 33 commits into
gilgold wants to merge 33 commits into
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lanning Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ntWindows.js Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eview pane Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ect to open Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… and full page Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s> permission Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Also bumps the context-menu z-index selector specificity to (0,3,0) — the cursor-positioned menu's inline position style is matched by static/index.css drawer catch-alls at (0,2,1) !important, discovered via the e2e run. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… on grant, capture stagger, current-tab close semantics Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nstant - min-height: 0 on .tab-switcher-main: in the popup's column layout flexbox's default min-height:auto let the list blow past the card, so scrollIntoView scrolled the overflow:hidden card itself, dragging the search row out of view (fullpage's row layout constrained height via the cross axis, hence the popup/fullpage difference despite shared code) - opt the switcher out of static/index.css's global 200ms background-color transition that made selection movement fade sluggishly - memoize TabSwitcherRow with stable callbacks so an arrow press re-renders 2 rows instead of 50 (each carrying a ContextMenu), and drop the rAF deferral on scrollIntoView (a frame of avoidable lag) - e2e regression: 25-tab popup, arrow through list, assert the results pane scrolls (not the card) and the input stays put, visible, and focused; verified to fail with the min-height fix reverted Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sion grant Granting <all_urls> produced no thumbnails: the only capture trigger after a grant was the popup sending captureAllWindows AFTER awaiting permissions.request() — but the native permission dialog steals focus and (on macOS) closes the popup before that await resumes, so the prime was lost. Grants made from chrome://extensions never primed at all. The capture pipeline itself was verified healthy in the real service worker (OffscreenCanvas/FileReader/downscale all work — probed via crxbox). - background now listens to permissions.onAdded and primes captureAllWindows itself, regardless of where the grant came from - the switcher also requests a capture refresh on open (no-op without the permission), keeping previews fresh and self-healing an already-granted but never-primed cache Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rls> permission captureVisibleTab can only photograph visible tabs, so preview coverage was too sparse to justify the permission — most rows fell back to the card anyway. The preview pane now always renders the details card (favicon, title, URL, window label), synchronously from already-loaded data. Removed: chrome/thumbnail-capture.js and its background wiring, optional_host_permissions, the permission-request flow and storage.session reads in TabPreviewPane, and their tests. The e2e preview test now asserts the details card. Rides along: FALLBACK_FAVICON in sharedConstants.js (from the in-progress favicon consolidation) since TabSwitcher.js now imports it from there. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces eight hardcoded './images/favicon-fallback.png' literals across TabRow, MoveToCollectionModal, and the fullpage panels with the FALLBACK_FAVICON constant in sharedConstants (added with the tab switcher), and drops the now-redundant re-export from tabSwitcherUtils. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ds and index Adds isFavorite/favoriteOrder to both the full record and the index entry in saveSingleCollection and batchUpdateCollections, with fallback-to-existing-index semantics so stale in-memory objects cannot silently un-favorite a collection. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rtial saves Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Renders favorited collections (sorted by favoriteOrder) in a dedicated CollapsableSection above the main list, with its own DndContext so drag sessions never interact with the main list. Reorder persists via a single batch updateRemoteData call. Section is hidden during search. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Renders a collapsible, drag-to-reorder Favorites section at the top of the grouped All Collections grid in the full-page view, with collapse state persisted to local storage. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…S variable Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… filter Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The full-page @media(max-width:900px) .fp-toolbar rules (flex-wrap, centered rows, leading collapse, hidden pill labels) leaked into the 670px popup, which always matches that breakpoint via the shared class names. The wrap stayed latent until the favorites star pill widened the active-filter state past the toolbar width, pushing the last button group onto a second row that overlapped the list under the fixed-position wrapper. Scope the responsive block to html.fullpage-mode and give the popup its own compact single-row rules (never wraps, icon-only pills, leading collapsed until a filter is active). Covered by a crxbox e2e regression spec. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
FPFavoritesSection wrapped its cards in a <section> of its own, which became a single grid item inside .fp-content-grid — every favorite card got squeezed into one narrow column. The cards already reuse FPCollectionCard; only the container differed. Drop the wrapper so the sortable cards are direct children of the shared .fp-content-grid and inherit the exact same grid/list layout as All Collections. Covered by a crxbox e2e spec asserting card-width and row-flow parity between the two views. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Favorite collections (new feature)
isFavorite/favoriteOrderpersisted in both collection records and thecollections_index(no storage version bump; missing fields read as not-favorite; syncs to Drive automatically)favoriteOrdervia a single atomic batch writedocs/superpowers/Quick tab switcher (carried on this branch)
<all_urls>permission subsequently removed (feat!), shared favicon fallback constantTest Plan
yarn lintcleanyarn test— 134 suites, 1011 tests passing (22+ new tests for favorites storage, helpers, toggles, sections, filter, sidebar)yarn prodcompiles successfully🤖 Generated with Claude Code