Repository navigation
motion: follow-ups from the hub rollout - #1804
Conversation
- ShortcutHelpOverlay, CommandPalette, DiagnosticsOverlay: Escape and the backdrop click only while logically open, and the root is inert while the overlay fades â a dismissed overlay no longer swallows Escape or blocks clicks for its exit window. The palette focuses its input once open rather than on mount. - The transcript preview clamp in ActivityTurn runs the disclosure clock (300ms, the one curve) instead of its own 200ms ease-out. - Disclosure moves into k8s-ui (with controlled `open`/`onOpenChange` and `inheritColor`) so Radar Cloud can drop its copy; radar-app's peer floor on k8s-ui rises to >=1.14.8, the release that ships it. - `.issue-details-motion` had no consumers left; the class and its parity test are gone.
PR Summary by QodoFix overlay exits and centralize Disclosure in k8s-ui
AI Description
Diagram
High-Level Assessment
Files changed (17)
|
Code Review by Qodo
1. Two prop comments recount old markup
|
âĶarkup they replaced
Focusing the omnibar (âK or click) dimmed the page and dropped the results panel in on one frame, and both vanished the same way. They are menu-kind overlays: presence via useAnimatedUnmount on the menu clock, the scrim fades on the panel's clock, the panel grows from the top of the field and goes inert with no pointer events while it fades, the anchor is kept through the exit, and what the panel showed at logical close is what fades out. The field's focus ring eases in on the same 140ms instead of popping.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.
â Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 659a74c. Configure here.
| const portal = useAnimatedUnmount(portalShown, overlayExitMs('menu')) | ||
| const panelWasOpen = useRef(dropdownOpen) | ||
| if (open) panelWasOpen.current = dropdownOpen | ||
| const showPanel = open ? dropdownOpen : panelWasOpen.current |
There was a problem hiding this comment.
Exit animation swaps panel contents
Medium Severity
The exit freeze only keeps the panel mounted. execute still clears text and pills on the same render as close, and recentRows still keys off open, so the fading overlay snaps to the empty launcher (or drops recents) instead of the results that were on screen.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 659a74c. Configure here.
| <SearchPillInput | ||
| className={hero | ||
| ? 'min-h-14 px-5 rounded-2xl bg-theme-surface border border-theme-border shadow-theme-sm transition-colors focus-within:border-[var(--color-brand-500)] focus-within:shadow-[0_0_0_4px_color-mix(in_srgb,var(--color-brand-500)_15%,transparent)]' | ||
| : 'min-h-8 px-2.5 rounded-md bg-theme-elevated border border-transparent focus-within:border-theme-border focus-within:bg-theme-surface transition-colors'} |
There was a problem hiding this comment.
Hero field dims during overlay exit
Medium Severity
The hero field's z-[16] lift is still tied to open, but the full-viewport scrim now stays mounted through the 100ms exit. As soon as the launcher closes, the field drops behind the still-opaque z-[15] dim and blur, then sits under the fade.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 659a74c. Configure here.
âĶabove the fading scrim (#1806) Two findings Bugbot raised on #1804's omnibar commit after it merged, both real: - **Panel content swapped mid-exit.** Picking a result clears the query on the same render as the close, and the recent rows re-key off `open`, so for the 100ms exit the fading panel showed a different list. The panel's last open-frame node is now retained through the exit (the same freeze the disclosure primitives use). Verified headless: after Enter on a result the panel shows one and the same content until removal while the app navigates behind it. - **Hero field dropped behind the scrim.** The field's `z-[16]` lift was keyed on `open`, but the scrim now stays mounted through its exit, so the field dimmed for 100ms. The lift follows presence. ## Testing radar-app `npm run tsc` 0 errors; vitest 1368 tests; eslint warning count unchanged on the file.


Small follow-ups from the motion rollout (#1791) and the hub bump.
Overlays kept mounted through their exit stop acting like they are open.
ShortcutHelpOverlay,CommandPaletteandDiagnosticsOverlayare held byuseAnimatedUnmountfor their 160ms exit, but their Escape capture listener and backdrop click stayed live and their content stayed focusable during that window. Escape and the backdrop click now key onisOpen, the root isinertwhile fading, and the palette focuses its input once open (a mount-time focus would land inside the inert root during the two pre-open frames).One straggler timing. The transcript preview clamp in
diagnose/ActivityTurn.tsx(landed with the findings-story merge) animated height on its ownduration-200 ease-out; it now runs the disclosure clock.parts.test.tsxpins the new classes via the token.Disclosuremoves into k8s-ui. Radar Cloud carried a copy because radar-app's wasn't exported. The k8s-ui version is the superset (controlledopen/onOpenChange,inheritColordefaulting to the header's color,select-noneheader) with a renderToString test; radar-app imports it and deletes its copy. radar-app now imports a new k8s-ui export, so its peer floor rises to>=1.14.8. Publish k8s-ui 1.14.8 before radar-app, per the release script's order.The omnibar's spotlight animates. Focusing the omnibar (âK or click) dimmed the page and dropped the results panel in on one frame, and both vanished the same way â the last hard cut on a primary path. Scrim and panel are menu-kind overlays now: presence on the menu clock, the scrim fades with the panel, the panel grows from the top of the field (140ms) and shrinks back (100ms) while inert, the anchor is kept through the exit, and what the panel showed at logical close is what fades out. The field's focus ring eases in on the same 140ms instead of popping. Verified headless in launcher and hero modes: scrim 0â1 over 140ms, panel gone ~100ms after Escape with the scrim.
Dead CSS.
.issue-details-motionhad no consumers left after the sweep; the class, its@starting-styleblock and the parity test are removed.Testing
Disclosure.test.tsx).maintoo); eslint warning count unchanged on every touched file.Hub follow-up after publish: swap
src/components/Disclosure.tsxfor the k8s-ui export.Note
Medium Risk
Touches primary search and overlay interaction paths plus a k8s-ui export bump; behavior fixes reduce exit-animation bugs but omnibar and palette timing need regression on keyboard/focus.
Overview
Follow-ups from the motion rollout: shared
Disclosurein k8s-ui, overlays that stay mounted through exit no longer behave as if open, omnibar spotlight animates, one timing alignment, and dead CSS removed.Disclosuremoves into@skyhook-io/k8s-uiand is exported from the UI barrel. The library version adds controlledopen/onOpenChange,inheritColor(chevron follows header color by default), andselect-noneon the header, with newDisclosure.test.tsx. Radar-app drops its duplicate and imports the package instead;web/package.jsonpeer floor rises to>=1.14.8(publish k8s-ui before the app).Command palette, diagnostics, and shortcut-help overlays still unmount via
useAnimatedUnmount, but Escape capture, backdrop click, and focus were active while fading. Roots areinertwhen not logically open, handlers and backdrop clicks key onisOpen, and the command palette focuses its input whenisOpenturns true (not on mount inside a pre-open inert root).Omnibar scrim and results panel use menu-kind overlay transitions (
useAnimatedUnmount, fade/grow on open, shrink on close), keep the anchor through exit, freeze last panel content for the fade, and ease the field focus ring on the same 140ms clock.Diagnose transcript preview clamp in
ActivityTurnswitches from localduration-200 ease-outto the shared disclosure duration +TW_EASE_UI;parts.test.tsxpins the new classes.Removes unused
.issue-details-motionfromcomponents.cssand the CSS/token parity test fromCollapse.test.tsx.Reviewed by Cursor Bugbot for commit 659a74c. Bugbot is set up for automated code reviews on this repo. Configure here.